以下のプログラムを実行したとき、表示される値を余白に記述せよ。ただし、配列idataは1000番地から格納されているとする。また、表示結果*8**~*10**の箇所で、正しく計算された値のみ表示させるには、maxはいくらに設定すればよいか。という課題なんですが、実際にプログラムを作ってみてmaxの箇所を4にしてみたところ間違いと言われたので正しいmaxの値を教えて下さい。
#include<stdio.h>
int main(void)
{
int iv,idata[]={2,4,6,8,10,12},*ip,i,max;
iv=idata[0];
printf("*1*ivの値=%d\n",iv);
ip=&idata[0];
printf("*2*ipの値=%p\n",ip);
ip=&idata[1];
printf("*3*ipの値=%p\n",ip);
ip=&idata[2];
printf("*4*ipの値=%p\n",ip);
iv=*ip;
printf("*5*ivの値=%d\n",iv);
iv=*ip+3;
printf("*6*ivの値=%d\n",iv);
iv=*(ip+3);
printf("*7*ivの値=%d\n",iv);
max=4;
*ip=0;
for(i=0;i<max;i++){
printf("*8**(ip+%d)=%d\n",i,*(ip+i));
}
*(ip+1)=10;
for(i=0;i<max;i++){
printf("*9**(ip+%d)=%d\n",i,*(ip+i));
}
*(ip+3)=20;
for(i=0;i<max;i++){
printf("*10**(ip+%d)=%d\n",i,*(ip+i));
}
ip=&idata[0];
printf("*11*ipの値=%p\n",ip);
ip=ip+2;
printf("*12*ipの値=%p\n",ip);
iv=*ip+3;
printf("*13*ipの値=%d\n",iv);
iv=*(ip+3);
printf("*14*ivの値=%d\n",iv);
++ip;
printf("*15*ipの値=%p\n",ip);
}
ヒントは”正しく計算された値のみ”という部分らしいのですが、自分にはまったく分りませんでした。
No.3
- 回答日時:
> 根拠はないんですが、解答欄が小さかったのであまり大きな数値を入れてしまうと書ききれないからです。
質問にある「実際にプログラムを作ってみてmaxの箇所を4にしてみた」は嘘だったのですか?
本当は、「やってみて正しいそうな結果になった数値」じゃ良くはないのですが、解答欄に「4」と書けたというのなら、少なくとも、一桁の数字は候補になるわけですよね。
せめて「実際にプログラムを作ってみて」試してみましょう。
その後、なぜそうなるのか考えるのでも良いかもしれません。
No.4
- 回答日時:
「正しく計算された値」というからには
・何らかの計算があって
・「正しく計算された値かどうか」が判定できる
ということか? そもそも「何を計算したのか」すら, 問題からは読み取れんのだが....
No.5
- 回答日時:
要するに、8~10で、idataのサイズをはみ出さずに、正しくidataを表示するポインタip+iの最大のiが
いくつなんだと言っているんじゃないかと。
8~10の前でipを最後に決めたのは、ip=&idata[2]
だから、ipは3番目の要素を指している。それから4つ増えれば、要素はないから、増やせるのは3まで。
for(i=0;i<max;i++)
といっているから、max=4でいいと思うが、誰に「間違いと言われた」のだろう。
あと、なにも計算していないから、思い当たる節はないな。
「表示される値を余白に記述せよ」というのが間違っていたりしないだろうね。
*1*ivの値=2
*2*ipの値=1000
*3*ipの値=1004
*4*ipの値=1008
*5*ivの値=6
*6*ivの値=9
*7*ivの値=12
*8**(ip+0)=0
*8**(ip+1)=8
*8**(ip+2)=10
No.6
- 回答日時:
やはり「正しく計算された値のみ表示させる」が理解不能です。
理屈から言えば、 このプログラムでmaxにどんな値(負が入ると、forループが1つも回らないのでだめですが)が入っても、 *(ip+i)自体は「正しく計算」されます。
意味不明な値だとしても、 ip+iのアドレスにあるデータを(int型と解釈して)正しく取り出したものです。
ip+iがアクセスできないアドレスになって、*(ip+i)で領域エラーになる、ということはあるかもしれませんが、計算自体が違うわけではないし。
通常の使い方で考えれば、idataの最後の要素まで、ということになります。
が、それだとmax=4で正しいはずです。
特定の環境に限れば
> int iv,idata[]={2,4,6,8,10,12},*ip,i,max;
と宣言すると、連続した領域に確保されるので、 変数maxのアドレスまでは確実にアクセスできる.....という考えも可能ですが、違う環境では成り立ちません。
> for(i=0;i<max;i++){
この i<maxが i<=max が正しい、とかは無いですよね?
「値は4で正しいけど、それの根拠がわかってないから『間違い』」とされてしまった、ということは無いですよね?
No.7ベストアンサー
- 回答日時:
No. 2です。
あらら~
> 8~10の前でipを最後に決めたのは、ip=&idata[2]
というのを完全に見落としていました。
このコードの通りなら、max = 4; で良さそうですけどね。
でも、せっかくですから、ここを変えると何が起こるか試すのは無駄ではないとは思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ネットワーク cutestat.comというサイトでipアドレスが確認できる件 1 2022/04/10 14:19
- ネットワーク 家のwifiルータでローカルネットワークが2つある?(難問) 2 2022/06/25 03:09
- UNIX・Linux raspberry piを使ったWebサーバー制作をしています、接続するネットワークを変更したときに 1 2023/01/09 15:57
- その他(プログラミング・Web制作) このプログラミング誰か教えてくれませんか 4 2022/04/29 15:56
- 固定IP 自分のパソコンのIPアドレスはググって出てくるサイトで調べられるのですが、それが変動IPなのか固定I 7 2023/04/04 21:05
- ネットワーク DHCPのリース期限が半分になった時、WindowsPCはリースの延長をリクエストするかと思います。 2 2023/01/17 09:12
- SoftBank(ソフトバンク) スマホ ipアドレス 4 2022/08/24 01:26
- Oracle ビットで表せる数値について 3 2022/09/12 16:37
- 固定IP IPアドレスに付いて詳しい方。 5 2023/07/11 09:56
- Wi-Fi・無線LAN 無線ルーターのIPアドレスは、iPhoneのように簡単に変更できる??? 2 2022/04/02 19:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
ExcelでGaussian fittingをした...
-
ハッシュテーブル(連想配列)が...
-
変数名の取得
-
rand関数の割合変更
-
power BI クエリエディター 〇...
-
変数に代入してある数値を表示...
-
PysimpleGUIでデータベースを作る
-
Request.QueryString への値の...
-
VB.NETでコンボボックスの1行目...
-
値を返さないコード パス
-
Excel VBA 複数選択したリスト...
-
RGB値をL*a*b*に変換したい
-
ユーザーフォームのテキストボ...
-
C言語では0は・・・
-
textboxとLabelを動的に変更する
-
RegisterClassExのエラー原因
-
ListBoxでオートフィルター表示
-
コンボボックスで選択した項目...
-
代入したのに値が更新されない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
テキストボックスのvalueとtext...
-
マクロ 特定のセル値のみクリ...
-
VB.NETでコンボボックスの1行目...
-
変数名の取得
-
値を返さないコード パス
-
Excel VBAのリストボックスの値...
-
VB初心者。小数点以下の表示で...
-
ハッシュテーブル(連想配列)が...
-
textboxとLabelを動的に変更する
-
PL/SQLでのTO_DATEの時間取得に...
-
VB.NETでアクティブなformを知...
-
Excel vba ユーザーフォームテ...
-
マクロで奇数と偶数の値を2か所...
-
DataTableに対するLINQについて
-
【C++/CLI.NET】コンボボックス...
-
[VBA]選択範囲の下から上に処理...
-
範囲が指定されている乱数について
-
[VB.net] DataGridViewのコンボ...
-
変数に代入してある数値を表示...
-
vbscriptを使いexcelを参照して...
おすすめ情報