※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

C言語について。

Visual Studio2013を使っていて、C++でプログラミングをしています。

華氏温度を0度から100度までの間で入力すると、摂氏温度に変換して表示し、
摂氏温度がマイナスになる場合は氷点下であることを表示するプログラムを
作成したのですが、実行するとこのようなエラーが出てしまいます。
解決方法がわかる方がいらっしゃいましたら、教えていただければ嬉しいです。
よろしくおねがいします。

以下、プログラム
#define _USE_MATH_DEFINES
#include <stdio.h>
#include <math.h>
 
int main(void){
 
    double x, C;
 
    printf("華氏温度xを入力してください\n");
    printf("x=");
    scanf_s("%5.3f", &x);
 
    if (32 <= x && x <= 100){
	(double)C = (5.0 / 9.0)*((double)x - 32);
	printf("摂氏温度Cは%5.3fです\n", C);
 
	if (0 <= x && x < 32){
	    printf("摂氏温度Cは氷点下です");
 
	}
    }
 
    else{
 
	printf("華氏温度は0≦x≦100で入力してください\n");
    }
 
    return 0;
}
 

入力:華氏温度x、小数、範囲は0から100
出力:摂氏温度に変換したx、小数
  • scanfは桁数を指定できない
  • double型の入力には、変換指定子lfを用いるfではない
  • (double型の出力に、変換指定子fを用いているのは良い。lfを使用するのよりも適切。)

解答例
#include <stdio.h>
#include <math.h>
 
int main(void) {
    double x, C;
 
    printf("華氏温度xを入力してください\n");
    printf("x=");  scanf("%lf", &x);
 
    if (0.0 <= x && x <= 100.0) {
	C = (5.0 / 9.0) * (x - 32);
	printf("摂氏温度Cは%5.3fです\n", C);
    } else if (x < 0.0) {
	printf("摂氏温度Cは氷点下です\n");
    } else{
	printf("華氏温度は 0 <= x <= 100 で入力してください\n");
    }
 
    return 0;
}
 



C言語のプログラミングです。
課題で温度を、摂氏で入力し、華氏に変換し、表示するプログラムを作ってるんですが、
#include<stdio.h>
 
main()
{
    double fahr, celsius, number, ch;
 
    printf("Input temperature? ");
 
    number=0;
 
    ch = getchar();
    while(ch != '\n'){
	if('0' <= ch && ch <= '9'){
	    number = number * 10;
	    number = number + (ch - '0');
 
	}
	ch = getchar();
    }
 
    celsius = number;
 
    fahr = (9.0/5.0) * celsius + 32.0;
 
    printf("Celsius %2.0f is same to Fahrenheit %6.1f\n",number ,fahr );
 
}
 
を作ったのですが
各変数について、その役割や目的を、もう一度見直してください。
そして、それに相応しいと思われるデータ型を考えてください。
また、摂氏温度の扱い(温度なので、整数とは限らない)
と言われましたどのように訂正すればいいかわかりません。
教えてください。


変数chは、文字を格納するのに用いています。ですからデータ型はintが相応しいでしょう。摂氏温度は、整数であると仮定していますが、小数であることもあるということでしょう。
  • chはint型でないといけない(文字を格納するから)
  • 入力される温度が負のときが対応できていない
  • int main(void) と書いた方がよい(cf. 5.1.2.2.1 プログラム開始処理)

解答例
#include <stdio.h>
 
int main(void) {
    double celsius;
 
    printf("Enter Celsius temperature: ");  scanf("%lf", &celsius);
    printf("%3.2f degrees Celsius is equivalent to %3.2f degrees Fahrenheit\n",
	   celsius, (9.0 / 5.0) * celsius + 32.0);
 
    return 0;
}
 



関数の問題です
#include <stdio.h>
 
int main(void)
{
    int w, sita, ue, kizami = 0;
    double f;
 
    printf("摂氏温度から華氏温度に換算する場合は1を、\n華氏温度から摂氏温度に換算する場合は2を入力してください\n");
    scanf("%d",&w);
 
    if(w==1){
	printf("何度から何度までのものを作成しますか?\n");//華氏温度の場合
 
	printf("下の温度:");
	scanf("%d",&sita);
 
	printf("上の温度:");
	scanf("%d",&ue);
 
	printf("何度刻みですか?");
	scanf("%d",&kizami);
 
	printf("摂氏\t華氏\n");
 
	for(;sita<=ue;){
	    f=(9.0/5.0)*sita+32;
	    printf("%d\t%.1lf\n",sita,f);
	    sita+=kizami;
	}
    }
 
    else if (w==2){
	printf("何度から何度までのものを作成しますか?\n");//摂氏温度の場合
 
	printf("下の温度:");
	scanf("%d",&sita);
 
	printf("上の温度:");
	scanf("%d",&ue);
 
	printf("何度刻みですか?");
	scanf("%d",&kizami);
 
	printf("摂氏\t華氏\n");
 
	for(;sita<=ue;){
	    f=(5.0/9.0)*(sita-32);
	    printf("%d\t%.1lf\n",sita,f);
	    sita+=kizami;
	}
    }
 
    return(0);
}
 
このプログラミングを関数を使って回答お願いします。


摂氏温度と華氏温度の両方の変換、関数を使用

  • 何を関数にするかが重要です
  • 関数にする目的のひとつは、再利用しやすくすることです
  • 摂氏温度と華氏温度の変換は、他でも利用できると考えられるので、関数にする価値があります

解答例
#include <stdio.h>
 
double celsius2fahrenheit(double celsius) {
    return (9.0 / 5.0) * celsius + 32.0;
}
 
