C语言程序设计基础教程 - 习题答案 下载本文

4.1.5 设y为int型变量,请写出描述“y是奇数”的表达式 y%2!=0 。 4.1.6 设x,y,z为int型变量,请写出描述“x或y中有一个小于z”的表达式 x=z||x>=z&&yb && c>a||ab的值是 1 。 4.1.8 假设 a=5, b=2, c=4,以下表达式的值依次为: 0,1,1,1 。

(1) a % b * c && c % b * a (2) b % c * a && a % c * b (3) a % b * c || c % b * a (4) b % c * a || a % c * b

4.1.9 假设 a=3, b=4, c=5,x=0,y=0,以下各表达式的值依次为 0,1,1,0,1 。

(1) a + b > c && b == c (2) a || b + c && b - c (3) ! (a > b) && ! c || 1

(4) ! (x = a) && (y = b) && 0 (5) ! (a + b) + c – 1 && b + c/2

4.1.10 两次运行下面的程序,如果从键盘上分别输入6和4,输出的结果是 7和5 。

void main() { int x;

scanf(“%d”,&x); if(x++>5)

printf(“%d”,x); else

printf(“%d\\n”,x--); }

4.2 选择题:

4.2.1 设a为整型变量,不能正确表达数学关系: 10

A) 1010&&a<15 D) !(a<=10)&&!(a>=15) 4.2.2 在以下一组运算符中,优先级最高的是( C )。

A) <= B) = C) % D) && 4.2.3 设a,b,c都是int型变量,且a=3,b=4,c=5,则下面表达式中,值为0的表达式是

( D )。

A) ?a?&&?b? B) a<=b C) c||+c&&b-c D) !((a

A) 关系表达式 B) 逻辑表达式 C) 算术表达式 D) 任意表达式 4.2.5 在以下运算符中,优先级最高的运算符是( B )。

A) <= B) / C) != D) && 4.2.6 假设所有变量均为整型,表达式(a=2,b=5,a>b? a++:b++,a+b)的值是( B )。

A) 7 B) 8 C) 9 D) 2 4.2.7 在C语言中,能代表逻辑值\真\的是( D )。

A) true B) 大于0的数 C) 非0整数 D) 非0的数 4.2.8 在以下运算符中,优先级最高的运算符是( A )。

A) ! B) = C) + D) || 4.2.9 逻辑运算符两侧运算对象的数据类型( D )。

A) 只能是0或1 B) 只能是0或非0正数

C) 只能是整型或字符型数据 D) 可以是任何类型的数据

4.3 编程题

4.3.1 编写一个C程序,要求从键盘输入一个整数,判断该整数是否能够被17整除。

(解析:当该数与17的余数为零时,即可以被17整除。) //参考程序

#include void main() { int a;

printf(“请输入一个整数:”); scanf(“%d”,&a); if(a==0)

printf(“%d能被17整除\\n”,a); else

printf(“%d不能被17整除\\n”,a); }

4.3.2 编写一个C程序,计算并显示由下列说明确定的一周薪水。如果工时小于40,

则薪水按每小时8元计;否则,按320元加上超出40小时部分的每小时12元。(解析:一周工时数为键盘输入,显示其相应薪水为输出。)

//参考程序

#include void main() {

float a,wage;

printf(“请输入工时数:”); scanf(“%f”,&a);

if(a<0) printf(“error!”); else

{ if(a<40) wage=a*8;

else wage=320+(a-40)*12; printf(“周薪水=%.1f元\\n”,wage);

}

}

4.3.3 编写一个C程序,要求从键盘输入三个整数a,b,c,输出其中最大的数。(解析:

求极值问题。设立一个变量max总是保留两数比较时较大的那个值。具体方法如下:先将a的值赋给max,如果max

//参考程序

#include void main() {

int a,b,c,max;

printf(“请输入三个整数:”); scanf(“%d %d %d”,&a,&b,&c); if(a>b) max=a;

else max=b; /* max=a>b?a:b; */ if(c>max) max=c; /* max=max>c?max:c; */ printf(“最大值max=%d\\n”,max); }

