C言語で繰り返しを指示するプログラムがうまくいかない

このQ&Aのポイント
  • C言語で繰り返しを指示するプログラムがうまくいかない。テキストボックス1に入力した数値をテキストボックス2に入力した回数分掛けてテキストボックス3に出力するプログラムを作成したが、うまくいかない。
  • forループで繰り返しの式を書いたが、正しいかどうかわからず困っている。他にも2~3種類の方法があるが、どれが正しいのかわからない。
  • プログラムの処理の部分では変数aにテキストボックス1の数値、変数bにテキストボックス2の数値を代入し、変数cに1を代入してから、b回繰り返しながらcにaを掛ける処理を行っている。
回答を見る
  • ベストアンサー

C言語について質問なんですが((。繰り返しを指示するプログラムがどうも

C言語について質問なんですが((。繰り返しを指示するプログラムがどうも上手くいきません・・・ C言語について質問なんですが((。繰り返しを指示するプログラムがどうも上手くいきませんorz。詳しい方是非応援に(TAT)! 今打ち込んでいるとこなんですがどうもうまくいかなくて(orz どんな内容かといいますとテキストボックス1に入力した数値を テキストボックス2に入力した回数分掛けた値をもとめ テクストボックス3に出力するものです 例えばテクストボックス1に「13」と入力し、テクストボックス2に「2」と入力したら 169とテクストボックス3に出力したいのですが上手くいかなくて。。。 for(i=0;i<b;i++)この後に繰り返しの式を書かなければと思うのですが・・・それも思いつかず(TAT) っていうか他に2~3個方法があるのですがこの for(i=0;i<b;i++)があっているのかもわからず・・・orz 是非、是非力をかしてください! ちなみにプログラムはこんな感じになってます↓ private void button5_Click(object sender, EventArgs e) { //2の0乗=1 //2の1乗=1*2*2=2 //2の2乗=1*2*2=4 //2の3乗=1*2*2*2=8 //2の4乗=1*2*2*2*2*=16 int a, b, c,i; //入力 //textboxの数値を変数aに入力 a = int.Parse(textBox1.Text); //↑がわからに場合数字のドキュメントで数値入力を確認 //textbox2の数値を変数bに入力 b = int.Parse(textBox2.Text); //処理 //cに1を代入 //b回繰り返す //cにaを掛ける c = 1; //出力 //求めた答えをtextbox4に出力 textBox3.Text = c.ToString(); for(i=0;i<b;i++) { }}

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

  • ベストアンサー
  • hisappy
  • ベストアンサー率46% (184/392)
回答No.2

単純に質問文の通りならこんな感じでしょうか。 c = 1; for( i = 1; i <= b; i ++) {   c = c * a; } for文が出力処理の後ろにあるのも妙なものですし、 プログラミングの世界での話しまで持ち出してみるならば 「上手くいかない」と判定するに足る情報が提示されていなかったりもします。 もっと言うなら、変数宣言がint型なので 入力条件と実行環境によってはオーバーフローとなる危険性もあったり。 この手の定番モノの無限ループやループ回数異常はなさそうですが…

その他の回答 (4)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.5

プログラムを見ると private void ~とか、Cには無い書きかたしてるので、正確にはC#で、テキストボックスというのも.NetのフォームのTextBoxのことではないかと。 よって、int配列がどうのというのは関係ないのでは。 質問者様へ。 CとC#(ついでにC++,Java等)は構文が似ていますが、いろんなところに違いがあって、まったく別の言語です。 混同しないようにしましょう。

回答No.4

#3です。 for() の練習にこだわるならば #2さんが答えになります。 #include <stdio.h> int my_pow(int, int); int main(void) { int textbox[4]; char c; do { printf("textbox1? "); scanf("%d", &textbox[1]); printf("textbox2? "); scanf("%d", &textbox[2]); textbox[3]=my_pow(textbox[1], textbox[2]); printf("textbox3= %d\n", textbox[3]); printf("\tContinue? "); scanf("%*c%c", &c); } while (c=='\n'); return 0; } int my_pow(int x, int y) { int i,t=1; for(i=0; i<y; i++) t*=x; return t; }

回答No.3

--- 質問 --- テキストボックス1に入力した数値をテキストボックス2に入力した回数分掛けた値をもとめテクストボックス3に出力するものです。 例えばテクストボックス1に「13」と入力し、テクストボックス2に「2」と入力したら169とテクストボックス3に出力したい。 C++ではなく、C言語についての質問ならば、べき乗ですからint型変数textbox[] について cast 演算子(double)を用いてこんな風になろうかと思います。 #include <stdio.h> #include <math.h> int main(void) { int textbox[4]; char c; do { printf("textbox1? "); scanf("%d", &textbox[1]); printf("textbox2? "); scanf("%d", &textbox[2]); textbox[3]=pow((double)textbox[1],(double)textbox[2]); printf("textbox3= %d\n", textbox[3]); printf("\tContinue? "); scanf("%*c%c", &c); } while (c=='\n'); return 0; } -----結果----- textbox1? 13 textbox2? 2 textbox3= 169 Continue? n

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

どんな風に書いたのか、それでどんな風になったのか、がわからないので、正確に答えようがないですが。 > //出力 > //求めた答えをtextbox4に出力 > textBox3.Text = c.ToString(); > > for(i=0;i<b;i++) > { > > } この順番だと、textBox3は計算前のcの値(1)になるだけで、forで計算した結果にならないのではないでしょうか。

関連するQ&A

  • Cでの数当てプログラム

    現在、Cで数当てプログラムを作っておりますが、C初心者で、何が何だか分からない状態です。 <プログラムの内容> ・0から2の数値から1つ選択して入力してもらう。 ・コンピュータが選んだ値と一致したら"あたり"、不一致なら"はずれ"を出力。 ・10回繰り返したら、1回目から入力された数値と、コンピュータが選んだ数値を表示。 ・最終的に、当たった確立を%で表示。 <条件> 1.以下の構造体を使う。 typedef struct{ int m_inputNumber; int m_selectNumber; char m_result[7]; }NUMBERDATA; 2.以下の関数を作る。 ・数値入力関数:int inputNumber(); ・選択された数値と入力された数値を比較して当たり、はずれ出力し、それを構造体に格納する関数: void judge(int i_inputnumber,NUMBERDATA* o_numberdata); ・結果表示関数:void outputData(NUMBERDATA* i_numberdata); 3.乱数発生プログラムの埋め込み。 #include <stdlib.h> #include <time.h> int selectnumber; time_t seed; time(&seed); srand(seed); selectnumber = rand() % 3; 4.strcpy,strcmp関数を使う。 5.main関数を以下のように設定。 int main(){ NUMBERDATA I_data[10]; int i; for(i = 0; i < 10; i++){ judge(inputNumber(),&I_data[i]); } outputData(I_data); return 0; } <サンプル画面> 0から2の数値から値を1つ入力してください > 1 結果 = あたり 0から2の数値から値を1つ入力してください > 0 結果 = はずれ ……(10回繰り返し) =結果= 1回目 入力値:1 コンピュータが選択した値:1 (あたり) 2回目 入力値:0 コンピュータが選択した値:1 (はずれ) ……(10回分出力) 確立 = **% と、こんな感じなのですが、理解力不足で完成には程遠くなっています。 Cに詳しい方が居ましたら、書き方、図々しいですが、ソースなんかあれば非常に助かります。 色々と無茶な事言ってますが、ご回答の方お願い致します。

  • 因数分解プログラム(C言語)について(1)

    ”因数分解を行うプログラムについて”の質問と同じ者です。 みなさんのご回答を参考にして、作ってみたのですが、 ポインタとかの使い方などがわからず、実行すると、 不正な処理を行ったので終了しますとなってしまいます。 どなたか、具体的にどこが悪いのか、 そしてどのように直せば正しく実行されるのか、 教えて下さい。お願いします。 以下↓がプログラムです。 800文字以上のため二つに分割しました。 #include <stdio.h> #include <math.h> #include <process.h> /*関数プロトタイプ宣言*/ int input(int *,int *,int *); int judge(int *,int *,int *); int bunkai1(int *,int *,int *,int *,int *,float *); int bunkai2(int *,int *,int *,int *,int *,float *); int yakubun1(int *,int *,int *,int *,int *,int *,int *); int yakubun2(int *,int *,int *,int *,int *,int *,int *); int output(int *,int *,int *,int *); /*関数の呼び出し*/ int main(void) { int a,b,c,q,n1,m1,min1,flag,i,d,e,m2,n2,min2,f,g; float D; input(&a,&b,&c); judge(&a,&b,&c); bunkai1(&a,&b,&q,&n1,&m1,&D); bunkai2(&a,&b,&q,&n2,&m2,&D); yakubun1(&m1,&n1,&min1,&flag,&i,&d,&e); yakubun2(&m2,&n2,&min2,&flag,&i,&f,&g); output(&d,&e,&f,&g); return (0); } /*数値入力関数*/ int input(int *a,int *b,int *c) { printf("a*x^2+b*x+c=0で,a,b,cを入力して下さい。\n"); printf("a="); scanf("%d",a); printf("b="); scanf("%d",b); printf("c="); scanf("%d",c); if(*a == 0){ printf("a = 0なので因数分解できません。\n"); exit(1); } return 0; } つづく

  • C# 分秒表示ついて

    C# 分秒表示ついて double a, b, c; a = double.Parse(textBox1.Text); b = double.Parse(textBox2.Text); c = a * b/60; label3.Text = c.ToString("0.00"); この通りだと1.50になりますので1分30秒としたいのですが、 どなたか教えてくださいお願いいたします。

  • C言語プログラム 配列

    C言語プログラム初心者です。以下のプログラムに対して、実行結果がなぜそうなるかがわからないので、詳しく教えてください。 #include<stdio.h> int func(int a[ ],int b[ ],int n); main(){ int i,k; static int a[12] ={1,2,3,4,5,(省略)・・・,12};  static int b[12] ={21,22,23,24,(省略)・・・,32}; k = func(a,b,6); k = func(b+3,a+3,6); printf("a = "); for(i=0;i<12;i++)printf("%d",a[i]); printf("\n = b"); for(i=0;i<12;i++)printf("%d",b[i]); printf("\n k = %d\n",k); } int func(int a[ ],int b[ ],int n){ int i,x=0; for(i=0;i<n;i++);{ a[i] = b[i]; x = x+a[i]; } return(x); } 結果: a = 21 22 23 .... 26 7 8 9 10 11 12 b = 21 22 23 .... 26 7 8 9 30 31 32 k = 99

  • C言語計算プログラム

    Cの計算プログラム 下のプログラムを (1)上位桁の不要な0を表示しない (2)3つの数を計算できるようにする (3)0が入力されるまでは入力を受け付けて加算を繰り返す プログラムに改造する方法を教えてください。 #include <stdio.h> #define MAXDIGIT 70 void reset(char*,int); void input(char*,int); void add(char*,char*,char*,int); void add_digit(char ,char ,char ,char* ,char* ); void display(char* ,char* ,char* ,int ); void lineprint(char ,char* ,int ); void linedraw(char ,int ); int main(void) { char a[MAXDIGIT],b[MAXDIGIT],c[MAXDIGIT]; reset(a,MAXDIGIT); reset(b,MAXDIGIT); reset(c,MAXDIGIT); input(a,MAXDIGIT); input(b,MAXDIGIT); add(a,b,c,MAXDIGIT); display(a,b,c,MAXDIGIT); return 0;} void reset(char* buf,int maxdigit) { int i; for(i=0;i<maxdigit;i++) buf[i]=0; return;} void input(char* buf,int maxdigit) { char str[MAXDIGIT]; int i,j; printf("input data:"); scanf("%s",str); i=0; while(str[i]!='\0') i++; j=0; while(i>0){ buf[j]=str[i-1]-'0'; j++; i--; } return;} void add(char* a,char* b,char* c,int maxdigit) { int i; char carry_in,carry_out; i=0; carry_in=0; while(i<maxdigit) { add_digit(a[i],b[i],carry_in,&c[i],&carry_out); carry_in=carry_out; i++;} return;} void add_digit(char a,char b,char carry_in,char* c,char* carry_out) { *c=(a+b+carry_in)%10; *carry_out=(a+b+carry_in)/10; return;} void display(char* a,char* b,char* c,int maxdigit) { lineprint(' ',a,maxdigit); lineprint('+',b,maxdigit); linedraw('-',maxdigit+1); lineprint(' ',c,maxdigit); return;} void lineprint(char c,char* line,int maxdigit) { int i,maxdigitlimit; maxdigitlimit=maxdigit-1; printf("%c",c); for(i=maxdigitlimit;i>=0;i--){ printf("%1d",line[i]); } printf("\n"); return;} void linedraw(char c,int length) { int i; for(i=0;i<length;i++) printf("%c",c); printf("\n"); return;}

  • C言語で多項式の割り算のプログラム

    C言語で多項式の割り算のプログラムを作っているんですができません 以下プログラム #include <stdio.h> int main(void) { int m,m2,i,i2,j,k; int a[1000],b[1000],c[1000],d[1000]; puts("何次の多項式ですか?"); printf("1つめ:"); scanf("%d",&m); printf("2つめ:"); scanf("%d",&m2); puts("1つめの多項式の係数を入力してください。"); for(i=m;i>=0;i--){ scanf("%d",&a[i]); } puts("2つめの多項式の係数を入力してください。"); for(i=m2;i>=0;i--){ scanf("%d",&b[i]); } k=m-m2; c[k]=a[m]/b[m2]; printf("商の次数は%dです。\n",k); j=m2-1; for(k=m-m2;k>=0;k--){ for(i=m-1;i>=0;i--){ d[i]=a[i]-c[k]*b[j]; a[i]=d[i]; c[k-1]=a[i]/b[m2]; j=j-1; } printf("%d ",c[k]); } return(0); } 原因は  for(k=m-m2;k>=0;k--){ for(i=m-1;i>=0;i--){ d[i]=a[i]-c[k]*b[j]; a[i]=d[i]; c[k-1]=a[i]/b[m2]; j=j-1; } printf("%d ",c[k]); } で、iのfor文が終わった後kのfor文が更新され、またiのfor文が始まったときにa[i]が最初に入力された値に変わってしまうからだと思うんですが直せません 誰か教えてくださいm(_ _)m

  • C言語のプログラムです。

    次のようなプログラムを作成しようと考えています。 1.文字列を入力し、入力した文字列にアルファベット以外の文字が含まれていたら再入力。 2."end"もしくは"END"が入力されたらプログラム終了。 3.main関数とは別の関数で入力した文字列に現れる文字を全て入力順に大文字で表示する。(小文字と大文字は同じ文字として扱い、出現個数も合わせて表示する) ※2.では文字列を比較するstrcmpを使用。 表示結果例)  入力:DxbhzAeFSXY  出力:D=1,X=2,B=1,H=1,Z=1,A=1,E=1,F=1,S=1,Y=1 (応用)3.では入力順に表示させていたが、アルファベット順に結果を表示する。 上記の2.までのプログラムは作成できたのですが、3.及び応用が分からず大変困っています。 どなたかご教授ください。 #include <stdio.h> #include <string.h> int sub(int ss[i],int n){ int x; for(x=1; x<=n; x++){ //小文字を大文字に変換 if(ss[i]>=97){ ss[i]=ss[i]-32; } } } int main(void){ char ss[80]; char sa[2][4]={{\"end\"},{\"END\"}}; int a, i, n; int flag= 0; //アルファベット以外の入力があった際の判別 do{ printf(\"文字列を入力してください\\n\"); gets(ss); n= strlen(ss); //文字列ssの長さを求める if(n=3 && ((strncmp(ss,sa[0],3)==0)) || ((strncmp(ss,sa[1],3)==0))){ //endまたはENDの判定 return 0; } for(i=0; i<n; i++){ if((ss[i]>=65 && ss[i]<=90) || (ss[i]>=97 && ss[i]<=122)){ } else{ flag=1; break; } } }while(flag=1); }

  • C言語でscanfを用いた入力

    C言語でscanfの動作を確かめる為に、次のプログラムを作成して実行してみました。 #include <stdio.h> int main(void){ int i; printf("Input1:"); scanf("%d",&i); printf("Input2:"); scanf("%d",&i); printf("Output:%d",i); return 0; } このプログラムは1回目と2回目に数値を入力すると正常に出力します。 例 1回目の入力に10、2回目の入力に20を入力した時の出力結果 Input1:10 Input2:20 Output:20 今度は1回目で数値、2回目で文字を入力してみました。 そしたら2回目の入力が無視されました。 例 1回目の入力に10、2回目の入力にAを入力した時の出力結果 Input1:10 Input2:A Output:10 今度は1回目で文字を入力してみました。 そしたら2回目の入力は要求せず、いきなりよく分からない数値が出力されました。 例 1回目でAを入力した時の出力結果 Input1:A Input2:Output:-858993460 どうして文字を入力したら正常に出力しなくなるのでしょうか?

  • C言語のプログラムについて。

    C言語のプログラミングについて質問です。 入力されたデータの配列とデータ数を渡すと配列に格納された値を逆順にして、格納し直す関数reverse関数を書き結果を出力せよ、というものなのですが下のように書いたのですが、うまく作動しません。どこがいけないのでしょうか...?教えていただきたいです。 #include <stdio.h> void reverse(int *data[], int n); #define MAX 100 int main() { int data[MAX]; int n, i; scanf("%d", &n); if (n >= MAX) n = MAX; for (i = 0; i < n; i ++){ scanf("%d", &data[i]); } reverse(data, n); for (i = 0; i < n; i ++) { printf("%d\n", data[i]); } return 0; } void reverse(int *data[], int n) { int c, i; for (i = 0; i < n; i ++) { c = *data[i]; *data[i] = *data[n - (i + 1)]; *data[n - (i + 1)] = c; } }

  • C言語 繰り返しの問題

    C言語の初心者です。 キーボードから値を入力して、1から入力された値までの奇数の和を求めて出力するプログラムを作成します。以下のように組んでみましたが、全然うまくいきません。誰か教えていただけませんか? #include<stdio.h> int main(void) { int i,n,sum; sum=0; printf("入力値:",n); scanf("%d",&n); if(n<=0) { printf("\n合計値:0\n"); } else { printf("入力値:\n",n); for(i= 1; i<= n; i=i+2) { if(n%2=1) { sum=sum+i; } } } printf("\n合計値\n",sum); }

専門家に質問してみよう