- 締切済み
すいません 下の修正版です。
#include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 0}; int i, *ptr; ptr = &a[0]; while (*ptr!= 0){ if(*ptr!=0) *ptr=0; } for (i = 0; i < 5; i++) printf("a[%d]=%2d &a[%d]=%p\n",i,a[i],i,ptr); // 配列aの値とアドレスを表示せよ putchar('\n'); ptr = &a[0]; for (i = 0; i < 5; i++){ printf("ptr値 =%d ptrアドレス =%p \n",*ptr,ptr); *ptr=a[0]; } // ポインタptr を使用して、修正後の配列aの値とアドレスを表示せよ printf("\n"); return (0); } /* 処理結果 a[0]= 0 &a[0]=0013FF3C a[1]= 2 &a[1]=0013FF3C a[2]= 3 &a[2]=0013FF3C a[3]= 4 &a[3]=0013FF3C a[4]= 0 &a[4]=0013FF3C ptr値 =0 ptrアドレス =0013FF3C ptr値 =0 ptrアドレス =0013FF3C ptr値 =0 ptrアドレス =0013FF3C ptr値 =0 ptrアドレス =0013FF3C ptr値 =0 ptrアドレス =0013FF3C 続行するには何かキーを押してください . . .*/ 一次元配列a[]の一番目の要素以外を0にするプログラムを作成せよ。 ただし、最後の要素は0とする。 上記の問題文とこの結果は合致しているでしょうか?
- みんなの回答 (7)
- 専門家の回答
みんなの回答
- Oh-Orange
- ベストアンサー率63% (854/1345)
★穴埋め問題ならば ptr = &a[ 1 ]; ←(1) while ( *ptr != 0 ){ *ptr = 0; ←(2) ptr++; ←(3) } となりそうですね。 ・以上。
- Wr5
- ベストアンサー率53% (2173/4061)
似たような質問と回答がありますので参考URLに貼っておきます。 # どこかの新人研修でしょうか?
補足
学校の課題です^^
- yaemon_2006
- ベストアンサー率22% (50/220)
#include <stdio.h> int main(void) { int array[5] = {1, 2, 3, 4,}; int i, *ip; ip = &array[1]; while(*ip != 0) *ip ++ = 0; ip = array; for(i = 0; i < 5; i ++) printf("array[%d] = %d Address = %p\n", i, ip[i], ip + i); return 0; }
補足
ip = &array[1]; while(*ip != 0) *ip ++ = 0; ip = array; for(i = 0; i < 5; i ++) printf("array[%d] = %d Address = %p\n", i, ip[i], ip + i);←ip+1の部分は&ip[1]かと思ってました。あり^^ return 0; }
- Oh-Orange
- ベストアンサー率63% (854/1345)
★同じ質問を3件ですか。 ・http://oshiete1.goo.ne.jp/qa3052713.html→『ポインタと配列 助けてください』 ・http://oshiete1.goo.ne.jp/qa3052924.html→『助けてください ポインタと配列』 ・http://oshiete1.goo.ne.jp/qa3052937.html→『すいません 下の修正版です。』 どれか1つに絞って質問した方が良いでしょう。 質問を追加したい場合は、1つ回答が付いてから『補足』に記述すればよい。 ・質問のソースを修正したようですが、 >上記の問題文とこの結果は合致しているでしょうか? 合致していません。間違っていますよ。 参考に: int main( void ) { int a[5] = { 1, 2, 3, 4, 0 }; int i, *ptr; ptr = &a[0]; ←正しいが ptr = a; で良い。 while ( *ptr != 0 ){ if ( *ptr != 0 ) ←間違っている *ptr = 0; ←正しい ptr++; ←これが必要だ! } for ( i = 0 ; i < 5 ; i++ ) printf( "a[%d]=%2d &a[%d]=%p\n", i, a[i], i, ptr ); ←a[i] は正しいが ptr が間違い // 配列aの値とアドレスを表示せよ putchar('\n'); ptr = &a[0]; ←ここも正しいが ptr = a; で良い。 for ( i = 0 ; i < 5 ; i++ ){ printf( "ptr値 =%d ptrアドレス =%p \n", *ptr, ptr ); ←正しい(注意) *ptr = a[0]; ←間違い(ポインタ ptr を使用するなら ptr++; ですね。代入しない) } // ポインタ ptr を使用して、修正後の配列aの値とアドレスを表示せよ printf( "\n" ); return 0; } 最後に: ・3件の質問の中あら他の2件は締め切りにしておきましょう。 下の『参考URL』をどうぞ。 ・以上。
お礼
サイトの使い方まで教えていただきありがとうございます。 以後気をつけます>< 無事実行することができました。皆さんありがとうございました^^
補足
#include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 0}; int i, *ptr; ptr = &a[0]; while (*ptr!= 0){ *ptr=0; ptr++; } for (i = 0; i < 5; i++) printf("a[%d]=%2d &a[%d]=%p\n",i,a[i],i,&a[i]); // 配列aの値とアドレスを表示せよ putchar('\n'); ptr = &a[0]; for (i = 0; i < 5; i++){ printf("ptr値 =%d ptrアドレス =%p \n",*ptr,ptr); ptr++; } // ポインタptr を使用して、修正後の配列aの値とアドレスを表示せよ printf("\n"); return (0); } /* 処理結果 a[0]= 0 &a[0]=0013FF3C a[1]= 0 &a[1]=0013FF40 a[2]= 0 &a[2]=0013FF44 a[3]= 0 &a[3]=0013FF48 a[4]= 0 &a[4]=0013FF4C ptr値 =0 ptrアドレス =0013FF3C ptr値 =0 ptrアドレス =0013FF40 ptr値 =0 ptrアドレス =0013FF44 ptr値 =0 ptrアドレス =0013FF48 ptr値 =0 ptrアドレス =0013FF4C 続行するには何かキーを押してください . . . */ こんな感じになりました。
- koko_u_
- ベストアンサー率18% (459/2509)
>問題文がこんな感じなのでダメなんです 穴埋め問題て。。。 小学生か。
補足
穴埋めは逆にきついっす><;
- koko_u_
- ベストアンサー率18% (459/2509)
>上記の問題文とこの結果は合致しているでしょうか? ソースコードは読んでないわけですが。 ご質問の内容は、 「ソースコードを書いて、コンパイルした結果が /* 処理結果 ... 以降です。」 「この処理結果で、問題文『一次元配列a[]の一番目の要素以外を0にするプログラムを作成せよ。...』を満足していますか?」 ということ? 普通、そういう問題については、題意を満たす関数を書いて、main 側でその関数の使用サンプルを与えるのがよろしいのでは?
補足
#include <stdio.h> int main(void) { int a[5] = {1, 2, 3, 4, 0}; int i, *ptr; ptr = ○○○○; while (*ptr != 0){ ○○○○; ○○○○; } for (i = 0; i < 5; i++) printf("a[%d]=%2d &a[%d]=%p\n", i, ○○○○,i, ○○○○); // 配列aの値とアドレスを表示せよ putchar('\n'); ptr = ○○○○; for (i = 0; i < 5; i++){ printf("ptr値 =%d ptrアドレス =%p \n",○○○○ , ○○○○); ○○○○; } // ポインタptr を使用して、修正後の配列aの値とアドレスを表示せよ printf("\n"); return (0); } 問題文がこんな感じなのでダメなんです><
- north_2nd
- ベストアンサー率22% (55/243)
合致しませんね。 とりあえず最初のwhile文が一回ループして抜けてるのはお分かりでしょうか?
補足
それはわかるのですが・・・ 何がわからないのかもわからなくなってきました;;
お礼
ありがとうございます^^ できましたー!