程序设计基础.docx
《程序设计基础.docx》由会员分享,可在线阅读,更多相关《程序设计基础.docx(56页珍藏版)》请在冰豆网上搜索。
程序设计基础
《程序设计基础》阶段测验(开卷)
(请将答案写在答题纸上)
一、单项选择题(每小题2分,共80分)
(1)下列叙述中错误的是________。
A)一个C语言程序只能实现一种算法
B)C程序可以由多个程序文件组成
C)C程序可以由一个或多个函数组成
D)一个C函数可以单独作为一个C程序文件存在
(2)下列叙述中正确的是________。
A)每个C程序文件中都必须有一个main()函数
B)在C程序中main()函数的位置是固定的
C)C程序可以由一个或多个函数组成
D)在C程序的函数中不能定义另一个函数
(3)下列定义变量的语句中错误的是________。
A)int_int;
B)doubleint_;
C)charFor;
D)floatUSS
(4)若变量x、y已正确定义并赋值,以下符合C语言语法的表达式是________。
A)++x,y=x--
B)x+1=y
C)x=x+10=x+y
D)double(x)/10
(5)以下能正确定义一维数组的选项是________。
A)inta[5]={0,1,2,3,4,5};
B)chara[]={0,1,2,3,4,5};
C)chara={'A','B','C'};
D)inta[5]="0123";
(6)若有定义intx,y;并已正确给变量赋值,则以下选项中与表达式(x-y)?
(x++):
(y++)中的条件表达式(x-y)等价的是________。
A)(x-y>0)
B)(x-y<0)
C)(x-y<║x-y>0)
D)(x-y==0)
(7)有以下程序
main()
{intx,y,z;
x=y=1;
z=x++,y++,++y;
printf("%d,%d,%d\n",x,y,z);
}
程序运行后的输出结果是________。
A)2,3,3
B)2,3,2
C)2,3,1
D)2,2,1
(8)设有定义:
inta;floatb;执行scanf("%2d%f",&a,&B);语句时,若从键盘输入876543.0<回车>,a和b的值分别是________。
A)876和543.000000
B)87和6.000000
C)87和543.000000
D)76和543.000000
(9)有以下程序
main()
{inta=0,b=0;
a=10;/*给a赋值
b=20;给b赋值*/
printf("a+b=%d\n",a+B);/*输出计算结果*/
}
程序运行后输出结果是________。
A)a+b=10
B)a+b=30
C)30
D)出错
(10)在嵌套使用if语句时,C语言规定else总是________。
A)和之前与其具有相同缩进位置的if配对
B)和之前与其最近的if配对
C)和之前与其最近的且不带else的if配对
D)和之前的第一个if配对
(11)下列叙述中正确的是________。
A)break语句只能用于switch语句
B)在switch语句中必须使用default
C)break语句必须与switch语句中的case配对使用
D)在switch语句中,不一定使用break语句
(12)有以下程序
main()
{intk=5;
while(-k)printf("%d",k-=3);
printf("\n");
}
执行后的输出结果是________。
A)1
B)2
C)4
D)死循环
(13)有以下程序
main()
{intI;
for(I=1;I<=40;I++)
{if(I++%5==0)
if(++I%8==0)printf("%d",I);
}
printf("\n");
}
执行后的输出结果是________。
A)5
B)24
C)32
D)40
(14)以下不合法的用户标识符是________。
A)j2_KEY
B)Double
C)4d
D)_8_
(15)以下不合法的数值常量是________。
A)011
B)lel
C)8.0E0.5
D)0xabcd
(16)以下不合法的字符常量是________。
A)'\018'
B)'\”'
C)'\\'
D)‘\xcc'
(17)表达式3.6-5/2+1.2+5%2的值是________。
A)4.3
B)4.8
C)3.3
D)3.8
(18)以下能正确定义字符串的语句是________。
A)charstr[]={‘\064'};
B)charstr=”\x43”;
C)charstr=”;
D)charstr[]=”\0”;
(19)有以下程序
main()
{chara[7]="a0a0";inti,j;
i=sizeof(a);j=strlen(a);
printf("%d%d",i,j);
}
程序运行后的输出结果是________。
A)22
B)76
C)74
D)62
(20)若要求从键盘读入含有空格字符的字符串,应使用函数________。
A)getc()
B)gets()
C)getchar()
D)scanf()
(21)在以下给出的表达式中,与while(E)中的(E)不等价的表达式是________。
A)(!
E=0)
B)(E>0||E<0)
C)(E==0)
D)(E!
=0)
(22)要求通过while循环不断读入字符,当读入字母N时结束循环。
若变量已正确定义,以下正确的程序段是________。
A)while((ch=getchar())!
='N')printf(“%c”,ch);
B)while(ch=getchar()!
='N')printf(“%c”,ch);
C)while(ch=getchar()==N')printf(“%c”,ch);
D)while((ch=getchar())=='N')printf(“%c”,ch);
(23)有以下程序
main()
{
intp[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7)if(p[i]%2)j+=p[i];
printf("%d",j);
}
程序运行后的输出结果是________。
A)42
B)45
C)56
D)60
(24)以下叙述中错误的是________。
A)C语句必须以分号结束
B)复合语句在语法上被看作一条语句
C)空语句出现在任何位置都不会影响程序运行
D)赋值表达式末尾加分号就构成赋值语句
(25)以下叙述中正确的是________。
A)调用printf函数时,必须要有输出项
B)使用putchar函数时,必须在之前包含头文件stdio.h
C)在C语言中,整数可以以十二进制、八进制或十六进制的形式输出
D)调用getchar函数读入字符时,可以从键盘上输入字符所对应的ASCII码
(26)若整型变量a、b、c、d中的值依次为:
1、4、3、2。
则条件表达式a
a:
cc:
d的值________。
A)1
B)2
C)3
D)4
(27)有以下程序
main()
{inti=1,j=2,k=3;
if(i++==1&&(++j==3||k++==3))
printf("%d%d%d",i,j,k);
}
程序运行后的输出结果是________。
A)123
B)234
C)223
D)233
(28)设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是________。
A)6.500000
B)6
C)5.500000
D)6.000000
(29)当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是________。
A)k%2
B)k%2==1
C)(k%2)!
=0
D)!
k%2==1
(30)以下能正确定义且赋初值的语句是________。
A)intn1=n2=10;
B)charc=32;
C)floatf=f+1.1;
D)doublex=12.3E2.5;
(31)以下程序的功能是:
给r输入数据后计算半径为r的圆面积s。
程序在编译时出错。
main()
/*Beginning*/
{intr;floats;
scanf("%d",&r);
s=*p*r*r;printf("s=%f\n",s);
}
出错的原因是________。
A)注释语句书写位置错误
B)存放圆半径的变量r不应该定义为整型
C)输出语句中格式描述符非法
D)计算圆面积的赋值语句中使用了非法变量
(32)设有定义:
intk=1,m=2;floatf=7;,则以下选项中错误的表达式是________。
A)k=k>=k
B)-k++
C)k%int(f)
D)k>=f>=m
(33)设有定义:
inta=2,b=3,c=4;,则以下选项中值为0的表达式是________。
A)(!
a==1)&&(!
b==0)
B)a
C)a&&b
D)a||(b+‘B’)&&(c-‘A’)
(34)有以下程序段
intk=0,a=1,b=2,c=3;
k=a>c?
c:
k;
执行该程序段后,k的值是________。
A)3
B)2
C)1
D)0
(35)有以下程序段
intn,t=1,s=0;
scanf("%d",&n);
do{s=s+t;t=t-2;}while(t!
=n);
为使此程序段不陷入死循环,从键盘输入的数据应该是________。
A)任意正奇数
B)任意负偶数
C)任意正偶数
D)任意负奇数
(13)
(36)数字字符0的ASCII值为48,若有以下程序
main()
{chara='1',b='2';
printf("%c,",b++);
printf("%d",b-a);
}
程序运行后的输出结果是________。
A)3,2
B)50,2
C)2,2
D)2,50
(37)有以下程序
main()
{intm=12,n=34;
printf("%d%d",m++,++n);
printf("%d%d",n++,++m);
}
程序运行后的输出结果是________。
A)12353514
B)12353513
C)12343514
D)12343513
(38)有定义语句:
intb;charc[10];,则正确的输入语句是________。
A)scanf("%d%s",&b,&c);
B)scanf("%d%s",&b,c);
C)scanf("%d%s",b,c);
D)scanf("%d%s",b,&c);
(39)有以下程序
main()
{intm,n,p;
scanf("m=%dn=%dp=%d",&m,&n,&p);
printf("%d%d%d",m,n,p);
}
若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是________。
A)m=123n=456p=789
B)m=123n=456p=789
C)m=123,n=456,p=789
D)123456789
(40)有以下程序
main()
{
inta,b,d=25;
a=d/10%9;
b=a&&(-1);
printf("%d,%d",a,b);
}
程序运行后的输出结果是________。
A)6,1
B)2,1
C)6,0
D)2,0
二、程序设计题(每小题10分,共20分)
1.使用循环语句编程实现:
打印下面的图形。
123456789
223456789
333456789
444456789
555556789
666666789
777777789
888888889
999999999
2.使用数组编程实现:
从键盘输入一串字符(可能含空格),逆序输入这些字符。
第3章选择结构程序设计
一、选择题
5.1在C程序中,判逻辑值时,用“非0”表示逻辑值“真”,又用“0”表示逻辑值“假”。
在求逻辑值时,用()表示逻辑表达式值为“真”,又用()表示逻辑表达式值为“假”。
A
A)10B)01
C)非0非0D)11
5.2已知intx=6,y=2,z;则执行表达式z=x=x>y后,变量z的值为B
A)0B)1C)4D)5
5.3能正确表示逻辑关系:
“a≥10或a≤0”的C语言表达式是D
A)a>=10ora<=0B)a>=0|a<=10
C)a>=10&&a<=0D)a>=10‖a<=0
5.4若变量c为char类型,能正确判断出c为小写字母的表达式是D
A)′a′<=c<=′z′
B)(c>=′a′)||(c<=′z′)
C)(′a′<=c)and(′z′>=c)
D)(c>=′a′)&&(c<=′z′)
5.5设intx=1,y=1;表达式(!
x||y--)的值是B
A)0B)1C)2D)-1
5.6有如下程序段
inta=14,b=15,x;
charc=′A′;
x=(a&&b)&&(c<′B′);
执行该程序段后,x的值为D
A)tureB)falseC)0D)1
5.7以下程序的输出结果是A
main()
{
inta=4,b=5,c=0,d;
d=!
a&&!
b||!
c;
printf("%d\n",d);}
A)1B)0C)非0的数D)-1
5.8设有:
inta=1,b=2,c=3,d=4,m=2,n=2;
执行(m=a>b)&&(n=c>d)后n的值是B
A)1B)2C)3D)4
5.9已知x,y,z均为整型变量,且值均为1,则执行语句++x||++y&&++z;后,表达式x+y的值为C
A)1B)2C)3D)4
5.11若运行时给变量x输入12,则以下程序的运行结果是A
main()
{intx,y;
scanf("%d",&x);
y=x>12?
x+10:
x-12;
printf("%d\n",y);
}
A)0B)22C)12D)10
5.12已知charch=′C′;则以下表达式的值是D
ch=(ch>=′A′&&ch<=′Z′)?
(ch+32):
ch;
A)AB)aC)ZD)c
5.13若有条件表达式(exp)?
a++:
b--,则以下表达式中能完全等价于表达式(exp)的是B
A)(exp==0)B)(exp!
=0)
C)(exp==1)D)(exp!
=1)
5.14有以下程序C
main()
{inti=1,j=1,k=2;
if((j++||k++)&&i++)
printf("%d,%d,%d\n",i,j,k);
}
执行后输出结果是
A)1,1,2B)2,2,1
C)2,2,2D)2,2,3
5.15请阅读以下程序:
D
main()
{inta=5,b=0,c=0;
if(a=b+c)printf("***\n");
elseprintf("$$$\n");
}
以上程序
A)有语法错不能通过编译
B)可以通过编译但不能通过连接
C)输出***
D)输出$$$
5.16若执行下述程序时,若从键盘输入6和8时,结果为C
main()
{inta,b,s;
scanf("%d%d",&a,&b);
s=a;
if(a
s=b;
s*=s;
printf("%d",s);
}
A)36B)64
C)48D)以上都不对
5.17有如下程序
main()
{floatx=2.0,y;
if(x<0.0)y=0.0;
elseif(x<10.0)y=1.0/x;
elsey=1.0;
printf("%f\n",y);}
该程序的输出结果是C
A)0.000000B)0.250000
C)0.500000D)1.000000
5.18以下4个选项中,不能看做一条语句的是C
A);B)a=5,b=2.5,c=3.6;
C)if(a<5);D)if(b!
=5)x=2;y=6;
5.19若intk=8;则执行下列程序后,变量k的正确结果是D
main()
{intk=8;
switch(k)
{case9:
k+=1;
case10:
k+=1;
case11:
k+=1;break;
default:
k+=1;}
printf("%d\n",k);}
A)12B)11
C)10D)9
5.20阅读如下程序段D
#include"stdio.h"
main()
{inta=45,b=40,c=50,d;
d=a>30?
b:
c;
switch(d)
{case30:
printf("%d,",a);
case40:
printf("%d,",b);
case50:
printf("%d,",c);
default:
printf("#");}}
则输出的结果是
A)40,50,B)50,#
C)40,#D)40,50,#
5.21现有如下程序段,此程序段编译有错误,则程序段的错误出在
#include
main()
{inta=30,b=40,c=50,d;
d=a>30?
b:
c;
switch(d)
{casea:
printf("%d,",a);
caseb:
printf("%d,",b);
casec:
printf("%d,",c);
default:
printf("#");}}
A)default:
printf("#");这个语句
B)d=a>30?
b:
c;这个语句
C)casea:
printf("%d,",a);caseb:
printf("%d,",b);casec:
printf("%d,",c);这三个语句
D)switch(d)这个语句
二、填空题
5.22设y是int型,请写出y为奇数的关系表达式【1】。
y%2!
=0或者y%2==1
5.24将以下程序写成三目运算表达式是【3】。
a>b?
a:
b
if(a>b)max=a;
elsemax=b;
5.25以下程序输出的结果是【4】。
0
main()
{inta=5,b=4,c=3,d;
d=(a>b>c);
printf("%d\n",d);
}
5.26若从键盘输入58,则以下程序输出的结果是【5】。
585858
main()
{inta;
scanf("%d",&a);
if(a>50)printf("%d",a);
if(a>40)printf("%d",a);
if(a>30)printf("%d",a);
}
5.29以下程序的输出结果是【8】。
-1
main()
{intx=100,a=10,b=20,ok1=5,ok2=0;
if(a
=15)
if(!
ok1)x=1;
elseif(ok2)x=10;
elsex=-1;
printf("%d\n",x);}
5.30阅读下面的程序,当程序在执行时,如果输入的是′A′,则输出结果为【9】。
#include"stdio.h"
main()
{chara;
a=getchar();
switch(a)
{case65:
printf("%c",′A′);
case66:
printf("%c",′B′);
default:
printf("%s\n","other");}}ABother(因为没有break语句。
)
第3章循环结构控制
一、选择题
1.设有程序段
intk=10;
while(k=0)k=k-1;
这下面描述中正确的是___c______.
a)while循环执行10次b)循环是无限循环
c)循环体语句一次也不执行d)循环体语句执行一次
2.语句while(!
E);中的表达式!
E等价于__a______.
a)E==0b)E!
=1c)E!
=0d)E==1
3.下面程序段的运行结果是_____c_____.
intn=0;
while(n++<=2);printf("%d",n);
a)2b)3c)4d)有语法错
4.下面程序的运行结果是__b__.
#include
main()
{
intnum=0;
while(num<=2)
{
num++;
printf("%d\n",num);
}
}
a)1b)1c)1d)1
222
33
4
5.以下程序段____c____.
x=-1;
do{
x=x*x;
}
while(!
x);
a)是死循环b)循环执行二次
c)循环执行一次d)有语法错误
6.若有如下语句
intx=3;
do{printf("%d\n",x-=2);}while(!
(--x));
则上面程序段__b____.
a)输出的是1b)输出的是1和-2
c)输出的是3和0d)是死循环
7.下面程序的运行结果是___d___.
#include
main()
{inty=10;
do{y--;}while(--y);
printf("%d\n",y--);
}
a)-1b)1c)8d)0
8.以下正确的描述是___b____.
a)continue语句的作用是结束整个循环的执行
b)只能在循环体内和switch语句体内使用break语句
c)在循环体内使用break语句或continue语句的作用相同
d)从多层循环嵌套中退出时,只能使用goto语句
二、填空题
1.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束
循环。
请填空。
intn=0,c;
c=getchar();
while(__c!
=’\n’__)
{
if(__c>=’0’&&c<=’9’___)n++;
c=getchar();
}
2.下面程序的功能是用"辗转相除法"求两个正整数的最大公约数。
请填空。
#include
main()
{intr,m,