x++:
y++;执行后x和y的值为()。
A.x=3,y=2B.x=4,y=3C.x=4,y=2D.x=3,y=3
4.下面哪个数据类型不属于基本类型()。
A.intB.floatC.enumD.signedint
5.以下程序运行后,输出结果是()。
#definePOWER(X)X*X
intmain()
{inta=2,b=2;printf(“%d”,POWER(a+b));return0;}
A.8B.16C.12D.4
6.下面哪个变量名的命名是非法的()。
A.3YearNoB._iTotal
C.iIndex_1_2_3D.uMonth
7.下面程序的输出是()。
#include
intmain()
{
intk=1,i=3,n;
n=(k+=i*=k);
printf("n=%d,i=%d\n",n,i);
return0;
}
A.n=4,i=3B.i=3,n=4C.n=16,i=3D.n=4,i=4
8.已知字符A的ACSII码值为65,以下语句的输出结果是()。
charch=‘B’;
printf(“%c,%o\n”,ch,ch);
A.B,66B.B,BC.B,102D.A,B
9.表达式(x>y>0)等价于()。
A.(x>y)&&(y>0)B.x>0&&y>0
C.x>0||y>0D.x>y
10.有“C语言之父”之称的下面哪一位()。
A.DennisM.Ritchie;B.KenThompson;
C.AlanJ.Perlis;D.AlanTurning;
11.声明数组inta[4];下面哪条语句操作是错误的()。
A.a[2]=3;B.scanf(“%d”,&a);
C.scanf(“%d”,&a[2]);D.printf(“%d”,a[0]);
12.若二维数组a有x行,y列,则在a[i][j]之前的元素个数为()。
A.j*x+iB.i*y+jC.i*x+y-1D.i*y+j-1
13.有如下程序:
intf(intx){
inty;
if(x==0||x==1)return(3);
y=x*x-f(x-1);
returny;}
intmain(){
intz;
z=f(3);
printf(“%d\n”,z);return0;}
程序的运行结果是
A.0B.9C.6D.8
14.如下程序:
structA{inta;charb[10];doublec;};
structAf(structAt);
intmain(){
structAa={1001,"ZhangSan",98.0};
a=f(a);
printf("%d,%s,%6.1f\n",a.a,a.b,a.c);return0;}
structAf(structAt){
t.a=1002;
strcpy(t.b,"LiSi");
t.c=92.0;returnt;}
程序运行后的输出结果是:
A.1001,ZhangSan,98.0B.1002,ZhangSan,92.0
C.1001,LiSi,98.0D.1002,LiSi,92.0
15.定义一个3行4列的二维整型元素数组a正确的方式是()。
A.inta[4][3];B.inta[3,4];C.inta[3][4];D.int*a[3][4];
16.下面哪个运算符表示”位与”运算符
A.&&B.|C.&D.~
17.以"只读"方式打开位于D盘根目录的文件a.dat,下列语句中哪一个是正确的( )。
A.fp=fopen("d:
\\a.dat","a");B.fp=fopen("d:
\a.dat","a");
C.fp=fopen("d:
\a.dat","r");D.fp=fopen("d:
\\a.dat","r");
18.已知:
intb[2]={1,2},y=0;int*p=b;,则执行语句y=*p++;之后,变量y的值为()。
A.1B.2C.3D.0
19.下面哪个语句是函数的原型声明
A.f(a,b)B.intf(inta,5);
C.intf(inta,intb);D.intf(inta=5,intb=6);
20.下面程序将输出:
()。
voidfun(inta,int*b){
a++;
(*b)++;
return;}
intmain()
{intx,y;
x=2;
y=3;
fun(x,&y);
printf("%d,%d",x,y);
}
A.2,3B.3,4C.2,4D.3,3
二、填空题(每空2分,共30分)
请将正确选项写在下表相应位置上,答在其他位置不得分。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.以下程序运行后,输出结果是1。
#include
intmain(){
int c=0,k;
for(k=1;k<3;k++)
switch(k)
{
default:
c+=k;
case2:
c++;
case4:
c+=2;
}
printf("%d\n",c);
return0 ;}
2.C语言程序的三种基本结构是2。
3.下面这段程序运行的结果是:
3。
voidswap(int*x,int*y)
{
*x=*x^*y;
*y=*y^*x;
*x=*x^*y;
}
intmain()
{
inta=3,b=4;
swap(&a,&b);
printf("a=%d,b=%d\n",a,b);
return0;
}
4.下面这段程序运行的结果是:
4。
voidsum(int*a)
{a[0]+=a[1];}
intmain()
{
intaa[10]={1,2,3,4,5,6,7,8,9};
inti;
for(i=3;i>=0;i--)sum(&aa[i]);
printf("%d\n",aa[0]);
return0;
}
5.有以下程序,执行后输出结果是5。
intmain()
{
unsignedchara,b;
a=4|1;
b=4||0;
printf("a=%d,b=%d\n",a,b);
return0;
}
6.有如下程序,其中的“defau1t”的“1”实际上是数字1不是字母L,这样的情况下当程序运行后键盘输入3后回车,程序输出结果是6。
#include
intmain()
{
intiToTest;
scanf("%d",&iToTest);
switch(iToTest)
{
case1:
printf("whatyouinputis1.\n");
break;
case2:
printf("whatyouinputis2.\n");
break;
defau1t:
iToTest++;
break;
}
printf("iToTest=%d\n",iToTest);
return0;}
7.下列程序的运行结果是7。
#include
intmain()
{inti,j,x;
i=8;
j=9;
if(++ix=1;
else
x=0;
printf("%d\n",x);
return0;
}
8.下列程序的运行结果是8。
intmain()
{
inta=3;
intb=3;
if(2==a&&++b){
a=a+1;
}
if(3==a||++b){
a=a+1;
}
printf("a=%i,b=%i\n",a,b);
return0;}
9.已知inta=4,b=20;则(a+3)/3+a%b的值为:
9。
10.如下的流程图说明程序是在完成什么事情10。
11.输入两个正整数m和n,求其最大公约数和最小公倍数。
请将程序填完整。
intmain()
{intp,r,n,m,temp;
scanf(“%d,%d”,&n,&m);
if(n11;
12;
13;
}
p=n*m;
while(m!
=0){
r=n%m;
n=m;
m=r;
}
printf(“最大公约数为:
%d\n”,n);
printf(“最小公倍数为:
%d\n”,p/n);
return0;
}
12.下面的程序将大写字母变为小写字母字,请将程序填完整。
#include
intmain()
{
charch='A';
ch=(14)?
(ch+32):
15;
printf("ch=%c\n",ch);
return0;
}
三、程序阅读题(每题3分,共18分)
请将下列各程序的功能或结果写在下表相应位置上,答在其他位置不得分。
1.
2.
3.
4.
5.
6.
1.intmax2(intx,inty){
intz ;
if(x>y)z=x ;
elsez=y ;
returnz ;}
intmax3(intx,inty,intz){
intmax ;
max=max2(x,y) ;
if(maxreturnmax;}
intmain()
{intx,y,z,max;
scanf(“%d,%d,%d”,&x,&y,&z);
max=max3(x,y,z) ;
printf("max=%d\n",max);
return0 ;}
2.#include
intmain()
{
inta[][3]={{1,2,3},{4,5,6}};
intb[3][2],iRow,iCol;
for(iRow=0;iRow<=1;iRow++)
{
for(iCol=0;iCol<=2;iCol++)
{
b[iCol][iRow]=a[iRow][iCol];
}
}
return0;}
3.#include
intmain()
{
inta[10];
inti,j,t;
printf("input10numbers:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
{
if(a[i]>a[i+1]){
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
printf("thesortednumbers:
\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
return0;}
4.#include
#include
intmain(void)
{
FILE*fp;
charch,filename[10];
printf("Pleaseinputthefilenameyouwanttocreat:
");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
printf("cannotopenfile\n");
exit(0);//终止程序
}
ch=getchar();
//接收输入的第一个字符
ch=getchar();
while(ch!
='#'){
fputc(ch,fp);
ch=getchar();
}
fclose(fp);
return0;}
5.#include
#include
intmain()
{floata,b,c,s,s1;
scanf(“%f%f%f”,&a,&b,&c);
s=(a+b+c)/2;
s1=s*(s-a)*(s-b)*(s-c);
s=sqrt(s1);
printf(“%f\n”,s);
return0;}
6.#include
#include
structperson
{
charname[20];
intcount;
};
structpersonCandidate[2]={{"Li",0},{"Zhang",0}};
intmain()
{
inti,j;
charCandidate_name[20];
printf("Pleaseinputthecandidatename\ntype'exit'stop!
\n");
do
{
scanf("%s",Candidate_name);
for(j=0;j<2;j++)
{
if(0==strcmp(Candidate_name,Candidate[j].name))
Candidate[j].count++;}
}while(0!
=
strcmp(Candidate_name,exit"));
if(Candidate[0].count>
Candidate[1].count)
printf("ThewinnerisLi\n");
else
printf("ThewinnerisZhang");
return0;
}
四、程序改错(每空2分,共6分)
请将正确选项写在下表相应位置上,答在其他位置不得分。
每题有1处错误并修改之。
1
2
3
1.#include
intmain()
{
floata[10]={0.0};
inti;
for(i=0;i<3;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
a[0]=a[0]+a[i];
printf("%f\n",a[0]);
return0;
}
2.#include
intmain()
{intx,y;
printf(“Pleaseinputtownumber:
”);
scanf(“%d,%d”,&x,&y);
if(x=y)
printf(“Youinputthesamenumber”);
else
printf(“Youinputtwodifferentnumber”);
return0;
}
3.//判断输入的10个数是否全是偶数
#include
intmain()
{
inta[10]={0};
inti;
for(i=0;i<10;i++){
scanf(“%d,”,&a[i]);
}
for(i=0;i<10;i++)
if(a[i]%2!
=0)
continue;
if(i<10)
printf(“Youinputhaveoddnumber”);
else
printf(“Youinputhavenooddnumber”);
return0;}
五、编程题(共26分)
1.(10分)请用指针方式实现复制一个字符串的功能。
2.(16分)编程实现矩阵和的相乘,要求输出结果。
参考答案:
一、单项选择题(每题1分,共20分)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
A
B
D
C
A
A
A
C
D
A
B
B
D
D
C
C
D
A
C
C
二、填空题(每空2分,共30分)
1.7
2.顺序、选择、循环
3.a=4,b=3
4.15
5.a=4,b=1
6.iToTest=3
7.0
8.a=4,b=3
9.6
10.计算5!
11. temp=n
12.n=m
13.m=temp
14ch>=‘A’&&ch<=‘Z’
15.ch
三、程序阅读题(每题3分,共18分)
1.求三个数的最大数
2.矩阵转置
3.输入10个数,用冒泡法进行排序
4.创建一个文件,向文件中输入字符,直到输入一个“#”为止
5.由键盘输入三个数a,b,c,计算以这三个数为边长的三角形面积
6.统计两位候选人的选票数,输出谁得的选票最多
四、程序改错(每空2分,共6分)
1
scanf("%d",&a[i]);改为scanf("%f",&a[i]);
2
if(x=y)改为if(x==y)
3
continue;改为break;
五、编程题(共26分)
1.(10分)请用指针方式实现复制一个字符串的功能。
#include
intmain()
{
voidcopy_string(char*from,char*to);
charchar_Arrayfrom[]="Iamateacher.";
charchar_Arrayto[]="youareastudent.";
char*pointer_charfrom=char_Arrayfrom;
char*pointer_charto=char_Arrayto;
copy_string(pointer_charfrom,pointer_charto);
printf("\nstringfrom=%s\nstringto=%s\n",pointer_charfrom,pointer_charto);
return0;
}
voidcopy_string(char*from,char*to)
{
for(;*from!
='\0';from++,to++)
{
*to=*from;
}
*to='\0';}
//copy_string函数也可以用如下两种形式实现
voidcopy_string(char*from,char*to)
{
while((*to=*from)!
='\0')
{
to++;
from++;
}
}
voidcopy_string(char*from,char*to)
{
while(*to++=*from++);
}
2.(16分)编程实现矩阵和的相乘,要求输出结果。
#include
/*calculatetheresult*/
voidmatrix_multiply(intresult[3][3],intmatrix1[3][2],intmatrix2[2][3]){
introw,col,element;
for(row=0;row<3;row++)
{
for(col=0;col<3;col++)
{
result[row][col]=0;
for(element=0;element<2;element++)
{
result[row][col]+=
matrix1[row][element]*matrix2[element][col];
}
}
}
}
voidmatrix_print(intmatrix[3][3])
{
introw,col;
for(row=0;row<3;row++)
{
for(col=0;col<3;col++)
{
printf("%d",matrix[row][col]);
}
printf("\n");
}
}
intmain()
{
intmatrix_a[3][2]={
{1,2},
{3,4},
{5,6}
};
intmatrix_b[2][3]={
{7,8,9},
{10,11,12},