• 締切済み

すいません 下の修正版です。

#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とする。 上記の問題文とこの結果は合致しているでしょうか?

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.7

★穴埋め問題ならば  ptr = &a[ 1 ]; ←(1)    while ( *ptr != 0 ){   *ptr = 0; ←(2)   ptr++; ←(3)  }  となりそうですね。 ・以上。

bitrate
質問者

お礼

ありがとうございます^^ できましたー!

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.6

似たような質問と回答がありますので参考URLに貼っておきます。 # どこかの新人研修でしょうか?

参考URL:
http://www2.realint.com/cgi-bin/tarticles.cgi?pointc+30241
bitrate
質問者

補足

学校の課題です^^

回答No.5

  #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; }  

bitrate
質問者

補足

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)
回答No.4

★同じ質問を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』をどうぞ。 ・以上。

参考URL:
http://oshiete.goo.ne.jp/ask/howto/quest_close.html
bitrate
質問者

お礼

サイトの使い方まで教えていただきありがとうございます。 以後気をつけます>< 無事実行することができました。皆さんありがとうございました^^

bitrate
質問者

補足

#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)
回答No.3

>問題文がこんな感じなのでダメなんです 穴埋め問題て。。。 小学生か。

bitrate
質問者

補足

穴埋めは逆にきついっす><;

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.2

>上記の問題文とこの結果は合致しているでしょうか? ソースコードは読んでないわけですが。 ご質問の内容は、 「ソースコードを書いて、コンパイルした結果が /* 処理結果 ... 以降です。」 「この処理結果で、問題文『一次元配列a[]の一番目の要素以外を0にするプログラムを作成せよ。...』を満足していますか?」 ということ? 普通、そういう問題については、題意を満たす関数を書いて、main 側でその関数の使用サンプルを与えるのがよろしいのでは?

bitrate
質問者

補足

#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)
回答No.1

合致しませんね。 とりあえず最初のwhile文が一回ループして抜けてるのはお分かりでしょうか?

bitrate
質問者

補足

それはわかるのですが・・・ 何がわからないのかもわからなくなってきました;;

関連するQ&A

専門家に質問してみよう