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