一、選擇題(每小題1分,共計10分)
1.以下敘述正確的是()。
A.在編譯時可以發現注釋中的拚寫錯誤
B.C語言程序的每一行隻能寫一條語句
C.main(){}必須位於程序的開始
D.C語言程序可以由一個或者多個函數組成
2.以下選項中不能用作變量名的是()。
A.floatB.switchC.sumD.123
3.若定義“intm=7,n=12;”,則能得到值為3的表達式是()
A.n%=(m%=5)B.n%=(m-m%5)
C.n%=m-m%5D.(n%=m)-(m%=5)
4.已知sizeof(int)的值為2,為將10!的值存儲到變量f中(10!=3628800),變量f的類型應聲明為()。
A.longintB.intC.shortintD.unsignedint
5.若有聲明“doublex=3,c,*a=&x,*b=&c;”,則下列語句中錯誤的是()。
A.a=b=0;B.a=&c;b=a;C.&a=&b;D.*b=*a;
6.數學式a〖〗2b在C語言程序中正確的表示形式為()。
A.sqrt(a)/2*bB.sqrt(a)/2/b
C.sqrt(a)/2bD.sqrt(a)/(2*b)
7.為了避免嵌套的if-else語句的二義性,C語言規定else總是與()組成配對關係。
A.縮排位置相同的if
B.在其之前未配對的if
C.在其之前最近的未配對的if
D.同一行上的if
8.關於下麵的程序,以下選項中正確的是()。
main()
{intx=3,y=0,z=0;
if(x=y+z)printf("****");
elseprintf("####");}
A.有語法錯誤不能通過編譯
B.輸出****
C.可以通過編譯,但是不能通過連接,因而不能運行
D.輸出####
9.設x和y均為int型變量,則執行下麵的循環後,y值為()
for(y=1,x=1;y
=10)break;
if(x%2==1){x+=5;continue;}
x-=3;}
A.2B.4C.6D.8
10.已知有程序段“charstr[][10]={"Aoyun","Beijing"},*p=&str[0][0];printf("%s\n",p+10);”,則執行printf語句後輸出為()。
A.BeijingB.AoyunC.ingD.ng
二、填空題(每空2分,共計50分)
1.已知有函數定義“intfun(){return(45);}”,則調用fun後的函數返回值是。
2.設有聲明“inta=3,b=4;floatx=45,y=35;”,則表達式(float)(a+b)/2+(int)x%(int)y的值是。
3.若有定義“enumTP{A,B,C};”,則執行語句“printf("%d\n",A+1);”後輸出結果是。
4.C語言中,函數實參與形參之間隻能進行值傳遞。
5.設有說明語句“inta[3][4]={{1,2},{3,4,5},{6,7,8}};”,則a[0][2]的初始化值為。
6.以下程序運行時輸出結果為。
#include
voidmain()
{inti,sum=0;
for(i=0;i
#include
voidsf(char*s1,char*s2)
{if(*s1=*s2)
sf(s1+1,s2+1);
}
voidmain()
{chara[20]="ABC",b[20]="xyz";
sf(a+strlen(a),b);
puts(a);
}
9.以下程序運行後輸出結果的第一行是,第二行是。
#include
voidmain()
{inti,j,a[3][3];
for(i=0;i
main()
{
intn,s,sum=0;
scanf("%d",&n);
for(inti=1;i
#defineN10
invert(s,i,j)
int*s,i,j;
{intt;if(i
#defineN5
voidfun(intxr[][N],intn)
{
inti,j,t,arr,col;
for(i=0;i=arr)
{
arr=x[i][j];
;
}
t=x[i][i];
;
x[i][col]=t;
}
for(i=0;inext==NULL)。
#include
structlist{intdata;structlist*next;};
creatlist()
{structlist*p,*q,*ph;inta;
ph=(structlist*)malloc(sizeof(structlist));
p=q=ph;printf("Inputanintegernumber,enter-1toend:\n");
scanf("%d",&a);
while(a!=-1)
{p=(structlist*)malloc(sizeof(structlist));
p->data=a;
q->next=p;
=p;
scanf("%d",&a);}
p->next=\0;
return(ph);
}
main()
{structlist*head;head=creatlist();}
三、改錯題(每錯5分,共計20分)
【程序功能】
對整型數組中的各個元素(各不相同)按其所存數據的大小進行編號(從小到大連續編號),要求不改變數組中各元素的順序。
例如:數組num值為“3,14,4,25,13,17,20”,輸出“1,4,2,7,3,5,6”。
【含有錯誤的源程序】
#include
#defineN7
main()
{intnum[N],s[n],i,j,k;
staticintar[]=[3,14,4,25,13,17,20];
for(i=0;i”,為使語句“zx=fopen("c:\\a.txt","r");”能正常執行,在該語句之前必須聲明。
6.如果輸入值6、10,則以下程序的運行結果是。
main()
{floata,b;
intc;
scanf("%f,%f",&a,&b);
c=max(a,b);
printf("Maxis%d\n",c);
}
max(floatx,floaty)
{floatz;
z=x>y?x:y;
return(z);
}
7.如果a、b的值分別為5、9,則以下程序的運行結果是。
swap(p1,p2)
int*p1,*p2;
{intp;
p=*p1;
*p1=*p2;
*p2=p;
}
main()
{inta,b;
scanf("%d,%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
printf("swapped:\n");
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
}
8.使用命令行方式執行下列程序時,輸出結果是。
命令:testChinaNanjingForestUniversity
main(intargc,char*argv[])/*test.c*/
{while(argc>1)
{++argv;
printf("%s\n",*argv);
--argc;
}
}
9.以下程序運行時輸出結果是。
voidPrintStr(char*s)
{
if(*s)
PrintStr(s+1);
putchar(*s)
}
voidmain()
{
PrintStr("China");
}
10.以下程序運行時輸出結果是。
#include
voidf(longx)
{if(x
main()
{inti,j,a[3][3]={0};
for(i=0;i
voidsub(n,uu)
intn,uu[];
{intt;
t=uu[n--];t+=3*uu[n];