- ベストアンサー
C言語について
C言語について教えてください。 データを読み込んでそれを元に計算して出力したいと考えています。 例 データ 12 34 5 12 43 このようなデータを読み込んで計算するときに (N+1行目のデータ)ー(N行目のデータ) のような計算をしたいのですがどのようにすればいいのでしょうか? 同じ行のデータのみで計算することはできるのですが他の行の数値をつかって計算する方法がわかりません。 どうぞよろしくお願いします。
- rikerume01
- お礼率7% (4/57)
- C・C++・C#
- 回答数6
- ありがとう数1
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
配列を使わないと・・・・。 int iMae, iVal, nn = 0; ・ ・ while( データが終わるまで読み込む ){ if( nn++ ){ // 第1行目は「計算」しない(できない) iVal = 読み込み値 - iMae; // 「計算」 printf( "%d\n", iVal ); // 「出力」 } iMae = 読み込み値; }
その他の回答 (5)
- BearCave
- ベストアンサー率20% (189/909)
>1万個以上がかかれたデータを使用したいと考えているのですが、 > このような場合でも int data[]= は使えるんでしょうか? もちろん使えます。intのサイズは4byteなので、1万個でも40kバイト程度ですから。メモリ容量の許す限りいくらでも配列は長くできます。 どうやら繰り返し処理をしたいようですね。「(N+1行目のデータ)ー(N行目のデータ)」をすべて加算するというロジックはこうなります。 int n, total, size; int data[] = {12, 34, 5, 12, 43}; size = sizeof(data) / sizeof(int); /* 配列の個数を調べる */ total = 0; for( n = 0; n < (size-1); n++ ) { total += (data[n+1] - data[n]); } printf("%d\n", total); forループの条件指定で「(size-1)」としてるのがポイントです。配列の総数より一個少なくしておかないと、Nが一番最後になった時に「N+1行目」で配列をはみ出ちゃいますから。
- Hayashi_Trek
- ベストアンサー率44% (366/818)
N行目のデータをどのようにして読み込んでいるかを提示しないから、回答も曖昧になります。 (N+1行目のデータ)ー(N行目のデータ) とはつまり (N行目のデータ)ー(N-1行目のデータ) と同じと考えて こんな処理手順になります。この方法ならたとえデータが1兆個あっても可能です。 ・前回データ、今回データ、計算データの変数を使用する。 ・前回データをクリアする。 ・繰返し処理でデータを読込み、計算する。 ・・今回データを読込む。 ・・今回データから前回データを引いて計算データに入れる。 ・・計算データを出力する。 ・・今回データを前回データにいれる。 ・繰返しの継続判定 ・終り
- hashioogi
- ベストアンサー率25% (102/404)
Q 1万個以上がかかれたデータを使用したいと考えているのですが、このような場合でも int data[]= は使えるんでしょうか? A コンパイラはあるんでしょう ? 実際にやってみてダメだったらまた質問すればいいんじゃないの ? No.1の方は配列を使いなさいと言っている訳です。 No.2の方は読み込んだデータをその配列に格納しておきなさいと言っている訳です。
補足
>>A コンパイラはあるんでしょう ? 実際にやってみてダメだったらまた質問すればいいじゃないの ? No.1の方は配列を使いなさいと言っている訳です。 for文を使ってやってみたのですが data[i+1]-data[i]でやってみたのですがダメみたいでした。 >>No.2の方は読み込んだデータをその配列に格納しておきなさいと言っている訳です。 これについては調べているのですがなかなか理解できません。
- Tacosan
- ベストアンサー率23% (3656/15482)
前のデータを覚えておけばいいのでは.
補足
前のデータを読み込む方法がいまいちわからないので教えていただけないですか?
- BearCave
- ベストアンサー率20% (189/909)
データを配列に読み込んで計算すれば良いのではないでしょうか。 int data[] = {12, 34, 5, 12, 43}; int answer = data[3] - data[0]; /* 4行目から1行目を引く */ printf("%d\n", answer);
補足
解答ありがとうございます。 1万個以上がかかれたデータを使用したいと考えているのですが、 このような場合でも int data[]= は使えるんでしょうか?
関連するQ&A
- C言語の問題についてご教授お願いします【至急】
プログラミング、C言語の問題についてご教授お願いします【至急】 一行目1~10、二行目11~20、三行目・・・最終的に十行目91~100(各数字の間と行の間は一文字分空けること)とコンパイル時に表示されるようなプログラミングを組み立てたいのですがどうにもうまくいきません。 printf("1 2 3 4 5 6 7 8 9 10¥n");のように1~10を出力し、¥nで改行しそれを繰り返すような単純な方法では担当の先生に納得してもらえませんでした(笑) ですのでこの他の組み立て方を教えていただけないでしょうか? ちなみに先生曰く、if文やfor文、elseといったC言語を習う序盤の技法で解けとのこと・・・どうぞよろしくお願いします(`・ω・´)
- 締切済み
- 物理学
- C言語 ファイル処理を教えてください!
089067 054086 090100 ・ ・ というように、あるテストでの英語と数学の点数が 上記のように入っているファイルを読み込み、 ・ファイル内のデータと入力した数値が一致すれば出力 ・ファイル内のデータと入力した数値と一致しなければ、【全てのデータを読み込んだ後にエラー文を1行出力】 というプログラムを作りたいのですが、 後者のエラー出力を設定がわかりません。 本を見たりサイトを調べたり、自分なりに色々してみたのですが、 どうしてもわからないので教えてください。 今作っているのが↓のプログラムですが、 やっぱり原因はwhileの設定かelseなんでしょうか・・・ while (fscanf(fp, "%3d%3d", &e_data, &m_data) == 2) { if ((e_data == n1) && (m_data == n2)) { printf("英語%03d 数学%03d\n", n1, n2); break; } else { printf("入力した点数の人はいません\n"); return(0); } }
- ベストアンサー
- C・C++・C#
- C言語初心者過ぎてわからないです
エクセルのCSVデータなんですが 1行目のデータを 1行目から5行目まで同じデータ 6行目のデータを 6行目から10行目まで同じデータ 10行目のデータを 10行目から15行目まで同じデータ 以上のような作業を繰り返し元のCSVのデータをすべて5行(つまりデータの量は5倍)にしたいのですが C言語でこのような作業を行うファイルをつくるにはC言語ではどのようなプログラムになるでしょうか
- ベストアンサー
- C・C++・C#
- C言語のプログラムについて。
C言語のプログラミングについて質問です。 入力されたデータの配列とデータ数を渡すと配列に格納された値を逆順にして、格納し直す関数reverse関数を書き結果を出力せよ、というものなのですが下のように書いたのですが、うまく作動しません。どこがいけないのでしょうか...?教えていただきたいです。 #include <stdio.h> void reverse(int *data[], int n); #define MAX 100 int main() { int data[MAX]; int n, i; scanf("%d", &n); if (n >= MAX) n = MAX; for (i = 0; i < n; i ++){ scanf("%d", &data[i]); } reverse(data, n); for (i = 0; i < n; i ++) { printf("%d\n", data[i]); } return 0; } void reverse(int *data[], int n) { int c, i; for (i = 0; i < n; i ++) { c = *data[i]; *data[i] = *data[n - (i + 1)]; *data[n - (i + 1)] = c; } }
- ベストアンサー
- C・C++・C#
- C言語で困っています...
入力した数値の列だけ○と×を縦に、段々になるように表示する (最後の行は×にならなければいけない)プログラムを作成しています。 (実行例) ○と×を表示します。何列?:10 × ○× ×○× ○×○× ×○×○× ○×○×○× ×○×○×○× ○×○×○×○× ×○×○×○×○× ○×○×○×○×○× 途中までプログラミングできたのですが、 偶数の数値を入れたときはきちんと最後の行は×になっても 奇数の数値を入力すると○が最後の行になってしまい、うまくいきません。 どこがだめなのでしょうか? どなたか教えてください。 /* 入力した数値の列だけ、○と×を縦に、 段々になるように表示する(最後の行は×になる) */ #include <stdio.h> int main(void) { int i, j, n; printf("○と×を表示します。何列?:"); scanf("%d", &n); for (i=0; i<n; i++){ for (j=0; j<n; j++){ if (j >= (n - 1) - i){ if (j % 2 == 0) printf("○"); else printf("×"); } else printf(" ");//全角スペース } printf("\n"); } return 0; }
- ベストアンサー
- その他(プログラミング・開発)
- 至急で、C言語の問題で解答解説お願いします。
1実数を3つ(a,b,c)を読み込み3辺とする三角形ができるか判定(d(d-a)(d-b)(d-c)>0のとき三角形となる)しできなければ、三角形ではありません!というメッセージを表示し、できる場合は以下のヘロンの公式を用いて三角形の面積を求めるプログラムをC言語で答えてください。d=(a+b+c)/2 s=√{d(d-a)(d-b)(d-c) 2maxの整数値(≧1)をキーボードから入力し、その値に対応した図形を出力するプログラムをC言語で答えてください。 例 max1 max2 max3 * ** *** * ** *** * ** *** ** *** *** 3整数nをキーボード入力しnの値に応じて以下の図形を表示するプログラムをc言語で答えてください。 n=3 n=4 n=5 3 4 5 45 56 67 678 789 890 0123 1234 56789 4整数n(≧0)を入力し歯科の計算を実行するC言語プログラムを答えてください。2つの自然数nとmを読み込みn個の中からm個を取り出すときの組み合わせの数を計算せよ。ただし、n!を計算する関数long fact (int n)を定義し必ずそれを用いること。 5 1つのscanfで2つの10進数を入力し8進数と16進数で表示するプログラムをC言語で答えてください。 6 実数aを入力し少数第1位で四捨五入する関数g(a)をマクロ定義で入力した値の少数第1位を四捨五入して出力するプログラムをC言語で答えてください。 7 4つの実数w,x,y,zを読み込みその最大値を出力するプログラムをC言語で答えてください。ただし、2つの実数の大きいほうを求める関数 double my may (double x,double y)を定義し、その関数を用い、if文を用いないでc言語で答えてください。
- 締切済み
- その他(学問・教育)
- C言語のファイル出力について
C言語のfprintfによるファイル出力について教えてください。 fprintfで、下記の例のように、上書きする行を指定することはできますでしょうか? 出力ファイルは.csv形式で、モードは問いません。 例:既に、sample.csvというファイルがあり、中身が、 0 0 0 1 1 1 2 2 2 とします。プログラムのfprintfで、3 3 3という出力を2行目に上書きし、 0 0 0 3 3 3 2 2 2 と変更する。 もし上記の方法をご存知でしたら、ご教授いただけましたら幸いです。 よろしくお願いいたします。
- ベストアンサー
- C・C++・C#
- 至急で、c言語の問題の解答解説をお願いします。
1 元金(g)と年利率(r %)、年数(n)を読み込みn年後の元利合計(total)を単利と複利で計算し、2つの金額を表示するプログラムをc言語で答えてください。ただし、for文は用いないこと。 2 for文を用いて下記のようになるような九九の表を表示するプログラムをc言語で答えてください。 1 2 3 4 5 6 7 8 9 1 1 2 3 4 5 6 7 8 9 2 2 4 6 8 10 12 14 16 18 3 3 6 9 12 15 18 21 24 27 .4・・・・・・・・・・・・・・・・・・・・・・ 5・・・・・・・・・・・・・・・・・・・・・・ 6・・・・・・・・・・・・・・・・・・・・・・ 7・・・・・・・・・・・・・・・・・・・・・・ 8・・・・・・・・・・・・・・・・・・・・・・ 9 9 18 27・・・・・・・・・・・72 81 3 整数kを入力しiを0から1ずつ増やしてkになるまで繰り返し以下のパターンを出力するプログラムをc言語で答えてください。ただし、iが奇数なら# i%4=3ならば& i%7=4ならば*を 他%を出力すること 例 %#%&*#%&%#%*%・・・・・・・
- 締切済み
- その他(学問・教育)
お礼
皆様ありがとうございました。 皆さんのおかげでなんとか動くようになりました。