• 締切済み

c言語についてですが

#include <stdio.h> #include <stdlib.h> #include <time.h> #define D_ABC 50 #define S_NUMBER 5 int main( void ) { int abc[ D_ABC ]; int goukei; int homi; int sa[S_NUMBER]; int s; int m; int p; int k; s = 0; printf( "指定する数値を入力して下さい。\n"); do{ scanf( "%d", &sa[s++] ); } while(sa[s-1] > 0 ); --s; p = 0; printf( "指定する数字を入力して下さい。\n" ); do{ scanf( "%d", &abc[p++] ); } while( abc[p - 1] > 0 ); --p; srand( time(NULL)); for( m = 0; m < 5; m++ ) { do{ for( k = 0; k < 100; k++ ) { int o = rand() % p; int t = rand() % p; int buf; buf = abc[o]; abc[o] = abc[t]; abc[t] = buf; } goukei = 0; homi = 0; for( k = 0; k < 5; k++ ) { goukei += abc[k]; if( ( abc[k] % 2 ) == 0 ) ++homi; } } while( goukei < (50 - [sa] || goukei > (110 - [sa]) || homi < 2 || homi > 3 ); for( k = 0; k <4; k++ ) printf( "%d%d\t",sa[s], abc[k] ); printf( "\n" ); } return 0; } このようなソースプログラムを書いてみたんですがうまくいきません。 最初の数値はS_NUMBER からの入力で後に通ずく数値はシャッフルした数値を入力したいとおもっていますがうまくいきません。どなたかお願いします。      〇  ●●●●(イメージです)

みんなの回答

回答No.1

既に、同じような質問の回答で指摘されていますが、 「うまくいきません」という質問は、プログラム関係ではしてはいけないものだと考えた方が良いです。 1)何をするプログラムか(普通の言葉で説明) 2)入力例 「"指定する数値を入力して下さい」(1回目)で、 1 2 3 4 5 -1 を入力 「"指定する数値を入力して下さい」(2回目)で、 9 8 7 6 5 -1 を入力 3)想定される出力 5 2 1 3 4 5 4)実際の出力 または コンパイルで出たエラーをリストアップ 最低限必要です。 「〇  ●●●●」が想定される出力ですか?

