• ベストアンサー

C言語プログラム

こんな課題が出たのですが、さっぱりわかりません。 誰か解る人がいたら教えてほしいです。 1 3+5+7+…+nと奇数の和を求め、和が100を越えたときのnの値を求めて表示するプログラムをdo~whileを使って作成しなさい。 2  キーボードから3つの数を読み込み、最大値を求める処理を繰り返し行うプログラムを、do~whileを使って作成しなさい。繰り返しの終了は、計算のあとで、'S'(1文字)が入力されるまでとし、それ以外の文字では、処理を続行すること。 3  整数型1次元配列kに整数123,456,789をそれぞれ代入し、その内容を表示するプログラムを作成しなさい。 4  文字型1次元配列strに'u'を、'n'、'i'、'x'それぞれ代入し、その内容を文字列として出力するプログラムを作成しなさい。 5  要素数50の整数型1次元配列mの要素すべてに、その添字に対応した0~49の数値を代入し、その内容を表示するプログラムを作成しなさい。 3は #include <stdio.h> main() { int k[3]; k[0] = 123; k[1] = 456; k[2] = 789; printf("%d\n%d\n%d", k[0], k[1], k[2]); return 0; } と解いてみたんですが、やっぱ間違えてますよね?

質問者が選んだベストアンサー

  • ベストアンサー
  • susanna
  • ベストアンサー率100% (2/2)
回答No.7

<お礼・6>のプログラムは残念ながら正常に動作しません。 (1)プログラムの途中の } のせいで、main関数が終わってしまっています。  またwhileの位置もおかしいです。  ソースの4行目の } while ) を削除してください。 (2)exitを使うにはstdlib.hをincludeする必要があります。 (3)scanfは第1引数(" "で囲んだ個所)を読み込み、第2引数に格納していま す。だから   scanf("%c,n") ==> scanf("%s",n)  としましょう。""の位置が違うということですね。 書き直すとこのようになります。 ------------------------------ #include <stdio.h> #include <stdlib.h> main(){ int i, j, k; char n, s = 's'; do{ printf("i, j, kの値を入力してください。\n"); scanf("%d%d%d", &i, &j, &k); if(i >=j && i >=k) printf("最大値は、%d\n", i); else if(j >=k && j >=i) printf("最大値は、%d\n", j); else if(k >=j && k >=i) printf("最大値は、%d\n", k); printf("sを入力したら終了します。\n"); scanf("%s", &n); if(s == n) exit(0); }while(1); } --------------------------------- 投稿する前に一度プログラムを走らせて見ることをオススメします。 うっかりミスというのも良くあることですから。 それでは頑張ってください。

murasin
質問者

お礼

何度もご指摘すみません。でもありがたいご指摘ありがとうございます。 確かに間違いだらけですね。 今度からは投稿する前にプログラムを走らせてみます。 本当に手間かけてすみませんでした。 これからはもっと勉強してから質問します。

すると、全ての回答が全文表示されます。

その他の回答 (6)

  • susanna
  • ベストアンサー率100% (2/2)
回答No.6

問題の2に対しての回答です。 詳しい入力検査はしていませんので、 数字以外を入れるとおかしくなるかもしれません。 s以外の文字を入れると終了せずに比較を続ける仕様になっています。 #include <stdio.h> int main(void) { char cEnd; int i1, i2, i3 ,iMax; do{ printf ("3つの数字を入力してください=>\n"); scanf("%d %d %d", &i1, &i2, &i3) ; iMax = i1 ; if(iMax < i2) iMax = i2 ; if(iMax < i3) iMax = i3 ; printf("%d, %d, %d の最大値は %d です。\n" , i1,i2,i3,iMax); printf ("終了の場合はsを入力してください\n"); scanf("%s",&cEnd); if(cEnd == 's') break; }while (1) ; return 0 ; } 入力する時は、1つの数字ごとにEnterキーを押してください。 ちなみに整数のみの比較です。いろいろ穴のあるプログラムですみません。

murasin
質問者

お礼

こんなに長いプログラムわざわざ考えていただいて本当にありがとうございました! 2は #include <stdio.h> main(){ int i, j, k; char n, s = 's'; }while( do{ printf("i, j, kの値を入力してください。\n"); scanf("%d%d%d", &i, &j, &k); if(i >=j && i >=k) printf("最大値は、%d\n", i); else if(j >=k && j >=i) printf("最大値は、%d\n", j); else if(k >=j && k >=i) printf("最大値は、%d\n", k); printf("sを入力したら終了します。\n"); scanf("%c, &n"); if(s == n) exit(0); }while(1); } でもあってますでしょうか??

