C程序设计(第五版)谭浩强 第四章习题答案

1.什么是算术运算?什么是关系运算?什么是逻辑运算?
算术运算即“四则运算”,是加法、减法、乘法和除法四种运算的统称。它通常是对实数或复数进行的
关系运算就是“比较运算”,将两个数值进行比较,判断其比较的结果是否符合给定的条件。
逻辑运算是将多个变量或者表达式链接起来的逻辑关系

2.C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?
C语言中将数值为1作为真,为0作为假,系统将值为非0的变量或表达式作为真,否则假。

3.写出下面各逻辑表达式的值。设a=3,b=4,c=5.
(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
即:(1)0 因为b!=c;
(2)1 因为a,b+c,b-c均非0;
(3)1 因为||右侧为1 逻辑运算符||其中一个表示为1值则可以判定;
(4)0 很明显第一个和第三个式子为假 &&其中一个为假 则判定;
(5)1 &&前可以表示为0+5-1,后表示4+5/2均非0 。

4.有3个整数,由键盘输入,输出其中最大的数。

  #include
int main()
{
int a,b,c,z;
printf("请输入三个数\n"); 
scanf("%d %d %d",&a,&b,&c);
 if(a>b){
 	z=a;
 }else{
 	z=b;
 }if(cb&&c

5.从键盘输入一个小于1000的正整数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其检查是否为小于1000的正数。若不是,则要求从新输入。

#include 
#include 
int main()
{
  int i,k;   
  int m=1000;                                   
  printf("请输入一个小于%d的整数i:",m);
  scanf("%d",&i);
  if (i>m) {
   printf("输入的数不符合要求,请重新输入一个小于1000的整数i:\n");
   scanf("%d",&i);
  }
  k=sqrt(i);
  printf("%d的平方根的整数部分是:%d\n",i,k);
  return 0;
}

6.有一个函数:
{x (x<1)
y={2x-1 (1<=x<10)
{3x-11 (x>=10)
写程序,输入x的值,输出y相应的值。

#include
int main(){
	int x,y;
	printf("请输入x的值:");
	scanf("%d",&x);
	if(x<1){
		y=x;
	}else if(x>1&&x<10){
		y=2*x-1;
	}else{
		y=3*x-11;
	}
	printf("x=%d,y=%d",x,y);
	return 0;
} 

7.参照6.

8.给出一个百分制成绩,要求输出成绩等级A,B,C,D,E。90分以上为A,8089分为B,7079分为C,60~69分为D,60分以下为E。

#include
int main()
{
    int score;
    printf("输入学生的成绩:\n");
    scanf("%d",&score);
 if (score<0 || score>100){
    printf("输入的数据非法!\n");
}else{
    if(score>90){
        printf("该同学的等级为:A");
    }
    if(score>=80 && score<=90){
        printf("该同学的等级为:B");
    }
    if(score>=70 && score<=79){
        printf("该同学的等级为:C");
    }
    if(score>=60 && score<=69){
        printf("该同学的等级为:D");
    }
    if(score>=0&&score<=59){
        printf("该同学的等级为:E");
    } 
    }
    return 0;
}

9.给出一个不多于5位数的正整数;
(1)求出它是几位数;
(2)分别输出每一位数字;
(3)按逆顺序输出各位数,例如原有数为123,应输出321

#include
main() 
{
    long num;
    printf("输入一个不多于5位的整数:\n");
    scanf("%ld",&num);
    int place;
    if(num>9999) place=5; 
    else if(num>999) place=4; 
    else if(num>99) place=3; 
    else if(num>9) place=2; 
    else place=1;
    printf("\n%d是%d位数\n",num,place);
  
    int wan,qian,bai,shi,ge;
    ge=num%10;
    shi=num/10%10;
    bai=num/100%10;
    qian=num/1000%10;
    wan=num/10000;
    printf("\n分别打印出每一位数字和逆序输出:\n");
    switch(place) 
    {
        case 5:printf("%d\t%d%d%d%d%d\n",num,ge,shi,bai,qian,wan);break;
        case 4:printf("%d\t%d%d%d%d\n",num,ge,shi,bai,qian);break;
        case 3:printf("%d\t%d%d%d\n",num,ge,shi,bai);break;
        case 2:printf("%d\t%d%d\n",num,ge,shi);break;
        case 1:printf("%d\t%d\n",num,ge);break;
    }
}
#include
main()
{
    long i;
    float bonus,bon1,bon2,bon4,bon6,bon10;
    int c;
    bon1=10000*0.1;
    bon2=bon1+100000*0.075;
    bon4=bon2+200000*0.05;
    bon6=bon4+200000*0.03;
    bon10=bon6+400000*0.015;
    printf("请输入利润i:");
    scanf("%ld",&i);
    c=i/100000;
    if(c>10) c=10;
    switch(c)
    {
    case 0:bonus=1*0.1;break;
    case 1:bonus=bon1+(i-100000)*0.075;break;
    case 2:
    case 3:bonus=bon2+(i-200000)*0.05;break;
    case 4:
    case 5:bonus=bon4+(i-400000)*0.03;break;
    case 6:
    case 7:
    case 8:
    case 9:bonus=bon6+(i-600000)*0.015;break;
    case 10:bonus=bon10+(i-1000000)*0.01;break;
    }
    printf("奖金是%10.2f",bonus); 
}

11.输入4个整数,要求按由小到大的顺序输出。

  方法一:
#include
int main()
{
    int a,b,c,d,t;
    printf("请输入四个整数:\n");
    scanf("%d%d%d%d",&a,&b,&c,&d);
    if(a>b)
    {
    t=a;a=b;b=t;
    }
    if(a>c)
    {
        t=a;a=c;c=t;
    }
    if(a>d)
    {
        t=a;a=d;d=t;
    }
    if(b>c)
    {
        t=b;b=c;c=t;
    }
    if(b>d)
    {
        t=b;b=d;d=t;
    }
    if(c>d)
    {
        t=c;c=d;d=t;
    }
    printf("%d%d%d%d",a,b,c,d);
}

方法二数组

   #include 
 
int main()  
{  
    int a[4] ;  
    int i,j;  
    int temp;  
    printf("请输入4个数\n: ");  
    for( i = 0; i < 4; i++ )  
    {  
        scanf("%d",&a[i]);  
    }  
    for( i = 0; i < 4; i++ )  
    {  
        for( j = 0; j < (4-i); j++ )  
            if( a[j] > a[j+1] )  
            {  
                temp = a[j];  
                a[j] = a[j+1];  
                a[j+1] = temp;  
            }  
    }  
    printf("这4个数由小到大的排列顺序如下:");  
    for( i = 0; i < 4; i++ )  
    {  
        printf("%d ",a[i]);  
    }  
    printf("\n");  
    return 0;  
}

12.有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为0)

#include 
#include
main()
{ int h=10;
float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=-2,y4=-2,x,y,d1,d2,d3,d4;
printf("请输入一个点(x,y):");
scanf("%f,%f",&x,&y);
d1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1)); /*求该点到各中心点的距离*/
d2=sqrt((x-x2)*(x-x2)+(y+y2)*(y+y2));
d3=sqrt((x+x3)*(x+x3)+(y-y3)*(y-y3));
d4=sqrt((x+x4)*(x-x4)*(y+y4)*(y+y4));
if(d1>1&&d2>1&&d3>1&&d4>1) h=0; /*判断该点是否在塔外*/
printf("该点高度为%d\n",h);
}

你可能感兴趣的:(C答案)