C言語の課題
Re:C言語の課題
ライアンさん、こんばんは^^
学校の宿題ですか?大変ですね。
最初は私も苦労した覚えがあります。
お書きになった文章ですが、printf文からちょっとおかしいので、一番最初からおさらいしてみてください。
C言語入門サイトは沢山ありますから、そこの一番最初の部分と、
if文、scanf文、ループ処理、を勉強したら解けると思います。
まず、何も変数に数を代入していないのに表示する事は出来ません。
よく何も代入していないのに表示する時、その表示されたものを「ゴミ」と表現します。
そして、printf文では%dや%fなどの変換指定文字は後につく変数の数と同じでないといけません。
printf("%f %f %f",a,b,c);
こんな風に。
次にキーボード入力から変数に数を格納するにはscanf文を使います。
aに浮動小数を格納したい時はこうかきます。
scanf("%lf",&a);
つまり、
printf("3回連続で実数を入力してください。");
scanf("%lf",&a);
scanf("%lf",&b);
scanf("%lf",&c);
と書くことで3つの変数に数が格納できます。
a,b,cの総和が5.0以上10.0未満とはどのように表現したらいいでしょうか。これらはそれぞれ
「総和が5.0以上」
=
if((a+b+c)>=5.0)
「総和が10.0以下」
=
if((a+b+c)<10.0)
と表現できますね?
2つ同時に判定したいときは「~かつ」という表現「&&」をしようします。
if( X && Y )
と書くと、「XかつYの時」という判定が可能です。
一方「または」は「||」で表現します。
つまり2つの条件を一度に判定したい時は
if( (a+b+c)>=5.0 && (a+b+c)<10.0 )
こう書けばいいわけですね。
最初からa+b+cの総和をdという数に代入しておけば、いいんですが
「それぞれ数が5.0以上10.0未満のものに『限り』その総和を求めよ」
という日本語表現からして後から求めた方がよさそうなのでちょっと無駄ですが、後から総和をdという変数に格納してみましょう。
総和を求めるというのは
double d;
でdを用意し、d=a+b+c;によってdに合計を代入します。
では以上の事をふまえてサンプルをみてください。
サンプル
#include<stdio.h>
void main(){
double a,b,c,d;
printf("3つの実数を連続で入力してください。\n");
scanf("%lf",&a);
scanf("%lf",&b);
scanf("%lf",&c);
if((a+b+c)>=5.0 && (a+b+c)<10.0){
d=a+b+c;
printf("合計=%lf\n",d);
}
else
printf("総数が規定の範囲内では無い。\n");
}
実行結果
3つの実数を連続で入力してください。
2.786
1.876
5.321
合計=9.983000
こんな感じです。
サンプルはこちらで
http://dixq.net/board/program/sum.cpp
判らない事があれば聞いてください^^
学校の宿題ですか?大変ですね。
最初は私も苦労した覚えがあります。
お書きになった文章ですが、printf文からちょっとおかしいので、一番最初からおさらいしてみてください。
C言語入門サイトは沢山ありますから、そこの一番最初の部分と、
if文、scanf文、ループ処理、を勉強したら解けると思います。
まず、何も変数に数を代入していないのに表示する事は出来ません。
よく何も代入していないのに表示する時、その表示されたものを「ゴミ」と表現します。
そして、printf文では%dや%fなどの変換指定文字は後につく変数の数と同じでないといけません。
printf("%f %f %f",a,b,c);
こんな風に。
次にキーボード入力から変数に数を格納するにはscanf文を使います。
aに浮動小数を格納したい時はこうかきます。
scanf("%lf",&a);
つまり、
printf("3回連続で実数を入力してください。");
scanf("%lf",&a);
scanf("%lf",&b);
scanf("%lf",&c);
と書くことで3つの変数に数が格納できます。
a,b,cの総和が5.0以上10.0未満とはどのように表現したらいいでしょうか。これらはそれぞれ
「総和が5.0以上」
=
if((a+b+c)>=5.0)
「総和が10.0以下」
=
if((a+b+c)<10.0)
と表現できますね?
2つ同時に判定したいときは「~かつ」という表現「&&」をしようします。
if( X && Y )
と書くと、「XかつYの時」という判定が可能です。
一方「または」は「||」で表現します。
つまり2つの条件を一度に判定したい時は
if( (a+b+c)>=5.0 && (a+b+c)<10.0 )
こう書けばいいわけですね。
最初からa+b+cの総和をdという数に代入しておけば、いいんですが
「それぞれ数が5.0以上10.0未満のものに『限り』その総和を求めよ」
という日本語表現からして後から求めた方がよさそうなのでちょっと無駄ですが、後から総和をdという変数に格納してみましょう。
総和を求めるというのは
double d;
でdを用意し、d=a+b+c;によってdに合計を代入します。
では以上の事をふまえてサンプルをみてください。
サンプル
#include<stdio.h>
void main(){
double a,b,c,d;
printf("3つの実数を連続で入力してください。\n");
scanf("%lf",&a);
scanf("%lf",&b);
scanf("%lf",&c);
if((a+b+c)>=5.0 && (a+b+c)<10.0){
d=a+b+c;
printf("合計=%lf\n",d);
}
else
printf("総数が規定の範囲内では無い。\n");
}
実行結果
3つの実数を連続で入力してください。
2.786
1.876
5.321
合計=9.983000
こんな感じです。
サンプルはこちらで
http://dixq.net/board/program/sum.cpp
判らない事があれば聞いてください^^
Re:C言語の課題
>>「三つの実数を入力しそれぞれ数が5.0以上10.0未満のものに限りその総和を求めよ」
この問題文だったら…
double a,b,c,d = 0.0;
scanf( "1番目の数を入力して下さい " , &a );
scanf( "2番目の数を入力して下さい " , &b );
scanf( "3番目の数を入力して下さい " , &c );
if( a >= 5.0 && a <= 10.0 ) d += a;
else printf( "1番目の数字は範囲GUYですn" );
if( b >= 5.0 && b <= 10.0 ) d += b;
else printf( "2番目の数字は範囲GUYですn" );
if( c >= 5.0 && c <= 10.0 ) d += c;
else printf( "3番目の数字は範囲GUYですn" );
printf( "有効な数字の総和 = %dn" , d );
こんな感じじゃないですかね?携帯で書き込みなのでincludeとかmainとか色々と省略してますし、コンパイルしてないので、バグがあったら申し訳ないですが…(;^_^A
この問題文だったら…
double a,b,c,d = 0.0;
scanf( "1番目の数を入力して下さい " , &a );
scanf( "2番目の数を入力して下さい " , &b );
scanf( "3番目の数を入力して下さい " , &c );
if( a >= 5.0 && a <= 10.0 ) d += a;
else printf( "1番目の数字は範囲GUYですn" );
if( b >= 5.0 && b <= 10.0 ) d += b;
else printf( "2番目の数字は範囲GUYですn" );
if( c >= 5.0 && c <= 10.0 ) d += c;
else printf( "3番目の数字は範囲GUYですn" );
printf( "有効な数字の総和 = %dn" , d );
こんな感じじゃないですかね?携帯で書き込みなのでincludeとかmainとか色々と省略してますし、コンパイルしてないので、バグがあったら申し訳ないですが…(;^_^A
Re:C言語の課題
うわ、寝ぼけてたんでしょうか…重ね重ね申し訳ないです(T_T)
ちょっと、作り直してみましたのでお許しを…(苦笑)
#include <stdio.h>
void main()
{
double a = 0 , b = 0 , c = 0 , d = 0;
printf( "1番目の数値を入力して下さい " );
scanf( "%lf" , &a );
printf( "2番目の数値を入力して下さい " );
scanf( "%lf" , &b );
printf( "3番目の数値を入力して下さい " );
scanf( "%lf" , &c );
if( a >= 5.0 && a <= 10.0 )
{
d += a;
}
else
{
printf( "1番目の数値は予想GUYです\n" );
}
if( b >= 5.0 && b <= 10.0 )
{
d += b;
}
else
{
printf( "2番目の数値は予想GUYです\n" );
}
if( c >= 5.0 && c <= 10.0 )
{
d += c;
}
else
{
printf( "3番目の数値は予想GUYです\n" );
}
printf( "有効数値の総和 = %lf" , d );
}
ここからは、個人的にはこうした方がスッキリするなぁ…という方法です。まぁ、結果は同じなので、好みの問題ですけどね。
#include <stdio.h>
void main()
{
int i;
double val[4] = { 0 , };
for( i = 0 ; i < 3 ; i++ )
{
printf( "%d番目の数値を入力して下さい " , i + 1 );
scanf( "%lf" , &val );
if( val >= 5.0 && val <= 10.0 )
{
val[3] += val;
}
else
{
printf( "この数値は予想GUYです\n" , i + 1 );
}
}
printf( "有効数値の総和 = %lf" , val[3] );
}
ちょっと、作り直してみましたのでお許しを…(苦笑)
#include <stdio.h>
void main()
{
double a = 0 , b = 0 , c = 0 , d = 0;
printf( "1番目の数値を入力して下さい " );
scanf( "%lf" , &a );
printf( "2番目の数値を入力して下さい " );
scanf( "%lf" , &b );
printf( "3番目の数値を入力して下さい " );
scanf( "%lf" , &c );
if( a >= 5.0 && a <= 10.0 )
{
d += a;
}
else
{
printf( "1番目の数値は予想GUYです\n" );
}
if( b >= 5.0 && b <= 10.0 )
{
d += b;
}
else
{
printf( "2番目の数値は予想GUYです\n" );
}
if( c >= 5.0 && c <= 10.0 )
{
d += c;
}
else
{
printf( "3番目の数値は予想GUYです\n" );
}
printf( "有効数値の総和 = %lf" , d );
}
ここからは、個人的にはこうした方がスッキリするなぁ…という方法です。まぁ、結果は同じなので、好みの問題ですけどね。
#include <stdio.h>
void main()
{
int i;
double val[4] = { 0 , };
for( i = 0 ; i < 3 ; i++ )
{
printf( "%d番目の数値を入力して下さい " , i + 1 );
scanf( "%lf" , &val );
if( val >= 5.0 && val <= 10.0 )
{
val[3] += val;
}
else
{
printf( "この数値は予想GUYです\n" , i + 1 );
}
}
printf( "有効数値の総和 = %lf" , val[3] );
}
Re:C言語の課題
また質問させていただきます。
今日もう一つの課題で「二つの整数を入力し、片方が偶数の場合に限りその値を2で割って1を足し、それらの平均を求めよ」という問題で、
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
if(a%2==0 && b%2==1)
{
a=a/2+1;
printf("%d\n",(a+b)/2);}
else if(a%2==1 && b%2==0)
{
b=b/2+1;
printf("%d\n",(a+b)/2);}
return 0;
}
と入力したんですが、「答えを実数でだす」といわれました。
そうすると9行目と13行目の%dを%lf変えなければなれないのでしょうか?
今日もう一つの課題で「二つの整数を入力し、片方が偶数の場合に限りその値を2で割って1を足し、それらの平均を求めよ」という問題で、
#include<stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
if(a%2==0 && b%2==1)
{
a=a/2+1;
printf("%d\n",(a+b)/2);}
else if(a%2==1 && b%2==0)
{
b=b/2+1;
printf("%d\n",(a+b)/2);}
return 0;
}
と入力したんですが、「答えを実数でだす」といわれました。
そうすると9行目と13行目の%dを%lf変えなければなれないのでしょうか?