(26)下面程序的輸出結(jié)果是__________。
#define P1(x)printf(x)
main()
{
char d[]。"p";
Pl(d);
P1("d");
}
A)pd B)d"d" C)"p"d D)"p""d"
答案:A
評(píng)析:帶參數(shù)的宏定義的一般形式為:#define宏名(參數(shù)表)字符串
程序中的Pl(d);經(jīng)宏置換后為printf(d);,所以輸出字符串p;程序中的Pl("d");經(jīng)宏置換后printf("d")。
(27)以下選項(xiàng)中,能定義s為合法的結(jié)構(gòu)體變量的是__________。
A) typedef struct abc
{ double a;
charb[10];
}s;
B) struct
{ double a;
char b[10];
}s;
C) struct ABC
{ double a;
char b[10];
}
ABC s:
D) typedef ABC
{ double a;
char b[10];
}
ABC s:
答案:B
評(píng)析:定義一個(gè)結(jié)構(gòu)體類型的變量,可采用三種方法:
①先定義結(jié)構(gòu)體類型,再定義變量名;②在定義類型的同時(shí)定義變量:③直接定義結(jié)構(gòu)類型變量,即不出現(xiàn)結(jié)構(gòu)體名:選項(xiàng)B符合第三種定義方法。
(28)請(qǐng)讀程序:
#include
#include
main()
{
char*s1="AbCdEf", *s2="aB";
s1++; s2++;
printf("%d、n",strcmp(sl,s2));
}
上面程序的輸出結(jié)果是________。
A)正數(shù) B)負(fù)數(shù) c)零 D)不確定的值
答案:A
評(píng)析:strcmp(X1,X2)是串比較函數(shù),本題中"s1"、"s2"分別表示這兩個(gè)串中第一個(gè)字符的地址,s1++和s2++是將指針指向串的第二個(gè)字符,則*sl為"bCdEf’’,*s2為"B"。在字符串比較中,大小的確定是各個(gè)字符串相應(yīng)位置字符的ASCII碼值的大小決定的, sl> s2,返回值為正數(shù)。
(29)請(qǐng)讀程序:
#include
main()
{
int a=5,b=7,c=9;
printf("%d,%d,",a,b,c);
printf("%d,%d,%d,"a,b);
}
上面程序的輸出結(jié)果是________。
A)5,7,9,5,7 B)5,7,5,7 C)5,7,不定,7,9 D)5,7,5,7,不定
答案:D
評(píng)析:printf函數(shù)按格式控制符的個(gè)數(shù)輸出表列中對(duì)應(yīng)的數(shù)據(jù),若輸出表列的個(gè)數(shù)大于格式控制符個(gè)數(shù),則輸出與格式控制符對(duì)應(yīng)的輸出表列的數(shù)據(jù),輸出表列中多的則省略;若格式控制符個(gè)數(shù)大于輸出表列的個(gè)數(shù),則輸出與格式控制符對(duì)應(yīng)的輸出表列的數(shù)據(jù),格式控制符多的部分輸出的數(shù)據(jù)是隨機(jī)的。
(30)請(qǐng)讀程序:
#incIude
fun c(int a,int b){
Int C;
c=a+b:
return C:
}
main(){
int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}
上面程序的輸出結(jié)果是________。
A)ll B)20 C)2l D)31
答案:C
評(píng)析:函數(shù)func()的作用是返回兩個(gè)形參的和,第一個(gè)形參是x、y分別自減和自增后的和,其中(x--,y++,x+y)是一個(gè)逗號(hào)表達(dá)式,它的值應(yīng)該等于x+y,所以整個(gè)表達(dá)式(x--,y++,x+y)的值為13,而第二個(gè)形參的值為8(根據(jù)語(yǔ)法規(guī)則,應(yīng)當(dāng)先使用,后自增),所以func()的返回值為13+8=21。(31)請(qǐng)讀程序:
#include
main()
{
int a,b;
for(a=l,b=1;a<=100;a十+){
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5:
}
printf("%d\n",a);
}
上面程序的輸出結(jié)果是_________。
A)7 B)8 C)9 D)10
答案:B
評(píng)析:break語(yǔ)句的作用是用于跳出循環(huán)體; continue語(yǔ)句的作用是用于跳出本次循環(huán)。執(zhí)行第一次循環(huán)時(shí),(b%3==1)為真,b=4,繼續(xù)下一次循環(huán),如此反復(fù),當(dāng)b=22時(shí)結(jié)束循環(huán),共循環(huán)8次,即a=8。
(32)設(shè)變量x為float型且已經(jīng)賦值,則以下語(yǔ)句中能夠?qū)中的數(shù)值保留到小數(shù)點(diǎn)后面兩位,并將第三位四舍五入的是__________。
A)X=X*100+0.5/100.0 B)x=(X*100+0.5)/100
C)x=(int)(x*100+0.5)/100.0 D)x=(x/100+0.5)*100.0
答案:C
評(píng)析:本題通過(guò)算術(shù)表達(dá)式的運(yùn)算實(shí)現(xiàn)小數(shù)位數(shù)保留兩位并四舍五入的操作,其中(int)(x*100+0.5)是指將(x*100+0.5)的值強(qiáng)制轉(zhuǎn)換成整型。
(33)請(qǐng)讀程序片段(字符串內(nèi)沒(méi)有空格字符):
printf("%d\n",strlen("ATS\n012\1\\"));
上面程序片段的輸出結(jié)果是____________。
A)ll B)10 C)9 D)8
答案:C
評(píng)析:這個(gè)語(yǔ)句的目的是輸出"ATS\n012\1\\"這個(gè)串的長(zhǎng)度,在串中"\\"代表一個(gè)"\",而"\1"代表數(shù)字1,也占一個(gè)字符,"\n"是回車換行符,也占一個(gè)字符,加上A、T、s、0、l、2,共9個(gè)字符。
(34)運(yùn)行以下程序后,如果從鍵盤上輸入china撐<回車>,則輸出結(jié)果為_(kāi)________。
#include
main()
{
int v1=0,v2=0;char ch:
while((ch=getchar())!=’#’)
switch(ch)
{
case’a’:
case ’h’:
default:v1++;
case’0’:v2++:
}
printf("%d,%d\n",v1,v2);
}
A)2,0 B)5,0 C)5,5 D)2,5
答案:C
評(píng)析:執(zhí)行完一個(gè)case后面的語(yǔ)句后,流程控制轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行。"case常量表達(dá)式"只是起語(yǔ)句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。在執(zhí)行switch語(yǔ)句時(shí),根據(jù)switch后面表達(dá)式的值找到匹配的入口標(biāo)號(hào),就從此標(biāo)號(hào)開(kāi)始執(zhí)行下去,不再進(jìn)行判斷。
(35)請(qǐng)選出可用作c語(yǔ)言用戶標(biāo)識(shí)符的一組標(biāo)識(shí)符__________。
A)void B)a3.b3 c)For D)2a
define -123 -abc DO
WORD IF case sizeof
答案:B
評(píng)析:c語(yǔ)言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種符號(hào)組成,而且第一個(gè)字符必須是字母或下劃線。選項(xiàng)A中的void是c語(yǔ)言的關(guān)鍵字,不合法;選項(xiàng)c中的case和c語(yǔ)言的關(guān)鍵字重名,不合法;選項(xiàng)D中的2a是數(shù)字打頭而且sizeof和c語(yǔ)言的關(guān)鍵字重名,不合法。
(36)下面能正確定義數(shù)組,并正確賦值的語(yǔ)句是_________。
A)int N=5,b[N][N] B]int a[1][2]={{1},{3}}
C)int c[2][]={{1,2},{3,4}} D)int d[3][2]={{1,2},{34}}
答案:D
評(píng)析:可以用下面的方法對(duì)二維數(shù)組初始化:
l、分行給二維數(shù)組賦初值。如int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2、可以將所有數(shù)據(jù)寫在一個(gè)花括弧內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。如:
int a[3][4]={1,2,3,4,5,6,7,8;9,10,1 l,12);
3、可以對(duì)部分元素賦初值:int a[3][4]={{1},{5},{9}};
它的作用是只對(duì)各行第一列的元素賦初值,其余元素值自動(dòng)為0。
4、如果對(duì)全部元素都賦初值(即提供全部初始數(shù)據(jù)),則定義數(shù)組時(shí)對(duì)第一維的長(zhǎng)度可以不指定,但第二維的長(zhǎng)度不能省。如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
與下面的定義等價(jià):int a[][4]={1,2,3,4,5,6,7,8,9,10,1l,12};
(37)請(qǐng)選出以下程序的輸出結(jié)果___________。
#include
sub(int*s,int y)
{ static int t=3;
y=s[t];t--;
}
main()
{ int a[]={1,2,3,4},i,x=0;
for(i=0;i<4;i++){
sub(a,x);printf("%d",x);)
printf("\n");
}
A)1234 B)432l C)0000 D)4444
答案:C
評(píng)析:x作為函數(shù)sub()的實(shí)參時(shí),函數(shù)對(duì)x值的改變沒(méi)有返回主函數(shù),并不能使得x的值變化,所以在打印時(shí),x的值是始終不變的,即為0。 (38)假定下面程序可執(zhí)行文件名prg.exe,則該程序所在的子目錄 下輸入命令行:prg hello
good<回車>后,程序的輸出結(jié)果是_________。
main(int argc,char*argv[])
{
int i;
for=1;i}
A)heUo good B)hg C)hel D)hellogood
答案:B
評(píng)析:帶參數(shù)的main()函數(shù)常用形式為:main(int argc,char.*argv[]),其中,整型變量argc用來(lái)記錄命令行中的參數(shù)個(gè)數(shù)。參數(shù)的個(gè)數(shù)由c程序運(yùn)行時(shí)自動(dòng)計(jì)算出來(lái)。字符型指針數(shù)組 argv的第一個(gè)元素存放命令名,其后各個(gè)元素依次存放命令行中各個(gè)參數(shù)的首地址,數(shù)組的大小由argc確定。for循環(huán)語(yǔ)句實(shí)現(xiàn)輸出各參數(shù)的第一個(gè)字母。
(39)若有以下說(shuō)明和語(yǔ)句,請(qǐng)選出哪個(gè)是對(duì)c數(shù)組元素的正確引用_________。
int c[4][5],(*cp)[5];
cp=c;
A)cp+l B)*(cp+3) C)*(cp+1)+3 D)*(*cp+2)
答案:D
評(píng)析:cp=c這個(gè)語(yǔ)句是將數(shù)組第0行的地址賦給了cp。cp+1使指針指向二維數(shù)組c的第一行;+(cp+3)是數(shù)組c的第三行的第0列的地址值;+(cp+1)+3是數(shù)組c的第一行第三列的地址值。
(40)下列選項(xiàng)中不能正確定義結(jié)構(gòu)體的是_________。
A)typede fstruct B)struct color c1
{ int red; { int red;
int green; int green;
int blue; int blue;
}cOLOR; };
COLOR cl;
C)struct color D)struct
{ int red; { int red;
int green; int green;
int blue; int blue;
}cl; }cl;
答案:B
評(píng)析:將一個(gè)變量定義為標(biāo)準(zhǔn)類型與定義為結(jié)構(gòu)體類型不同之處在于:后者不僅要求指定變量為結(jié)構(gòu)體類型,而且要求指定為某一特定的結(jié)構(gòu)體類型(例如, struct color),不能只指定結(jié)構(gòu)體名。其中可以不出現(xiàn)結(jié)構(gòu)體名,答案D就是缺省結(jié)構(gòu)體名的情況。而變量名列表必須放在成員列表后面,所以B答案不能正確將 c1定義為結(jié)構(gòu)體變量。
(41)設(shè)有以下語(yǔ)句
char a=3,b=6,c;
c=a^b<<2:
則c的二進(jìn)制值是_________。
A)00011011 B)00010100 c)00011100 D)00011000
答案:A
評(píng)析:"<<"是c語(yǔ)言中規(guī)定的左移運(yùn)算符,n是異或運(yùn)算符,所以,c的二進(jìn)制值應(yīng)為0001 1011。
(42)設(shè)有如下定義
struct ss
{ char name[10];
int age;
char sex;
}std[3],*p=std;
下列各輸入語(yǔ)句中錯(cuò)誤的是__________.
A)scanf("%d",&(*p). age); B)scanf("%s",&std.name);
c)scanf("%c",&std[O].sex); D)SCanf("%c",&(p->SEX));
答案:B
評(píng)析:在c語(yǔ)言中,結(jié)構(gòu)體變量的引用有三種等價(jià)方式:
1、結(jié)構(gòu)體變量.成員名;2、(*p).成員名;3、p->成員名。
因?yàn)閟td.name是字符數(shù)組名,-本身代表地址,其前面不應(yīng)該使用"&"符號(hào),所以選項(xiàng)B錯(cuò)誤。
(43)設(shè)有
static char str[]="Beijing";
則執(zhí)行
printf(%d\n",strlen(strcpy(str,"China")));
后的輸出結(jié)果為_(kāi)_________。
A)5 B)7 C)12 D)14
答案:A
評(píng)析:在執(zhí)行printf()函數(shù)前,數(shù)組str的長(zhǎng)度是7,但是當(dāng)使用strcpy()函數(shù)將新的值賦給str后,strlenr)函數(shù)返回的應(yīng)當(dāng)是現(xiàn)在的str字符串的字符個(gè)數(shù),即是5。(44)下列程序段中,不是死循環(huán)的是__________。
A)int i=100; B)unsigned k=0;
while(1) do
{ {
i=i%100+l: ++k;
if(i>=100)break; }
} while(k>=0);
C)for(;;); D)int s=3379;
while(s++%2+s%2)s++;
答案:A
評(píng)析:當(dāng)表達(dá)式為非0值時(shí),執(zhí)行while語(yǔ)句中的內(nèi)嵌語(yǔ)句,可用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結(jié)束本次循環(huán)。選項(xiàng)A不是死循環(huán),當(dāng)i=100時(shí)跳出循環(huán)。選項(xiàng)c為空循環(huán)語(yǔ)句。
(45)以下程序的輸出結(jié)果是________。
#include
main()
{ int i;
for(i=l;i<5;i++){
if(i%2)print引剃’);
else continue;
printf("≠f");
}
printf("$\n");
}
A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$
答案:C
評(píng)析:當(dāng)i不可以整除2時(shí)打印"*",然后打印"拌",不能整除2則執(zhí)行continue,跳過(guò)printf("#"):語(yǔ)句,結(jié)束本次循環(huán),返回到循環(huán)的起始點(diǎn)。當(dāng)循環(huán)結(jié)束后,打印"$"。
(46)庫(kù)函數(shù)strcpy用以復(fù)制字符串,若有以下定義和語(yǔ)句:
char strl[]="china",str2[10],*str3,*str4="china";
則對(duì)庫(kù)函數(shù)strcpy的正確的調(diào)用是_________。
A)strcpy(strl,"people"); B)strcpy(str2,"people");
C)strcpy(str3,"people"); D)strcpy(str4,"people");
答案:B
評(píng)析:strcpy(字符數(shù)組1,字符串2)其作用是將字符串2復(fù)制到字符數(shù)組l中去。
注:(1 )字符數(shù)組l必須定義得足夠大;(2)"字符數(shù)組1"必須寫成數(shù)組名的形式; (3)復(fù)制時(shí)連同字符串后面的’\0’一起復(fù)制到字符數(shù)組1中。
(47)有以下程序
#include
main()
{int c;
while((c=getchar())!=’\n’){
switch(C-’2’){
case 0:case 1:putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c+2);break;}
}
}
從第一列開(kāi)始輸入以下數(shù)據(jù),↙代表一個(gè)回車符。
2473↙
程序的輸出結(jié)果是_________。
A)668977 B)668966 C)66778777 D)6688766
答案:A
評(píng)析:getchar()函數(shù)是從鍵盤接受一個(gè)字符輸入;當(dāng)用戶鍵入的字符不是回車符時(shí),會(huì)進(jìn)入一個(gè)多分支選擇語(yǔ)句,根據(jù)C-’2’的值進(jìn)行分支選擇;putchar()是在屏幕上打印一個(gè)字符,最后的結(jié)果應(yīng)當(dāng)為668977。
(48)下面程序的輸出結(jié)果是_________。
Union un
{ int a[4];
long b:
char c[6];}
main()
{
union un u:
printf("%d%d",sizeof(u),sizeof(u.a(chǎn)));
}
A)82 B)88 C)188 D)182
答案:B
評(píng)析:sizeof函數(shù)計(jì)算已知類型所占的字節(jié)數(shù)。共用體變量所占的內(nèi)存長(zhǎng)度等于最長(zhǎng)的成員的長(zhǎng)度。
(49)以下程序的輸出結(jié)果是________。
main()
{ int w=5;fun(w);printf("\n");}
fun(int k)
{ if(k>0) fun(k-1);
printf("%d.t,k);
}
A)5 4 3 2 l B)0 1 2 3 4 5
C)l 2 3 4 5 D)5 4 3 2 l 0
答案:B
評(píng)析:函數(shù)的遞歸調(diào)用就是在調(diào)用一個(gè)函數(shù)的過(guò)程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身。fun函數(shù)共被調(diào)用6次,即fun(5)、fun(4)、fun(3)、fun(2)、向n(1)、fun(0)。其中fun(5)是main函數(shù)調(diào)用的。
(50)若巾是指向某文件的指針,且已讀到此文件的末尾,則函數(shù)feof(f1))的返回值是
A)EOF B)O C)非零值 D)NULL
答案:C
評(píng)析:函數(shù)feof是用來(lái)判斷文件是否已讀到末尾,如果已讀到末尾則返回非零值,否則返回O。二、填空題(每空2分,共40分)
請(qǐng)將每一個(gè)空的正確答案寫在答題卡的【1】至【20】序號(hào)的橫線上,答在試卷上不得 分。
(1)算法的復(fù)雜度主要包括時(shí)間復(fù)雜度和 【1】 復(fù)雜度。
答案:【1】空間
評(píng)析:習(xí)慣上常常把語(yǔ)句重復(fù)執(zhí)行的次數(shù)作為算法運(yùn)行時(shí)間的相對(duì)量度,稱作算法的時(shí)間復(fù)雜度。算法在運(yùn)行過(guò)程中需輔助存儲(chǔ)空間的大小稱為算法的空間復(fù)雜度。
(2)數(shù)據(jù)的物理結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間中的存放形式稱為數(shù)據(jù)的 【2】 。
答案:【2】?jī)?nèi)模式或物理模式或存儲(chǔ)模式
評(píng)析:一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)內(nèi)模式,它是數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述,是數(shù)據(jù)庫(kù)內(nèi)部的表示方法。例如,記錄的存儲(chǔ)方式是順序存儲(chǔ)、索引按照什么方式組織;數(shù)據(jù)是否壓縮存儲(chǔ),是否加密等。
(3)若按功能劃分,軟件測(cè)試的方法通常分為 【3】 測(cè)試方法和黑盒測(cè)試方法。
答案:【3】白盒
評(píng)析:軟件測(cè)試的方法有三種:動(dòng)態(tài)測(cè)試、靜態(tài)測(cè)試和正確性證明。設(shè)計(jì)測(cè)試實(shí)例的方法一般有兩類:黑盒測(cè)試方法和自盒測(cè)試方法。
(4)數(shù)據(jù)庫(kù)三級(jí)模式體系結(jié)構(gòu)的劃分,有利于保持?jǐn)?shù)據(jù)庫(kù)的 【4】 。
答案:【4】數(shù)據(jù)獨(dú)立性
評(píng)析:數(shù)據(jù)庫(kù)的三級(jí)模式體系結(jié)構(gòu)把數(shù)據(jù)的組織管理工作進(jìn)行了劃分,把數(shù)據(jù)的具體組織留給DBMS管理,使用戶能邏輯地、抽象地處理數(shù)據(jù),而不必關(guān)心數(shù)據(jù)在計(jì)算機(jī)中的具體表示方式與存儲(chǔ)方式,保證了數(shù)據(jù)的獨(dú)立性。
(5)在關(guān)系運(yùn)算中,查找滿足一定條件的元組的運(yùn)算稱之為 【5】 。
答案:【5】選擇
評(píng)析:在關(guān)系數(shù)據(jù)庫(kù)中,選擇運(yùn)算也是一個(gè)元運(yùn)算,關(guān)系R通過(guò)選擇運(yùn)算(并由該運(yùn)算給出所選擇的邏輯條件)后仍為一個(gè)關(guān)系。這個(gè)關(guān)系是由R中的那些滿足邏輯條件的元組所組成。
(6)在C語(yǔ)言中(以16位PC機(jī)為例),一個(gè)float型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為4;一個(gè)double型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為 【6】 。
答案:【6】8
評(píng)析:在一般16位PC機(jī)中,一個(gè)float型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié)(32位),一個(gè)double型數(shù)據(jù)占8個(gè)字節(jié)。
(7)設(shè)有以下變量定義,并已賦確定的值,
char w;int x;float y;double z;
則表達(dá)式:w*x+z-y所求得的數(shù)據(jù)類型為 【7】 。
答案:【7】double型或雙精度型
評(píng)析:①先進(jìn)行W*X的運(yùn)算,先將字符型w轉(zhuǎn)換成整型,運(yùn)算結(jié)果為整型;②再將W*X的結(jié)果與z相加,要先將第一步的整型轉(zhuǎn)換為double型,運(yùn)算結(jié)果為 double型;③最后將W*X+Z的結(jié)果與y相減,要先將float型y轉(zhuǎn)換成double型,結(jié)果為double型。
(8)若運(yùn)行時(shí)給變量x輸入12,則以下程序的運(yùn)行結(jié)果是 【8】??;
main(){
int,y;
scanf(""%d"",&X);
y=x>12?x+lO:x-12;
printf(""%d\n"",y);
}
答案:【8】0
評(píng)析:三目運(yùn)算符的形式為(表達(dá)式1)7(表達(dá)式2):(表達(dá)式3)。當(dāng)(表達(dá)式1)值為真時(shí),返回(表達(dá)式2)的值;為假時(shí),返回(表達(dá)式3)的值。題中因?yàn)閤>t2為假,所以結(jié)果為x-12,即為0。
(9)四條語(yǔ)句:x++;、++x;、x=x+l;、x=l+x;,執(zhí)行后都使變量x中的值增l,請(qǐng)寫出一條同一功能的賦值語(yǔ)句(不得與列舉的相同) 【9】 。
答案:【9】x+=1:
評(píng)析:題面中的四條語(yǔ)句的作用是使x的值加1,在c中有多種方法可以對(duì)變量進(jìn)行加1操作,這里可以利用C的復(fù)合賦值運(yùn)算符+=實(shí)現(xiàn),本題答案為x+=1:。
(10)設(shè)有以下定義和語(yǔ)句,則*(*(p+2)+1)的值為 【10】 。
int[3][2] ={10,20,30,40,50,60},(*p)[2];
p=a;
答案:【10】60
評(píng)析:本題定義了一個(gè)3行2列的二維數(shù)組a,并定義了一個(gè)指向兩個(gè)元素的一維數(shù)組指針p,讓p指向二維數(shù)組a的首行。*(*(p+2)+1)是引用a[2][1],其值是60。
(11)若要使指針p指向一個(gè)double類型的動(dòng)態(tài)存儲(chǔ)單元,請(qǐng)?zhí)羁铡?BR> p= 【11】 malloc(sizeof(double));
答案:【11】(double*)
評(píng)析:函數(shù)malloc返回的是void*,所以若要使指針指向一個(gè)double類型,則必須進(jìn)行類型轉(zhuǎn)換,類型轉(zhuǎn)換格式為:(數(shù)據(jù)類型*)。
(12)下面程序的功能:輸出100以內(nèi)能被3整除且個(gè)位數(shù)為6的所有整數(shù),請(qǐng)補(bǔ)充完整。
main().
{ int ij;
for(i=O; 【12】?。籭++)
{ j=I*10+6;
if( 【13】 )continue;
printf("%d",j);
}
}
答案:【12】i 【13】j%3!=0
評(píng)析:本題要求輸出100以內(nèi)能被3整除且個(gè)位數(shù)為6的所有整數(shù),程序中j=i*10+6;語(yǔ)句是求個(gè)位數(shù)為6的整數(shù),由此可得出程序的循環(huán)次數(shù)為 i (13)函數(shù)mycmp(char*s,char。t)的功能是比較字符串s和t的大小,當(dāng)s等于t時(shí)返回0,
當(dāng)s>t返回正值,當(dāng)s mycmp(char*s,char*t)
{ while(*s==*t)
{ if(*s==’\0’)return 0;
++s;++t;
}
return( 【14】 );
}
答案:【14】*s-*t或-*t+*s
評(píng)析:函數(shù)的兩個(gè)形參是兩個(gè)字符指針變量,字符串的首地址是指針變量的值,*s和*t表示字符串?dāng)?shù)組s和t的第一個(gè)字符,在while循環(huán)中,是通過(guò)s和t值的不斷變化來(lái)改變指針?biāo)赶虻淖址?,要改變s和t所指不同字符的ASCII碼的差值,必須使用"*s-*t"得出。(14)以下程序運(yùn)行后的輸出結(jié)果是 【15】 。
void fun(、)
{
static int a=0:
a+=2;printf("%d",a);
}
main()
{ int cc;
for(CC=1;cc<4;cc++)fun();
printf("\n");
}
答案:【15】2 4 6
評(píng)析:static聲明的外部變量只限于被本文件引用,而不能被其他文件引用。用static來(lái)聲明一個(gè)變量的作用有:①對(duì)局部變量用static聲明,則為該變量分配的空間在整個(gè)程序執(zhí)行期間始終存在;②全部變量用static聲明,則該變量的作用域只限于本文件模塊(即被聲明的文件中)。
(15)下列程序的運(yùn)行結(jié)果是 【16】 。
main()
{ union EXAMPLE
{ struct
{int x;int y;}in;
int a;
int b:
}e;
e.a(chǎn)=1;e.b= 2;
e.in.x=e.a(chǎn)*e.b;
e.in.y=e.a(chǎn)+e.b;
printf("%d,%d\n",e.in.x,e.in.y);
}
答案:【16】4,8
評(píng)析:c語(yǔ)言規(guī)定,共用體中各個(gè)成員變量在內(nèi)存中占用同一段內(nèi)存單元,即e.in.x和e.a(chǎn)、e.b占用同一段內(nèi)存單元,由于e.in.x和e.a(chǎn)、e.b占用的是同一段內(nèi)存單元,所以程序最后的打印結(jié)果為"4,8"。
(16)在對(duì)文件進(jìn)行操作的過(guò)程中,若要求文件的位置回到文件的開(kāi)頭,應(yīng)當(dāng)調(diào)用的函數(shù) 是 【17】 函數(shù)。
答案:【17】[NNlrewind或fseek
評(píng)析:在對(duì)文件進(jìn)行操作的過(guò)程中,若要求文件的位置回到文件的開(kāi)頭,可以調(diào)用rewind或fseek函數(shù)。其中rewind函數(shù)的作用是將位置指針重新返回文件的開(kāi)頭,而fseek函數(shù)可以實(shí)現(xiàn)文件指針的定位。
(17)以下函數(shù)用于求出一個(gè)2×4矩陣中的元素值。
max_value(arr)
int arr[][4];
{
int I,J,max;
max=alT[0][0];
for(i=0;i<2;i++)
for(j=0; 【18】 ;J++)
if( 【19】 >max)max=[2Q];
return(max);
}
答案:【18】j<4
【19】arr[i][j]
【20】arr[i][j]
評(píng)析:2*4矩陣實(shí)際上就是一個(gè)二維數(shù)組,結(jié)合本題應(yīng)為arr[2][4],所以在第一個(gè)循環(huán)中應(yīng)當(dāng)填寫"4";第二個(gè)橫線處是要判斷當(dāng)前的數(shù)組元素值是否大于max,所以應(yīng)填寫arr[i][j];第三個(gè)橫線處是要將當(dāng)前大于max的數(shù)組元素的值賦給變量max,所以應(yīng)當(dāng)填寫"arr[i][il"。
< p>
(29)請(qǐng)讀程序:
#include
main()
{
int a=5,b=7,c=9;
printf("%d,%d,",a,b,c);
printf("%d,%d,%d,"a,b);
}
上面程序的輸出結(jié)果是________。
A)5,7,9,5,7 B)5,7,5,7 C)5,7,不定,7,9 D)5,7,5,7,不定
答案:D
評(píng)析:printf函數(shù)按格式控制符的個(gè)數(shù)輸出表列中對(duì)應(yīng)的數(shù)據(jù),若輸出表列的個(gè)數(shù)大于格式控制符個(gè)數(shù),則輸出與格式控制符對(duì)應(yīng)的輸出表列的數(shù)據(jù),輸出表列中多的則省略;若格式控制符個(gè)數(shù)大于輸出表列的個(gè)數(shù),則輸出與格式控制符對(duì)應(yīng)的輸出表列的數(shù)據(jù),格式控制符多的部分輸出的數(shù)據(jù)是隨機(jī)的。
(30)請(qǐng)讀程序:
#incIude
func(int a,int b){
Int C;
c=a+b:
return C:
}
main(){
int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}
上面程序的輸出結(jié)果是________。
A)ll B)20 C)2l D)31
答案:C
評(píng)析:函數(shù)func()的作用是 返回兩個(gè)形參的和,第一個(gè)形參是x、y分別自減和自增后的和,其中(x--,y++,x+y)是一個(gè)逗號(hào)表達(dá)式,它的值應(yīng)該等于x+y,所以整個(gè)表達(dá)式 (x--,y++,x+y)的值為13,而第二個(gè)形參的值為8(根據(jù)語(yǔ)法規(guī)則,應(yīng)當(dāng)先使用,后自增),所以func()的返回值為13+8=21。(31)請(qǐng)讀程序:
#include
main()
{
int a,b;
for(a=l,b=1;a<=100;a十+){
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5:
}
printf("%d\n",a);
}
上面程序的輸出結(jié)果是_________。
A)7 B)8 C)9 D)10
答案:B
評(píng)析:break語(yǔ)句的作用是用于跳出循環(huán)體; continue語(yǔ)句的作用是用于跳出本次循環(huán)。執(zhí)行第一次循環(huán)時(shí),(b%3==1)為真,b=4,繼續(xù)下一次循環(huán),如此反復(fù),當(dāng)b=22時(shí)結(jié)束循環(huán),共循環(huán)8次,即a=8。
(14)以下程序運(yùn)行后的輸出結(jié)果是 【15】 。
void fun(、)
{
static int a=0:
a+=2;printf("%d",a);
}
main()
{ int cc;
for(CC=1;cc<4;cc++)fun();
printf("\n");
}
答案:【15】2 4 6
評(píng)析:static聲明的外部變量只限于被本文件引用,而不能被其他文件引用。用static來(lái)聲明一個(gè)變量的作用有:①對(duì)局部變量用static聲明,則為該變量分配的空間在整個(gè)程序執(zhí)行期間始終存在;②全部變量用static聲明,則該變量的作用域只限于本文件模塊(即被聲明的文件中)。
(15)下列程序的運(yùn)行結(jié)果是 【16】 。
main()
{ union EXAMPLE
{ struct
{int x;int y;}in;
int a;
int b:
}e;
e.a(chǎn)=1;e.b=2;
e.in.x=e.a(chǎn)*e.b;
e.in.y=e.a(chǎn)+e.b;
printf("%d,%d\n",e.in.x,e.in.y);
}
答案:【16】4,8
評(píng)析:c語(yǔ)言規(guī)定,共用體中各個(gè)成員變量在內(nèi)存中占用同一段內(nèi)存單元,即e.in.x和e.a(chǎn)、e.b占用同一段內(nèi)存單元,由于e.in.x和e.a(chǎn)、e.b占用的是同一段內(nèi)存單元,所以程序最后的打印結(jié)果為"4,8"。
(16)在對(duì)文件進(jìn)行操作的過(guò)程中,若要求文件的位置回到文件的開(kāi)頭,應(yīng)當(dāng)調(diào)用的函數(shù) 是 【17】 函數(shù)。
答案:【17】[NNlrewind或fseek
評(píng)析:在對(duì)文件進(jìn)行操作的過(guò)程中,若要求文件的位置回到文件的開(kāi)頭,可以調(diào)用rewind或fseek函數(shù)。其中rewind函數(shù)的作用是將位置指針重新返回文件的開(kāi)頭,而fseek函數(shù)可以實(shí)現(xiàn)文件指針的定位。
(17)以下函數(shù)用于求出一個(gè)2×4矩陣中的元素值。
max_value(arr)
int arr[][4];
{
int I,J, max;
max=alT[0][0];
for(i=0;i<2;i++)
for(j=0; 【18】 ;J++)
if( 【19】 >max)max=[2Q];
return(max);
}
答案:【18】j<4
【19】arr[i][j]
【20】arr[i][j]
評(píng)析:2*4矩陣實(shí)際上就是一個(gè)二維數(shù)組,結(jié)合本題應(yīng)為arr[2][4],所以在第一個(gè)循環(huán)中應(yīng)當(dāng)填寫"4";第二個(gè)橫線處是要判斷當(dāng)前的數(shù)組元素值是否大于max,所以應(yīng)填寫arr[i][j];第三個(gè)橫線處是要將當(dāng)前大于max的數(shù)組元素的值賦給變量max,所以應(yīng)當(dāng)填寫"arr[i][il"。
#define P1(x)printf(x)
main()
{
char d[]。"p";
Pl(d);
P1("d");
}
A)pd B)d"d" C)"p"d D)"p""d"
答案:A
評(píng)析:帶參數(shù)的宏定義的一般形式為:#define宏名(參數(shù)表)字符串
程序中的Pl(d);經(jīng)宏置換后為printf(d);,所以輸出字符串p;程序中的Pl("d");經(jīng)宏置換后printf("d")。
(27)以下選項(xiàng)中,能定義s為合法的結(jié)構(gòu)體變量的是__________。
A) typedef struct abc
{ double a;
charb[10];
}s;
B) struct
{ double a;
char b[10];
}s;
C) struct ABC
{ double a;
char b[10];
}
ABC s:
D) typedef ABC
{ double a;
char b[10];
}
ABC s:
答案:B
評(píng)析:定義一個(gè)結(jié)構(gòu)體類型的變量,可采用三種方法:
①先定義結(jié)構(gòu)體類型,再定義變量名;②在定義類型的同時(shí)定義變量:③直接定義結(jié)構(gòu)類型變量,即不出現(xiàn)結(jié)構(gòu)體名:選項(xiàng)B符合第三種定義方法。
(28)請(qǐng)讀程序:
#include
#include
main()
{
char*s1="AbCdEf", *s2="aB";
s1++; s2++;
printf("%d、n",strcmp(sl,s2));
}
上面程序的輸出結(jié)果是________。
A)正數(shù) B)負(fù)數(shù) c)零 D)不確定的值
答案:A
評(píng)析:strcmp(X1,X2)是串比較函數(shù),本題中"s1"、"s2"分別表示這兩個(gè)串中第一個(gè)字符的地址,s1++和s2++是將指針指向串的第二個(gè)字符,則*sl為"bCdEf’’,*s2為"B"。在字符串比較中,大小的確定是各個(gè)字符串相應(yīng)位置字符的ASCII碼值的大小決定的, sl> s2,返回值為正數(shù)。
(29)請(qǐng)讀程序:
#include
main()
{
int a=5,b=7,c=9;
printf("%d,%d,",a,b,c);
printf("%d,%d,%d,"a,b);
}
上面程序的輸出結(jié)果是________。
A)5,7,9,5,7 B)5,7,5,7 C)5,7,不定,7,9 D)5,7,5,7,不定
答案:D
評(píng)析:printf函數(shù)按格式控制符的個(gè)數(shù)輸出表列中對(duì)應(yīng)的數(shù)據(jù),若輸出表列的個(gè)數(shù)大于格式控制符個(gè)數(shù),則輸出與格式控制符對(duì)應(yīng)的輸出表列的數(shù)據(jù),輸出表列中多的則省略;若格式控制符個(gè)數(shù)大于輸出表列的個(gè)數(shù),則輸出與格式控制符對(duì)應(yīng)的輸出表列的數(shù)據(jù),格式控制符多的部分輸出的數(shù)據(jù)是隨機(jī)的。
(30)請(qǐng)讀程序:
#incIude
fun c(int a,int b){
Int C;
c=a+b:
return C:
}
main(){
int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}
上面程序的輸出結(jié)果是________。
A)ll B)20 C)2l D)31
答案:C
評(píng)析:函數(shù)func()的作用是返回兩個(gè)形參的和,第一個(gè)形參是x、y分別自減和自增后的和,其中(x--,y++,x+y)是一個(gè)逗號(hào)表達(dá)式,它的值應(yīng)該等于x+y,所以整個(gè)表達(dá)式(x--,y++,x+y)的值為13,而第二個(gè)形參的值為8(根據(jù)語(yǔ)法規(guī)則,應(yīng)當(dāng)先使用,后自增),所以func()的返回值為13+8=21。(31)請(qǐng)讀程序:
#include
main()
{
int a,b;
for(a=l,b=1;a<=100;a十+){
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5:
}
printf("%d\n",a);
}
上面程序的輸出結(jié)果是_________。
A)7 B)8 C)9 D)10
答案:B
評(píng)析:break語(yǔ)句的作用是用于跳出循環(huán)體; continue語(yǔ)句的作用是用于跳出本次循環(huán)。執(zhí)行第一次循環(huán)時(shí),(b%3==1)為真,b=4,繼續(xù)下一次循環(huán),如此反復(fù),當(dāng)b=22時(shí)結(jié)束循環(huán),共循環(huán)8次,即a=8。
(32)設(shè)變量x為float型且已經(jīng)賦值,則以下語(yǔ)句中能夠?qū)中的數(shù)值保留到小數(shù)點(diǎn)后面兩位,并將第三位四舍五入的是__________。
A)X=X*100+0.5/100.0 B)x=(X*100+0.5)/100
C)x=(int)(x*100+0.5)/100.0 D)x=(x/100+0.5)*100.0
答案:C
評(píng)析:本題通過(guò)算術(shù)表達(dá)式的運(yùn)算實(shí)現(xiàn)小數(shù)位數(shù)保留兩位并四舍五入的操作,其中(int)(x*100+0.5)是指將(x*100+0.5)的值強(qiáng)制轉(zhuǎn)換成整型。
(33)請(qǐng)讀程序片段(字符串內(nèi)沒(méi)有空格字符):
printf("%d\n",strlen("ATS\n012\1\\"));
上面程序片段的輸出結(jié)果是____________。
A)ll B)10 C)9 D)8
答案:C
評(píng)析:這個(gè)語(yǔ)句的目的是輸出"ATS\n012\1\\"這個(gè)串的長(zhǎng)度,在串中"\\"代表一個(gè)"\",而"\1"代表數(shù)字1,也占一個(gè)字符,"\n"是回車換行符,也占一個(gè)字符,加上A、T、s、0、l、2,共9個(gè)字符。
(34)運(yùn)行以下程序后,如果從鍵盤上輸入china撐<回車>,則輸出結(jié)果為_(kāi)________。
#include
main()
{
int v1=0,v2=0;char ch:
while((ch=getchar())!=’#’)
switch(ch)
{
case’a’:
case ’h’:
default:v1++;
case’0’:v2++:
}
printf("%d,%d\n",v1,v2);
}
A)2,0 B)5,0 C)5,5 D)2,5
答案:C
評(píng)析:執(zhí)行完一個(gè)case后面的語(yǔ)句后,流程控制轉(zhuǎn)移到下一個(gè)case繼續(xù)執(zhí)行。"case常量表達(dá)式"只是起語(yǔ)句標(biāo)號(hào)作用,并不是在該處進(jìn)行條件判斷。在執(zhí)行switch語(yǔ)句時(shí),根據(jù)switch后面表達(dá)式的值找到匹配的入口標(biāo)號(hào),就從此標(biāo)號(hào)開(kāi)始執(zhí)行下去,不再進(jìn)行判斷。
(35)請(qǐng)選出可用作c語(yǔ)言用戶標(biāo)識(shí)符的一組標(biāo)識(shí)符__________。
A)void B)a3.b3 c)For D)2a
define -123 -abc DO
WORD IF case sizeof
答案:B
評(píng)析:c語(yǔ)言規(guī)定標(biāo)識(shí)符只能由字母、數(shù)字和下劃線三種符號(hào)組成,而且第一個(gè)字符必須是字母或下劃線。選項(xiàng)A中的void是c語(yǔ)言的關(guān)鍵字,不合法;選項(xiàng)c中的case和c語(yǔ)言的關(guān)鍵字重名,不合法;選項(xiàng)D中的2a是數(shù)字打頭而且sizeof和c語(yǔ)言的關(guān)鍵字重名,不合法。
(36)下面能正確定義數(shù)組,并正確賦值的語(yǔ)句是_________。
A)int N=5,b[N][N] B]int a[1][2]={{1},{3}}
C)int c[2][]={{1,2},{3,4}} D)int d[3][2]={{1,2},{34}}
答案:D
評(píng)析:可以用下面的方法對(duì)二維數(shù)組初始化:
l、分行給二維數(shù)組賦初值。如int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
2、可以將所有數(shù)據(jù)寫在一個(gè)花括弧內(nèi),按數(shù)組排列的順序?qū)Ω髟刭x初值。如:
int a[3][4]={1,2,3,4,5,6,7,8;9,10,1 l,12);
3、可以對(duì)部分元素賦初值:int a[3][4]={{1},{5},{9}};
它的作用是只對(duì)各行第一列的元素賦初值,其余元素值自動(dòng)為0。
4、如果對(duì)全部元素都賦初值(即提供全部初始數(shù)據(jù)),則定義數(shù)組時(shí)對(duì)第一維的長(zhǎng)度可以不指定,但第二維的長(zhǎng)度不能省。如:int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
與下面的定義等價(jià):int a[][4]={1,2,3,4,5,6,7,8,9,10,1l,12};
(37)請(qǐng)選出以下程序的輸出結(jié)果___________。
#include
sub(int*s,int y)
{ static int t=3;
y=s[t];t--;
}
main()
{ int a[]={1,2,3,4},i,x=0;
for(i=0;i<4;i++){
sub(a,x);printf("%d",x);)
printf("\n");
}
A)1234 B)432l C)0000 D)4444
答案:C
評(píng)析:x作為函數(shù)sub()的實(shí)參時(shí),函數(shù)對(duì)x值的改變沒(méi)有返回主函數(shù),并不能使得x的值變化,所以在打印時(shí),x的值是始終不變的,即為0。 (38)假定下面程序可執(zhí)行文件名prg.exe,則該程序所在的子目錄 下輸入命令行:prg hello
good<回車>后,程序的輸出結(jié)果是_________。
main(int argc,char*argv[])
{
int i;
for=1;i}
A)heUo good B)hg C)hel D)hellogood
答案:B
評(píng)析:帶參數(shù)的main()函數(shù)常用形式為:main(int argc,char.*argv[]),其中,整型變量argc用來(lái)記錄命令行中的參數(shù)個(gè)數(shù)。參數(shù)的個(gè)數(shù)由c程序運(yùn)行時(shí)自動(dòng)計(jì)算出來(lái)。字符型指針數(shù)組 argv的第一個(gè)元素存放命令名,其后各個(gè)元素依次存放命令行中各個(gè)參數(shù)的首地址,數(shù)組的大小由argc確定。for循環(huán)語(yǔ)句實(shí)現(xiàn)輸出各參數(shù)的第一個(gè)字母。
(39)若有以下說(shuō)明和語(yǔ)句,請(qǐng)選出哪個(gè)是對(duì)c數(shù)組元素的正確引用_________。
int c[4][5],(*cp)[5];
cp=c;
A)cp+l B)*(cp+3) C)*(cp+1)+3 D)*(*cp+2)
答案:D
評(píng)析:cp=c這個(gè)語(yǔ)句是將數(shù)組第0行的地址賦給了cp。cp+1使指針指向二維數(shù)組c的第一行;+(cp+3)是數(shù)組c的第三行的第0列的地址值;+(cp+1)+3是數(shù)組c的第一行第三列的地址值。
(40)下列選項(xiàng)中不能正確定義結(jié)構(gòu)體的是_________。
A)typede fstruct B)struct color c1
{ int red; { int red;
int green; int green;
int blue; int blue;
}cOLOR; };
COLOR cl;
C)struct color D)struct
{ int red; { int red;
int green; int green;
int blue; int blue;
}cl; }cl;
答案:B
評(píng)析:將一個(gè)變量定義為標(biāo)準(zhǔn)類型與定義為結(jié)構(gòu)體類型不同之處在于:后者不僅要求指定變量為結(jié)構(gòu)體類型,而且要求指定為某一特定的結(jié)構(gòu)體類型(例如, struct color),不能只指定結(jié)構(gòu)體名。其中可以不出現(xiàn)結(jié)構(gòu)體名,答案D就是缺省結(jié)構(gòu)體名的情況。而變量名列表必須放在成員列表后面,所以B答案不能正確將 c1定義為結(jié)構(gòu)體變量。
(41)設(shè)有以下語(yǔ)句
char a=3,b=6,c;
c=a^b<<2:
則c的二進(jìn)制值是_________。
A)00011011 B)00010100 c)00011100 D)00011000
答案:A
評(píng)析:"<<"是c語(yǔ)言中規(guī)定的左移運(yùn)算符,n是異或運(yùn)算符,所以,c的二進(jìn)制值應(yīng)為0001 1011。
(42)設(shè)有如下定義
struct ss
{ char name[10];
int age;
char sex;
}std[3],*p=std;
下列各輸入語(yǔ)句中錯(cuò)誤的是__________.
A)scanf("%d",&(*p). age); B)scanf("%s",&std.name);
c)scanf("%c",&std[O].sex); D)SCanf("%c",&(p->SEX));
答案:B
評(píng)析:在c語(yǔ)言中,結(jié)構(gòu)體變量的引用有三種等價(jià)方式:
1、結(jié)構(gòu)體變量.成員名;2、(*p).成員名;3、p->成員名。
因?yàn)閟td.name是字符數(shù)組名,-本身代表地址,其前面不應(yīng)該使用"&"符號(hào),所以選項(xiàng)B錯(cuò)誤。
(43)設(shè)有
static char str[]="Beijing";
則執(zhí)行
printf(%d\n",strlen(strcpy(str,"China")));
后的輸出結(jié)果為_(kāi)_________。
A)5 B)7 C)12 D)14
答案:A
評(píng)析:在執(zhí)行printf()函數(shù)前,數(shù)組str的長(zhǎng)度是7,但是當(dāng)使用strcpy()函數(shù)將新的值賦給str后,strlenr)函數(shù)返回的應(yīng)當(dāng)是現(xiàn)在的str字符串的字符個(gè)數(shù),即是5。(44)下列程序段中,不是死循環(huán)的是__________。
A)int i=100; B)unsigned k=0;
while(1) do
{ {
i=i%100+l: ++k;
if(i>=100)break; }
} while(k>=0);
C)for(;;); D)int s=3379;
while(s++%2+s%2)s++;
答案:A
評(píng)析:當(dāng)表達(dá)式為非0值時(shí),執(zhí)行while語(yǔ)句中的內(nèi)嵌語(yǔ)句,可用break語(yǔ)句跳出循環(huán),用continue語(yǔ)句結(jié)束本次循環(huán)。選項(xiàng)A不是死循環(huán),當(dāng)i=100時(shí)跳出循環(huán)。選項(xiàng)c為空循環(huán)語(yǔ)句。
(45)以下程序的輸出結(jié)果是________。
#include
main()
{ int i;
for(i=l;i<5;i++){
if(i%2)print引剃’);
else continue;
printf("≠f");
}
printf("$\n");
}
A)*#*#*#$ B)#*#*#*$ C)*#*#$ D)#*#*$
答案:C
評(píng)析:當(dāng)i不可以整除2時(shí)打印"*",然后打印"拌",不能整除2則執(zhí)行continue,跳過(guò)printf("#"):語(yǔ)句,結(jié)束本次循環(huán),返回到循環(huán)的起始點(diǎn)。當(dāng)循環(huán)結(jié)束后,打印"$"。
(46)庫(kù)函數(shù)strcpy用以復(fù)制字符串,若有以下定義和語(yǔ)句:
char strl[]="china",str2[10],*str3,*str4="china";
則對(duì)庫(kù)函數(shù)strcpy的正確的調(diào)用是_________。
A)strcpy(strl,"people"); B)strcpy(str2,"people");
C)strcpy(str3,"people"); D)strcpy(str4,"people");
答案:B
評(píng)析:strcpy(字符數(shù)組1,字符串2)其作用是將字符串2復(fù)制到字符數(shù)組l中去。
注:(1 )字符數(shù)組l必須定義得足夠大;(2)"字符數(shù)組1"必須寫成數(shù)組名的形式; (3)復(fù)制時(shí)連同字符串后面的’\0’一起復(fù)制到字符數(shù)組1中。
(47)有以下程序
#include
main()
{int c;
while((c=getchar())!=’\n’){
switch(C-’2’){
case 0:case 1:putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c+2);break;}
}
}
從第一列開(kāi)始輸入以下數(shù)據(jù),↙代表一個(gè)回車符。
2473↙
程序的輸出結(jié)果是_________。
A)668977 B)668966 C)66778777 D)6688766
答案:A
評(píng)析:getchar()函數(shù)是從鍵盤接受一個(gè)字符輸入;當(dāng)用戶鍵入的字符不是回車符時(shí),會(huì)進(jìn)入一個(gè)多分支選擇語(yǔ)句,根據(jù)C-’2’的值進(jìn)行分支選擇;putchar()是在屏幕上打印一個(gè)字符,最后的結(jié)果應(yīng)當(dāng)為668977。
(48)下面程序的輸出結(jié)果是_________。
Union un
{ int a[4];
long b:
char c[6];}
main()
{
union un u:
printf("%d%d",sizeof(u),sizeof(u.a(chǎn)));
}
A)82 B)88 C)188 D)182
答案:B
評(píng)析:sizeof函數(shù)計(jì)算已知類型所占的字節(jié)數(shù)。共用體變量所占的內(nèi)存長(zhǎng)度等于最長(zhǎng)的成員的長(zhǎng)度。
(49)以下程序的輸出結(jié)果是________。
main()
{ int w=5;fun(w);printf("\n");}
fun(int k)
{ if(k>0) fun(k-1);
printf("%d.t,k);
}
A)5 4 3 2 l B)0 1 2 3 4 5
C)l 2 3 4 5 D)5 4 3 2 l 0
答案:B
評(píng)析:函數(shù)的遞歸調(diào)用就是在調(diào)用一個(gè)函數(shù)的過(guò)程中又出現(xiàn)直接或間接地調(diào)用該函數(shù)本身。fun函數(shù)共被調(diào)用6次,即fun(5)、fun(4)、fun(3)、fun(2)、向n(1)、fun(0)。其中fun(5)是main函數(shù)調(diào)用的。
(50)若巾是指向某文件的指針,且已讀到此文件的末尾,則函數(shù)feof(f1))的返回值是
A)EOF B)O C)非零值 D)NULL
答案:C
評(píng)析:函數(shù)feof是用來(lái)判斷文件是否已讀到末尾,如果已讀到末尾則返回非零值,否則返回O。二、填空題(每空2分,共40分)
請(qǐng)將每一個(gè)空的正確答案寫在答題卡的【1】至【20】序號(hào)的橫線上,答在試卷上不得 分。
(1)算法的復(fù)雜度主要包括時(shí)間復(fù)雜度和 【1】 復(fù)雜度。
答案:【1】空間
評(píng)析:習(xí)慣上常常把語(yǔ)句重復(fù)執(zhí)行的次數(shù)作為算法運(yùn)行時(shí)間的相對(duì)量度,稱作算法的時(shí)間復(fù)雜度。算法在運(yùn)行過(guò)程中需輔助存儲(chǔ)空間的大小稱為算法的空間復(fù)雜度。
(2)數(shù)據(jù)的物理結(jié)構(gòu)在計(jì)算機(jī)存儲(chǔ)空間中的存放形式稱為數(shù)據(jù)的 【2】 。
答案:【2】?jī)?nèi)模式或物理模式或存儲(chǔ)模式
評(píng)析:一個(gè)數(shù)據(jù)庫(kù)只有一個(gè)內(nèi)模式,它是數(shù)據(jù)物理結(jié)構(gòu)和存儲(chǔ)方式的描述,是數(shù)據(jù)庫(kù)內(nèi)部的表示方法。例如,記錄的存儲(chǔ)方式是順序存儲(chǔ)、索引按照什么方式組織;數(shù)據(jù)是否壓縮存儲(chǔ),是否加密等。
(3)若按功能劃分,軟件測(cè)試的方法通常分為 【3】 測(cè)試方法和黑盒測(cè)試方法。
答案:【3】白盒
評(píng)析:軟件測(cè)試的方法有三種:動(dòng)態(tài)測(cè)試、靜態(tài)測(cè)試和正確性證明。設(shè)計(jì)測(cè)試實(shí)例的方法一般有兩類:黑盒測(cè)試方法和自盒測(cè)試方法。
(4)數(shù)據(jù)庫(kù)三級(jí)模式體系結(jié)構(gòu)的劃分,有利于保持?jǐn)?shù)據(jù)庫(kù)的 【4】 。
答案:【4】數(shù)據(jù)獨(dú)立性
評(píng)析:數(shù)據(jù)庫(kù)的三級(jí)模式體系結(jié)構(gòu)把數(shù)據(jù)的組織管理工作進(jìn)行了劃分,把數(shù)據(jù)的具體組織留給DBMS管理,使用戶能邏輯地、抽象地處理數(shù)據(jù),而不必關(guān)心數(shù)據(jù)在計(jì)算機(jī)中的具體表示方式與存儲(chǔ)方式,保證了數(shù)據(jù)的獨(dú)立性。
(5)在關(guān)系運(yùn)算中,查找滿足一定條件的元組的運(yùn)算稱之為 【5】 。
答案:【5】選擇
評(píng)析:在關(guān)系數(shù)據(jù)庫(kù)中,選擇運(yùn)算也是一個(gè)元運(yùn)算,關(guān)系R通過(guò)選擇運(yùn)算(并由該運(yùn)算給出所選擇的邏輯條件)后仍為一個(gè)關(guān)系。這個(gè)關(guān)系是由R中的那些滿足邏輯條件的元組所組成。
(6)在C語(yǔ)言中(以16位PC機(jī)為例),一個(gè)float型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為4;一個(gè)double型數(shù)據(jù)在內(nèi)存中所占的字節(jié)數(shù)為 【6】 。
答案:【6】8
評(píng)析:在一般16位PC機(jī)中,一個(gè)float型數(shù)據(jù)在內(nèi)存中占4個(gè)字節(jié)(32位),一個(gè)double型數(shù)據(jù)占8個(gè)字節(jié)。
(7)設(shè)有以下變量定義,并已賦確定的值,
char w;int x;float y;double z;
則表達(dá)式:w*x+z-y所求得的數(shù)據(jù)類型為 【7】 。
答案:【7】double型或雙精度型
評(píng)析:①先進(jìn)行W*X的運(yùn)算,先將字符型w轉(zhuǎn)換成整型,運(yùn)算結(jié)果為整型;②再將W*X的結(jié)果與z相加,要先將第一步的整型轉(zhuǎn)換為double型,運(yùn)算結(jié)果為 double型;③最后將W*X+Z的結(jié)果與y相減,要先將float型y轉(zhuǎn)換成double型,結(jié)果為double型。
(8)若運(yùn)行時(shí)給變量x輸入12,則以下程序的運(yùn)行結(jié)果是 【8】??;
main(){
int,y;
scanf(""%d"",&X);
y=x>12?x+lO:x-12;
printf(""%d\n"",y);
}
答案:【8】0
評(píng)析:三目運(yùn)算符的形式為(表達(dá)式1)7(表達(dá)式2):(表達(dá)式3)。當(dāng)(表達(dá)式1)值為真時(shí),返回(表達(dá)式2)的值;為假時(shí),返回(表達(dá)式3)的值。題中因?yàn)閤>t2為假,所以結(jié)果為x-12,即為0。
(9)四條語(yǔ)句:x++;、++x;、x=x+l;、x=l+x;,執(zhí)行后都使變量x中的值增l,請(qǐng)寫出一條同一功能的賦值語(yǔ)句(不得與列舉的相同) 【9】 。
答案:【9】x+=1:
評(píng)析:題面中的四條語(yǔ)句的作用是使x的值加1,在c中有多種方法可以對(duì)變量進(jìn)行加1操作,這里可以利用C的復(fù)合賦值運(yùn)算符+=實(shí)現(xiàn),本題答案為x+=1:。
(10)設(shè)有以下定義和語(yǔ)句,則*(*(p+2)+1)的值為 【10】 。
int[3][2] ={10,20,30,40,50,60},(*p)[2];
p=a;
答案:【10】60
評(píng)析:本題定義了一個(gè)3行2列的二維數(shù)組a,并定義了一個(gè)指向兩個(gè)元素的一維數(shù)組指針p,讓p指向二維數(shù)組a的首行。*(*(p+2)+1)是引用a[2][1],其值是60。
(11)若要使指針p指向一個(gè)double類型的動(dòng)態(tài)存儲(chǔ)單元,請(qǐng)?zhí)羁铡?BR> p= 【11】 malloc(sizeof(double));
答案:【11】(double*)
評(píng)析:函數(shù)malloc返回的是void*,所以若要使指針指向一個(gè)double類型,則必須進(jìn)行類型轉(zhuǎn)換,類型轉(zhuǎn)換格式為:(數(shù)據(jù)類型*)。
(12)下面程序的功能:輸出100以內(nèi)能被3整除且個(gè)位數(shù)為6的所有整數(shù),請(qǐng)補(bǔ)充完整。
main().
{ int ij;
for(i=O; 【12】?。籭++)
{ j=I*10+6;
if( 【13】 )continue;
printf("%d",j);
}
}
答案:【12】i
評(píng)析:本題要求輸出100以內(nèi)能被3整除且個(gè)位數(shù)為6的所有整數(shù),程序中j=i*10+6;語(yǔ)句是求個(gè)位數(shù)為6的整數(shù),由此可得出程序的循環(huán)次數(shù)為 i
當(dāng)s>t返回正值,當(dāng)s
{ while(*s==*t)
{ if(*s==’\0’)return 0;
++s;++t;
}
return( 【14】 );
}
答案:【14】*s-*t或-*t+*s
評(píng)析:函數(shù)的兩個(gè)形參是兩個(gè)字符指針變量,字符串的首地址是指針變量的值,*s和*t表示字符串?dāng)?shù)組s和t的第一個(gè)字符,在while循環(huán)中,是通過(guò)s和t值的不斷變化來(lái)改變指針?biāo)赶虻淖址?,要改變s和t所指不同字符的ASCII碼的差值,必須使用"*s-*t"得出。(14)以下程序運(yùn)行后的輸出結(jié)果是 【15】 。
void fun(、)
{
static int a=0:
a+=2;printf("%d",a);
}
main()
{ int cc;
for(CC=1;cc<4;cc++)fun();
printf("\n");
}
答案:【15】2 4 6
評(píng)析:static聲明的外部變量只限于被本文件引用,而不能被其他文件引用。用static來(lái)聲明一個(gè)變量的作用有:①對(duì)局部變量用static聲明,則為該變量分配的空間在整個(gè)程序執(zhí)行期間始終存在;②全部變量用static聲明,則該變量的作用域只限于本文件模塊(即被聲明的文件中)。
(15)下列程序的運(yùn)行結(jié)果是 【16】 。
main()
{ union EXAMPLE
{ struct
{int x;int y;}in;
int a;
int b:
}e;
e.a(chǎn)=1;e.b= 2;
e.in.x=e.a(chǎn)*e.b;
e.in.y=e.a(chǎn)+e.b;
printf("%d,%d\n",e.in.x,e.in.y);
}
答案:【16】4,8
評(píng)析:c語(yǔ)言規(guī)定,共用體中各個(gè)成員變量在內(nèi)存中占用同一段內(nèi)存單元,即e.in.x和e.a(chǎn)、e.b占用同一段內(nèi)存單元,由于e.in.x和e.a(chǎn)、e.b占用的是同一段內(nèi)存單元,所以程序最后的打印結(jié)果為"4,8"。
(16)在對(duì)文件進(jìn)行操作的過(guò)程中,若要求文件的位置回到文件的開(kāi)頭,應(yīng)當(dāng)調(diào)用的函數(shù) 是 【17】 函數(shù)。
答案:【17】[NNlrewind或fseek
評(píng)析:在對(duì)文件進(jìn)行操作的過(guò)程中,若要求文件的位置回到文件的開(kāi)頭,可以調(diào)用rewind或fseek函數(shù)。其中rewind函數(shù)的作用是將位置指針重新返回文件的開(kāi)頭,而fseek函數(shù)可以實(shí)現(xiàn)文件指針的定位。
(17)以下函數(shù)用于求出一個(gè)2×4矩陣中的元素值。
max_value(arr)
int arr[][4];
{
int I,J,max;
max=alT[0][0];
for(i=0;i<2;i++)
for(j=0; 【18】 ;J++)
if( 【19】 >max)max=[2Q];
return(max);
}
答案:【18】j<4
【19】arr[i][j]
【20】arr[i][j]
評(píng)析:2*4矩陣實(shí)際上就是一個(gè)二維數(shù)組,結(jié)合本題應(yīng)為arr[2][4],所以在第一個(gè)循環(huán)中應(yīng)當(dāng)填寫"4";第二個(gè)橫線處是要判斷當(dāng)前的數(shù)組元素值是否大于max,所以應(yīng)填寫arr[i][j];第三個(gè)橫線處是要將當(dāng)前大于max的數(shù)組元素的值賦給變量max,所以應(yīng)當(dāng)填寫"arr[i][il"。
< p>
(29)請(qǐng)讀程序:
#include
main()
{
int a=5,b=7,c=9;
printf("%d,%d,",a,b,c);
printf("%d,%d,%d,"a,b);
}
上面程序的輸出結(jié)果是________。
A)5,7,9,5,7 B)5,7,5,7 C)5,7,不定,7,9 D)5,7,5,7,不定
答案:D
評(píng)析:printf函數(shù)按格式控制符的個(gè)數(shù)輸出表列中對(duì)應(yīng)的數(shù)據(jù),若輸出表列的個(gè)數(shù)大于格式控制符個(gè)數(shù),則輸出與格式控制符對(duì)應(yīng)的輸出表列的數(shù)據(jù),輸出表列中多的則省略;若格式控制符個(gè)數(shù)大于輸出表列的個(gè)數(shù),則輸出與格式控制符對(duì)應(yīng)的輸出表列的數(shù)據(jù),格式控制符多的部分輸出的數(shù)據(jù)是隨機(jī)的。
(30)請(qǐng)讀程序:
#incIude
func(int a,int b){
Int C;
c=a+b:
return C:
}
main(){
int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}
上面程序的輸出結(jié)果是________。
A)ll B)20 C)2l D)31
答案:C
評(píng)析:函數(shù)func()的作用是 返回兩個(gè)形參的和,第一個(gè)形參是x、y分別自減和自增后的和,其中(x--,y++,x+y)是一個(gè)逗號(hào)表達(dá)式,它的值應(yīng)該等于x+y,所以整個(gè)表達(dá)式 (x--,y++,x+y)的值為13,而第二個(gè)形參的值為8(根據(jù)語(yǔ)法規(guī)則,應(yīng)當(dāng)先使用,后自增),所以func()的返回值為13+8=21。(31)請(qǐng)讀程序:
#include
main()
{
int a,b;
for(a=l,b=1;a<=100;a十+){
if(b>=20)break;
if(b%3==1){b+=3;continue;}
b-=5:
}
printf("%d\n",a);
}
上面程序的輸出結(jié)果是_________。
A)7 B)8 C)9 D)10
答案:B
評(píng)析:break語(yǔ)句的作用是用于跳出循環(huán)體; continue語(yǔ)句的作用是用于跳出本次循環(huán)。執(zhí)行第一次循環(huán)時(shí),(b%3==1)為真,b=4,繼續(xù)下一次循環(huán),如此反復(fù),當(dāng)b=22時(shí)結(jié)束循環(huán),共循環(huán)8次,即a=8。
(14)以下程序運(yùn)行后的輸出結(jié)果是 【15】 。
void fun(、)
{
static int a=0:
a+=2;printf("%d",a);
}
main()
{ int cc;
for(CC=1;cc<4;cc++)fun();
printf("\n");
}
答案:【15】2 4 6
評(píng)析:static聲明的外部變量只限于被本文件引用,而不能被其他文件引用。用static來(lái)聲明一個(gè)變量的作用有:①對(duì)局部變量用static聲明,則為該變量分配的空間在整個(gè)程序執(zhí)行期間始終存在;②全部變量用static聲明,則該變量的作用域只限于本文件模塊(即被聲明的文件中)。
(15)下列程序的運(yùn)行結(jié)果是 【16】 。
main()
{ union EXAMPLE
{ struct
{int x;int y;}in;
int a;
int b:
}e;
e.a(chǎn)=1;e.b=2;
e.in.x=e.a(chǎn)*e.b;
e.in.y=e.a(chǎn)+e.b;
printf("%d,%d\n",e.in.x,e.in.y);
}
答案:【16】4,8
評(píng)析:c語(yǔ)言規(guī)定,共用體中各個(gè)成員變量在內(nèi)存中占用同一段內(nèi)存單元,即e.in.x和e.a(chǎn)、e.b占用同一段內(nèi)存單元,由于e.in.x和e.a(chǎn)、e.b占用的是同一段內(nèi)存單元,所以程序最后的打印結(jié)果為"4,8"。
(16)在對(duì)文件進(jìn)行操作的過(guò)程中,若要求文件的位置回到文件的開(kāi)頭,應(yīng)當(dāng)調(diào)用的函數(shù) 是 【17】 函數(shù)。
答案:【17】[NNlrewind或fseek
評(píng)析:在對(duì)文件進(jìn)行操作的過(guò)程中,若要求文件的位置回到文件的開(kāi)頭,可以調(diào)用rewind或fseek函數(shù)。其中rewind函數(shù)的作用是將位置指針重新返回文件的開(kāi)頭,而fseek函數(shù)可以實(shí)現(xiàn)文件指針的定位。
(17)以下函數(shù)用于求出一個(gè)2×4矩陣中的元素值。
max_value(arr)
int arr[][4];
{
int I,J, max;
max=alT[0][0];
for(i=0;i<2;i++)
for(j=0; 【18】 ;J++)
if( 【19】 >max)max=[2Q];
return(max);
}
答案:【18】j<4
【19】arr[i][j]
【20】arr[i][j]
評(píng)析:2*4矩陣實(shí)際上就是一個(gè)二維數(shù)組,結(jié)合本題應(yīng)為arr[2][4],所以在第一個(gè)循環(huán)中應(yīng)當(dāng)填寫"4";第二個(gè)橫線處是要判斷當(dāng)前的數(shù)組元素值是否大于max,所以應(yīng)填寫arr[i][j];第三個(gè)橫線處是要將當(dāng)前大于max的數(shù)組元素的值賦給變量max,所以應(yīng)當(dāng)填寫"arr[i][il"。