• 締切済み

C言語プログラミングについて

「要素数10の配列を準備する。 配列の各要素に0.0~1.0の乱数を入れる。 各配列に入力された乱数を出力する。 配列をオリジナル関数hanteiに渡す。 数hantei内において,各要素の値が0.5以上であれば1 , 0.5未満であれば0を出力する。」 C言語でこのような問題があるのですがどのように作ればよろしいのでしょうか? ちなみに以下のように作ってみて、「argcは一度も使用されていない」「argvは一度も使用されていない」とエラー(警告)が出てしまいました。修正、もしくは正しいプログラムを教えてくれませんか? #include <stdio.h> #include <time.h> #include <stdlib.h> #define SIZE 10 int hantei(double num) { return num>=0.5; } int main(int argc,char *argv[]) { double number[SIZE]; int i; srand((unsigned)time(NULL)); for(i=0;i<SIZE;i++) number[i]=(double)rand() / RAND_MAX; //手抜き乱数 for(i=0;i<SIZE;i++) { printf("%f %d\n",number[i], hantei(number[i])); } return 0; }

  • tes2
  • お礼率50% (1/2)

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

main の引数を使わないなら int main(void) でいい.

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

プログラムは正しいと思いますが。 コンパイル時の「警告(warning)」と「エラー(error)」の違いを理解しましょう。 エラーはコンパイルすらできないような間違いです。 警告は「コンパイル自体は正常に終了した。でも、もしかしら間違いかもしれないけれど、大丈夫?」と尋ねてきているものです。 その内容を確認して「問題無い」と判断したら、無視してもかまいません。 main関数の引数として指定した argc,argv は、コマンドライン引数を受け取るためのものです。 このプログラムは、コマンドライン引数を必要としません。 よって、「使っていない」というのはわかっていることです。

tes2
質問者

お礼

ありがとうございました、 大変参考になり、また、本当に助かりました。

