• ベストアンサー

C言語の配列について

Trick--x--の回答

回答No.5

例えば、構造体の要素が正の値しかとらない場合、負の値を入れることで「消滅した」とすることが出来ます。 また、構造体の要素に「存在フラグ」を追加することで、それが消滅したかどうかを判定させることも出来ます。 後者の例) typedef struct{ bool flag; double a; double b; double c; }TEST ** TEST tst[NUM]; if(tst[i].flag) { /* 処理 */ }

関連するQ&A

  • 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言語:配列の最大値

    こんにちは。 プログラミングの講義の課題で、 1.100未満の整数20個からなる配列を作成する 2.for文を使って20個の整数の中で最大値を求める 3.その結果を出力する というC言語の課題が出されました。完成はしたのですが、何度実行してもビルドエラーが発生して正常に作動しません。どうすれば正常に作動しますか? #include <stdio.h> int main(void){ int i; int max=0; int num[20] = {4,83,71,90,7,33,62,51,98,21,18,20,75,49,69,14,80,22,8,50}; for( i=0 ; i < 20 ; i++ ) { if (num[i] > max) max = num[i]; } printf("%d,",max); return (0); }

  • C言語 逆順の配列の仕方を教えてください

    今、大学でC言語の課題をやっています。サンプルが与えられています。 その課題は、配列の逆順です。 for文を使って、実行結果は以下のようにならなければならなく、「並び替えの結果は再び num1, num2 に保存される」という条件なのですが、逆順になるにはどのようなプログラムを組めば良いのでしょうか? ソースの「 /* ここに処理を書く */」にプログラムを書かなければいけないのですが、まったくの初心者でわかりません。誠にお手数ですが、教えていただければ幸いです。宜しくお願いいたします。 -----実行結果----- C:\c_lang>reverse --- before --- 2 4 9 10 5 3 1 7 8 6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 --- after --- 6 8 7 1 3 5 10 9 4 2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 -----以下ソース----- #include <stdio.h> void print_num( int *num, int len ); void reverse_num( int *num, int len ); int main( void ) { int num1[10]={2,4,9,10,5,3,1,7,8,6}; int num2[15]={1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15}; printf("--- before ---\n"); print_num( num1, 10 ); print_num( num2, 15 ); /* 逆順に並べ替え */ reverse_num( num1, 10 ); reverse_num( num2, 15 ); printf("--- after ---\n"); print_num( num1, 10 ); print_num( num2, 15 ); return 0; } void print_num( int *num, int len ) { int i; for( i=0; i<len; i++ ){ printf( "%d ", num[i] ); } printf("\n"); } void reverse_num( int *num, int len ) { /* ここに処理を書く */ } -----ソースここまで-----

  • C言語の配列の入れ方について質問です。

    下記のプログラムで1234という連続した数字を入れたら配列val[0]~[3]に val[0] = 1 val[1] = 2 val[2] = 3 val[3] = 4 というように入れたいのですが、どのようにして別々にすれば良いですか?宜しくお願いします。 #include<stdio.h> int main(void) { int num[10]; int val[4]; int i; printf("式:"); scanf("%d",num); for(i=0;i<4;i++){ val[i] = 0; } for(i=0; i<4; i++){ if((num[i] >= 1) && (num[i] <= 9)){ /*1から9の数値が入ったならば*/ val[i] = num[i]; } } for(i=0; i<4; i++){ printf("答え%d:%d\n",i,val[i]); } }

  • 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#で、引数にクラスの配列の参照パラメータを渡したい

    C#始めて3日目ですが、そろそろ挫折しそうです。 以下のクラス class Test{ int num; public Test(){ num = 0 }; ~Test(){}; public void set(int n){ num = n; } public int get(){ return num; } } があり、 void kakikae(Te [] t){ for(int i =0; i < 10; i++){ t[i].set(i); } } Test [] test = new Test[10] = { new Test, new Test, new Test, new Test, new Test, new Test, new Test, new Test, new Test, new Test }; kakikae(test); とした時に、test[0]からtest[9]まで 1,2,3,4,5,6,7,8,9 の値が入っている事がしたいのです。 要は、クラスの配列のポインタを渡して、相手側の関数で書き方内容が、関数から戻った時も値渡しでなく 参照渡しのように値が変わって戻ってきて欲しいです。 配列の仕組み、クラスの仕組み、パラメータの仕組みが 分からず、ここから進みません。 1から勉強できるC#の参考書も探しています。

  • C言語の事で・・・

    C勉強し始めたばかりなんですが気になってるプログラムがあります。 ttp://akabas.net/lib/CTask.aspx?id=105のページのナンバーズっていうゲームなんですがよく分からない部分があります。どなたか解説してもらえませんか? for( turn = 1 ; ; turn++ ){ int num; int test[4]; int kazu = 0; int keta = 0; int i, j; printf( "数を当ててください。\n" ); scanf( "%d", &num ); test[3] = num % 10; test[2] = ( num / 10 ) % 10; test[1] = ( num / 100 ) % 10; test[0] = ( num / 1000 ) % 10; for( i = 0 ; i < 4 ; i++ ){ for( j = 0 ; j < 4 ; j++ ){ if( numbers[i] == test[j] ){ kazu++; if( i == j ) keta++; のとこです。お願いします。

  • C言語で巨大配列を作るにはどうすれば良いのでしょうか?

    C言語で巨大配列を作るにはどうすれば良いのでしょうか? テストで作ってみた配列を用いたプログラムが動かなかったので(コンパイルは正常)、なんでだろうと思って調べてみると、巨大な配列はcalloc関数等を用いて作る必要があると知りました。 しかし正直解説サイトを見てもよく意味が分かりませんでした…。 例えばA[1000][1000][1000]の様な配列は、どの様に作ればいいのでしょうか? A[x][y][z]みたいに表現して、Aを変えて同じ様な配列を8個ほど作りたいです。 初心者なので勉強不足かも知れませんが、どうぞ宜しくお願い致します。

  • 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 上の雛形を使って配列のシャッフルをするプログラムを書く問題なのですがよくわからないのですが教えて頂けると幸いです。

  • C言語の2次配列

    4行5列の配列を用意し、その配列の要素をtij(i=1~4, j=1~5)とするとき、tij=i×j となるように配列に値を入れ、 それを表の形で画面に表示するプログラムを作りなさい。  という問題なんですが、自分は下の様に組みましたがうまく動きません。どこが悪いのか教えてください。よろしくお願いします。あまりC言語を理解していないので申し訳ないですが、なるべく簡単に教えて頂ければ幸いです。 #include<stdio.h> int main(void) { int i,j; int t[4][5]; for(i=0;i<=3;i++) { for(j=0;j<=4;j++) t=i*j; printf("%5d",t); printf("\n"); } return 0; }