関連するQ&A

  • c言語についてですが

    #include <stdio.h> #include <stdlib.h> #include <time.h> #define D_ABC 50 #define S_NUMBER 5 int main( void ) { int abc[ D_ABC ]; int goukei; int homi; int sa[S_NUMBER]; int s; int m; int p; int k; s = 0; printf( "指定する数値を入力して下さい。\n"); do{ scanf( "%d", &sa[s++] ); } while(sa[s-1] > 0 ); --s; p = 0; printf( "指定する数字を入力して下さい。\n" ); do{ scanf( "%d", &abc[p++] ); } while( abc[p - 1] > 0 ); --p; srand( time(NULL)); for( m = 0; m < 5; m++ ) { do{ for( k = 0; k < 100; k++ ) { int o = rand() % p; int t = rand() % p; int buf; buf = abc[o]; abc[o] = abc[t]; abc[t] = buf; } goukei = 0; homi = 0; for( k = 0; k < 5; k++ ) { goukei += abc[k]; if( ( abc[k] % 2 ) == 0 ) ++homi; } } while( goukei < (50 - [sa] || goukei > (110 - [sa]) || homi < 2 || homi > 3 ); for( k = 0; k <4; k++ ) printf( "%d%d\t",sa[s], abc[k] ); printf( "\n" ); } return 0; } どこか おかしいですか? 始めたばかりなのでわかりません。

  • c言語について

    #include <stdio.h> #include <stdlib.h> #include <time.h> #define D_ABC 50 int main( void ) { int abc[ D_ABC ]; int goukei; int homi; int p; int k; p = 0; printf( "指定する数字を入力して下さい。\n" ); do{ scanf( "%d", &abc[p++] ); } while( abc[p - 1] > 0 ); --p; srand( time(NULL)); do{ for( k = 0; k < 100; k++ ) { int o = rand() % p; int t = rand() % p; int buf; buf = abc[o]; abc[o] = abc[t]; abc[t] = buf; } goukei = 0; homi = 0; for( k = 0; k < 5; k++ ) { goukei += abc[k]; if( ( abc[k] % 2 ) == 0 ) ++homi; } } while( goukei < 50 || goukei > 110 || homi < 2 || homi > 3 ); for( k = 0; k < 5; k++ ) printf( "%d\t", abc[k] ); printf( "\n" ); return 0; } このソースプログラムはコンパイルできますが、複数パターンを出力させるにはどのように すればいいのかまだ勉強不足で少し困っているんですが教えてもらえないでしょうか。

  • c言語について。

    #include<stdio.h> #include<string.h> #include<math.h> #include<stdlib.h> #include<time.h> int goukei=0; //goukei関数の定義 int detame; //detame関数の定義 void gusu(){printf("偶数%dが出ました。ゲームオーバーです。\n",detame); getchar(); exit(1);} int kisu(){ goukei=goukei+detame; printf("奇数%dがでました。合計%d点です。\n",detame,goukei); } main(){ char answer[20]; //文字型変数answerの宣言 int amari; //amari関数の宣言 //ゲームの説明・開始 printf("さいころの目が奇数なら、出た目だけ得点が加算され、\n"); printf("偶数が出たら、その場でゲームオーバーです。\n"); printf("さいころを振ってください。\n"); getchar(); srand((unsigned)time(NULL));//rand関数の初期化 detame=rand()%6+1;//1から6までの乱数の発生 amari=detame%2; if(amari==0){gusu();}else{kisu();} while(1) { printf("ゲームを続けますか?yesかnoで答えてください。\n"); scanf("%s",&answer); if(strcmp(answer,"no")==0){ break;} printf("ゲームを続けます。\n"); printf("さいころを振ってください。\n"); getchar(); detame=rand()%6+1; amari=detame%2; if(amari==0){gusu();}else{kisu();} } //合計得点とゲームの終了 printf("合計で%d点でした。ゲームを終了します。\n",goukei); } このプログラミングはさいころを振って、奇数なら出た目が加算され奇数ならゲームオーバーというものなんですが、さいころを二つにするときはどういうプログラムになるのか教えてください。お願いします。

  • C言語を始めたばかりですが、なかなか難しいです。

    C言語を始めたばかりですが、なかなか難しいです。 下記のプログラムですが、誤りを指摘して頂けないでしょうか? /************************************************************************ 合計と平均を求める ************************************************************************/ #include <stdio.h> #define KAMOKU 3 main() { int ten[KAMOKU]={73,59,92}; /*得点*/ int goukei=0; /*合計点*/ double heikin; /*平均点*/ char shimei[20]="太郎"; /*氏名*/ char kamokuName[KAMOKU][10]={"国語","数学","英語"}; int i; /*科目数*/ /*合計点と平均点の算出*/ for(i = 0; < KAMOKU;i++) { goukei+=ten[i]; } heikin=(double)goukei / i; /*画面に表示*/ printf("氏名:%s\n",shimei); for(i = 0; < KAMOKU;i++) { printf("%-6s:%3d点\n",kamokuName[i],ten[i]); } printf("\n"); printf("%sさんの合計:%3d点 平均:%5.1f点\n",shimei,goukei,heikin); エラーメッセージは for.c: In function ‘main’: for.c:18: error: expected expression before ‘<’ token for.c:27: error: expected expression before ‘<’ token です。 どうぞ宜しくお願い致します。

  • C言語 構造体(2)

    ご質問です。 構造体で、あらかじめメンバ数を固定したものではなく、 テキストファイルを読み込んだときにメンバ数を変えて読み込みたいのです。 (カンマできりたい) aaa.txt ------------------------ あああ,いいい ------------------------ となっているときは、 tmp.nm[0]=あああ tmp.nm[1]=いいい となり、 kamoku.nm[0] kamoku.nm[1] をprintf。 aaa.txt --------------------------- あああ,いいい,ううう,えええ --------------------------- の場合は tmp.nm[0]=あああ tmp.nm[1]=いいい tmp.nm[2]=ううう tmp.nm[3]=えええ kamoku.nm[0] kamoku.nm[1] kamoku.nm[2] kamoku.nm[3] をprintf。 下記は動きません。。 よろしくお願いいたします。 #include <stdio.h> struct kamokumei { char nm[10]; }kamoku; int main(void) { int i,P,t; FILE *fp; struct kamokumei kamoku[20]; char buf[1024]; fp = fopen("aaa.txt", "r"); P=3; t=0; while( fgets(buf, sizeof(buf), fp) ){ struct kamokumei tmp; sscanf(buf, "%s", tmp.nm[t]); nm[t++] = tmp; } for(i = 0; i < P; i++) { printf("%s\n", kamoku.nm[i]); } return 0; }

  • C言語の質問です。

    C言語の質問です。 C言語で、PCの時間を、キーボードで入力した好きな秒数ごとに表示するプログラムを作りたいのですが、どうしても1秒ごとになってしまいます。ここまで作ったのですが、あとどのようにすればよろしいでしょうか? #include <stdio.h> #include <time.h> #include <string.h> int a2i(char x); main() { time_t jikoku; char t[30]; int h,m,s,so=0; int x,a; printf("秒数xを入力"); scanf("%d",&x); while(1){ for(a=0;a<x;a++){ time(&jikoku); strcpy(t,ctime(&jikoku)); h=a2i(t[11])*10+a2i(t[12]); m=a2i(t[14])*10+a2i(t[15]); s=a2i(t[17])*10+a2i(t[18]); if(s!=so+a){ printf("%d:%d:%d\n",h,m,s); so=s; } } } } int a2i(char x) { return(x-'0'); }

  • C言語

    以下を出力するとどのような結果が得られますか? #include <stdio.h> const int N=10; void subroutine(int k, int x[ ]); int main (void){ inta[11],b[11]; int i,k; for (i=1; i<=N); i++){ a[i]=i; b[i]=0; } for(k=1; k<=N; k++){ subroutine(k,a); printf("k=%2d,%5d\n",k,a[k]); } return 0; } void subroutine(int k, int x[ ]){ int i,s; i=0; s=0; while(++i<=k) s=s+x[i]; x[k]=s; return; }

  • C言語の問題です!!

    すみません。 詳細表示をする際に、未ソート部の先頭要素の上に記号文字「*」を表示し、未ソート部の最小要素の上に記号文字「+」を表示したいと思い、以下のソースプログラムを作成したのですが、結果が何か違う気がします…。どこが違うのか、教えていただけませんか? また、プログラムを修正していただけませんか? #include<stdio.h> #include<stdlib.h> #include<time.h> #define swap(type,x,y) do{type t=x;x=y;y=t;}while(0) /*--- 単純選択ソート ---*/ void selection(int a[], int n) { int i, j,k,flg; char *disp[]={" ","[* ]","[ +]","[*+]"}; for (i = 0; i < n - 1; i++) { int min = i; for (j = i + 1; j < n; j++) { if (a[min] > a[j]) { min = j; } } for (k = 0; k < n; k++) { flg=0; if(k==i) flg|=1; if(k==min) flg|=2; printf("%s",disp[flg]); } printf("\n"); for (k = 0; k < n; k++) printf("[%2d]", a[k]); printf("\n"); swap(int, a[i], a[min]); } } int main(void) { int i, nx; int *x; printf("要素数 : "); scanf("%d", &nx); x = calloc(nx, sizeof(int)); srand(time(NULL)); for (i = 0; i < nx; i++) { x[i] = rand() % 100; printf("x[%d] = %d\n", i, x[i]); } selection(x, nx); for (i = 0; i < nx; i++) printf("x[%d] = %d\n", i, x[i]); free(x); return 0; }

  • C言語 じゃんけんゲーム 非常に困っています

    じゃんけんゲームを作成したのですが コンピュータの出す手を5つのパターンを作成して その5つのパターンを関数化して呼び出すようにする。 というのを作成したいのですが検索などしましたが コンピュータの調子が悪く、それらしい物が見つからず、 何方か無礼ですが自分ならこうするという模範解答お願いします… 一応下記のプログラムまでは進められましたが switch()case を関数化してゲーム前に入力して5つのパターンを それぞれ呼び出せるようにしたいです… (例:ゲーム前に「パターンを選択:5でランダム、6でコンピュータ絶対勝つ…(省略)」 を表示させて入力数字でパターンを呼び出し、開始する) 5つのパターン(コンピュータの手) 完全ランダム コンピュータが絶対勝つ コンピュータが絶対負け 絶対引き分け 絶対引き分け無い 作成したプログラム #include <stdio.h> #include <stdlib.h> #include <time.h> char *table[]={"グー","パー","チョキ"}; int main(void) { int i,j; int continue_f; int player,computer; int p_win,p_lose,p_draw; int t_win,t_lose,t_draw; t_win=t_lose=t_draw=0; srand(time(NULL)); do{ p_win=p_lose=p_draw=0; for(i=0;i<5;i++){ while(1){ printf("あなたが出した手は・・・\n"); printf("グー:0 パー:1 チョキ:2\n"); scanf("%d",&player); if(0<=player&&player<=2){ break; }else{ printf("もう一度入力してください。\n"); } } switch(i){ case 0: computer=rand()%3; break; case 1: computer=(player+1)%3; break; case 2: computer=(player+2)%3; break; case 3: computer=player; break; case 4: do{ computer=rand()%2; }while(computer==player); break; } if((player+1)%3==computer){ printf("あなたは%sでわたしは%sです・・・わたしの勝利です。\n", table[player],table[computer]); p_lose++; }else if(player==computer){ printf("あなたもわたしも%sです・・・引き分けです。\n",table[player]); p_draw++; }else{ printf("あなたは%sでわたしは%sです・・・あなたの勝利です。\n", table[player],table[computer]); p_win++; } } printf("%d勝 %d敗 %d引き分けでした。\n",p_win,p_lose,p_draw); printf("このまま続けますか?続ける場合は何か数字を入力し、" "続けない場合は-1を入力してください。\n"); scanf("%d",&continue_f); t_win+=p_win; t_lose+=p_lose; t_draw+=p_draw; }while(continue_f!=-1); printf("トータルで %d勝 %d敗 %d引き分けでした。\n",t_win,t_lose,t_draw); return 0; }

  • クイックソート(C言語)

    こんにちは<_ _> クイックソートについての質問です。 左端を軸にクイックソートでデータを昇順にソートする プログラムを作ったのですがうまく動きません #include<stdio.h> void quick(int *,int,int); #define N 10 int main(void) { static int a[]={41,24,76,11,45,64,21,69,19,36}; int k,b=0; quick(a,0,N-1); for(k=0;k<N;k++) printf(" %d",a[k]); return 0; } void quick(int a[],int left,int right) { int s,t,i,j; t=right; i=left+1; j=a[left]; if(right>left){ while(1){ while(a[++i]>j); while(a[--t]<j && t>0); if(i>=t){ break; } s=a[i]; a[i]=a[t]; a[t]=s; } s=a[i]; a[i]=j; a[left]=s; quick(a,left,t-1); quick(a,t+1,right); } } 値の入れ替え、軸の入れ替えもしましたが結果として 「41 41 76 69 45 64 41 19 0 36」 このような結果で出力されてしまいます・・・ 時間に余裕のある方いましたらご指導をお願いします。 よろしくお願いします。<_ _>