z||1)C)x<=yD)x||++y&&y-z
12.以下程序运行结果是()。
#include
intfun(inti,intj)
{i++,j++;
returni+j;
}
intmain()
{inta=1,b=2,c=3;
c+=fun(a,b)+a;
printf("%d,%d,%d\n",a,b,c);
return0;
}
√A)1,2,9B)2,3,10C)1,2,10D)2,3,9
13.有以下程序,程序执行后的输出结果是()。
#include
intmain()
{inta[]={2,4,6,8,10},y=0,x,*p;
p=&a[1];
for(x=1;x<3;x++)
y+=p[x];
printf("%d\n",y);
return0;
}
A)10B)11√C)14D)15
14.有以下程序,以下叙述正确的是()。
#include
#include
intmain()
{charp[]={'a','b','c'},q[10]={'a','b','c'};
printf("%d%d\n",strlen(p),strlen(q));
return0;
}
A)在给p和q数组赋初值时,系统会自动添加字符串结束符,故输出的长度都为3。
√B)由于p数组中没有字符串结束符,长度不能确定;但q数组中字符串长度为3。
C)由于q数组中没有字符串结束符,长度不能确定;但p数组中字符串长度为3。
D)由于p和q数组中都没有字符串结束符,故长度都不确定。
15.下列可用于C语言用户标识符的一组是()。
A)void,define,WORD√B)a3_3,_123,Car
C)For,-abc,IFCaseD)2a,DO,sizeof
16.以下选项中不属于字符常量的是
A)′C′√B)′′C′′C)′\xCC′D)′\072′
17.(15)以下定义语句中正确的是()。
A)inta=b=0;√B)charA=65+1,b=′b′;
C)floata=1,*b=&a,*c=&b;D)doublea=00;b=1.1;
18.当变量c的值不为2、4、6时,值也为"真"的表达式是()。
A)(c==2)||(c==4)||(c==6)√B)(c>=2&&c<=6)||(c!
=3)||(c!
=5)
C)(c>=2&&c<=6)&&!
(c%2)D)(c>=2&&c<=6)&&(c%2!
=1)
19.下面说明不正确的是()。
A)chara[10]="china";B)chara[10],*p=a;p="china";
C)char*a;a="china";√D)chara[10],*p;p=a="china";
20.有定义语句:
chars[10];,若要从终端给s输入5个字符,错误的输入语句是()。
A)gets(&s[0]);B)scanf("%s",s+1);C)gets(s);√D)scanf("%s",s[1]);
21.有以下程序,程序执行后的输出结果是()。
#include
voidmain()
{unsignedshorta=65535;
shortb;
b=a;
printf("%d\n",b);
}
A)65535B)0√C)-1D)1
22.在C语言中,以下叙述不正确的是()。
√A)在C程序中,无论是整数还是实数,都能被准确无误的表示
B)在C程序中,变量名代表存储器中的一个位置
C)静态变量的生存期与整个程序的生存期相同
D)C语言中变量必须先定义后引用
23.以下叙述中错误的是()。
A)在程序中凡是以"#"开始的语句行都是预处理命令行
B)预处理命令行的最后不能以分号表示结束
C)#defineMAX是合法的宏定义命令行
√D)C程序对预处理命令行的处理是在程序执行的过程中进行的
24.设有以下说明语句
typedefstruct
{intn;
charch[8];
}PER;
则下面叙述中正确的是()。
A)PER是结构体变量名√B)PER是结构体类型名
C)typedefstruct是结构体类型D)struct是结构体类型名
25.以下叙述中错误的是()。
A)gets函数用于从终端读入字符串√B)getchar函数用于从磁盘文件读入字符
C)fputs函数用于把字符串输出到文件D)fwrite函数用于以二进制形式输出数据到文件
26.有以下程序
#include
main()
{charp[]={′a′,′b′,′c′},q[10]={′a′,′b′,′c′};
printf("%d%d\n",strlen(p),strlen(q));}
以下叙述中正确的是()。
A)在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
√B)由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3
C)由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3
D)由于p和q数组中都没有字符串结束符,故长度都不能确定
27.设有:
inta=1,b=2,c=3,d=4,m=2,n=2;
执行(m=a>b)&&(n=c>d)后,n的值是()。
A)1√B)2C)3D)4
28.设有如下定义:
intx=10,y=3,z;
则语句
printf("%d\n",z=(x%y,x/y));
的输出结果是()。
A)0B)1√C)3D)4
29.下面的程序
#include
voidmain()
{
charch;
scanf("%3c",&ch);
printf("%c",ch);
}
如果从键盘上输入abc回车
则程序的运行结果是()。
√A)aB)bC)cD)程序语法出错
30.以下程序的运行结果是()。
#include
voidmain()
{intx[]={1,2,3};
ints,i,*p=x;
s=1;
for(i=0;i<3;i++)s*=*(p+i);
printf("%d\n",s);
}
A)7√B)6C)3D)8
二、填空题
1、函数add要求计算两个整数之和,并通过形参返回该值,代码如下:
voidadd(intx,inty,int*sum){*sum=x+y;}
2、程序设计中,需要定义一个指针变量p,该变量可以指向一个长度为5的字符型数组,定义代码如下:
char(*p)[5];。
3、设整型变量n的值为2,执行语句“n+=n-=n*n”后,n的值是 -4 。
4、共用体和结构体的定义格式类似,不同点是 结构体的成员占有各自不同的空间,而共用体的各成员放到同一存储空间。
。
5、设变量max、a、b已经正确定义,若要求a和b的最大值,并赋值给max,代码为:
max=a>b?
a:
b;。
6、下列程序的输出结果是 7,1 。
intast(intx,inty,int*cp,int*dp)
{*cp=x+y; *dp=x-y; }
main()
{inta=4,b=3,c,d;
ast(a,b,&c,&d);
printf("%d,%d/n",c,d); }
7、有如下输入语句:
scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量a的值为1,b的值为3,c的值为2,从键盘输入数据的正确形式应是 a=1,b=3,c=2 。
8、一个共用体类型的变量,其所占内存的大小是:
由占据内存空间最大的成员决定。
9、设有定义:
intx=12,n=5;则表达式x%=(n%2)的值为 0 。
10、设有floatx;写出得到x小数部分的表达式x-(int)x。
(假设x为12.345,则表达式的结果为0.345)
三、程序运行结果分析题
1.
#include
main()
{inta=5,b=4,x,y;
x=2*a++;
printf("a=%d,x=%d\n",a,x);
y=--b*2 ;
printf("b=%d,y=%d\n",b,y);
}
则程序运行结果是:
a=6,x=10
b=3,y=6
2.
#include
voidfun1(intx)
{x=20;}
voidfun2(intb[4])
{intj;
for(j=0;j<4;j++){b[j]=j;}
}
main()
{intx=10;
inta[4]={1,2,3,4},k;
fun1(x);
printf("x=%d\n",x);
fun2(a);
for(k=0;k<4;k++)
{printf("%d\n",a[k]);}
}
运行结果是:
x=10
0
1
2
3
3.
#include
main()
{intx,y;
scanf("%2d%*4s%2d",&x,&y);
printf("%d",y-x);
}
程序运行时输入:
123456789↙
则程序运行结果是:
66
4.
#include
structdate
{intyear;
intmonth;
intday;
};
voidfunc(structdatep)
{p.year=2000;
p.month=5;
p.day=22;
}
main()
{structdated;
d.year=1999;
d.month=4;
d.day=23;
printf("%d,%d,%d\n",d.year,d.month,d.day);
func(d);
printf("%d,%d,%d\n",d.year,d.month,d.day);
}
程序运行结果为:
1999,4,23
1999,4,23
5.
#include
voidFun(int*y)
{printf("*y=%d\n",*y);
*y+=20;
printf("*y=%d\n",*y);
}
main()
{intx=10;
printf("x=%d\n",x);
Fun(&x);
printf("x=%d\n",x);
}
程序运行结果是:
x=10
*y=10
*y=30
x=30
6.当运行以下程序时,运行结果是____4332____。
#include
intmain()
{ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++)c[s[i]]++;
for(i=1;i<5;i++)printf("%d",c[i]);
printf("\n");
return0;
}
7.当运行以下程序时,运行结果是______________。
#include
#defineN10
floatfun(float*array,intn);
floatmax,min;
intmain()
{floatscore[N]={90,80,70.5,98,60.5,95,53,85,75,90};
printf("max=%6.2f\nmin=%6.2f\naverage=%6.2f\n",max,min,fun(score,N));
return0;
}
floatfun(float*array,intn)
{inti;
floatsum=array[0];
max=min=array[0];
for(i=1;i{if(array[i]>max)max=array[i];
elseif(array[i]sum=sum+array[i];
}
returnsum/n;
}
8.当运行以下程序时,从键盘输入如下内容并回车:
9556758885,则下面程序的运行结果是_____________________(输出共2行)。
#include
voidinput(float*a,intn)
{float*pData,*pEnd;
pData=a,pEnd=&a[n-1];
while(pData<=pEnd)scanf("%f",pData++);
}
floatsum(float*a,intn)
{floats=0;
float*pData,*pEnd;
pData=a,pEnd=&a[n-1];
while(pData<=pEnd)s+=*pData++;
returns;
}
intmink(float*a,intn)
{float*pData,*pEnd,*pKData;
pData=a,pEnd=&a[n-1],pKData=a;
while(++pData<=pEnd)
{if(*pData<*pKData)pKData=pData;}
returnpKData-a;
}
main()
{floata[5];
intk;
input(a,5);
printf("Sum=%6.2f\n",sum(a,5));
k=mink(a,5);
printf("Min:
a[%d]=%6.2f\n",k,a[k]);
}
Sum=399.00
Min:
a[1]=56.00
9.有以下程序
#include
main()
{FILE*fp;inta[10]={1,2,3},i,n;
fp=fopen("d1.dat","w");
for(i=0;i<3;i++)fprintf(fp,"%d",a[i]);
fprintf(fp,"\n");
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d",&n);
fclose(fp);
printf("%d\n",n);
}
程序的运行结果是123。
四、程序填空题
阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。
1.从键盘任意输入一个年号,判断它是否是闰年。
若是闰年,输出“Yes”,否则输出“No”。
已知符合下列条件之一者是闰年:
能被4整除,但不能被100整除。
能被400整除。
#include
main()
{
intyear,flag;
printf("Enteryear:
");
scanf("%d",&year);
if(year%4==0&&year%100!
=0||year%400==0)
{
flag=1;
}
else
{
flag=0;
}
if(flag)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
2.编程判断m是否为素数。
#include
#include
intIsPrime(intm);
main()
{
intn,flag;
printf("Inputn:
");
scanf("%d",&n);
flag=IsPrime(n);
if(flag)
{
printf("它是素数\n");
}
else
{
printf("它不是素数\n");
}
}
intIsPrime(intm)
{
inti,k;
if(m<=1)
{
return0;
}
for(i=2;i<=sqrt(m);i++)
{
k=m%i;
if(k==0)
{
return0;
}
}
return1;
}
3.以下程序在数组a中同时查找最大元素下标和最小元素下标,分别存放在main函数的变量max和min中,请补齐相应代码使程序能够正确运行。
#include
voidfind(int*a,intn,int*max,int*min)
{
inti;
*max=*min=0;
for(i=1;i{
if(a[i]>a[*max])
____*max=i___;
elseif(a[i]____*min=i_____;
}
}
intmain()
{inta[]={5,9,7,8,2,6,3};
intmax,min;
find(_____a,7,&max,&min______);
printf("max=a[%d],min=a[%d]\n",max,min);
return0;
}