質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

5回答

9127閲覧

c言語のプログラムが思うように動きません

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2015/06/20 12:20

全ての要素が1の10行10列の行列を命令によってその要素のいくつかを0にして、すべての要素の合計を数えるプログラムを作りたいのですが、間違った結果が出てしまいます。どこが間違っているのか教えてください。

lang

1コード#include <stdio.h> 2 3void order(int state[][], int n,int c, int s, int e){// nが1ならc列のs行からe行に0を代入し、2ならc行のs列からe行に0を代入する 4 int i; 5 if(n == 1){ 6 for(i = s; i <= e ; i++){ 7 state[c][i] = 0; 8 } 9} 10 else if(n == 2){ 11 int i; 12 for(i = s; i <= e ; i++){ 13 state[i][c] = 0; 14 } 15 } 16 else{} 17} 18 19void execute(int state[][], int a){// aの値の数だけorderを実行する 20 int i; 21 int n, c, s, e; 22 23 for(i = 1; i <= a; i++){ 24 scanf("%d%d%d%d", &n, &c, &s, &e); 25 order(state , n, c, s, e); 26 } 27} 28 29main(){ 30 int a; 31 int state[10][10]; 32 int i; 33 int j; 34 int sum = 0; 35 for(i = 0; i < 10; i++ ){ 36 for( j = 0; j < 10; j++){ 37 state[i][j] = 1; 38 } 39 } 40 41 scanf("%d", &a ); 42 execute(state, a); 43 for(i = 0; i < 10; i++ ){ 44 for( j = 0; j < 10; j++){ 45 sum = sum + state[i][j]; 46 } 47 } 48 printf("%d",sum); 49}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

1.OS、開発ツールは何を使っていますか?
2.デバッガの使い方は練習していませんか?
⇒エディタ、コンパイラ、デバッガを使いこなせる事が
最低限の、プログラミングの基本です。
それらが、一体になったのが統合開発環境(IDE)です。
今では、マイコン用でも統合開発環境が、あたりまえで普通だったりします。
3.デバッガが使えない場合は、デバッグコードを仕込み、
各種必要な情報を、ダンプや、表示出来るように工夫します。
昔々の何も無い時代ではないのですから、御自分でも工夫をしましょう。

投稿2015/06/20 12:30

編集2015/06/20 12:34
daive

総合スコア2028

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

思うように動く前にコンパイルできませんが・・・
void order(int state[][], int n,int c, int s, int e)と
void execute(int state[][], int n, int c, int s, int e)でエラーになりませんでしたか?
コンパイルエラーの状態を質問するとき以外は、ちゃんとしたソースを提示しましょう。

投稿2015/06/20 12:49

編集2015/06/20 12:56
cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cateye

2015/06/20 13:06

エラー内容 ~/test gcc tst91.c tst91.c:3:16: error: array type has incomplete element type void order(int state[][], int n, int c, int s, int e) ^ tst91.c:19:18: error: array type has incomplete element type void execute(int state[][], int a) ^ tst91.c: In function 'execute': tst91.c:26:9: error: type of formal parameter 1 is incomplete order(state, n, c, s, e); ^ tst91.c: At top level: tst91.c:30:1: warning: return type defaults to 'int' [-Wreturn-type] main() ^ tst91.c: In function 'main': tst91.c:44:10: error: type of formal parameter 1 is incomplete execute(state, a); ^ tst91.c:51:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ ~/test
guest

0

ベストアンサー

まずは、2次元派配列を関数にどう渡すか? を解決することが必要とおもいます。

参考:

質問にあるケースをベースに、配列の内容を表示する関数をつくるとしたら、1つの実装例としてはこんな感じになります。

lang

1#include <stdio.h> 2 3// 配列にサイズを定義する。 4#define MATRIX_SIZE (4) 5 6void show_data(int state[MATRIX_SIZE][MATRIX_SIZE]) { 7 int i, j; 8 printf("------\n"); 9 for (i = 0; i < MATRIX_SIZE; i++ ) { 10 for (j = 0; j < MATRIX_SIZE; j++) { 11 printf("%d ", state[i][j]); 12 } 13 printf("\n"); 14 } 15 printf("------\n"); 16} 17 18int main() { 19 int state[MATRIX_SIZE][MATRIX_SIZE]; 20 int i; 21 int j; 22 for (i = 0; i < MATRIX_SIZE; i++ ) { 23 for ( j = 0; j < MATRIX_SIZE; j++) { 24 state[i][j] = 1; 25 } 26 } 27 28 show_data(state); 29 return(0); 30}

実行例:

$ gcc m.c $ ./a.out ------ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ------

このコードをベースにして、 0 の要素を設定する関数、 合計を計算する関数を追加していくとよいと思います。

投稿2015/06/20 23:58

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

scanfを使っているので、意図しない入力になっている可能性があります。
scanfの直後で、入力値をprintfしてみてください。

アドバイスとしては、
1.scanfは戻り値をチェックすることが必須(sscanf等も同様)
2.scanfでなく、fgetssscanfに書き換えた方が良い

投稿2015/06/20 12:48

編集2015/06/20 12:51
otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

試した数字を教えてください、プログラムは間違えないですね・・・。
ただ、配列オーバーした時の挙動は不定なので、制御を入れる方が良いです。

投稿2015/06/20 12:33

MasaakiIrie

総合スコア1021

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/06/20 12:51

入力1、1、3、2、6のとき95 2、1、3、2、6、1、3、4、7のとき94  2、1、3、2、6、2、5、0、4のとき91  4、1,3,2,6、2,6,3,8、1,8,2,6、2,2,3,8もとき82がでればよいのですが結果は違います
MasaakiIrie

2015/06/20 13:17

4、1,3,2,6、2,6,3,8、1,8,2,6、2,2,3,8のとき78てでます?
退会済みユーザー

退会済みユーザー

2015/06/20 14:14

動作を停止してしまいます・・・
MasaakiIrie

2015/06/21 12:55

見る限りでは、エラー終了するような処理には見えませんけど・・・ 上記のものは、動作したものを張り付けていますか? 記述してるものは多分コンパイルが通らないとおもいますけど・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問