関連するQ&A

  • C言語 ポインタの問題

    プログラミング初心者です #include <stdio.h> #include <stdlib.h> #include <time.h> void shuffle(int *values, int n) { // 配列の最後尾から 1 番目の要素までループする (ループ変数を i とする) // 0 以上 i 以下の int 型の乱数を1つ得る (変数 j とする) // 配列の i 番目の要素と j 番目の要素を入れ替える } void int(int *values, int n) { // 0 〜 n - 1 の昇順の値を持つ配列を作成 } void print_values(int *values, int n) { } int main(int argc, char const *argv[]) { int num_test = 5; int values[10]; int n = sizeof(values) / sizeof(values[0]); srand(time(NULL)); for (int i = 0; i < num_test; i++) { printf("test: %d\n", i); init(values, n); print_values(values, n); shuffle(values, n); print_values(values, n); } return 0; } 実行結果 乱数に従いシャッフルするため,実行ごとに実行結果は変化する. test: 0 0123456789 8675912043 test: 1 0123456789 3908671452 test: 2 0123456789 4201735968 test: 3 0123456789 5378029164 test: 4 0123456789 7839025164 上の雛形を使って配列のシャッフルをするプログラムを書く問題なのですがよくわからないのですが教えて頂けると幸いです。

  • プログラミングについて

    以下のプログラムをコンパイル、実行しようとするとコアダンプと表示されてしまいます。 おそらく配列がうまくいっていないというのは察したのですが、どううまくいっていないのかがわかりません。 原因を教えていただきたいです。 このプログラムは、Nを入力し、0~100までの乱数をN個表示させるものです。 配列を使っているのは、このプログラムが完成したのち、改良してその乱数同士を計算するプログラムにしたいためで、その途中段階でした。 環境は、Cygwinです。 ―――以下ソースコード――― #include <stdio.h> #include <math.h> #include <stdlib.h> int main(void){ int i,N; double u[N]; int ransu; printf("Define N : \n"); //得たい乱数の数を設定 scanf("%d",&N); for(i = 0; i < N; i++) { ransu = rand() % 101 ; //0~100までの乱数を得る u[i] = (double) ransu; printf("%.0f ", u[i]); } printf(" \n"); return 0; } 教えていただける方、いらっしゃいましたら教えていただきたいです。よろしくお願いします。

  • C言語のシェルプログラミングの課題が分かりません。

    C言語のシェルプログラミングを作れという課題で、以下のように作ったんですが、実行して何度かコマンドを入力した後、exitによって一発で終わらせることができません。どのように書き換えればいいか教えて下さい。 また、他にも書き換えた方がよいと思えるところがあったら是非教えて下さいm(_ _)m #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/wait.h> #include <sys/types.h> #include MAX_ARGS 10 #include MAX_LEN 100 extern char **environ; void child(int argc, char *argv[MAX_ARGS]); int main(void){ int argc, n = 0; int status; char input[MAX_LEN], *argv[MAX_ARGS], *cp; const char *delim = "\t\n"; while (1){ ++n; printf("$ "); fflush(stdout); if(fgets(input, sizeof(input), stdin) == NULL){ break; } cp = input; for(argc = 0; argc < MAX_ARGS; argc++){ if((argv[argc] = strtok(cp, delim)) == NULL) break; cp = NULL; } if(strcmp(argv[0], "exit") == 0){ exit(0); } pid_t pid = fork(); if(pid == -1){ perror("fork"); exit(1); }else if(pid == 0){ child(argc, argv); }else{ wait(&status); } } return 0; } void child(int argc, char *argv[MAX_ARGS]{ execvp(argv[0], argv); }

  • C言語プログラミングについて

    皆さんのお力をお貸しください 問題 1~20番のナンバーの車が200週の耐久レースをする。ENTERKEYを押すたびにコースを一周するものとし、一周するごとに20台のうち一台がランダムに選ばれ、選ばれた車は1~6のランダムに選ばれた数字の数だけ順位を上げるプログラムをかいてください。 ※ただしグローバル変数、ポインタは使わずif,for,while,配列のみで書くこと。 実行結果は #(選ばれた車のナンバー)   over(抜いた台数) 現在の周回数( ) 順位 1   (車のナンバー)     2   (車のナンバー)     3   (車のナンバー)        ・        ・          ・                    ()の中身はenterを押すたびに変化する となるようにしてください ポインタありのサンプルプログラムは組めたのですが、※の条件が付けられて、戸惑っています。 恥を忍んで皆さんにお願い申し上げます。 以下、サンプル(インデントの狂いやコメントに関してはご容赦ください) #include <stdio.h> #include <stdlib.h> #include <time.h> #define my_rand(n) (int)((n) * (rand() / (RAND_MAX + 1.0))) void swap(int *a, int *b) { int c = *a; *a = *b; *b = c; } void up_rank(int a[], int m, int n) { while(n --){ if(!m --) break; swap(&a[m], &a[m + 1]); } } void print(int car[], int n) { int i; int j = 0; for(i = 0; i < n; ++ i) { j++; printf("[%2d] %d\n",j, car[i]); } /*putchar('\n');*/ } int main(void) { int car[] = {95,43,86,8,52,28,64,58,76,70,4,34,63,92,35,33,56,80,54,74},i;               //各車のナンバー。皆さんは1~20でかまいません srand((unsigned)time(NULL)); printf("Start\n"); print(car, 20); system("pause"); system("cls"); for(i = 0; i < 201; ++ i) { int c, m = my_rand(20), n = my_rand(6) + 1; if(i<200) { printf("#%d, Overtake +%d\n",car[m] , n); printf("raps = %d\n",i+1); } else { printf("Finishing Positions\n"); } up_rank(car, m, n); print(car, 20); system("pause"); system("cls"); } return 0; }

  • C言語で分からないところがあるのですが・・・

    すみません。C言語で分からないところがあったので来ました。 ユーザから数字を任意の数だけ受け取って、その数字とその和を表示するプログラムです。atoiなる関数、そしてコマンドライン引数というのを使って考えてみた結果を下に書きましたので、どなたか修正してください。お願いします。 実行結果(のイメージ図) 20 39 4 sum 20 39 4 63 途中までのソースコードです。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(int argc,char *argv[]) { int sum; int n,i; printf("How many numbers INPUT?: "); scanf("%d", &n); for(i = 0; i <= n; i++){ atoi(argv[i]); } sum = printf("%d",sum); return 0; }

  • C言語でファイルの内容を strtok関数 を使って数字と文字を分けて

    C言語でファイルの内容を strtok関数 を使って数字と文字を分けて配列に格納したいのですが、うまくできません。 どこが駄目なのかご指摘をお願いします! ファイル内容 20 田中 10 鈴木 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc,char *argv[]) { FILE *fp; char str[256]; char *tp; int i=0; int num[10]; char na[10]; fp=fopen(argv[1],"r"); while(fgets(str,sizeof str,fp)!=NULL); tp = strtok ( str, " " ); while(tp != NULL ) { num[i]=atoi(tp); tp = strtok( NULL," "); if ( tp != NULL ){ na[i]=*tp; } i++; } printf("%d\n%s",num[0],na[0]); printf("%d\n%s",num[1],na[1]); fclose(fp); return 0; }

  • C言語のプログラミング配列・forを使った検索

    C言語のプログラミングで、配列とforを使った検索の表し方がわかりません。 numにはキーボードから任意の数字を入力し、 1ならば25、2ならば30、、、といったように 対応する数字を表示させ、1行目にない数字が入力された時は 「NoData」と表示させたいのですが、上手くいきません; 本当はもっと配列が多いのですが4つでやってみると #include <stdio.h> main() { int data[2][4]{{1,2,3,4},{25,30,45,50}} , num , i ; printf("num?"); scanf(&num); for(i=0; i>4;i++) if(num== data[0][i]){ printf("number is \n",data[1][i]);} else {printf("NoData\n"); } return0 ; } こうかと思ったのですが上手くいきません、、、 どなたかお願いします!

  • C言語を実行すると-infが出てきて困っています。

    C言語を実行すると-infが出てきて困っています。 コンパイラはgccを使っています。 よろしくお願いします。 #include <stdio.h> #include <math.h> #include <stdlib.h> #define data 100//計算回数 double seiki(void)//正規乱数 { double n; double i; double y; double x1,x2; double sigma; double mean; double Pi = 2*asin(1); sigma = 1; mean = 0; { x1 = (double)rand()/(RAND_MAX); x2 = (double)rand()/(RAND_MAX); y = sigma*sqrt(-2*log(x1))*sin(2*Pi*x2) + mean; //printf("%f\n",y); } return (y); } int main(void) { double* price; int i, j, k; double a, b, c; //メモリ確保 price=(double*)malloc(sizeof(double)*data+10); for(i = 0;i<data;i++) { price[i+1] = price[i]+seiki(); printf("%lf\n",price[i+1]); } return 0; }

  • MacでC言語を勉強してみてるのですが

    最近C言語に興味を持って 趣味程度に、ハーバート・シルトさん著の「独習C」を、 Xcodeを使ってCが使える感じにして、 プログラミングを打って、ビルドして、コンソールで結果を見て、ふむふむ、ってやっていたのですが、 7章の4節でコマンドライン引数というものが出てきて、 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i; double d; long l; i = atoi(argv[1]); l = atol(argv[2]); d = atof(argv[3]); printf("%d %ld %f", i, l, d); return 0; } という例題のプログラムの結果を見たいのですが、コマンドラインというものがどうすればXcodeで見られるのかよくわかりません。 ぜひ助けてください。コンソールには出ないんですよね・・・?

    • ベストアンサー
    • Mac
  • C言語について質問です。

    ソートについて勉強していて、乱数列の要素数Nの値を変えていきバブルソートの交換回数、比較回数を数えるプログラムを作り、後は処理時間について調べたいのですが、処理時間を出力するのはどうやってやるのですか?教えてください。以下に乱数を生成するrand.cとバブルソートを行うbubblesort.cを記載します。これに処理時間を出力するようにしてもらいたいのですが、どうしたらいいですか?解説とソースファイルをよろしくお願いします。 rand.c #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000 int num[N]; int makeDataFile ( void ) { int i; FILE *fp; char s[100]; int num[N]; srand ( ( unsigned )time ( NULL ) ); fp = fopen ("rand1.txt", "w" ); if ( fp == NULL ) exit(1); for ( i = 0; i < N; i++ ){ fprintf ( fp, "%d\n", rand()%100 ); } fclose ( fp ); fp = fopen ( "rand1.txt", "r" ); if ( fp == NULL ) exit(1); while( fgets ( s, sizeof (s), fp ) ) { printf ( s ); } fclose ( fp ); return N; } bubblesort.c #include <stdio.h> #include <time.h> extern int makeDataFile ( void ); extern int num[]; void BubbleSort ( int x[] , int n ); void Show ( int x[] , int n ); int comp; int swap; void BubbleSort ( int x[] , int n ) { int i, j, tmp; for ( i = 0; i < n-1; i++ ) { for ( j = n-1; j > i; j-- ){ comp++; if ( x[i] > x[j] ){ swap++; tmp = x[j]; x[j] = x[i]; x[i]= tmp; Show ( x , n ); } } } } void Show ( int x[] , int n ) { while ( n-- ) printf ( "%d " , *x++ ); printf ( "\n" ); } int main(void) { int i, j, n , tmp; FILE *fp; comp = 0; swap = 0; n = makeDataFile(); fp = fopen ( "rand1.txt", "r" ); if ( fp == NULL ) return 1; for ( i = 0; i < n; i++ ){ fscanf ( fp, "%d", &(num[i] ) ); } fclose ( fp ); printf ( "\nbefore bubblesort\n" ); Show ( num , n ); printf ( "\n" ); printf ( "progress bubblesort\n" ); BubbleSort ( num , n ); printf ( "\n" ); printf ( "after bubblesort\n" ); Show ( num , n ); printf ( "\n" ); printf ( "count of comparisons : %d\n" , comp ); printf ( "count of swap : %d\n" , swap ); return 0; }

専門家に質問してみよう