内容正文:
<C语言程序设计教程>清华大学出版社(第3版)
第五章 选择结构程序设计 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 选择题(共10题,每小题2分,共20分)
1、 若有以下定义int a=5,b=3,s=0;下列语句中,语法正确的是 :
A.
B. if a>b printf(“
”);
else s=a+b;
C. if(a>b); printf(“
”);
else s=a+b;
D. If (a>b) printf(“
”);
else s=a+b;
E. if (a>b) printf(“
”);
else s=a+b;
【答案】D
【解析】A选项if后面条件没有加括号;B选项if else中间不能有语句,产生语法错误;C选项if为大写。故选D。
2、 若有语句int x=1,y=2,z=-1;则下列表达式的结果是 :
(x+1,y+=2,x+y) -x++&&y||++z !(x--)||++z&&++y
A.6,1,1 B.5,1,0 C.6,1,0 D.5,1,1
【答案】B
【解析】(x+1,y+=2,x+y)为逗号表达式,从左至右运算,最后一个表达式的值做为整个表达式的值,注意y+=2改变了y的值,所以表达式(x+1,y+=2,x+y)的值为5; -x++&&y||++z为逻辑表达式,从左至右运算,先计算-x++&&y的值,得到的值在与++z进行逻辑或运算,(注意如果-x++&&y的值为真则不用进行++z的计算,取决于逻辑或运算规则);!(x--)||++z&&++y为逻辑表达式,(!(x--))||(++z&&++y),整体看成逻辑或表达式,从左至右计算。故选B。
3、 有以下程序段,则输出结果是 :
int m=4,n=27,t=1;
if(m>n) t=m;m=n;n=t;
printf(“m=%d,n=%d
”,m,n);
A. m=27,n=4 B.m=4,n=27 C.m=27,n=1 D.m=4,n=1
【答案】C
【解析】if后面只能接一条语句,题目中if后面只有t=m;一条语句,执行条件m>n不成立,m=n;n=t;两条语句扔要执行。故选C。
4、下列程序段的运行结果是 :
int x=4;
if(x++>4)
if(++x>=5) ;
printf(“%d
”,x++);
A.4 B.5 C.6 D.7
【答案】B
【解析】第一条if语句嵌套第二条语句,要注意执行完第一条if后,x要加1。故选B。
5、若有语句if(x%2) x++;则下列语句中,与x%2条件不等价的是 :
A.x%2==1 B.!(x%2==0) C.x%2!=0 D.!( x%2==1)
【答案】D原创精品资源学科网独家享有版权,侵权必究!
【解析】题目中x%2是x为偶数时为假,将偶数带入选项中不符的不等价,故选D。
6、 下列程序段的运行结果是 :
float f=5.45; int a=8,b=-3,t=0;
if(!b) if(a>(int)f) if(a<b) t=1;
else t=-1;
A.0 B.-1 C.1 D.程序出错
【答案】A
【解析】else总是和最近的且未被配对的if进行配对,题目中else与第三个if进行配对,第一个if不成立,则不执行后面语句,故选A。
7、 下列程序段的运行结果是 :
int a=50;
if(a>’0’>’1’) printf(“##”);
else printf(“%%”);
A.## B.% C.% % D.##%%
【答案】B
【解析】关系运算符从左至右运算,先两两进行比较,得出的结果在与后面的进行比较,故选B。
8、 若有以下定义int a,b;float c;char d;变量均正确赋值,下列语句中,语法正确的是 :
A.
B. switch a+b
{ case 1: a++;
case 2:b++;
case 3:d++; }
C. switch (a+1)
{ case a: a++;
case b:b++;
case d:d++; }
D. switch (d)
{ case ‘C’: a++;
case ‘B’:b++;
case ‘c’:a++;b++; }
E. switch (a+b)
{ case ‘A’: a++;
case ‘B’:b++;
case ‘C’:d++; }
【答案】C
【解析】A选项中,switch后表达式没有加括号;B选项中,case后面不能是变量;D选项中,switch表达式的数据类型要和case后面常量的数据类型保持一致。故选C。
9、 下列程序段的运行结果是 :
int a=11,b=64 ,s=0;
if(b>a) s=b-a; s=a+b;
else s=a-b;
A. 语法错误 B. 53 C. -53 D. 75
【答案】A
【解析】if和else中间不能有其它语句,故选A。
10、 下列语句中说法正确的是 :
A. Switch后表达式的类型可以和case后表达式或常量类型不一致。
B. case后可以是任何类型表达式。
C. case语句后面必须要有break。
D. 不同的case可以共用一个语句组。
【答案】D
【解析】A选项A.Switch后表达式的类型可以和case后表达式或常量类型要一致。B选项case后只能是整型、字符型或者枚举型。C选项case语句后面可以有break。原创精品资源学科网独家享有版权,侵权必究!
2、 填空题(共10空,每空2分,共20分)
1、 若有语句if(a<b) t=a,a=b,b=t;的功能是 。
【答案】a<b成立,则交换a,b的值
2、若有语句int a=49,b=27;char ch=’A’;则表达式a>’3’||ch<a&&!(b>>5)的值是 。
【答案】0
3、 写出下列语句的C语言表达式
c1)x<-1或56≤x<100
2)a,b为一个为正,一个为负
3)m是一个两位数且个位为3的正整数
【答案】x<-1||x>=56&&x<100 a*b<0 m>=10&&m<=99&&m%10==3
4、若有定义语句int a=1,b=2,c=3,d=4;则执行表达式b*=a<b&&-(d-=c)||++c表达式的值为 ,a的值为1,b的值为2,c 的值为 ,d的值为 。
【答案】2 3 1
5、若有语句int x=5,y=5,z;执行语句z=x++>y?++x:y+x;则z的值为
【答案】11
6、 若有语句 a>b?a>c?a:c:b>c?b:c;的功能是 。
【答案】求a,b,c中的最大数
3、 程序运行题(共5题,每小题3分,共15分)
1、 下列程序运行的结果是 。
#include<stdio.h>
void main()
{ int a=12;
unsigned b=-1;
if(a>b) printf(“a>b
”);
printf(“a<b
”); }
【答案】a<b
2、 下列程序运行的结果是 。
#include<stdio.h>
void main()
{ int a=1,b=2,c=3;
a<<=3; b*=a;
printf(“a=%d,b=%d,”,a,b);
printf(“c=%d
”,b>=c?’0’:0);}
【答案】a=8,b=16,c=48
3、 下列程序运行的结果是 。原创精品资源学科网独家享有版权,侵权必究!
#include<stdio.h>
#include<math.h>
void main()
{ int x=8,y=13,z=9,t;
float f1=3.54;
if(y>x)
if(y>z) t=floor(f1);
else t=(int)f1;
else if(y>z) t=x*z;
printf(“t=%d
”,t);}
【答案】t=3
4、 下列程序运行的结果是 。
#include<stdio.h>
void main()
{ int k=7,m=0,n=0;
switch(k&2)
{case 0:m++;
case 1:m++;n++;
case 2:m+=n;
case 3:n+=m;
default:m++;n--; }
printf(“m=%d n=%d
”,m,n);}
【答案】m=1,n=-1
5、 下列程序运行的结果是 。
#include<stdio.h>
void main()
{ char ch; int n1=0,n2=1;
ch=getchar();
switch(ch)
{ case ‘A’: switch(n1==0)原创精品资源学科网独家享有版权,侵权必究!
{ case 0:printf(“1#”);break;
case 1:printf(“2##”);break;
default:printf(“3###”);break;}
case ‘B’: switch(!n2)
{ case 0:printf(“1*”);
case 1:printf(“2**”);break;
default:printf(“3***”);break;}
default: printf(“&&&”);
} }
从键盘输入BC<回车>
【答案】1*2**&&&
4、 程序填空题(共5空,每空5分,共25分)
1、根据以下函数关系,对输入的每个x值,计算出相应的y值。
x
y
x<=0
y=x5-3
0<x<=10
y=ex+3
10<x<=20
y=7*x-1
#include<stdio.h>
#include<math.h>
void main()
{ float y;
int x,var,f=1;
scanf(“%d”,&x);
if(x<=0)
else var=
switch(var)
{ case -1:y=pow(x,5)-3;break;
case 0:y= ;break;
case 1:y=7*x-1; break;
default: f=0; break; }原创精品资源学科网独家享有版权,侵权必究!
if(f==1) printf(“y=%f”,y);
else printf(“error”); }
【答案】var=-1; (x-1)/10; exp(x)+3
2、根据输入的三角形的三条边,判断是否能组成三角形,若可以则输出它的面积和三角形的类型。三角形面积公式如下:
s=(a+b+c)/2
area=
#include <stdio.h>
#include<math.h>
main()
{ float a,b,c;
float s,area;
int flag;
scanf(“%f,%f,%f”,&a,&b,&c);
if (a+b>c&&a+c>b&&b+c>a)
{ s=(a+b+c)/2;
area= sqrt(s*(s-a)*(s-b)*(s-c));
printf(“三角形面积为%.2f
”,area);
flag= ;
if(a==b&&b==c)
printf(“可组成等边三角形
”);
else if( a==b||b==c||a==c)
if(flag)
printf(“可组成等腰直角三角形
”);
else printf(“可组成一般等腰三角形
”);
else if( )
printf(“可组成一般直角三角形
”);
else printf(“可组成一般的三角形
”);
}原创精品资源学科网独家享有版权,侵权必究!
else printf(“不能组成的三角形
”);
}
【答案】a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a flag
5、 程序改错题(共20分)
1、计算某年某月某日是该年的第几天,现有2处错误,请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分)
L1 #include<stdio.h>
L2 void main()
L3 { int day,month,year,sum,f;
L4 scanf("%d-%d-%d",&year,&month,&day);
L5 sum=0;
L6 if(year%4==0&&year%100!=0||year%400==0) f=1;
L7 else f=0;
L8 switch(month-1)
L9 { case 11: sum+=30;
L10 case 10: sum+=31;
L11 case 9: sum+=30;
L12 case 8: sum+=31;
L13 case 7: sum+=31;
L14 case 6: sum+=30;
L15 case 5: sum+=31;
L16 case 4: sum+=30;
L17 case 3: sum+=31;
L18 case 2: sum+=28;
L19 case 1: sum+=31; }
L20 if(f==1)
L21 sum++;
L22 printf("是%d年的第%d天
",year,sum); }
【答案】 L5 sum=day; 或者 L22 printf("是%d年的第%d天
",year,sum+day);
L20 if(f==1&&month>2) 或者L20 if(f==1&&month>=3) 原创精品资源学科网独家享有版权,侵权必究!
2、 某书店有历史书分为上下册,可以成套卖(上下册为一套),也单本出售。若买套数超过30套每套90元,不足30套每套100元。只买上册每本55元,只买下册每本60元。以下功能是输入所买书籍上册s和下册x的册数,求应付款m。
L1 #include<stdio.h>
L2 void main()
L3 { int s,x,t,m;
L4 printf("请输入所买书籍上册s和下册x的册数:
");
L5 scanf("%d %d",&s,&x);
L6 if(s<x)
L7 { m=(s-x)*55;
L8 t=x;
L9 }
L10 else { m=(x-s)*60;
L11 t=s;
L12 }
L13 if(t>=30) m+=t*90;
L14 m+=t*100 ;
L15 printf("money=%d
",m);
L16 }
【答案】L6 if(s>=x) 或者 L6 if(s>x)
L14 else m+=t*100 ;
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
<C语言程序设计教程>清华大学出版社(第3版)
第五章 选择结构程序设计 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 选择题(共10题,每小题2分,共20分)
1、 若有以下定义int a=5,b=3,s=0;下列语句中,语法正确的是 :
A.
B. if a>b printf(“
”);
else s=a+b;
C. if(a>b); printf(“
”);
else s=a+b;
D. If (a>b) printf(“
”);
else s=a+b;
E. if (a>b) printf(“
”);
else s=a+b;
2、 若有语句int x=1,y=2,z=-1;则下列表达式的结果是 :
(x+1,y+=2,x+y) -x++&&y||++z !(x--)||++z&&++y
A.6,1,1 B.5,1,0 C.6,1,0 D.5,1,1
3、 有以下程序段,则输出结果是 :
int m=4,n=27,t=1;
if(m>n) t=m;m=n;n=t;
printf(“m=%d,n=%d
”,m,n);
A. m=27,n=4 B.m=4,n=27 C.m=27,n=1 D.m=4,n=1
4、下列程序段的运行结果是 :
int x=4;
if(x++>4)
if(++x>=5) ;
printf(“%d
”,x++);
A.4 B.5 C.6 D.7
5、若有语句if(x%2) x++;则下列语句中,与x%2条件不等价的是 :
A.x%2==1 B.!(x%2==0) C.x%2!=0 D.!( x%2==1)
6、 下列程序段的运行结果是 :
float f=5.45; int a=8,b=-3,t=0;
if(!b) if(a>(int)f) if(a<b) t=1;
else t=-1;
A.0 B.-1 C.1 D.程序出错
7、 下列程序段的运行结果是 :
int a=50;
if(a>’0’>’1’) printf(“##”);
else printf(“%%”); 原创精品资源学科网独家享有版权,侵权必究!
A. ## B.% C.% % D.##%%
8、 若有以下定义int a,b;float c;char d;变量均正确赋值,下列语句中,语法正确的是 :
A.
B. switch a+b
{ case 1: a++;
case 2:b++;
case 3:d++; }
C. switch (a+1)
{ case a: a++;
case b:b++;
case d:d++; }
D. switch (d)
{ case ‘C’: a++;
case ‘B’:b++;
case ‘c’:a++;b++; }
E. switch (a+b)
{ case ‘A’: a++;
case ‘B’:b++;
case ‘C’:d++; }
9、 下列程序段的运行结果是 :
int a=11,b=64 ,s=0;
if(b>a) s=b-a; s=a+b;
else s=a-b;
A. 语法错误 B. 53 C. -53 D. 75
10、 下列语句中说法正确的是 :
A. Switch后表达式的类型可以和case后表达式或常量类型不一致。
B. case后可以是任何类型表达式。
C. case语句后面必须要有break。
D. 不同的case可以共用一个语句组。
2、 填空题(共10空,每空2分,共20分)
1、 若有语句if(a<b) t=a,a=b,b=t;的功能是 。
2、若有语句int a=49,b=27;char ch=’A’;则表达式a>’3’||ch<a&&!(b>>5)的值是 。
3、 写出下列语句的C语言表达式
c1)x<-1或56≤x<100
2)a,b为一个为正,一个为负
3)m是一个两位数且个位为3的正整数
4、若有定义语句int a=1,b=2,c=3,d=4;则执行表达式b*=a<b&&-(d-=c)||++c表达式的值为 ,a的值为1,b的值为2,c 的值为 ,d的值为 。
5、若有语句int x=5,y=5,z;执行语句z=x++>y?++x:y+x;则z的值为
6、 若有语句 a>b?a>c?a:c:b>c?b:c;的功能是 。
3、 程序运行题(共5题,每小题3分,共15分)
1、 下列程序运行的结果是 。
#include<stdio.h>
void main()
{ int a=12; 原创精品资源学科网独家享有版权,侵权必究!
unsigned b=-1;
if(a>b) printf(“a>b
”);
printf(“a<b
”); }
2、 下列程序运行的结果是 。
#include<stdio.h>
void main()
{ int a=1,b=2,c=3;
a<<=3; b*=a;
printf(“a=%d,b=%d,”,a,b);
printf(“c=%d
”,b>=c?’0’:0);}
3、 下列程序运行的结果是 。
#include<stdio.h>
#include<math.h>
void main()
{ int x=8,y=13,z=9,t;
float f1=3.54;
if(y>x)
if(y>z) t=floor(f1);
else t=(int)f1;
else if(y>z) t=x*z;
printf(“t=%d
”,t);}
4、 下列程序运行的结果是 。
#include<stdio.h>
void main()
{ int k=7,m=0,n=0;
switch(k&2)
{case 0:m++;
case 1:m++;n++;
case 2:m+=n;
case 3:n+=m;原创精品资源学科网独家享有版权,侵权必究!
default:m++;n--; }
printf(“m=%d n=%d
”,m,n);}
5、 下列程序运行的结果是 。
#include<stdio.h>
void main()
{ char ch; int n1=0,n2=1;
ch=getchar();
switch(ch)
{ case ‘A’: switch(n1==0)
{ case 0:printf(“1#”);break;
case 1:printf(“2##”);break;
default:printf(“3###”);break;}
case ‘B’: switch(!n2)
{ case 0:printf(“1*”);
case 1:printf(“2**”);break;
default:printf(“3***”);break;}
default: printf(“&&&”);
} }
从键盘输入BC<回车>
4、 程序填空题(共5空,每空5分,共25分)
1、根据以下函数关系,对输入的每个x值,计算出相应的y值。
x
y
x<=0
y=x5-3
0<x<=10
y=ex+3
10<x<=20
y=7*x-1
#include<stdio.h>
#include<math.h>
void main()
{ float y;
int x,var,f=1;原创精品资源学科网独家享有版权,侵权必究!
scanf(“%d”,&x);
if(x<=0)
else var=
switch(var)
{ case -1:y=pow(x,5)-3;break;
case 0:y= ;break;
case 1:y=7*x-1; break;
default: f=0; break; }
if(f==1) printf(“y=%f”,y);
else printf(“error”); }
2、根据输入的三角形的三条边,判断是否能组成三角形,若可以则输出它的面积和三角形的类型。三角形面积公式如下:
s=(a+b+c)/2
area=
#include <stdio.h>
#include<math.h>
main()
{ float a,b,c;
float s,area;
int flag;
scanf(“%f,%f,%f”,&a,&b,&c);
if (a+b>c&&a+c>b&&b+c>a)
{ s=(a+b+c)/2;
area= sqrt(s*(s-a)*(s-b)*(s-c));
printf(“三角形面积为%.2f
”,area);
flag= ;
if(a==b&&b==c)
printf(“可组成等边三角形
”);
else if( a==b||b==c||a==c)原创精品资源学科网独家享有版权,侵权必究!
if(flag)
printf(“可组成等腰直角三角形
”);
else printf(“可组成一般等腰三角形
”);
else if( )
printf(“可组成一般直角三角形
”);
else printf(“可组成一般的三角形
”);
}
else printf(“不能组成的三角形
”);
}
5、 程序改错题(共20分)
1、计算某年某月某日是该年的第几天,现有2处错误,请在找出错误语句,并写出完整的正确语句。(找出错误2分,改正错误3分)
L1 #include<stdio.h>
L2 void main()
L3 { int day,month,year,sum,f;
L4 scanf("%d-%d-%d",&year,&month,&day);
L5 sum=0;
L6 if(year%4==0&&year%100!=0||year%400==0) f=1;
L7 else f=0;
L8 switch(month-1)
L9 { case 11: sum+=30;
L10 case 10: sum+=31;
L11 case 9: sum+=30;
L12 case 8: sum+=31;
L13 case 7: sum+=31;
L14 case 6: sum+=30;
L15 case 5: sum+=31;
L16 case 4: sum+=30;
L17 case 3: sum+=31;
L18 case 2: sum+=28;原创精品资源学科网独家享有版权,侵权必究!
L19 case 1: sum+=31; }
L20 if(f==1)
L21 sum++;
L22 printf("是%d年的第%d天
",year,sum); }
2、 某书店有历史书分为上下册,可以成套卖(上下册为一套),也单本出售。若买套数超过30套每套90元,不足30套每套100元。只买上册每本55元,只买下册每本60元。以下功能是输入所买书籍上册s和下册x的册数,求应付款m。
L1 #include<stdio.h>
L2 void main()
L3 { int s,x,t,m;
L4 printf("请输入所买书籍上册s和下册x的册数:
");
L5 scanf("%d %d",&s,&x);
L6 if(s<x)
L7 { m=(s-x)*55;
L8 t=x;
L9 }
L10 else { m=(x-s)*60;
L11 t=s;
L12 }
L13 if(t>=30) m+=t*90;
L14 m+=t*100 ;
L15 printf("money=%d
",m); 原创精品资源学科网独家享有版权,侵权必究!
L16 }
学科网(北京)股份有限公司
$$