二、程序分析
1.main()
{ char str[]="1234567";
int i;
for(j=0;i<7;i十=3)
printf("%s\n",str+i);
。
【解析】分析份循環(huán)語句可知,控制變量 i的值只能依次等于0、3、6。再分析輸出語句中的輸出格式,這是字符串格式,要求輸出表達式是存放字符串的首地址。而輸出表達式是“str+i”。我們針對i不同值來-一分析:i=0,str+0就是str,其中存放的字符串是“1234567”,所以第1行上的輸出就是:1234567。當 i=3時,str+3,代表了數(shù)組元素str[3]的地址,從這兒開始的字符率串是“4567”,所以第2行輸出的是:4567。同樣道理,i=6時, str+6是元素str[6]的地址,從該地址存放的字符率是"7",所以第3行輸出的是:7。
【參考答案】 1234567
4567
7
2.struct a{ char name[10];
int age;
。齛a[3]={{"abc",20},{"def",21},{"ghi",22}};
main()
{ struct a *paa=aa;
printf("%c%c%c",(*(paa+1)).name[0]
(*paa++).name[1]
(*(paa+1)).name[2]);
。
【解析】本程序并不復雜,關鍵在于如何使用指向結構型數(shù)組的指針變量來引用該數(shù)組元素,以及如何引用結構型成員是數(shù)組的數(shù)組元素。
首先看結構型a及對應數(shù)組aa的定義和賦予的初值。
結構型a共有兩個成員,一個是字符型數(shù)組name,另一個是整型age。
結構型數(shù)組aa有3個元素,所賦予的初值如下:
aa[0].name="abc" aa[0].age=20
aa[1].name="def" aa[1].age=21
aa[2].name="ghi" aa[2].age=22
主函數(shù)中的第1個語句是定義結構型指針變量paa,并且使它指向結構型數(shù)組aa的首地址。注意,此后的*paa就是aa[0],*(paa+i)就是aa[i]。
現(xiàn)在可以分析輸出語句了。輸出格式是3個字符格式,按照printf()函數(shù)的規(guī)定,表達式表中表達式計算順序是自右向左進行的,下面依次討論這3個字符格式對應的輸出表達式。
第3個輸出表達式是“(*(paa十1)).name[2]",其中的“*(paa+1)”代表“aa[1]”,所以該表達式就是“aa[1].name[2]”,對應的字符是'f'。
第 2個輸出表達式是"(*paa++).name[1]”,其中“*ppa++”的“*”和“++”是同級運算符,結合性是自右向左的,所以“++”先計算,由于是后綴,所以要先計算“*paa”,它代表“aa[0]”,所以該表達式就是“aa[0].name[1]”,對應的字符是'b'。注意,最后要對paa進行“++”運算,使其指向aa[1]。
第 1個輸出表達式是“(*(paa+1)).name[0]”,注意現(xiàn)在的paa以及指向aa[1]了,所以其中的“*(paa+1)”代表“aa[2]”,所以該表達式就是“aa[2].name[0]”,對應的字符是'g'。
現(xiàn)在可以得出結論:程序的輸出是 3個字符:gbf
【參考答案】gbf
3.main()
{ int x1,x2,x3,x4;
x1=x2=x3=x4=1;
switch(x1)
{ case 1:switch(x2)
{ case 0:x3++;break;
case 1:x4--;
。
case 2:x3++,x4--;
。
printf("%d%d",x3,x4);
。
【解析】本題的關鍵是嵌套的多分支語句switch。注意在執(zhí)行switch語句前,變量x1、x2、x3、x4已經(jīng)賦值,他們的值均為1。執(zhí)行外層switch語句時,用于控制分支選擇的變量x1的值為1,所以要執(zhí)行的是“case 1”的分支。該分支又是一個switch語句,用于控制分支選擇的變量x2的值為1,所以需要執(zhí)行的是“case 1”的分支。該分支執(zhí)行的語句是“x4--”,使得x4的值變?yōu)?。接著退出該分支,即退出內(nèi)層的switch語句。由于外層的switch語句的“case 1”分支中沒有“break”語句,所以將繼續(xù)執(zhí)行其后的“case 2”分支,即執(zhí)行“x3++,x4--;”,結果x3等于2, x4等于-1。再退出外層switch語句,執(zhí)行輸出語句,此時,變量x3的值為2;變量x4的值為-1。所以輸出結果是2-1。
【參考答案】2-1。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |