演習2

プログラミング I 第 13 回演習
今日は持ち帰り、次回の講義に持ってくること
以下のようにメモリにアドレスが振られているとします。
各変数型のサイズは char:1 バイト、int:4 バイト、double:8 バイトとします。
0x7fff0010
0x7fff002f
以下のプログラムをコンパイルして実行しました。
問1
#include <stdio.h>
このプログラムが何をしているかを簡潔に書け
void replace( char str[], int n){
char *cp=str;
問2
*(cp+n) -= 32;
この演算により値が変わったメモリの領域を塗りつぶせ
}
int main( void ){
問3
char str[15]=“programming”;
ここで配列 str が確保したメモリの領域を塗りつぶせ
printf(“str=%p\n”,str );
replace(str, 4);
return 0;
}
実行結果は以下のように得られたとします。
str=0x7fff0016
以下のプログラムをコンパイルして実行しました。
問4
#include <stdio.h>
ここで na+nb の結果が書き込まれる
void calc( int na, int nb, int *sum, int *dif ){
メモリの領域を塗りつぶせ
printf( &na=%p,&nb=%p\n , &na, &nb );
*sum = na + nb;
問5
*dif = ( na > nb ) ? na - nb : nb - na;
ここで na の値が記録されているメモリの領域を塗りつぶせ
}
問6
int main( void )
ここで変数 wa の値が記録されて
{
いるメモリの領域を塗りつぶせ
int na=1, nb=2, wa = 0, sa = 0;
printf( &na=%p,&nb=%p,&wa=%p,&sa=%p\n , &na, &nb, &wa, &sa );
calc( na, nb, &wa, &sa );
printf( 和は %d です。差は %d です。\n , wa, sa );
return 0;
}
実行結果は以下のように得られたとします。
&na=0x7fff0010,&nb=0x7fff0014,&wa=0x7fff0018,&sa=0x7fff001c
&na=0x7fff0022,&nb=0x7fff0026
和は 3 です。差は 1 です。
解答欄
問1
0x7fff0010
問2
問3
問4
問5
問6
0x7fff002f