すると、全ての回答が全文表示されます。
  • 084
  • ベストアンサー率0% (0/7)
回答No.5

#include<stdio.h> main(){ char str[]={'u','n','i','x'}; int i=0; while(i<4) { printf("%c",str[i]); i++; } printf("\n"); return 0; } すみません、↓のが間違ってました。 文字型なのでchar型でした。 今度はfor文でなくwhile文で作ってみました。 本当に何度もすみません。 では、がんばって下さい!

murasin
質問者

お礼

わざわざ訂正ありがとうございます。 ↓に3と4を解いてみたので是非よかったら見てください。

すると、全ての回答が全文表示されます。
  • 084
  • ベストアンサー率0% (0/7)
回答No.4

と、いうことで暇(?)ができたので4、です。 #include<stdio.h> main(){ int str[4]={'u','n','i','x'}; int i;      for(i=0;i<4;i++) { printf("%c",str[i]); } printf("\n"); return 0; } これ、unixを表示させればいいんですよね? 実行結果はunixです。 この課題での”代入”が出来ているか不安なので確かめてみてください。 参考になったかは自信ありません・・・。 私としても勉強になったのでお互い様です。 補足ですが、3番は表示させるのにfor文を使うことが出来ます。 2、は問題の意味がよくわからないのと、たとえわかったとしてもプログラム出来そうにないので回答できません。お役に立てなくて申し訳ない。たびたびですみませんでした。

murasin
質問者

お礼

たびたびありがとうございます。 そうですね。たぶん、unixを表示すればいいと思います。 十分、参考になりましたよ! 本当丁寧で解り易い解答ありがとうございました! ところで3は #include <stdio.h> main() { int k; int ndigit[3]; ndigit[0] = 123; ndigit[1] = 456; ndigit[2] = 789; for(k = 0; k < 3; k++) printf("%d\n", ndigit[k]); } であってるでしょうか? あと、4は #include <stdio.h> main() { char str[5]; str[0] = 'u'; str[1] = 'n'; str[2] = 'i'; str[3] = 'x'; str[4] = '\0'; printf("%s\n", str); } でもいいんでしょうか?? 何度もすみません!

すると、全ての回答が全文表示されます。
  • 084
  • ベストアンサー率0% (0/7)
回答No.3

Sは奇数の和です。Sでなくてもよいです。 3、nを3にすると表示した時に、123456789と連続に表示され、区切りがわかりづらいので%4dとかにすると 123 456 789と表示されますよ。

murasin
質問者

お礼

あ~そうなんですか!それはわざわざ教えていただきありがとうございます♪ 勉強になります。 また、質問した時はお暇があればお願いします。 本当に色々と教えていただきありがとうございました!!

すると、全ての回答が全文表示されます。
  • 084
  • ベストアンサー率0% (0/7)
回答No.2

no1の者です。 すみませんが、No1の回答に voidを取って、printf("%3d\n",n); の後にreturn 0;を加えてください。 no1と同条件です。 5、の回答です。 #include<stdio.h> main(){ int i,m[50]; for(i=0;i<=49;i++){ m[i]=i; printf("m[%2d]=%2d\n",i,m[i]); } return 0; } 実行結果は m[ 0]= 0 m[ 1]= 1 m[ 2]= 2 : m[49]=49 となります。 3、はprintf("%nd%nd%nd",k[0],k[1],k[2]); のnは数字じゃなくてnなのですか?そこだけちょっとわからないのですが他は正しいと思います。

murasin
質問者

お礼

わざわざ、訂正ありがとうございます。 5の方もなんとなくわかりました。 3の方ですが、確かにnじゃなくて数字でしたね。 この場合は数字は3でいいんでしょうか? わざわざご指摘ありがとうございました。

すると、全ての回答が全文表示されます。
  • 084
  • ベストアンサー率0% (0/7)
回答No.1

C++言語で作ってますが大した差はないので 1についてです。 #include<stdio.h> void main(){ int n=3,s=0; do{ n+=2; }while((s+=n)<=100); printf("%3d\n",n); } n+=2で奇数を足して行き、whileの条件に和が100になるまでとしています。 実行すると答えは21です。日本語のパソコンで作ってます。

murasin
質問者

お礼

なるほど。解答見るとなんとなくわかりました! ところでsは奇数の和ってことですか?

すると、全ての回答が全文表示されます。

専門家に質問してみよう