• ベストアンサー

これであっていますか??

Nigunの回答

  • ベストアンサー
  • Nigun
  • ベストアンサー率22% (200/893)
回答No.1

whileの所のnが何になるの?という疑問がありますが、 他の部分は大丈夫だと思います。 ただ、わざわざelseを付けなくても if(text[j]==p && text[j+1]==q) { printf("j=%d\n",j); } j++; (超抜粋) で良くないですか? どっちにしてもj++は必要なので。 間違ってたらごめんなさい

関連するQ&A

  • 困ってます

    #include <stdio.h> main(){ int i, k, n, target; int a[] = {8, 6, 11, 4, 2, 7, 3}; n = 7; printf("配列のデータ:\n"); for( i=0; i<n; i++){ printf("%d ",a[i]); } printf("\n探索するデータを入力してください\n"); scanf("%d",&target); k = 0; while( ???????????? && ????????????? ){ k++; } if( ????????????? ){kがnより小さい printf("目的のデータは%d番目です\n",k); } else { printf("目的のデータはありませんでした\n"); } } ???????に入るのを教えて下さい

  • 教えて下さい

    困ってます #include <stdio.h> main(){ int i, k, n, target; int a[] = {8, 6, 11, 4, 2, 7, 3}; n = 7; printf("配列のデータ:\n"); for( i=0; i<n; i++){ printf("%d ",a[i]); } printf("\n探索するデータを入力してください\n"); scanf("%d",&target); k = 0; while( ???????????? && ????????????? ){ k++; } if( ????????????? ){kがnより小さい printf("目的のデータは%d番目です\n",k); } else { printf("目的のデータはありませんでした\n"); } } ???????に入るのを教えて下さい

  • 困ってます

    #include <stdio.h> main(){ int i, k, n, target; int a[] = {8, 6, 11, 4, 2, 7, 3}; n = 7; printf("配列のデータ:\n"); for( i=0; i<n; i++){ printf("%d ",a[i]); } printf("\n探索するデータを入力してください\n"); scanf("%d",&target); k = 0; while( a[k]!=&& k<n){ k++; } if( k<n){ printf("目的のデータは%d番目です\n",k); } else { printf("目的のデータはありませんでした\n"); } } 訂正して下さい

  • C言語の問題について教えていただきたいのですが

    【身長デ一タを順次入力していき、160(cm)未満,160(cm)以上,170(cm)未満、170(cm)以上,180(cm)未満、180(cm)以上のデータがそれぞれいくつあったかを出力する(同時に全入力デ一タ数も出力する)プログラムを作成せよ。但し,データとして999 が入力された時点でプログラムの実行が終了するものとする.なお,999 というデータは,全入力データ数に入れないものとする.】 という問題が解けません・・・。わかる方いらっしゃいましたら教えてください。 一応私なりに #include <stdio.h> void main() { int n=0,i=0,j=0,k=0,l=0; double a; printf("身長を入力してください\n"); scanf("%lf",&a); while(a!=999){ scanf("%d",&n); n++; if(a<160){ i++; }else if(a>=160 && a<170){ j++; }else if(a>=170 && a<180){ k++; }else{ l++; } } printf("入力データ数 %d\n",n-1); printf("160cm未満 %d\n",i); printf("160cm以上170cm未満 %d\n",j); printf("170cm以上180cm未満 %d\n",k); printf("180cm以上 %d\n",l); } と作ってみたものの…;;; 正しいプログラムを教えていただけると嬉しいです。よろしくお願いします。

  • ポインタ?

    #include <stdio.h> main() { char s[] = "I love cat and dog."; char c = 'a'; char *p = s; int n = 0; printf("\"%s\"の中から\'%c\'をさがします。\n", s, c); while(*p != '\0') { if(*p == c) { printf("%d番目で発見しました。\n", p - s + 1); ++n; } ++p; } if(n == 0) { printf("1つも見つかりませんでした。\n"); } else printf("全部で%d個見つかりました。\n", n); return 0; } わからないので質問したいのですが、これは「Cの絵本」という、 本に出ているサンプルプログラムです。 わからないところは、 12行目の、printf("%d番目で発見しました。\n", p - s + 1); ところです。その、「p - s」のところが特にわかりません。 ポインタって言うのは、アドレスを格納する変数ですよね? その、pからsを引いても0になるんじゃないかと思って、理解が できません。どうして、このp-sで、cの位置が発見できるのかが 理解できません。最後の+1は配列が0から始まるんで+1にすれば いいのはわかるんですが、p-sでどんなことが起きているかが 理解できなくて。ポインタをちゃんと理解できていないから、 こういった疑問が出てくるんですかね? ほかの参考書も本屋さんに行って見てみようと思っているんですが、 どなたか教えていただけませんか? よろしくお願いします。

  • 組み合わせ

    n個の集合からp個を取る組み合わせの総数を出力するプログラムなんですが nCp=n!/p!(n-p)!という式を使い #include<stdio.h> int kaijo(int m); int comb(int n,int p); int main(void) { int i,j; printf("n="); scanf("%d",&i); printf("p="); scanf("%d",&j); printf("comb(%d,%d)=%d\n",i,j,comb(i,j)); } int kaijo(int m) { if(m>0) return(m*kaijo(m-1)); else return 1; } int comb(int n,int p) { if(n>0) return((n*kaijo(n-1))/(p*kaijo(p-1)*(n-p)*kaijo(n-p-1))); else return 1; } と書いてみたのですがこれではnが大きいとC言語のint型で扱える最大値を超えてしまい正しい結果が出力されません。  そこでint型を使ったままでnやpが大きい場合でもある程度出力できるようにしたいのですがどう改良したらよいのでしょうか? おそらくnCp=n*(n-1)*・・・*(n-p+1)/p!という式を使うのですがよく分かりません。よろしくお願いします。

  • 文字列から文字を探す

    以下のプログラムです。 #include <stdio.h> main () { char s[]="I love cat and dog."; char c='a'; char *p=s; int n=0; printf("\"%s\"の中から\'%c\'を探します。",s,c); while(*p != '\0') { if(*p == 0) { printf("%d文字目で発見しました。\n",p-s+1); n++; } p++; } if(n == 0) printf("1つも見つかりませんでした。\n"); else printf("全部で%d個見つかりました。\n",n); } C言語の本で勉強しています。 ・p-s+1の意味がわかりません。 ここには何が割り当てられているのでしょうか? ・*pとpの違いもあいまいです。 ・\"%s\"は「"」を印刷するためには必要なのでしょうか? どう質問していいのかもわからないのですが、よろしくお願いします。

  • C++言語について。構文エラー

    ジャンケンゲームを作ってたんですが サイトを参考にしながらやってたんですが、どこかでミスったみたいで。 コピーしてやるのはイヤなので、自分で打ちたいんです。   どうか間違いを指摘してもらえないでしょうか?            #include <stdio.h> #include <stdlib.h> int main() { int n; int p;//player int c;//computer srand(0);//乱数の初期化 do { //プレイヤーの手 printf("あなたの手を入力してください\n(グー:1、チョキ:2、パー:3\n"); scanf("%d", &p); //コンピュータの手 c = rand() % 3 + 1; //勝ち負け判定 if(p == c){ printf("draw\n"); }else if(p == 1 && c == 2){ printf("WIN!!\n"); }else if(p == 2 && c == 3){ printf("WIN!!\n"); }else if(p == 3 && c == 2){ printf("WIN!!\n"); }else{ printf("lose...\n"); } //続けるかどうかの判定 printf("try agin?\nNO(0を入力)---"); scanf("%d", &n); //nが0以外だったら続ける }while(n != 0); return 0; }        で、エラーが構文エラー : ';' が 'return' の前にありません。 というものでした。   よろしくおねがいします。

  • C++でグラフをリスト構造で作る

    今、『グラフのデータを読み込んで、行列形式で配列に保存するプログラム』を作りました。下記に私の作ったそのプログラムがあります。しかしこの次にこれと同じことを「リスト構造」を使って作らないといけないのですがなかなかうまくいかないです。どのように作ればいいか分かる人がいたら教えてください! #include<stdio.h> #define hairetu 5 int main(void){ int x, y, i, j, a[hairetu][hairetu]; for(i=0; i<5; i++){ for(j=0; j<5; j++){ a[i][j]=0; } } printf("0以下の数を入れると終了します\n"); while(1){ printf("1~5の数のうち、2つ数字を入力しなさい\n"); scanf("%d%d", &x, &y); if(x<=0 || y<=0){ break; } else if(x>5 || y>5){ printf("エラー\n"); return 1; } a[x-1][y-1]=1; } for(i=0; i<5; i++){ printf("\n"); for(j=0; j<5; j++){ printf("%d", a[j][i]); } } printf("\n"); return 0; }

  • C言語の問題です

    二つの仮分数の加算を行うプログラミングである。 x/w+z/y=(xy+wz)/(wy) 1. w,x,y,zは正の整数である。 2.上式のように計算した後、約分して結果を求める。約分には最大公約数を使う。最大公約数の計算は関数gcd(a,b)で以下のアルゴリズム(ユークリッド互除法)で行う。 (1) a,bの大きいほうをp,小さいほうをqとする。 (2) pをqで割った余りをrとする。r=0ならqが解。 r≠0なら、q=r、r=qとして(2)に戻る。 3.計算結果が仮分数ならば、帯分数にして出力する。 次のプログラムの空欄((1)から(3):を埋め、完成させて下さい。 #include <stdio.h> int gcd(int a, int b) { int p,q,r; if(a<b) { q=a; p=b; }else{ q=b; p=a; } while(q>0){ (1); p=q; q=r; } (2); } main(){ int g,k,m,n,p,q,w,x,y,z; printf("x/w + z/yの数値を入力して下さい(x w z y)"); scanf("%d %d %d %d, &x,&w,&z,&y"); m= w*y; n=x*y+w*z; p=m; q=n; g=gcd(p,q); m=m/g; n=n/g; if((3)) { k = n/m; n = n - k*m; if(n==0) printf("%d\n",k); else printf("%d %d/%d\n",k,n,m); } else printf("%d/%d\n",n,m); } 全く見当がつきません。どなたかお助け下さい。回答を教えてください。