c语言答案第三章

  • 格式:doc
  • 大小:77.00 KB
  • 文档页数:11

第三章计习题解答

3.1 用C语言描述下列命题。

(1) a小于b或小于c。

(2) a和b都大于c。

(3) a和b中有一个小于c。

(4) a是非正整数。

(5) a是奇数。

(6) a不能被b整除。

(7) 角A在第一或第三象限。

(8) a是一个带小数的正数,而b是一个带小数的负数。

[解答]

(1) a

(2) a>c && b>c

(3) a=c || a>=c && b

(4) a==(int)a && a<=0

(5) a%2==1

(6) a%b!=0

(7) 0

(其中PI=3.14159265为圆周率)

(8) a-(int)a>0 && b-(int)b<0

3.2 写出下列表达式的值。

(1) 1<4 && 4<7

(2) 1<4 && 7<4

(3) !(2<=5)

(4) !(1<3)||(2<5)

(5) !(4<=6) && (3<=7)

[解答]

(1) 1 (2) 0 (3) 0 (4) 1 (5) 0

3.3 若x=3,y=z=4,求下列表达式的值。

(1) (z>=y>=x)? 1:0

(2) z>=y && y>=x

[解答]

(1) 0 (2) 1

3.4 若x=3,y=2,z=1,求下列表达式的值。

(1) x

(2) x

(3) z+=(x

[解答]

(1) 3 (2) 2 (3) 3

3.5 写出下面程序段的输出结果。

(1)

int x = 40,y = 4,z = 4;

x = y == z; printf ("%d\n",x);

x = x == (y = z);printf ("%d\n",x);

[解答]

1

0

(2)

int x,y,z;

x=y=z=0;

++x || ++y && ++z;

printf ("x=%d\ty=%d\t z=%d\n",x,y,z);

x=y=z=0;

++x&&++y||++z;

printf ("x=%d\t y=%d\tz=%d\n",x,y,z);

x=y=z=0;

++x&&++y&&++z;

printf ("x=%d\t y=%d\tz=%d\n",x,y,z);

x=y=z=-1;

++x&&++y&&++z;

printf ("x=%d\ty=%d\t z=%d\n",x,y,z);

x=y=z=-1;

++x&&++y||++z;

printf ("x=%d\t y=%d\t z=%d\n",x,y,z);

x=y=z=-1;

++x||++y&&++z;

printf ("x=%d\t y=%d\t z=%d\n",x,y,z);

[解答]

x=1 y=0 z=0

x=1 y=1 z=0

x=1 y=1 z=1

x=0 y=-1 z=-1

x=0 y=-1 z=0

x=0 y=0 z=-1

(3)

int x=1,y=1,z=1;

y=y+z;

x=x+y;

printf ("%d\n",x<y? y:x);

printf ("%d\n", x<y? x++∶y++);

printf ("%d\n",x); printf ("%d\n",y);

x=3;

y=z=4;

printf ("%d\n",(x>=y>=x)?1∶0);

printf ("%d\n",z>=y && y>=x);

[解答]

3

2

3

3

0

1

3.6. 设计C语言程序, 求两个正整数m和n的最大公约数。

[解答]

#include

int GCD(int m, int n) /* 计算正整数 m 和 n 的最大公约数 */

{

/* 辗转相除法 */

int r; /* 用于存放每次计算中的余数 */

while((r=m%n)!=0) /* 只要余数不为 0 就循环 */

{

/* 更新 m, n, 为下一次迭代做好准备 */

m=n;

n=r;

}

return n; /* 循环退出时余数为 0, 商数 n 即是原来两个数的最大公约数 */

}

void main()

{

int m, n;

printf("请输入两个正整数: ");

scanf("%d%d", &m, &n);

printf("%d 和 %d 的最大公约数是 %d\n", m, n, GCD(m, n));

}

3.7有下列语句:

if (a

if (a

if (a

(1) 把此语句写得逻辑关系更清晰一些。

(2) 检查其中有无多余的判定条件或矛盾的判定条件。

(3) 重写一个等效的简洁的条件语句。

[解答] (1)

if (a

if(c

x=1;

else if (a

if(b

x=2;

else x=3;

else if (a

if(b

x=4;

else x=5;

else x=6;

else x=7;

(2)

else if (a

if(b

x=4;

else x=5;

这一段应该去掉, 因为条件 c=c 且 c>=d) 时才可能执行这一段,

而这与条件a

(3)

if(a>=b)

x=7;

else if(c

x=1;

else if(a>=c)

x=6;

else if(b

x=2;

else

x=3;

3.8设计C程序,从五个数中取最大及最小数的C程序。

[解答]

#include

#define N 5

void main()

{

int i, n, max, min;

printf("请输入 %d 个整数: ", N);

scanf("%d", &n);

max=min=n;

for(i=2; i<=N; i++) {

scanf("%d", &n);

if(max

if(min>n) min=n;

}

printf("最大数是 %d, 最小数是 %d.\n", max, min);

}

3.9设计C程序,由键盘输入任意三数,按降序输出此三数。

[解答]

#include

#define N 5

void main()

{

int a, b, c, temp;

printf("请输入三个整数: ");

scanf("%d%d%d", &a, &b, &c);

if(a

{

temp=a; a=b; b=temp;

}

if(a

{

temp=a; a=c; c=temp;

}

if(b

{

temp=b; b=c; c=temp;

}

printf("%d, %d, %d\n", a, b, c);

}

3.10设计C程序,设计一个判断输入年份是否为闰年的C程序。

3.11 设计C程序,由键盘键入三个数,计算以这三个数为边长的三角形的面积。

[解答]

#include

#include

void main()

{

double a, b, c, p, s; /* a, b, c 为三角形三边长, p 为半周长, s 为面积 */

printf("请输入三角形的三边长: ");

scanf("%lf%lf%lf", &a, &b, &c);

if(a>0 && b>0 && c>0 && a+b>c && a+c>b && b+c>a) /* 判断 a, b, c是否能构成三角形 */

{

p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c));

printf("此三角形的面积是 %f\n.", s);

}

else

printf("以这三个数不能构成三角形.\n");

}

3.12 把下列程序段改写得更合理。

(1)

while (A)

{

if (B) continue;

C;

}

(2)

do

{

if (!A) continue

else B;

C;

}while (A);

[解答]

(1)

while(A)

if(!B) C;

(2)

do

if(A)

{

B;

C;

}

while(A);

3.13指出下面三个C程序的功能。当输入为“qwert?”时,它们的执行结果各是什么?

(1)

#include