【2.51】下面程序的輸出結(jié)果是____。
#include
main( )
{ int a=1,*p,**pp;
pp=&p;
p=&a;
a++;
printf ("%d,%d,%d\n", a,*p, **pp);
}
A) 2,1,1 B) 2,1,2 C) 2,2,2 D) 程序有錯(cuò)誤
【2.52】下面程序的輸出結(jié)果是____。
main()
{ char *alpha[7]={"ABCD","EFGH","IJKL","MNOP","QRST","UVWX","YZ"};
char **p;
int i;
p=alpha;
for(i=0;i<4;i++)
printf("%c",*(p[i]));
printf("\n");
}
A) AEIM B) BFJN C) ABCD D) DHLP
【2.53】下面程序的輸出結(jié)果是____。
#include
char *pp[2][3]={ "abc", "defgh", "ijkl", "mnopqr", "stuvw", "xyz"};
main ( )
{ printf("%c\n",***(pp+1)); /* ① */
printf("%c\n",**pp[0]); /* ② */
printf("%c\n",(*(*(pp+1)+1))[4]); /* ③ */
printf("%c\n",*(pp[1][2]+2)); /* ④ */
printf("%s\n",**(pp+1)); /* ⑤ */
}
、 A) a B) d C) i D) m
、 A) a B) d C) i D) m
、 A) h B) l C) q D) w
④ A) k B) o C) u D) z
⑤ A) ijkl B) mnopqr C) stuvw D) xyz
【2.54】下面程序的輸出結(jié)果是____。
#include "stdio.h"
struct str1
{ char c[5];
char *s;
};
main( )
{ struct str1 s1[2]={ {"ABCD""EFGH"},{"IJK","LMN"} };
struct str2
{ struct str1 sr;
int d;
}s2={"OPQ","RST",32767};
struct str1 *p[2];
p[0]=&s1[0];
p[1]=&s1[1];
printf("%s",++p[1]->s); /* ① */
printf("%c",s2.sr.c[2]); /* ② */
}
、 A) LMN B) MN C) N D) IJK
、 A) O B) P C) Q D) R
【2.55】以下程序的輸出結(jié)果是____。
struct st
{ int x,*y;
}*p;
int s[]={10,20,30,40};
struct st a[]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};
main()
{ p=a;
printf("%d\n",++(*(++p)->y));
}
A) 10 B) 11 C) 20 D) 21
【2.56】以下程序的輸出結(jié)果是____。
#include
main()
{ union EXAMPLE
{ struct
{ int x,y;
}in;
int a,b;
}e;
e.a=1;e.b=2;
e.in.x=e.a*e.b;
e.in.y=e.a+e.b;
printf("%d,%d\n",e.in.x,e.in.y);
}
A) 2,3 B) 4,4 C) 4,8 D) 8,8
【2.57】下面程序的輸出結(jié)果是____。
#include
main()
{ union
{ int i[2];
long k;
char c[4];
}r,*s=&r;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%c\n",s->c[0]);
}
A) 39 B) 9 C) 38 D) 8
【2.58】下面程序的輸出是 。
main ( )
{ printf("%d\n", EOF);
}
A) -1 B) 0 C) 1 D) 程序是錯(cuò)誤的
【閱讀程序題參考答案】
【2.1】參考答案:D
注釋:程序中除法運(yùn)算的兩個(gè)操作數(shù)均是整型,運(yùn)算結(jié)果也是整型。
【2.2】參考答案:B
注釋:C語言允許在程序塊(分程序)中說明變量。
【2.3】參考答案:C
注釋:變量i中的負(fù)號傳送給變量n后,因n是無符號數(shù),已不作為負(fù)號處理。
【2.4】參考答案:D
注釋:對變量x的――操作是后綴形式,變量x的減1操作要在執(zhí)行完 printf函數(shù)之后才進(jìn)行,所以變量x的值在輸出的時(shí)候仍然保持原值10。
【2.5】參考答案:B
注釋:C語言在執(zhí)行printf()時(shí),對函數(shù)中的表達(dá)式表列的處理順序是從后向前,即先處理n- -,再處理n++,最后處理n,而且每一個(gè)表達(dá)式作為一個(gè)處理單元,也就是說在不同的表達(dá)式中自增自減運(yùn)算是單獨(dú)考慮的。
【2.6】參考答案:A
注釋:變量x和變量y做按位與,結(jié)果為0x0200,右移4位為0x0020,再與0x005f做按位或,最后結(jié)果為0x007f。
【2.7】參考答案:A
注釋:逗號表達(dá)式的結(jié)果是用逗號分開的最后一個(gè)表達(dá)式的值,此題由于 c=='A'的值是0,所以逗號表達(dá)式的值為0。
【2.8】參考答案: B
【2.9】參考答案: A
【2.10】參考答案: C
注釋:在輸出格式描述"%m.ns"中,m是輸出總長度,n是實(shí)際字符的個(gè)數(shù),這里m沒有給出,則輸出總長度就是實(shí)際輸出字符的個(gè)數(shù)。
【2.11】參考答案: C
【2.12】參考答案:B
【2.13】參考答案:C
【2.14】參考答案:B
【2.15】參考答案:D
【2.16】參考答案:A
【2.17】參考答案: C
【2.18】參考答案:A
【2.19】參考答案: C
注釋:在switch語句中,case本身僅起到語句標(biāo)號的作用,不會改變語句的流程,執(zhí)行break語句才能退出當(dāng)前的switch語句。
【2.20】參考答案: D
注釋:siwtch語句的表達(dá)式中,變量c是后綴的增一運(yùn)算,第一次執(zhí)行do-while循環(huán)時(shí),執(zhí)行case 'A'后面的語句。
【2.21】參考答案: D
【2.22】參考答案: B
【2.23】參考答案: B
注釋:fabs()是浮點(diǎn)數(shù)絕對值函數(shù)。
【2.24】參考答案: A
【2.25】參考答案: C
注釋:C語言允許在程序塊(分程序)內(nèi)說明變量,如果在程序塊內(nèi)說明的變量和程序塊外的變量同名,在塊外說明的變量在塊內(nèi)是不可見的?蓪⒋祟}和【2.11】進(jìn)行比較,加深理解。
【2.26】參考答案: C
【2.27】參考答案: B
【2.28】參考答案: ① D ② A
【2.29】參考答案:D
【2.30】參考答案: B
注釋:輸出結(jié)果為字符串長度。
【2.31】參考答案: D
注釋:字符串拷貝函數(shù)strcpy()要求的兩個(gè)參數(shù)都是字符串首地址。本題中第二個(gè)參數(shù)是字符串常量,接受這個(gè)字符串的第一個(gè)參量不是直接給出字符數(shù)組名,而是進(jìn)行了地址運(yùn)算后的結(jié)果。由于str字符串的長度是13,除2取整后是6,第一個(gè)參數(shù)給出的地址是字符數(shù)組str的首地址加6,也就是原來字符串中第二個(gè)空格的位置,把"es she"從該處放入,字符串str變?yōu)?How does she"。
【2.32】參考答案: C
注釋:main函數(shù)調(diào)用func函數(shù)時(shí),第一個(gè)實(shí)參使用的是逗號表達(dá)式的值,也就是x+y的結(jié)果。由于對變量x、y、z進(jìn)行的是后綴運(yùn)算,所以函數(shù)func的參數(shù)值是13和8。
【2.33】參考答案: C
【2.34】參考答案: ① C ② A ③ C
【2.35】參考答案: C
【2.36】參考答案: B
注釋:函數(shù)fun進(jìn)行了遞歸調(diào)用,實(shí)際進(jìn)行的運(yùn)算是5×4×3×2×1×3×10。主函數(shù)內(nèi)說明的局部變量w屏蔽了外部變量w,所以在主函數(shù)中外部變量w是不可見的,在調(diào)用printf函數(shù)時(shí)表達(dá)式"fun(5)*w"中w的值是10。
【2.37】參考答案: D
注釋:main函數(shù)三次調(diào)用了函數(shù)funa,在funa函數(shù)中的靜態(tài)變量c僅在第一次調(diào)用時(shí)進(jìn)行了初始化,再次調(diào)用時(shí)不再對靜態(tài)變量賦初值。
【2.38】參考答案: B
注釋:main函數(shù)和num函數(shù)中都說明了變量a和b,由于它們是內(nèi)部變量,所以它們分別在說明它們的函數(shù)內(nèi)有效。外部變量x和y在函數(shù)num之后被說明,而在num函數(shù)中又要引用它們,所以在num函數(shù)中用關(guān)鍵字"extern"說明變量x和y是一個(gè)外部變量,也就是通知計(jì)算機(jī)這兩個(gè)變量在fun函數(shù)以外被說明,此處不是定義兩個(gè)int型變量。
【2.39】參考答案: D
注釋:函數(shù)f中的變量c是靜態(tài)變量,僅在第一次調(diào)用函數(shù)f時(shí)它被初始化為3,第二次調(diào)用函數(shù)f時(shí)c的值是4,第三次調(diào)用函數(shù)f時(shí)c的值是5。
【2.40】參考答案: D
【2.41】參考答案: D
注釋:程序中有三個(gè)"x"分別在三個(gè)不同的函數(shù)中,這三個(gè)"x"都是自動變量,所以三個(gè)"x"分別局部于三不同的函數(shù),在三個(gè)函數(shù)中對"x"的操作互不影響。
【2.42】參考答案: A
【2.43】參考答案: A
注釋:*(++p)和*++p都是指針變量值前加1,第一次指向a[1],第二次指向a[2];a+3是a[3]的地址。
【2.44】參考答案: C
注釋:②句沒有語法錯(cuò)誤,但是a+6指向數(shù)組之外,因?yàn)閍是a[0]的地址,a+1是a[1]的地址,a+2是a[2]的地址,顯然數(shù)組a沒有a[6]分量。③句錯(cuò)誤,因?yàn)閍[1]是地址常量,它是a[1][0]的地址,對于地址常量是不可以進(jìn)行賦值運(yùn)算的。
【2.45】參考答案: ① D ② A
注釋:如果FMT定義為"%x\n",則輸出的16進(jìn)制數(shù)據(jù)用小寫字母表示。
【2.46】參考答案: A
注釋:語句"p=&a[0]"表示將數(shù)組a中元素a[0]的地址賦給指針變量p,則p就是指向數(shù)組首元素a[0]的指針變量,"&a[0]"是取數(shù)組首元素的地址。對于指向數(shù)組首址的指針,p+i(或a+i)是數(shù)組元素a[i]的地址,*(p+i)(或*(a+i))就是a[i]的值。
【2.47】參考答案: B
【2.48】參考答案: D
【2.49】參考答案: D
【2.50】參考答案: A
注釋:變量g是指向函數(shù)的指針,(*g)(a,b)是調(diào)用指針g所指向的函數(shù)。
【2.51】參考答案: C
注釋:p是指針,pp是指向指針的指針。
【2.52】參考答案: A
注釋:對于指向數(shù)組的指針變量可以做下標(biāo)運(yùn)算,p[i]和alpha[i]都是指向字符串的首地址,*p[i]取出字符串的第一個(gè)字符。
【2.53】參考答案: ① D ② A ③ D ④ D ⑤ B
注釋:pp是一個(gè)二維指針數(shù)組,pp+1指向數(shù)組的第二維,*(pp+1)是第二維的起始地址,**(pp+1)是第二維第一個(gè)元素的地址,***(pp+1)是第二維第一個(gè)元素的內(nèi)容,所以,①的參考答案應(yīng)選D。*(pp+1)+1是第二維第二個(gè)元素的地址,*(*(pp+1)+1)是第二維第二個(gè)元素,(*(*(pp+1)+1))[4]則是第二維第二個(gè)元素所指字符串下標(biāo)為4的元素,即是字符w,故③應(yīng)當(dāng)選D。
【2.54】參考答案: ① B ② C
【2.55】參考答案:D
【2.56】參考答案:C
注釋:聯(lián)合體成員的取值是最后一次給成員賦的值。
【2.57】參考答案: B
注釋:整型數(shù)組i和字符數(shù)組c共用存儲空間,給i賦值也等于給c賦值,所以s->c[0]=0x39,所以輸出9。
【2.58】參考答案:A
注釋:基本概念。EOF是由C語言在頭文件stdio.h中定義的,用戶可以直接使用。