一、单项选择题 (P111)
1、要判断char型变量m是否是数字字符,可以使用下列表达式( )
A.0<=m&&m<=9 B.’0’<=&&m<=’9’
C.”0”<=m&&m<=”9” D.前面三个答案均是错误的
2、if语句的控制条件( )。
A)只能用关系表达式 B)只能用关系表达式或逻辑表达式
C)只能用逻辑表达式 D)可以是任何表达式
3、以下程序的输出结果是( )。
main()
{float x=2,y;
if(x<0)y=0;
else if(x<5&&!x)y=1/(x=2);
else if(x<10)y=1/x;
else y=10; printf(“%f\n”,y);
}
A)0.000000 B)0.250000 C)0.500000 D)10.000000
4、执行以下程序段后,a,b,c的值分别是( )。
int a,b=100,c,x=10,y=9;
a=(–x= =y++)?–x:++y;
if(x<9) b=x++;c=y;
A)9,9,9 B)8,8,10 C)9,10,9 D)1,11,10
5、执行下列程序段后,x、y和z的值分别是( )。
int x=10,y=20,z=30;
if(x>y)z=x; x=y; y=z;
A)10,20,30 B)20,30,30 C)20,30,10 D)30,30,20
6、以下程序的输出结果是( )。
main()
{int w=4,x=3,y=2,z=1;
if(x>y&&(z==w))printf(“%d\n”,(w<x?w:z<y?z:x));
else printf(“%d\n”,(w>x?w:z>y?z:x));
}
A)1 B)2 C)3 D)4
7、下面的程序段所表示的数学函数关系是( )。
y=-1;
if(x!=0){if(x>0)y=1;}
else y=0;
A) -1 (x<0) B) 1(x<0)
y= 0 (x=0) y= -1(x=0)
1 (x>0) 0(x>0)
C) 0 (x<0) D) -1(X<0)
y= -1 (x=0) y= 1(x=0)
1 (x>0) 0(x>0)
8、若执行以下程序时从键盘上输入3□4,则输出结果是( )。
main()
{int a,b,s;
scanf(“%d%d”,&a,&b); s=a;
if(a<b)s=b;
s*=s;
printf(“%d\n”,s);
}
A)14 B)16 C)18 D)20
9、若a和b均是整型变量,以下正确的switch语句是( )。
A)switch(a/b) B)switch(aa+bb);
{case 1:case 3.2;y=a+b;reak; {case 3:
case 0:case 5:y=a-b; case 1:y=a+b;break;
} case 0:y=b-a;}
C)switch a D)switch(a+b)
{default :x=a+b; {case10:x=a+b;break;
case 10:y=a-b;break; case 11:y=a-b;
case 11:y=a*b;break;} }
二、填空题(p115)
1.if语句控制表达式只有其值为______时表示逻辑“真”,其值为__________表示逻辑“假”。(非0 0)
2.if(!k)a=3;语句中的!k可以改写为________,使其功能不变。(k==0)
3. 表达“若|x|>4,则输出x,否则输出error!”,的if语句是______________。
if ( x>4 || x<-4 ) printf(“%d”,x); else printf(“error!”);
或: x>4 || x<-4 ? printf(“%d”,x) : printf(“error!”);
或:if(abs(x)>4)printf(“%d”,x); else printf(“error!”);
4. 能正确表达“当x的值是[1,10]或[200,210]范围内的奇数时,输出x”的if语句是________。
if ( (x%2!=0) && ( (x>=1 && x<=10) || (x>=200 && x<=210) ) )
5、已知a=15,b=240;则表达式(a&b)&b||b的结果为__________。(1)
a: 00001111
& b:11110000
= 00000000
& b:11110000
= 00000000 0(0为假)
|| b:11110000 1(非0为真)
= 1
6. 下列程序段的输出是__________。(k=1)
int i=0,k=100,j=4;
if(i+j)k=(i=j)?(i=1):(i=i+j);
printf(“k=%d\n”,k);
- 下列程序段当a的值为014和0x14时的执行结果分别是________。
if(a=0xa|a>12)
if(011&10==a)printf(“%d! \n”,a);
else printf(“Right!%d\n”,a);
当a=014时,a>12=0,0xa|0=10,a=10,
10==a=1,011&1=9;输出10!
当a=0x14时,a>12=1,0xa|1=11,a=11,
10==a=0,011&0=0;输出Right!11
- 以下程序的输出是__________。(
$$$ a=0
)
main()
{int a=0,b=0,c=0;
if(a=b+c)printf(“*** a=%d\n”,a);
else printf(“$$$ a=%d\n”,a);
}
9.下列程序的输出结果是__________。(a=2,b=1)
#include “stdio.h”
main()
{int x=1,y=0,a=0,b=0;
switch(x)
{case 1:switch(y)
{case 0:a++;break;
case 1:b++;break;
}
case 2:a++;b++;
}
printf(“a=%d,b=%d\n”,a,b);
}
10、 若下列程序执行后t的值为4,则执行时输入a,b的值的范围是______________。(0<a<b)
#include “stdio.h”
main()
{int a,b,s=1,t=1;
scanf(“%d,%d”,&a,&b);
if(a>0)s+=1;/*(2)要s=2,则必须a>0 */
if(a>b)t+=s; /*(3)要使t=4,则此if-else不能被执行,即a<b */
else if(a==b)t=5;
else t=2*s; /*(1)要t=4,则必s=2 */
printf(“s=%d,t=%d\n”,s,t);
}
三、编程题
1、 以下程序求3个整数中的最小值,程序是否有错?若有错,请改正。(p116)
main()
{int a,b,c,t;
scanf(“%d,%d”,&a,&b);
if(a>b)&&(a>c)
if b<c printf(“min=%d\n”,b);
else printf(min=%d\n",c)
if(a<b)&&(a<c)printf(“min=%c\n”,a);
}
修改程序如下:
main( )
{ int a, b, c;
scanf (“%d,%d,%d”, &a, &b, &c);
if ( ( a>b)&&(a>c) )
if (b<c) printf(“min=%d\n”,b);
else printf(“min=%d\n”,c);
else if ( (a<b)&&(a<c) ) printf(“min=%d\n”,a);
else printf(“min=%d\n”,b<c?b:c);
}
/*p116_1A.c */
main()
{int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
if(a>b)
if(b>c)printf(“%d\n”,c);
else printf(“%d\n”,b);
else if(a>c)printf(“%d\n”,c);
else printf(“%d\n”,a);
}
/*p115_1b.c */
main()
{int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
printf(“%d\n”,a<b&&a<c?a:b<c?b:c);
}
/*p116_1c.c */
main()
{int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
if(a<b&&a<c)printf(“%d\n”,a);
if(b<a&&b<c)printf(“%d\n”,b);
if(c<a&&c<b)printf(“%d\n”,c);
}
2、 给出一个5位数,按逆序输出它的各位数值。如输入12345,请输出54321。
方法1、
main( )
{ long a;
int k;
scanf ("%ld",&a);
printf ("%ld\n",a);
loop: if ( a != 0 )
{ k = a%10;
printf ("%d",k);
a = a/10;
goto loop;
}
}
方法2、
main()
{int n;
printf("Input n:(0--32767\n");
scanf("%d",&n);
if(n>10000){printf("%d",n%10);n=n/10;}
if(n>1000){printf("%d",n%10);n=n/10;}
if(n>100){printf("%d",n%10);n=n/10;}
if(n>10){printf("%d",n%10);n=n/10;}
printf("%d\n",n);
}
方法3:
main()
{long n,s=0;
scanf("%ld",&n);
while(n>0)
{s=s*10+n%10;
n=n/10;
}
printf("s=%ld\n",s);
}
3、有一个函数:
分别用:(1)简单if语句,(2)嵌套的if语句,(3)if…else语句,(4)switch语句编写程序,要求输入x的值,输出y的值。
(1) 用简单的 if 结构
main( )
{ int x, y;
scanf ("%d",&x);
if ( x<0 && x>-5 ) y=x;
if ( x<5 && x=0 ) y=x-1;
if ( x>=5 && x<10 ) y=x+1;
printf ("%d,%d\n",x,y);
}
(2) 用嵌套的if 结构
main( )
{int x,y;
printf("Please input x :-5-----10\n");
scanf("%d",&x);
if(x<5)
if(x<0)
{ if(x>-5) y=x; }
else y=x-1;
else
if(x<10) y=x+1;
printf("%d,%d\n",x,y);
}
(3) 用if-else分支结构
main( )
{ int x, y;
scanf ("%d",&x);
if ( x<0 && x>-5 ) y=x;
else if ( x<5 && x>=0 ) y=x-1;
else if ( x>=5 && x<10 ) y=x+1;
printf ("%d,%d\n",x,y);
}
(4) 用switch( )结构
main( )
{ int x, y, k;
printf ("Please input x :-5-----10\n");
scanf ("%d",&x);
if ( x<0 ) k=-1;
else k=x/5;
switch (k)
{ case 1: y=x+1; break;
case 0: y=x-1; break;
case -1: y=x; break;
}
printf("%d,%d\n", x, y);
}
4、编写程序输入一位学生的生日(年:y0、月:m0、日:d0);并输入当前的日期(年:y1、月:m1、日:d1);输出改学生的实足年龄。 (P116)
main( )
{ int y0, m0, d0, y1, m1, d1, age;
printf("Please input current day:\n");
scanf("%d,%d,%d",&y1,&m1,&d1);
printf("Please input birthday:\n");
scanf("%d,%d,%d",&y0,&m0,&d0);
age = y1-y0;
if ( m1<m0 ) age--;
else if(m1==m0&&d1<d0) age--;
printf("age=%d\n",age);
}
5、编写程序,输入3个整数,判断它们是否能构成三角形,若能构成三角形,则输出三角形的类型(等边、等腰或一般三角形) (P117)
main( )
{ int a, b, c;
printf("Please input a,b,c:\n");
scanf("%d,%d,%d",&a,&b,&c); /* 输入三角形的三条边 */
if (a+b>c&&a+c>b&&b+c>a) /* 判断两边之和大于第三边 */
if (a==b&&b==c) /* 判断等边三角形 */
printf(" 等边三角形\n");
else if (a==b||a==c||b==c) /* 判断等腰三角形 */
printf("等腰三角形\n");
else if(a*a+b*b=c*c||a*a+c*c=b*b||b*b+c*c=a*a) /* 判断直角三角形 */
printf(“直角三角形\n”);
else printf("一般三角形\n");
else printf("不能组成三角形\n");
}
6、将下列程序用switch语句改写,并使其功能不变。
main()
{int x,y;
scanf("%d",&x);
if(x<20)y=1;
else if(x<30)y=2;
else if(x<40)y=3;
else if(x<50)y=4;
else if(x<60)y=5;
else y=6;
printf("x=%d,y=%d\n",x,y);
}
改正:
main( )
{ int x, y, k;
scanf ("%d", &x);
k = x/10;
switch ( k )
{ case 0:
case 1: y=1; break;
case 2: y=2; break;
case 3: y=3; break;
case 4: y=4; break;
case 5: y=5; break;
default: y=6; break;
}
printf("x=%d,y=%d\n",x,y);
}
7、某商店位促销推出如下让利销售方案,其中M位购买金额,n为让利百分比。
M<100, N=0; 100<=M<200, N=1.5%
200<=M<300, N=2.5% 300<=M<400, N=3.5%
400<=M<500, N=4.5% 500<=M<600, N=5.5%
M>600, N=6%;
编写程序,对输入的购买金额,输出顾客购买金额、实际支出金额和返还金额。
main( )
{ int m,k;
float n;
printf ("Please input 购买金额 m :\n");
scanf ("%d",&m);
k = m/100;
switch (k)
{ case 0: n=0; break;
case 1: n=0.015; break;
case 2: n=0.025; break;
case 3: n=0.035; break;
case 4: n=0.045; break;
case 5: n=0.055; break;
default: n=0.06; break;
}
printf("%5d,%7.2f,%7.2f",m,m-n*m,m*n);/*输出购买金额、实际支付金额和返还金额 */
}
8、编写程序,计算从1995年元月1日到2000年12月10日共有多少天,闰年的2月有29天,闰年Y满足的条件:Y能被400整除或Y能被4整除,但不能被100整除。
解:本程序使用goto语句实现,仅供参考,请勿模仿。(P117)
main( )
{ int year=1995, month, days=0;
loop: if ( year <= 2000 )
{
days = days+7*31+4*30+28; /* 每年增加 365天 */
if ( year%4==0&&year%100!=0 || year%400====0 ) /* 判断闰年 */
days++;
year++;
goto loop;
}
days = days-21; /* 仅计算到2000年12月10日 */
printf("The total days is :%d\n" ,days);
}
9、编写程序,输入一个不超过5位的正整数,输出它的的个位数,并指出它有几位数。
解:本程序使用goto语句实现,仅供参考,请勿模仿。(p116)
方法1:
main ( )
{ long a;
int b, k=0, m;
printf ("Please input a<99999:\n");
scanf ("%ld",&a);
b = a%10;
if ( a/10==0 )
{ k=1;
printf("%ld\n",a);
}
else
{ printf("%d\n",b);
m=a;
loop: if ( m!=0 )
{ k++;
m=m/10;
goto loop;
}
}
printf ("%ld,%d\n",a,k);
}
方法2:
main()
{int x,n;
printf("Input x(0__32767):");
scanf("%d",&x);
if(x>=10000)n=5;
if(x>=1000&&x<10000)n=4;
if(x>=100&x<1000)n=3;
if(x>=10&&x<100)n=2;
if(x<10) n=1;
printf("n=%d,x=%d\n",n,x%10);
}
10、编写加密数据程序,方法:对给定的数值,每一位数字加2,且在[0,9]范围内,若加2后某位数值大于9,则取其被10除的余数。如:6987加密后位8109。
:本程序使用goto语句实现,仅供参考,请勿模仿。(p117)
方法1
#include<math.h>
main( )
{ long a, m, n=0;
int i=0, k;
scanf("%ld",&a);
m=a;
loop: if ( m != 0 )
{ k = m%10;
k = k+2;
if ( k >= 9 )
k=k%10;
m = m/10;
n = k*pow(10,i)+n;
i++;
goto loop;
}
printf ("%ld,%ld\n", a, n);
}
方法2
main()
{long x,y,k=1;
printf("Input x:");
scanf("%ld",&x);
y=x;
ff:if(y>=10)
{y=y/10;
k=k*10;
goto ff;
}
y=0;
gg:if(k>0)
{
y=y*10+(x/k+2)%10;
x=x%k;
k=k/10;
goto gg;}
printf("%ld\n",y);
}