![](https://img.examw.com/index/logo.png)
【2.51】下面程序的輸出結果是____。
#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) 程序有錯誤
【2.52】下面程序的輸出結果是____。
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】下面程序的輸出結果是____。
#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】下面程序的輸出結果是____。
#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】以下程序的輸出結果是____。
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】以下程序的輸出結果是____。
#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】下面程序的輸出結果是____。
#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) 程序是錯誤的
【閱讀程序題參考答案】
【2.1】參考答案:D
注釋:程序中除法運算的兩個操作數(shù)均是整型,運算結果也是整型。
【2.2】參考答案:B
注釋:C語言允許在程序塊(分程序)中說明變量。
【2.3】參考答案:C
注釋:變量i中的負號傳送給變量n后,因n是無符號數(shù),已不作為負號處理。
【2.4】參考答案:D
注釋:對變量x的――操作是后綴形式,變量x的減1操作要在執(zhí)行完 printf函數(shù)之后才進行,所以變量x的值在輸出的時候仍然保持原值10。
【2.5】參考答案:B
注釋:C語言在執(zhí)行printf()時,對函數(shù)中的表達式表列的處理順序是從后向前,即先處理n- -,再處理n++,最后處理n,而且每一個表達式作為一個處理單元,也就是說在不同的表達式中自增自減運算是單獨考慮的。
【2.6】參考答案:A
注釋:變量x和變量y做按位與,結果為0x0200,右移4位為0x0020,再與0x005f做按位或,最后結果為0x007f。
【2.7】參考答案:A
注釋:逗號表達式的結果是用逗號分開的最后一個表達式的值,此題由于 c=='A'的值是0,所以逗號表達式的值為0。
【2.8】參考答案: B
【2.9】參考答案: A
【2.10】參考答案: C
注釋:在輸出格式描述"%m.ns"中,m是輸出總長度,n是實際字符的個數(shù),這里m沒有給出,則輸出總長度就是實際輸出字符的個數(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本身僅起到語句標號的作用,不會改變語句的流程,執(zhí)行break語句才能退出當前的switch語句。
【2.20】參考答案: D
注釋:siwtch語句的表達式中,變量c是后綴的增一運算,第一次執(zhí)行do-while循環(huán)時,執(zhí)行case 'A'后面的語句。
【2.21】參考答案: D
【2.22】參考答案: B
【2.23】參考答案: B
注釋:fabs()是浮點數(shù)絕對值函數(shù)。
【2.24】參考答案: A
【2.25】參考答案: C
注釋:C語言允許在程序塊(分程序)內說明變量,如果在程序塊內說明的變量和程序塊外的變量同名,在塊外說明的變量在塊內是不可見的。可將此題和【2.11】進行比較,加深理解。
【2.26】參考答案: C
【2.27】參考答案: B
【2.28】參考答案: ① D ② A
【2.29】參考答案:D
【2.30】參考答案: B
注釋:輸出結果為字符串長度。
【2.31】參考答案: D
注釋:字符串拷貝函數(shù)strcpy()要求的兩個參數(shù)都是字符串首地址。本題中第二個參數(shù)是字符串常量,接受這個字符串的第一個參量不是直接給出字符數(shù)組名,而是進行了地址運算后的結果。由于str字符串的長度是13,除2取整后是6,第一個參數(shù)給出的地址是字符數(shù)組str的首地址加6,也就是原來字符串中第二個空格的位置,把"es she"從該處放入,字符串str變?yōu)?How does she"。
【2.32】參考答案: C
注釋:main函數(shù)調用func函數(shù)時,第一個實參使用的是逗號表達式的值,也就是x+y的結果。由于對變量x、y、z進行的是后綴運算,所以函數(shù)func的參數(shù)值是13和8。
【2.33】參考答案: C
【2.34】參考答案: ① C ② A ③ C
【2.35】參考答案: C
【2.36】參考答案: B
注釋:函數(shù)fun進行了遞歸調用,實際進行的運算是5×4×3×2×1×3×10。主函數(shù)內說明的局部變量w屏蔽了外部變量w,所以在主函數(shù)中外部變量w是不可見的,在調用printf函數(shù)時表達式"fun(5)*w"中w的值是10。
【2.37】參考答案: D
注釋:main函數(shù)三次調用了函數(shù)funa,在funa函數(shù)中的靜態(tài)變量c僅在第一次調用時進行了初始化,再次調用時不再對靜態(tài)變量賦初值。
【2.38】參考答案: B
注釋:main函數(shù)和num函數(shù)中都說明了變量a和b,由于它們是內部變量,所以它們分別在說明它們的函數(shù)內有效。外部變量x和y在函數(shù)num之后被說明,而在num函數(shù)中又要引用它們,所以在num函數(shù)中用關鍵字"extern"說明變量x和y是一個外部變量,也就是通知計算機這兩個變量在fun函數(shù)以外被說明,此處不是定義兩個int型變量。
【2.39】參考答案: D
注釋:函數(shù)f中的變量c是靜態(tài)變量,僅在第一次調用函數(shù)f時它被初始化為3,第二次調用函數(shù)f時c的值是4,第三次調用函數(shù)f時c的值是5。
【2.40】參考答案: D
【2.41】參考答案: D
注釋:程序中有三個"x"分別在三個不同的函數(shù)中,這三個"x"都是自動變量,所以三個"x"分別局部于三不同的函數(shù),在三個函數(shù)中對"x"的操作互不影響。
【2.42】參考答案: A
【2.43】參考答案: A
注釋:*(++p)和*++p都是指針變量值前加1,第一次指向a[1],第二次指向a[2];a+3是a[3]的地址。
【2.44】參考答案: C
注釋:②句沒有語法錯誤,但是a+6指向數(shù)組之外,因為a是a[0]的地址,a+1是a[1]的地址,a+2是a[2]的地址,顯然數(shù)組a沒有a[6]分量。③句錯誤,因為a[1]是地址常量,它是a[1][0]的地址,對于地址常量是不可以進行賦值運算的。
【2.45】參考答案: ① D ② A
注釋:如果FMT定義為"%x\n",則輸出的16進制數(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)是調用指針g所指向的函數(shù)。
【2.51】參考答案: C
注釋:p是指針,pp是指向指針的指針。
【2.52】參考答案: A
注釋:對于指向數(shù)組的指針變量可以做下標運算,p[i]和alpha[i]都是指向字符串的首地址,*p[i]取出字符串的第一個字符。
【2.53】參考答案: ① D ② A ③ D ④ D ⑤ B
注釋:pp是一個二維指針數(shù)組,pp+1指向數(shù)組的第二維,*(pp+1)是第二維的起始地址,**(pp+1)是第二維第一個元素的地址,***(pp+1)是第二維第一個元素的內容,所以,①的參考答案應選D。*(pp+1)+1是第二維第二個元素的地址,*(*(pp+1)+1)是第二維第二個元素,(*(*(pp+1)+1))[4]則是第二維第二個元素所指字符串下標為4的元素,即是字符w,故③應當選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中定義的,用戶可以直接使用。