4.3.4 编写一个C程序,要求从键盘输入三个整数x,y,z,请把这三个数由小到大输出。

(解析:排序问题。想办法把三个数进行调换,使得最小的数放到x变量里,最

大的数放在z变量里。具体方法如下:先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小;然后将y与z比较,并将较小的值保存在y里而较大的值放在z里。最后,依次输出x、y、z。)

//参考程序

#include void main() {

int x,y,z,a;

printf(“input 3 integer :\\n”); scanf(“%d,%d,%d”,&x,&y,&z); if(x>y) /*使x<=y*/ {a=x; x=y; y=a;}

if(x>z) /*使x<=z*/ {a=x; x=z; z=a;} if(y>z) /*使y<=z*/ {a=z; z=y; y=a;}

printf(“\\nx=%d, y=%d, z=%d\\n”,x,y,z); }

4.3.5 编写一个C程序,要求从键盘输入一个不多于5位的正整数x,要求输出:一、

它是几位数;二、逆序打印出各位数字,例如:原数为789,应输出987。(解析:该问题的核心是分解出每一位上的数字: a=x/10000; /*分解出万位上的数字*/ b=x000/1000; /*分解出千位上的数字*/ c=x00/100; /*分解出百位上的数字*/ d=x0/10; /*分解出十位上的数字*/ e=x; /*分解出个位上的数字*/

通过检测各数字是否为零,便可知道x是几位数,例如:if (a) 则x是5位数。 )

//参考程序

#include void main()

{ long x; int a,b,c,d,e;

printf(\ scanf(\

e=x; d=x/10; c=x/100; b=x/1000; a=x/10000; if(x>=1E+5||x<=0)

printf(\ else

{ if(a>0) printf(\位数,反序数字是:%d%d%d%d%d\\n\ else if(b>0) printf(\位数, 反序数字是:%d%d%d%d\\n\ else if(c>0) printf(\位数,反序数字是:%d%d%d\\n\ else if(d>0) printf(\位数,反序数字是:%d%d\\n\ else printf(\位数,数字是:%d\\n\ } }

4.3.6 编写一个C程序,要求从键盘输入两个数,并依据提示输入的数字,选择对这两

个数的运算,并输出相应运算结果。要求提示为: 1、作加法; 2、做乘法; 3、做除法:

(解析:可使用switch语句,以提示输入的数字为依据,作分支结构设计,使得提示输入1时,将两数之和输出;提示输入2时,将两数之积输出;提示输入3时,将

两数之商输出 -- 注意,除数不可为零的检测与提示。)

//参考程序

#include void main() { float op1,op2; int sign;

printf(\请输入两个操作数: a b\\n\ scanf(\

printf(\请选择进行的运算(1,2,3,4): \\n\ printf(\ printf(\ printf(\ printf(\ printf(\您选择: \ scanf(\ switch(sign)

{ case 1: printf(\ case 2: printf(\ case 3: printf(\

case 4: if(op2) {printf(\ else { printf(\除数不能为0\\n\ default: printf(\您选择的运算不对\\n\ } }

习 题 五

5.1填空题

5.1.1 C语言三个循环语句分别是 while 语句, do while 语句和 for 语句。 5.1.2 至少执行一次循环体的循环语句是 do while 。 5.1.3 循环功能最强的循环语句是 for 。

5.1.4 下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填

填空。 int n=0,c; c=getchar();

while( c!=?\\n? )

{ if( c>=?0?&&c<=?9? ) n++; c=getchar(); }

5.1.5 在执行以下程序时,如果键盘上输入:ABCdef<回车>,则输出为 abcDEF 。

#include { char ch;

while((ch=getchar())!=?\\n?)

{ if(ch>=?A?&&ch<=?Z?) ch=ch+32; else if(ch>=?a?&&ch<=?z?) ch=ch-32; printf(“\\n”); }

5.1.6 下面程序的功能是用辗转相除法求两个正整数的最大公约数,请填空。

#include void main() { int r,m,n;

scanf(“%d,%d”,&m,&n);

if(m

while(r) { m=n; n=r; r= m%n ;} printf(“%d\\n”,n); }