(1)以下程序的輸出結(jié)果是________。
#include
#define SQR(x)x*x
main()
{ int a,k=3;
a=++SQR(k+1);
printf("%d\n",a);
}
A)8
B)9
C)17
D)20
答案:B
評析:本題宏替換中遇到形參x以實(shí)參k+l代替,其它字符不變。sQR(k+1)展開后應(yīng)為字符串k+l*k+l。
(2)下面是對宏定義的描述,不正確的是_______。
A)宏不存在類型問題,宏名無類型,它的參數(shù)也無類型
B)宏替換不占用運(yùn)行時(shí)間
C)宏替換時(shí)先求出實(shí)參表達(dá)式的值,然后代入形參運(yùn)算求值
D)宏替換只不過是字符替代而已
答案:C
評析:宏替換實(shí)質(zhì)上就是字符替代,它不可能進(jìn)行計(jì)算,故c錯(cuò)誤。帶參數(shù)的宏與函數(shù)相比,宏在程序編譯之前已經(jīng)將代碼替換到程序內(nèi),執(zhí)行時(shí)不會產(chǎn)生類似于函數(shù)調(diào)用的問題,可以說不占用運(yùn)行時(shí)間。
(3)以下程序(程序左邊的數(shù)字為附加的行號)________。
1#include
2#include
3main()
4{char s[]="string";
5 puts(s);
6 strcpy(s,"hello");
7 printf("%3s\n",s);}
A)沒有錯(cuò)
B)第1行有錯(cuò)
C)第6行有錯(cuò)
D)第7行有錯(cuò)
答案:B
評析:字符串復(fù)制函數(shù)strcpy包含在頭文件string.h中,因此,程序中的第l行文件包含命令是錯(cuò)誤的。
(4)若有如下說明,則__________的敘述是正確的。
struct st
{ int a;
int b[2l;
}a;
A)結(jié)構(gòu)體變量a與結(jié)構(gòu)體成員a同名,定義是非法的
B)程序只在執(zhí)行到該定義時(shí)才為結(jié)構(gòu)體st分配存儲單元
C)程序運(yùn)行時(shí)為結(jié)構(gòu)體st分配6個(gè)字節(jié)存儲單元
D)類型名struct st可以通過extern關(guān)鍵字提前引用(即引用在前,說明在后)
答案:D
評析:結(jié)構(gòu)體變量a與結(jié)構(gòu)體成員a同名是合法的定義,引用成員a的方法是a.a(chǎn),變量a處于不同的"層次"上,系統(tǒng)完全能夠分清。st是一個(gè)結(jié)構(gòu)體名,不會為結(jié)構(gòu)體名分配存儲空間,應(yīng)該是在運(yùn)行時(shí)為結(jié)構(gòu)體變量a分配6個(gè)字節(jié)的存儲單元,故選項(xiàng)B和選項(xiàng)C錯(cuò)誤。
(5)若有以下結(jié)構(gòu)體定義,則________是正確的引用或定義。
struct example
{ int x;
int y;
}v1;
A)example.x=10B)example v2.x=10
C)struct v2;v2.x=lO
D)struct example v2={10};
答案:D
評析:在定義結(jié)構(gòu)體變量時(shí),不能只用結(jié)構(gòu)體名example或關(guān)鍵字strum進(jìn)行定義,必需要用結(jié)構(gòu)體類型名struct example定義,在引用結(jié)構(gòu)體成員變量時(shí),需要用結(jié)構(gòu)體變量名進(jìn)行引用,所以選D。
(6)下列程序的執(zhí)行結(jié)果是_________。
#include
union un
{ int i;
char c[21;
};
void main()
{ union un x;
x.c[0]=10:
x.c[1]=1:
printf("\n%d",x.i);
}
A)266
B)ll
C)265
D)138
答案:A
評析:由于本題定義的是共用體,所以成員表列中的整型變量x與字符數(shù)組c共占用同一個(gè)存儲單元,且此存儲單元為2個(gè)字節(jié),通常c[O]位于低字節(jié),c[1]位于高字節(jié),所以x.i的值為266。
(7)已知形成鏈表的存儲結(jié)構(gòu)如下圖所示,則下述類型描述中的空白處應(yīng)填_______。
struct link
Data next
{ char data;
}node;
A)struct link next
B)link*next
C)struct next link
D)struct link*next
答案:D
評析:在單向鏈表中,由于每個(gè)結(jié)點(diǎn)需要存儲下一個(gè)結(jié)點(diǎn)的地址,且下一個(gè)結(jié)點(diǎn)的數(shù)據(jù)類型與前一個(gè)結(jié)點(diǎn)的數(shù)據(jù)類型完全相同,故應(yīng)為struct link*next。
(8)已知小寫字母a的ASCII碼為97,大寫字母A的ASCII.碼為65,以下程序的結(jié)果是__________。
main()
{ unsigned int a=32,b=66;
printf("%c\n",at
B);
}
A)66
B)98
C)b
D)B
答案:C
評析:位運(yùn)算符"l"的作用是按位或,即兩個(gè)二進(jìn)制數(shù)的相應(yīng)位中只要有一個(gè)為1,該位的結(jié)果值為l。最后以字符型輸出, 98對應(yīng)的字符"b"。
(9)C語言庫函數(shù)龜ets(str,n,fp)的功能是_________。
A)從fp指向的文件中讀取長度n的字符串存入str指向的內(nèi)存
B)從fp指向的文件中讀取長度不超過n-l的字符串存入str指向的內(nèi)存
C)從fp指向的文件中讀取n個(gè)字符串存/Xstr指向的內(nèi)存
D)從str讀取至多n個(gè)字符到文件fp
答案:B
評析:fgets函數(shù)的作用是從指定的文件讀入一個(gè)字符串。fgets(str,n,fp);中的n為要求得到的字符的個(gè)數(shù),但只從fb指向的文件輸入n-1個(gè)字符,然后在最后加一個(gè)'\O'字符,因此得到的字符串共有n個(gè)字符。
(10)下述程序向文件輸出的結(jié)果是__________。
#include
void main()
{ FILE*fp=fopen("TEST","wb");
fprintf(fp,"%d%5.0f%c%d",58,76273.0,'-',2278);
fclose(fp);
}
A)58 76273-2278B)5876273。.000000-2278
C)5876273-2278
D)因文件為二進(jìn)制文件而不可讀
答案:C
評析:fprintf函數(shù)工作時(shí),多個(gè)數(shù)據(jù)間不會自動加分隔符,選項(xiàng)A錯(cuò)誤;浮點(diǎn)數(shù)的輸出格式是"%5.0f"表明其小數(shù)部分輸出O位,即沒有輸出,所以選項(xiàng)B也是錯(cuò)誤的。
#include
#define SQR(x)x*x
main()
{ int a,k=3;
a=++SQR(k+1);
printf("%d\n",a);
}
A)8
B)9
C)17
D)20
答案:B
評析:本題宏替換中遇到形參x以實(shí)參k+l代替,其它字符不變。sQR(k+1)展開后應(yīng)為字符串k+l*k+l。
(2)下面是對宏定義的描述,不正確的是_______。
A)宏不存在類型問題,宏名無類型,它的參數(shù)也無類型
B)宏替換不占用運(yùn)行時(shí)間
C)宏替換時(shí)先求出實(shí)參表達(dá)式的值,然后代入形參運(yùn)算求值
D)宏替換只不過是字符替代而已
答案:C
評析:宏替換實(shí)質(zhì)上就是字符替代,它不可能進(jìn)行計(jì)算,故c錯(cuò)誤。帶參數(shù)的宏與函數(shù)相比,宏在程序編譯之前已經(jīng)將代碼替換到程序內(nèi),執(zhí)行時(shí)不會產(chǎn)生類似于函數(shù)調(diào)用的問題,可以說不占用運(yùn)行時(shí)間。
(3)以下程序(程序左邊的數(shù)字為附加的行號)________。
1#include
2#include
3main()
4{char s[]="string";
5 puts(s);
6 strcpy(s,"hello");
7 printf("%3s\n",s);}
A)沒有錯(cuò)
B)第1行有錯(cuò)
C)第6行有錯(cuò)
D)第7行有錯(cuò)
答案:B
評析:字符串復(fù)制函數(shù)strcpy包含在頭文件string.h中,因此,程序中的第l行文件包含命令是錯(cuò)誤的。
(4)若有如下說明,則__________的敘述是正確的。
struct st
{ int a;
int b[2l;
}a;
A)結(jié)構(gòu)體變量a與結(jié)構(gòu)體成員a同名,定義是非法的
B)程序只在執(zhí)行到該定義時(shí)才為結(jié)構(gòu)體st分配存儲單元
C)程序運(yùn)行時(shí)為結(jié)構(gòu)體st分配6個(gè)字節(jié)存儲單元
D)類型名struct st可以通過extern關(guān)鍵字提前引用(即引用在前,說明在后)
答案:D
評析:結(jié)構(gòu)體變量a與結(jié)構(gòu)體成員a同名是合法的定義,引用成員a的方法是a.a(chǎn),變量a處于不同的"層次"上,系統(tǒng)完全能夠分清。st是一個(gè)結(jié)構(gòu)體名,不會為結(jié)構(gòu)體名分配存儲空間,應(yīng)該是在運(yùn)行時(shí)為結(jié)構(gòu)體變量a分配6個(gè)字節(jié)的存儲單元,故選項(xiàng)B和選項(xiàng)C錯(cuò)誤。
(5)若有以下結(jié)構(gòu)體定義,則________是正確的引用或定義。
struct example
{ int x;
int y;
}v1;
A)example.x=10B)example v2.x=10
C)struct v2;v2.x=lO
D)struct example v2={10};
答案:D
評析:在定義結(jié)構(gòu)體變量時(shí),不能只用結(jié)構(gòu)體名example或關(guān)鍵字strum進(jìn)行定義,必需要用結(jié)構(gòu)體類型名struct example定義,在引用結(jié)構(gòu)體成員變量時(shí),需要用結(jié)構(gòu)體變量名進(jìn)行引用,所以選D。
(6)下列程序的執(zhí)行結(jié)果是_________。
#include
union un
{ int i;
char c[21;
};
void main()
{ union un x;
x.c[0]=10:
x.c[1]=1:
printf("\n%d",x.i);
}
A)266
B)ll
C)265
D)138
答案:A
評析:由于本題定義的是共用體,所以成員表列中的整型變量x與字符數(shù)組c共占用同一個(gè)存儲單元,且此存儲單元為2個(gè)字節(jié),通常c[O]位于低字節(jié),c[1]位于高字節(jié),所以x.i的值為266。
(7)已知形成鏈表的存儲結(jié)構(gòu)如下圖所示,則下述類型描述中的空白處應(yīng)填_______。
struct link
Data next
{ char data;
}node;
A)struct link next
B)link*next
C)struct next link
D)struct link*next
答案:D
評析:在單向鏈表中,由于每個(gè)結(jié)點(diǎn)需要存儲下一個(gè)結(jié)點(diǎn)的地址,且下一個(gè)結(jié)點(diǎn)的數(shù)據(jù)類型與前一個(gè)結(jié)點(diǎn)的數(shù)據(jù)類型完全相同,故應(yīng)為struct link*next。
(8)已知小寫字母a的ASCII碼為97,大寫字母A的ASCII.碼為65,以下程序的結(jié)果是__________。
main()
{ unsigned int a=32,b=66;
printf("%c\n",at
B);
}
A)66
B)98
C)b
D)B
答案:C
評析:位運(yùn)算符"l"的作用是按位或,即兩個(gè)二進(jìn)制數(shù)的相應(yīng)位中只要有一個(gè)為1,該位的結(jié)果值為l。最后以字符型輸出, 98對應(yīng)的字符"b"。
(9)C語言庫函數(shù)龜ets(str,n,fp)的功能是_________。
A)從fp指向的文件中讀取長度n的字符串存入str指向的內(nèi)存
B)從fp指向的文件中讀取長度不超過n-l的字符串存入str指向的內(nèi)存
C)從fp指向的文件中讀取n個(gè)字符串存/Xstr指向的內(nèi)存
D)從str讀取至多n個(gè)字符到文件fp
答案:B
評析:fgets函數(shù)的作用是從指定的文件讀入一個(gè)字符串。fgets(str,n,fp);中的n為要求得到的字符的個(gè)數(shù),但只從fb指向的文件輸入n-1個(gè)字符,然后在最后加一個(gè)'\O'字符,因此得到的字符串共有n個(gè)字符。
(10)下述程序向文件輸出的結(jié)果是__________。
#include
void main()
{ FILE*fp=fopen("TEST","wb");
fprintf(fp,"%d%5.0f%c%d",58,76273.0,'-',2278);
fclose(fp);
}
A)58 76273-2278B)5876273。.000000-2278
C)5876273-2278
D)因文件為二進(jìn)制文件而不可讀
答案:C
評析:fprintf函數(shù)工作時(shí),多個(gè)數(shù)據(jù)間不會自動加分隔符,選項(xiàng)A錯(cuò)誤;浮點(diǎn)數(shù)的輸出格式是"%5.0f"表明其小數(shù)部分輸出O位,即沒有輸出,所以選項(xiàng)B也是錯(cuò)誤的。