a[10]をint型の整数とし、i,jをint型の変数とする。配列aに10個の整数を入力し、i,jに0~9までの整数をそれぞれ入力する。そして、aの値とa[j]の値を交換するプログラムを作成。
#include<stdio.h>
#define N 10
int main(void)
int a[n];
int i,j,temp;
printf("aに10個の整数を入力してください");
for(i=0;i<N;i++);
{
scanf("%d",&a);
}
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf(" 0から9までの値を入力してください");
scanf("%d,&a[j]");
ここまでは、考えてわかったのですが、続きのプログラムがわかりません。
どなたか、指導よろしくお願いします。
無題
Re:無題
うぅ~ん、ちょっと記述ミスというよりまだ理解が完ぺきではないように感じます。。
1、mainも関数ですから始まりと終わりに{}をつけましょう
2、#define Nと定義していますが、nとNは区別されます。なのでint a[n]のnは未定義になります。
3、
これだとi=0,1,2....となってもa[9]に毎回整数を代入していることになります。
先ほど配列に代入したばかりなのに、また代入をしてしまうと題意とは別のものになってしまいます。
あ、あとscanf("%d",&a[j])の間違いですか?
にしてもちょっと題意からはそれてしまっていますが。。
aに整数を代入するまでは大丈夫です。
次にscanfでi,jに整数を代入します。
(今はfor文でループするために使うiと配列の添字になるi,jは別のものを使ったほうがいいかと思います。)
最後に添字がi,jの配列の中身を交換です
その際、(どちらでもいいのですが)a[ i ]の整数をtempに渡して(代入)おき、
a[ i ]にa[ j ]の整数を代入します。
最後にa[ j ]に先ほどのtempを渡します。
この日本文をそのまま書けばうまくいきます
(理解しがたい日本語だったらすみません。。)
もう少し文の構造自体を見なおされたほうがいいかもしれません。
http://www9.plala.or.jp/sgwr-t/
↑このあたりを参考にしてください
1、mainも関数ですから始まりと終わりに{}をつけましょう
2、#define Nと定義していますが、nとNは区別されます。なのでint a[n]のnは未定義になります。
3、
for(i=0;i<N;i++) { for(j=0;j<N;j++) printf(" 0から9までの値を入力してください"); scanf("%d,&a[ j ]"); }←欠落このままだと二度目のfor文は全く意味がありません。
これだとi=0,1,2....となってもa[9]に毎回整数を代入していることになります。
先ほど配列に代入したばかりなのに、また代入をしてしまうと題意とは別のものになってしまいます。
あ、あとscanf("%d",&a[j])の間違いですか?
にしてもちょっと題意からはそれてしまっていますが。。
aに整数を代入するまでは大丈夫です。
次にscanfでi,jに整数を代入します。
(今はfor文でループするために使うiと配列の添字になるi,jは別のものを使ったほうがいいかと思います。)
最後に添字がi,jの配列の中身を交換です
その際、(どちらでもいいのですが)a[ i ]の整数をtempに渡して(代入)おき、
a[ i ]にa[ j ]の整数を代入します。
最後にa[ j ]に先ほどのtempを渡します。
この日本文をそのまま書けばうまくいきます
(理解しがたい日本語だったらすみません。。)
もう少し文の構造自体を見なおされたほうがいいかもしれません。
http://www9.plala.or.jp/sgwr-t/
↑このあたりを参考にしてください
Re:無題
詳しい解説ありがとうございます。
書き直してみましたので、チェックしていただけますでしょうか?
#include<stdio.h>
#define N 10
int main(void)
{
int a[N];
int i,j,temp;
printf("データを10個入力して下さい>>");
for(i=0;i<N;i++)
{
scanf("%d",&a);
}
printf("i,jに0~9までの値を入力して下さい");
scanf("%d",&a);
scanf("%d",&a[j]);
temp=a[j];
a[j]=a;
a=temp;
for(i=0;i<N;i++);
{
printf("%d\n",a);
}
return 0;
書き直してみましたので、チェックしていただけますでしょうか?
#include<stdio.h>
#define N 10
int main(void)
{
int a[N];
int i,j,temp;
printf("データを10個入力して下さい>>");
for(i=0;i<N;i++)
{
scanf("%d",&a);
}
printf("i,jに0~9までの値を入力して下さい");
scanf("%d",&a);
scanf("%d",&a[j]);
temp=a[j];
a[j]=a;
a=temp;
for(i=0;i<N;i++);
{
printf("%d\n",a);
}
return 0;
Re:無題
自宅にコンパイラは入れてありますか?
もし学校の課題だとしたら、学校の授業の中だけでプログラムを覚えようとしていませんか?
プログラムの勉強はまず自分のPCにコンパイラを入れることから始まります。
紙に書いてプログラムを覚えるのは無理です。
コンパイラをいれずにただ授業の資料を見ながら紙にプログラムを書いている行為は
答えのない数学の問題集をひたすら解いているのと同じです。
完全に間違った答えを延々と書いていても気づかないと思います。
特にプログラムは基本的に括弧から始まって括弧に終わります。
わざとそれでコンパイルが通るようにひねくれてでも書かない限り
return 0;でプログラムが終わることはありません。
また、投稿する際はタグを使ってください。詳しくは規約をご覧ください。
VisualStudioなり、Borlandなり自分の好きなコンパイラを導入し、
まずは自分でコンパイルしてみてください。
エラーが出たらそのエラーの表示されている部分を確認し、どこが悪いのか自分でも考えてみましょう。
もし学校の課題だとしたら、学校の授業の中だけでプログラムを覚えようとしていませんか?
プログラムの勉強はまず自分のPCにコンパイラを入れることから始まります。
紙に書いてプログラムを覚えるのは無理です。
コンパイラをいれずにただ授業の資料を見ながら紙にプログラムを書いている行為は
答えのない数学の問題集をひたすら解いているのと同じです。
完全に間違った答えを延々と書いていても気づかないと思います。
特にプログラムは基本的に括弧から始まって括弧に終わります。
わざとそれでコンパイルが通るようにひねくれてでも書かない限り
return 0;でプログラムが終わることはありません。
また、投稿する際はタグを使ってください。詳しくは規約をご覧ください。
VisualStudioなり、Borlandなり自分の好きなコンパイラを導入し、
まずは自分でコンパイルしてみてください。
エラーが出たらそのエラーの表示されている部分を確認し、どこが悪いのか自分でも考えてみましょう。