• 締切済み

情報技術検定 C言語について 

C言語で使う英語や記号の意味、使い道をそれぞれ教えていただきたいです(>人<;) %d &age⇦&単体なのかも知れません(-。-; sum else tmp scan f == print f num if

みんなの回答

  • _kappe_
  • ベストアンサー率68% (1522/2216)
回答No.3

ifやelseを知らないレベルだと、C言語の入門書を1冊、初めから順番に読んだほうがいいと思います。ここの回答で断片的な情報を得ても、プログラムを読み書きできるようにはなるのは難しいです。

回答No.2

%d 整数用の書式指定子。 printf関数やその仲間にフォーマット文字列が与えられた時、後続する引数(整数)をその位置に埋め込む時に使われる。 printf: https://chaste.web.fc2.com/Reference.files/C_Standard.files/printf.html & アドレス演算子。例えばageと言う変数がハードウェアのメモリ上のどこに確保されたかを知らせてくれる。 sum C言語用語ではない。 通常summation(総和)を意図する。 例: sum = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10; else 「他には」の意。 C言語では条件分岐で使われる。 else: https://chaste.web.fc2.com/Reference.files/C_Standard.files/else.html tmp C言語用語ではない。 通常はtemporary(一時的)、の意味で、例えば一時的に変数の中身をコピーして退避させたい、その退避先の変数名として使われる事が多い。 scanf C言語上もっとも単純な入力機構用関数。 ただし、危険なんでフツーは使わない。 scanf: https://chaste.web.fc2.com/Reference.files/C_Standard.files/scanf.html == 等値判定用演算子。他の言語では「等値述語」等と呼称したりする。 2つのメモリに書き込まれた数値が等価ならtrue(1)、そうじゃないならfalse(0)を返す。 なお、指定されたメモリの中身を比較するだけ、なんで、文字列の比較等には使えない。 printf C言語ではもっとも基本的な出力関数の一つ。print-formatted(書式印字)の略。 printf: https://chaste.web.fc2.com/Reference.files/C_Standard.files/printf.html num C言語用語ではない。通常、適当な数値(number)を代入する変数名として使ったりする。 if 条件分岐構文の一つ。 if: https://chaste.web.fc2.com/Reference.files/C_Standard.files/if.html

  • f272
  • ベストアンサー率46% (7998/17100)
回答No.1

「C言語 入門」で検索すれば詳しい説明はいっぱいある。

関連するQ&A

  • c言語 for文

    /*指定された個数だけ整数を読み込んで合計値・平均値を算出*/ #include <stdio.h> int main(void) { int i; int sum=0; int num,tmp; printf("整数は何個ですか:"); scanf("%d",&num); for(i=0;i<num;i++) {printf("No.%d:",++i); scanf("%d",&tmp); sum = sum + tmp; } printf("合計値:%d\n",sum); printf("平均値:%.2f\n",(double)sum / num); return(0); } C言語の勉強を始めたばかりのものです。 指定された個数だけ読み込めません 汗 前置と後置をまぜたあたりがよくないのかなと思うのですが。。。 どうしておかしくなるのか教えてください。 内部でどういった処理が行われているのかまだあまりわからない状態です。 ちなみに4と入力した結果は以下です。 整数は何個ですか:4 No.1:4 No.3:3 合計値:7 平均値:1.75

  • 分散を求めるプログラム

    n人の点数を読み込みそれらの平均、分散を計算するプログラムを作りたいのですが分散の式がよく分かりません。 分散を求める式は第i番目の点数をxi、平均をμとすると 分散=1/nΣxi^2-μ^2 で、プラグラムを作ってみると #include<stdio.h> int main (void) { int i; int sum=0; int num,tmp; printf("何人ですか"); scanf("%d",&num); for(i=0; i<num; i++) { print("No. %d ", i+1) scanf("%d",&tmp); sum += tmp; } printf("平均:%.3f\n",(double)sum/num); printf("分散:%.3f\n",(double){(sum-sum/num)*(sum+sum/num)}/num); return(0); } というプログラムを作ってみたのですが分散の計算がうまくいきません。どなたか分散の計算のプログラムを教えて下さい。 C言語初めてまもないので不備があったらすみません。

  • C言語プログラムの並列化について

    OpenMPを用いて以下のC言語プログラムを並列化させようと考えています。 (sumの部分は今は単純な足し算ですが、kk0~kk4を用いた複雑な計算を考えています。) ------------------------------------------------------------------------------ #include <stdio.h> #include <time.h> #define PARA_NUM 200 int main(void) { long kk0, kk1, kk2, kk3, kk4; long i; long parameter_num = 5; long pn[parameter_num]; long sum; long sum_max = 0; long sum_min = PARA_NUM*parameter_num; long sum_min0 = PARA_NUM*parameter_num; long sum_max0 = 0; for( kk0 = 0; kk0 < PARA_NUM-4; kk0++ ) { for( kk1 = kk0+1; kk1 < PARA_NUM-3; kk1++ ) { for( kk2 = kk1+1; kk2 < PARA_NUM-2; kk2++ ) { for( kk3 = kk2+1; kk3 < PARA_NUM-1; kk3++ ) { for( kk4 = kk3+1; kk4 < PARA_NUM; kk4++ ) { sum = kk0+kk1+kk2+kk3+kk4; if ( sum_max0 < sum ) {sum_max0 = sum;} if ( sum_min0 > sum ) {sum_min0 = sum;} }}}}} printf("max: %d\n", sum_max0); printf("min: %d\n", sum_min0); return 0; } ------------------------------------------------------------------------------ 以上のプログラムを以下のように書き変えました。 ------------------------------------------------------------------------------ #include <stdio.h> #include <time.h> #define PARA_NUM 200 int main(void) { long kk0, kk1, kk2, kk3, kk4; long i; long parameter_num = 5; long pn[parameter_num]; long sum; long sum_max = 0; long sum_min = PARA_NUM*parameter_num; long sum_min0 = PARA_NUM*parameter_num; long sum_max0 = 0; #pragma omp parallel for private(kk0, kk1, kk2, kk3, kk4, sum, sum_min0, sum_max0) schedule(static,1) for( kk0 = 0; kk0 < PARA_NUM-4; kk0++ ) { sum_max0=0; sum_min0=PARA_NUM*parameter_num; for( kk1 = kk0+1; kk1 < PARA_NUM-3; kk1++ ) { for( kk2 = kk1+1; kk2 < PARA_NUM-2; kk2++ ) { for( kk3 = kk2+1; kk3 < PARA_NUM-1; kk3++ ) { for( kk4 = kk3+1; kk4 < PARA_NUM; kk4++ ) { sum = kk0+kk1+kk2+kk3+kk4; if ( sum_max0 < sum ) {sum_max0 = sum;} if ( sum_min0 > sum ) {sum_min0 = sum;} }}}} #pragma omp critical { if ( sum_max < sum_max0 ) {sum_max = sum_max0;} if ( sum_min > sum_min0 ) {sum_min = sum_min0; } }} printf("max: %d\n", sum_max); printf("min: %d\n", sum_min); return 0; } ------------------------------------------------------------------------------ インテルコンパイラ(icl)にてコンパイルした後、 windows7に標準で搭載されているelapsedtimeで実行時間を測定した結果、 上のプログラムは 2239milliseconds 下のプログラムは446millisecondsとなりました。(cpuは8コア) 8コア使うため実行時間は1/8に近づくと考えていましたが1/5程度となってしまいました。 下のプログラムより良い並列処理をするアルゴリズムはあるのでしょうか。 また#pragma omp criticalの構文は現在の位置が最適なのでしょうか。

  • C言語初心者です。次のプログラムを簡潔にしたいです

    二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ。 自分のプログラムは以下の通りです。 #include <stdio.h> int main(void) { int num1,num2,small,big,sum=0; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d",&num1); printf("整数B:"); scanf("%d",&num2); small=(num1 > num2) ? num2 : num1; big=(num1 > num2) ? num1 : num2; printf("%d以上%d以下の全整数の和は",small,big); if (num1 < num2) { do { sum+=num1; num1++; }while (num1 <= num2); } else { do { sum+=num2; num2++; }while (num2 <= num1); } printf("%dです。",sum); return 0; } 結果は正しく表示されるはずです。 しかし多変数かつループ文を組み合わせているため、長ったらしくなっています。 どのようなプログラミングならば、簡潔にかけますか? 解答がないので困っています。

  • C言語のqsortについて

    現在、qsortのコードに取り組んでいます。 if (strcmp(ad, "ASC") == 0) { qsort(sin, sizeof(cnt), sizeof(sin[0]), cmp_u); } else { qsort(sin, sizeof(cnt), sizeof(sin[0]), cmp_d); } 恐らくこちらのqsortでの第二引数が書き方を間違えていると思うのですが、修正の方法が分からず、どなたか教えて頂けないでしょうか? #include <stdio.h> #include <time.h> #include <string.h> #include <stdlib.h> static char ad[10]; int cmp_u(const void* a, const void* d) { return strcmp((char*)a, (char*)d); } int cmp_d(const void* a, const void* d) { return strcmp((char*)d, (char*)a); } int main() { int num1, num2; char op; float answer; int r,i; FILE* fp; char c[11]; char sin[1000][1000]; char ad[8]; fp = fopen("log.txt", "a+"); if (fp == NULL) { printf("ファイルオープン失敗\n"); return -1; } while (1) { r = scanf("%d%c%d", &num1, &op, &num2); if (r != 3) { puts("input error"); return 1; } if (op == '+') { answer = num1 + num2; } else if (op == '-') { answer = num1 - num2; } else if (op == '*') { answer = num1 * num2; } else if (op == '/') { answer = (float)num1 / num2; } time_t t = time(NULL); struct tm* tm = localtime(&t); printf("%d/%02d/%02d ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); printf("%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); printf("%d%c%d,%f\n", num1, op, num2, answer); fprintf(fp, "%d/%02d/%02d ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); fprintf(fp, "%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); fprintf(fp, "%d%c%d,%f\n", num1, op, num2, answer); printf("計算を続けますか?"); scanf("%s\n", &c); if (strcmp(c, "no") == 0) { break ; } } fclose(fp); fp = fopen("log.txt", "r"); int cnt = 0; for (i = 0;i < 1000;i = i + 1) { if (fgets(sin[i], sizeof(sin[0]), fp)) ++cnt; else break; } fclose(fp); printf("ASC or DESC: "); scanf("%s", ad); if (strcmp(ad, "ASC") == 0) { qsort(sin, sizeof(cnt), sizeof(sin[0]), cmp_u); } else { qsort(sin, sizeof(cnt), sizeof(sin[0]), cmp_d); } for (i = 0;i < cnt;i = i + 1) { printf("%s", sin[i]); } return 0; }

  • C言語の動的配列について

    C言語で下記の課題に取り組んでいるのですが、ファイルから入力された行数分を出力する事に対して、苦戦しております。 恐らく動的配列を使うと思うのですが・・・書き方が分からず、どなたか教えて頂けないでしょうか? 「課題文」 1) 四則演算が出来ること    2) コンソールから計算対象となる数値と演算子を受け取る      例) 5 + 6    3) 結果をコンソール上に表示する      例) 11    4) 演算結果と実行した日、時間、秒をログファイルとして保存する      ログの上限は1000行とする(上限を超過するケースはひとまず考慮しなくて良い)      例) log.txt に 以下の内容を記録        2015/04/27 14:30:51, 5 + 6, 11    5) コンソールに表示する 「ソースコード」 #include <stdio.h> #include <time.h> #include <string.h> #include <stdlib.h> int main() { int num1, num2; char op; float answer; int r,i,n; FILE* fp; char c[11]; char sin[][1000]; fp = fopen("log.txt", "a"); if (fp == NULL) { printf("ファイルオープン失敗\n"); return -1; } while (1) { r = scanf("%d%c%d", &num1, &op, &num2); if (r != 3) { puts("input error"); return 1; } if (op == '+') { answer = num1 + num2; } else if (op == '-') { answer = num1 - num2; } else if (op == '*') { answer = num1 * num2; } else if (op == '/') { answer = (float)num1 / num2; } time_t t = time(NULL); struct tm* tm = localtime(&t); printf("%d/%02d/%02d ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); printf("%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); printf("%d%c%d,%f\n", num1, op, num2, answer); fprintf(fp, "%d/%02d/%02d ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); fprintf(fp, "%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); fprintf(fp, "%d%c%d,%f\n", num1, op, num2, answer); printf("計算を続けますか?"); scanf("%s\n", &c); if (strcmp(c, "no") == 0) { break ; } } for (;;) { fgets(sin[i], sizeof(sin[0]), fp); } fclose(fp); for (i = 1; i <= n; i++) { printf("%s", sin[i]); } return 0; }

  • C言語 入力した数値の平均値の近似値

    n個の数値を入力して、その平均値にもっとも近い値を求めよ。(double型の配列を用いること) nは実数データの前に最初に入力するものとする。 必要ならばnは100以下と仮定せよ。 答えは指数なしの表現で、欄の最小幅は8とし、精度は3とする。 という問題なのですが、作ってみたプログラムでは正しく動作できませんでした。 どこが違うのか教えてください。 以下が私の作ったプログラムです。 _____________________________________________________________________________________________________________________ #include <stdio.h> int main (void) { int i,n; double c[100],sum,avg,num1,num2,ans; sum=0.0; scanf("%d",&n); for(i=0;i<n;i=i+1) { scanf("%lf",&c[i]); sum=sum+c[i]; } avg=sum/n; num1=avg-c[0]; if(num1<0){ num1=num1*(-1); } for(i=1;i<n;i=i+1){ num2=avg-c[i]; if(num2<0){ num2=num2*(-1); } if(num1>num2); num1=num2; } printf("%8.3f",num1); return(0); } _____________________________________________________________________________________________________________________ ちなみに「3 3.0 5.0 11.0」と入力すれば「5.000」となるはずなのですが、 私のでは「4.667」と表示されてしまいます。 よろしくお願いします。

  • for文

    #include <stdio.h> int main(void) { int i; int sum=0; int num, tmp; printf("整数は何個かな:"); scanf("%d",&num); for(i=0; i<num; i++){ printf("No.%d:",i+1); scanf("%d",&tmp); sum+=tmp; } printf("合計値は:%d\n",sum); printf("平均値は:%.2f\n", (double)sum/num); return(0); } 上の文のforの箇所を for(i=1; i<=num; i++){ printf("No.%d:",i); scanf("%d",&tmp); sum+=tmp;   } としても結果的に同じですよね? どっちでもいいかどうか迷ってます。教えて下さい。

  • C言語初心者です。次の問題で質問です。

    (問題) 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値表示するプログラムを作成せよ。 (自分の解答) #include <stdio.h> int main(void) { int num1,num2; int sum=0; do { printf("整数1>整数2となる整数をそれぞれ入力してください\n"); printf("整数1:"); scanf("%d",&num1); printf("整数2:"); scanf("%d",&num2); if (num1 < num2) printf("整数1>整数2としてください\n"); } while (num1 < num2); printf("%d以上%d以下の全整数の和は",num2,num1); for (num2;num2 <= num1;num2++) { sum=sum+num2; } printf("%dです。",sum); return 0; } これでも一応正しく実行されるのですが、ごちゃごちゃしてるので簡潔に書けないでしょうか? 回答お願いします。

  • C言語の勉強でわからないところがあります。

    最近C言語の勉強を始めたのですが明解C言語入門編の演習4-3でうまくいかなくて困っています。 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成するものなのですが、うまく起動しません。 まだ勉強を始めたばかりの自分が作ったものなので、つまらないミスや勘違いからでてきたエラーだと思うのですが、見て頂けると嬉しいです。 プログラムは以下の通りです。 #include <stdio.h> int main(void) { int n1,n2; int num=n1; int sub=n2; puts("二つの整数を入力してください"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); printf("%d以上%d以下の全整数の和は", n1>n2 ? n1,n2:n2,n1); do{ if (n1>n2) num=n1+sub; sub=sub+1; printf("%d",num); else sub=n2+num; num=num+1; printf("%d",sub); }while(sub==n1 || num ==n2); return 0; } とすると、「22行目」で記述エラーを発見しました。 「identifier」を付け忘れています。となり、起動されることができません。 elseの文を削除すれば動作するのですが、37,28と入力した場合、1638137と大きすぎる数になってしまいます。 そこで二つ質問があります。 一つ目は、「22行目」で記述エラーを発見しました。 「identifier」を付け忘れています。といったものは、具体的に何処が間違っているのか、です。 二つ目は、何故else文を削除した場合のプログラムで、大きすぎる数になってしまうのかが知りたいのです。 この形に拘らずに組むのもいくつか思い浮かぶのですが、何故この形では動かないのかを知りたいので、間違っているところを指摘して頂けると嬉しいです。 そして、もし可能ならなのですが、正答のようなものは書きこまないで頂けると嬉しいです、間違っている理由だけを指摘して頂いて、なんとか後は自分で考えてみたくて・・・ ワガママな質問ですが、よろしくお願いします。

専門家に質問してみよう