double fahrenheit2celsius(double fahrenheit) {
    return (5.0 / 9.0) * (fahrenheit - 32.0);
}
 
int main(void) {
    int mode;
    int min, max, res, i;
 
    printf("摂氏温度から華氏温度に換算する場合は1を、\n"
	   "華氏温度から摂氏温度に換算する場合は2を入力してください\n");
    scanf("%d", &mode);
    if (mode < 1 || 2 < mode) {
	printf("1か2を入力して下さい\n");
    }
 
    printf("何度から何度までのものを作成しますか?\n");
    printf("下の温度:");  scanf("%d", &min);
    printf("上の温度:");  scanf("%d", &max);
    printf("何度刻みですか?");  scanf("%d", &res);
 
    if (mode == 1) {
	printf("摂氏\t華氏\n");
	for (i = min; i <= max; i += res) {
	    printf("%3d\t%3.1f\n", i, celsius2fahrenheit(i));
	}
    } else if (mode == 2) {
	printf("摂氏\t華氏\n");
	for (i = min; i <= max; i += res) {
	    printf("%4d\t%3.1f\n", i, celsius2fahrenheit(i));
	}
    }
 
    return 0;
}
 


摂氏温度から華氏温度への表は-50度から50度まで10度ごとに、
華氏温度から摂氏温度への表は-60度から140度まで20度ごとに表示する。
両者は、何度で一致するか。
#include <stdio.h>
 
int main(void) {
    int celsius, fahrenheit;
 
    printf("摂氏\t華氏\n");
    for (celsius = -50; celsius <= 50; celsius += 10) {
	printf("%3d\t%3.1f\n", celsius, (9.0 / 5.0) * celsius + 32.0);
    }
 
    printf("\n");
    printf("摂氏\t華氏\n");
    for (fahrenheit = -60; fahrenheit <= 140; fahrenheit += 20) {
	printf("%3d\t%3.1f\n", fahrenheit, (5.0 / 9.0) * (fahrenheit - 32.0));
    }
 
    return 0;
}
 



プログラミングです。
回答お願いします!

摂氏温度Cと華氏温度Fと絶対温度Zの関係を求めよ。
(ヒント)F=9/5 C+32、Z=C+273.16

プログラムを教えてください<m(__)m>


解答例
#include <stdio.h>
 
int main(void) {
    double cel;
 
    printf("摂氏温度=");  scanf("%lf", &cel);
    printf("摂氏温度=%.2f, 華氏温度=%.2f, 絶対温度=%.2f\n",
	   cel, 9.0 * cel / 5.0 + 32.0, cel + 273.16);
 
    return 0;
}
 



c言語のプログラミングの課題で配列の課題が出たのですがわからなくて困っています。

問題は次のようです。「1年分の各月の平均気温を配列に格納し(プログラム内で初期値として与えてよい),各データとそれらの平均値,最大値,最小値を表示するプログラムを作成せよ. ただし,格納するデータは摂氏のみ.データの表示は摂氏と華氏の双方で表示すること. (この問題では,平均値は整数でよい(切り捨て,切り上げ,四捨五入いずれも可).月平均気温は適当でよい.)」という内容です。この問題のプログラムをつくってほしいです。実行例は下の画像にあります。これは自分でやった途中までのプログラムです。

#define _CRT_SEQURE_NO_WORNINGS
#include <stdio.h>
 
int main(void)
{
    int max,min;//最高最低温度//
    int st;//合計//
    int date[12]={5,0,10,17,20,25,27,30,27,20,15,8};
    int i;
    float ave;
    min = max = date[0];
    st = 0;
    for(i=0;i<12;i++)
    {
	printf("%d月:%d",i+1,date[i]);
	printf("\n");
	date[i]=0;
    }
    printf("----------\n");
    for(i=0;i<12;i++)
    {
	date[i]=0;
	if(max<date[i]){
	    max = date[i];
	}
	st=st+date[i];
    }
    printf("年最高:%d\n",max);
    for(i=0;i<12;i++)
    {
	if(date[i]<min)
	{
	    min = date[i];
	}
    }
    printf("年平均:%d\n",ave);
    ave=st/12;
 
    printf("年最低:%d\n",min);
 
    return 0;//終了する
}
 
中途半端で申し訳ないですがお願いします。
できればなぜそうプログラムすればいいのかまで教えていただきたいです。


  • floatでなくてdoubleでいいのではないでしょうか
  • 暗黙の型変換よりも明示的型変換 (int) のほうがよいです

解答例
#include <stdio.h>
 
int main(void) {
    int max, min, sum, ave, fah;
    int date[12] = {5,0,10,17,20,25,27,30,27,20,15,8};
    int i;
 
    min = max = date[0];
    sum = 0;
    for (i = 0; i < 12; i++) {
	fah = (int)((9.0 / 5.0) * date[i] + 32.0);
	printf("  %2d月: %2d(%2d)\n", i + 1, date[i], fah);
    }
    printf("--------------\n");
    for (i = 0; i < 12; i++) {
	if (max < date[i]) {
	    max = date[i];
	}
	if (date[i] < min) {
	    min = date[i];
	}
	sum += date[i];
    }
    fah = (int)((9.0 / 5.0) * max + 32);
    printf("年最高: %2d(%2d)\n", max, fah);
 
    ave = (int)(sum / 12.0);
    fah = (int)((9.0 / 5.0) * ave + 32);
    printf("年平均: %2d(%2d)\n", ave, fah);
 
    fah = (int)((9.0 / 5.0) * min + 32);
    printf("年最低: %2d(%2d)\n", min, fah);
 
    return 0;
}
 

-