C语言模拟题1.docx
《C语言模拟题1.docx》由会员分享,可在线阅读,更多相关《C语言模拟题1.docx(14页珍藏版)》请在冰豆网上搜索。
C语言模拟题1
C语言模拟题
一、填空题
1、C语言中没有逻辑量,在给出逻辑运算结果时,以1代表“真”,用0代表“假”。
2、一个C源程序中至少应包括一个main函数。
3、C源程序的基本单位是函数。
4、为表示关系X≥Y≥Z,应使用C语言表达式(x<=y)&&(y>=z)。
5、若有以下定义:
doublew[10];则w数组元素下标的上限是0,下限是9。
6、若有以下定义:
doublew[5];则数组w下标的上限是4。
7、执行语句:
for(i=1;i++<4;);后,变量i的值是5。
6、在C语言中的实型变量分为两种类型,它们是单精度实型、双精度实型。
7、语句"printf("%x,%o",16,12);"的输出结果是10,14。
8、当a=5,b=4,c=1时,表达式a>b!
=c的值是0。
9、若有定义:
charc=’\010’;则变量c中包含的字符数为1。
10、C语言中的标识符只能由三种字符组成,它们是字母、数字、下划线。
11、若k为int型且赋值11。
请写出运算k++后表达式的值为11,变量的值为12。
12、在C语言程序中,如果对函数f的类型未加显说明,则函数f的隐含类型是int。
13、二维数组中元素在内存中的存放顺序是按行存放,先顺序存放第一行的元素,再存放第二行的元素。
14、设有定义inta=12,b=12;则语句printf("%d%d\n",--a,++b);的输出结果是:
1113。
15、当a=3,b=2,c=1时,表达式f=a>b>c的值为_____0_________。
二、选择题
1、C语言可执行程序的开始执行点是(c)
A、程序中第一条可执行语言B、程序中第一个函数
C、程序中的main函数D、包含文件中的第一个函数
2、以下叙述中不正确的是(d)
A、在函数中,通过return语句传回函数值
B、在函数中,可以有多条return语句
C、在C中,main后的一对圆括号中也可以带有形参
D、在C中,调用函数,必需在一条独立的语句中完成
3、对C程序在作逻辑运算时判断操作数真、假的表述,下列哪一个是正确的(a)。
A、0为假,非0为真B、只有1为真
C、-1为假,1为真C、0为真,非0为假
4、以下字符中,不正确的C语言转义字符是(d)
A、‘\t’B、‘\011’C、‘\n’D、‘\018
5、C语言中运算对象必需是整型的运算符是(a)
A、%B、/C、!
D、*
6、putchar函数可以向终端输出一个(d)
A、整型变量表达式值B、实型变量值
C、字符串D、字符或字符型变量值
7、下列各语句定义了数组,其中哪一个是正确的(d)。
A、inta[5],b[2,3];B、charno(30);
C、intx[];D、intx[5]={1,2,3};
8、数组定义为"inta[4][5];",引用"*(a+1)+2"表示(b)。
A、a[1][0]+2B、a数组第1行第2列元素的地址
C、a[0][1]+2D、a数组第1行第2列元素的值
9、a是int类型变量,c是字符变量。
下列输入语句中哪一个是错误的(b)。
A、scanf("%d,%c",&a,&c);B、scanf("%d%c",a,c);
C、scanf("%d%c",&a,&c);D、scanf("d=%d,c=%c",&a,&c);
10、将整型变量a、b中的较小值为变量c赋值,下列语句中正确的是(c)。
A、c==(a
a:
b;B、c=if(a
C、c=(a
a:
b;D、(a
c=a:
c=b;
11、将整型变量a、b中的较大值为变量c赋值,下列语句中正确的是(b)。
A、c==(a>b)?
a:
b;B、c=(a>b)?
a:
b;
C、c=if(a>b)aelseb;D、(a>b)?
c=a:
c=b;
12、逻辑运算符中,运算优先级按从高到低依次为(d)。
A、&&,!
||B、||,&&,!
C、&&,||,!
D、!
,&&,||
13、在C语言程序中(C)
A、函数的定义可以嵌套,但函数的调用不可以嵌套
B、函数的定义和函数的调用均不可以嵌套
C、函数的定义不可以嵌套,但函数的调用可以嵌套
D、函数的定义和函数的调用均可以嵌套
15、若变量已正确定义并赋值,符合C语言语法的表达式是(A)
A、a=7+b+c,a++B、a=a+7;C、int(12.3%4)D、a=a+7=c+b
16、设有inta[]={10,11,12},*p=&a[0];则执行完*p++;*p+=1;后a[0],a[1],a[2]的值依次是(c)
A.10,11,12B.11,12,12C.10,12,12D.11,11,12
17、已知ch是字符型变量,下面正确的赋值语句是(a)
A、ch=’\123’;B、ch=’xfff’;C、ch=’\08’;D、ch=’\’;
18、以下函数调用语句中,含有的实参个数是(b)
A、1B、2C、4D、5
Func((exp1,exp2),(exp3,exp4,exp5));
19、以下叙述中正确的是(d)
A、输入项可以是一个实型常量,如scanf("%f",3.5);
B、只有格式控制,没有输入项,也能正确输入数据到内存,如:
scanf("a=%d,b=%d");
C、当输入一个实型数据时,格式控制可以规定小数点后的位数,如:
scanf("%4.2f",&f);
D、当输入数据时,必须指明变量地址,例如:
scanf("%f",&f);
20、程序运行输出了错误的结果,可以排除下列哪一个因素(c)。
A.算法错误B、运行时输入数据错误
C、未通过编译D、系统资源配置不当
21、要为字符型变量a赋初值,下列语句中哪一个是正确的(a)。
A、chara=’3’;B、chara="3";
C、chara=%;D、chara=*;
22、数组定义为"inta[4][5];",引用"a[1]+3"表示(a)。
A、a数组1行3列元素的地址B、a数组第1行第3列元素的值
C、a数组第4行的首地址D、a数组第4列的首地址
三、程序阅读
以下程序的输出结果为-1。
main()
{intx=2;
while(x--);
printf(“%d\n”,x);
}
2、以下程序的运行结果是6。
main()
{intm=5;
if(m++>5)printf(“%d\n”,m);
elseprintf(“%d\n”,m--);
}
3、当执行以下程序段后,i的值为5、j的值为4、k的值为6。
inta,b,c,d,i,j,k;
a=10;b=c=d=5;i=j=k=0;
for(;a>b;++b)i++;
while(a>++c)j++;
dok++;while(a>d++);
4、以下程序的输出结果是8。
main()
{intk=2,m=4,n=6;
int*pk=&k,*pm=&m,*p;
*(p=&n)=*pk*(*pm);
printf(“%d\n”,n);
}
5、以下程序的输出结果是4。
fun1(inta,intb)
{intc;
a+=a;b+=b;
c=fun2(a,b);
returnc*c;
}
fun2(inta,intb)
{intc;
c=a*b%3;
returnc;
}
main()
{intx=11,y=19;
printf(“%d\n”,fun1(x,y));
}
6、以下程序的输出结果是z=7,r=21。
func(inta,intb)
{intc;
c=a+b;
returnc;
}
main()
{intx=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf(“z=%d,r=%d\n”,z,r);
}
7、以下程序的输出结果为23.
main()
{intaa[3][3]={{2},{4},{6}},i,*p=&aa[0][0];
for(i=0;i<2;i++)
{if(i==0)
aa[i][i+1]=*p+1;
else++p;
printf(“%d”,*p);
}
printf(“\n”);
}
8、下列程序运行的输出结果:
7,5。
#defineX5
#defineYX+1
#defineZY*X/2
main()
{inta;
a=Y;
printf("%d,%d\n",Z,--a);
}
四、程序填空
findmax返回数组s中最大元素的下标,数组中元素的个数由t传入,请填空。
findmax(ints[],intt)
{intk,p;
for(p=0,k=p;pif(s[p]>s[k])k=p;
returnk;
}
有以下程序段:
s=1.0;
for(k=1;k<=n;k++)s=s+1.0/(k*(k+1));
printf(“%f\n”,s);
请填空,使下面的程序段的功能完全与之等同。
s=0.0;
d=1.0;
k=0;
do
{s=s+d;
k++;
d=1.0/(k*(k+1));
}
while(k<=n);
printf(“%f\n”,s);
3、以下程序统计从终端输入的字符中每个大写字母的个数,num[0]中统计字母A的个数,其他依次类推。
用回车符结束输入,请填空。
#include“stdio.h”
#include“ctype.h”
main()
{intnum[26]={0},i;
charc;
while((c=getchar(())!
=’\r’)
if(isupper(c))num[c-‘A’]+=1;
for(i=0;i<26;i++)
if(num[i])printf(“%c:
%d\n”,i+’A’,num[i]);
}
4、以下fun函数的功能是将一个字符串的内容颠倒过来,请填空。
#include“string.h”
voidfun(charstr[])
{inti,j,k;
for(i=0,j=strlen(str)-1;i{k=str[i];str[i]=str[j];str[j]=k;}
}
5、以下程序的功能是:
从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。
请填空。
main()
{floatx,amax,amin;
scanf(“%f”,&x);
amax=x;amin=x;
while(x>=0)
{if(x>amax)amax=x;
elseif(xscanf(“%f”,&x);
}
printf(“\namax=%f\namin=%f\n”,amax,amin);
}
6、输入若干字符,分别统计数字字符的个数、英文字母的个数,当输入换行符时输出统计结果,运行结束。
#include
voidmain()
{charch;ints1=0,s2=0;
while((ch=getchar())!
='\n')
{if(ch>='0'&&ch<='9')s1++;
if((ch>='a'&&ch<='z')||ch>=’A’&&ch<=’Z’)s2++;}
printf(“%d,%d\n”,s1,s2);
}
编程题
输入一行数字字符(以回车符结束输入),请用数组元素作为计数器来统计每个数字字符的个数,并输出统计结果。
用下标为0的元素统计字符’0’的个数,下标为1的元素统计字符’1’的个数,…。
#include
main()
{
intnum[10]={0},i;
charc;
c=getchar();
while(c!
='\n'){
num[c-'0']+=1;
c=getchar();
}
2、下面findmax函数将计算数组中的最大元素及其下标值和地址值,请编写*findmax()函数。
#include
*findmax(int*s,intt,int*k)
main()
{
inta[10]={12,23,34,45,56,67,78,89,11,22},k,*add;
add=findmax(a,10,&k);
printf(“%d,%d,%o\n”,a[k],k,add);
}
*findmax(int*s,intt,int*k)
{
intp;
for(p=0,*k=p;pif(s[p]>s[*k])*k=p;
returns+*k;
}
3、编写程序,求1-3+5-7+…-99+101的值。
#include
main()
{
intI,s=0;
for(I=0;I<=50;I++)
if(I/2==0)s+=2*I+1;
elses-=2*I+1;
printf(”计算结果为:
%d”,s);
}
4、编写函数invert将数组中的数按颠倒的顺序重新存放。
在操作时,只能借助一个临时存储单元而不得另外开辟数组。
/*参数n为数组中的元素个数*/
voidinvert(inta[],intn)
{
inti,j,t;
for(i=0,j=n-1;i{t=a[i];a[i]=a[j];a[j]=t;}
}
5、函数maxmin完成的功能是:
对传送过来的三个数选出最大和最小数,并通过形参传回调用函数。
试编写该函数,
#include
voidmaxmin(inta,intb,intc,int*max,int*min)
{
if(a>b){*max=a;*min=b;}
else{*max=b;*min=a;}
if(c>*max)*max=c;
if(c<*min)*min=c;
}
main()
{inta,b,c,max,min;
printf("pleaseinputthreeinteger:
");
scanf("%d%d%d",a,b,c);
maxmin(a,b,c,&max,&min);
printf("a=%d,b=%d,c=%d,max=%d,min=%d",a,b,c,max,min);
}
#include
intAverage(intx,inty)
{
intresult;
result=(x+y)/2;
returnresult;
returnx;
}
main()
{
inta=12;
intb=24;
intave=Average(a,b);
printf("Averageof%dand%dis%d.\n",a,b,ave);
}
a
–代表二维数组的首地址,第0行的地址
a+i
–代表第i行的地址
*(a+i)即a[i]
–代表第i行第0列的地址
*(a+i)+j即a[i]+j
–代表第i行第j列的地址
*(*(a+i)+j)即a[i][j]
–代表第i行第j列的元素
元素a[i][j]的地址的几种等价的引用方式
–&a[i][j]
–a[i]+j
–*(a+i)+j
–&(*(a+i))[j]
元素a[i][j]的几种等价的引用方式
–a[i][j]
–*(a[i]+j)
–*(*(a+i)+j)
–(*(a+i))[j]
格式输入函数
常见错误
–scanf("%d,%f\n”,&a,&b);
–scanf("%d,%f”,a,b);
–scanf("%7.2f",&a);