C语言程序设计现代方法-第2版 第5章 编程答案

1.编写一个程序,确定一个数的位数:

Enter a number : 374

The number 374 has 3 digits

假设输入的数最多不超过4位。提示:利用 if 语句进行数的判定。例如,如果数在0和9之间,那么位数为1;如果数在 10 和 99 之间,那么位数为2。

#include<stdio.h> 

int main()
{
	int number;
	
	printf("Enter a number;");
	
	scanf("%d",&number);
	
	if(number>=0&&number<=9)
	  printf("The number %d has 1 digits\n",number) ;
	else if(number>=10&&number<=99)
	  printf("The number %d has 2 digits\n",number) ;
	else if(number>=100&&number<=999)
	  printf("The number %d has 3 digits\n",number) ;
	else
	  printf("The number %d has 4 digits\n",number) ;
	  
	return 0;
}

2.编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的格式:

Enter a 24-hour time: 21:11

Equivalent 12-hour time:  9:11  PM

#include<stdio.h> 

int main()
{
	int hour=0,min=0;
	
	printf("Enter a 24-hour time: ");
	
	scanf("%d:%d",&hour,&min);
	
	if(hour>=13)
	  printf("Equivalent 12-hour time: %d:%d PM",hour-12,min);
	else
	  printf("Equivalent 12-hour time: %d:%d AM",hour,min);
	  
	return 0;
}

3.修改5.2节的 broker.c 程序,同时进行下面两种改变。

a)不再直接输入交易额,而是要求用户输入股票的数量和每股的价格。

b)增加语句用来计算经纪人竞争对手的佣金(少于2000股时佣金为每股33美元+3美分,2000股或更多股时为佣金为每股33美元+2美分)。在显示原有经纪人佣金的同时,也显示竞争对手的佣金。

#include<stdio.h>

int main(void)
{
	float commission, value, price, ccommission;
	int amount;
	
	printf("Enter amount and the price of stock: ");
	scanf("%d %f",&amount,&price);
	
	value = amount * price;
	
	if (value < 2500.00f)
	  commission = 30.00f + .017f * value;
	else if (value < 6250.00f)
	  commission = 56.00f + .0066f * value;
	else if (value < 20000.00f)
	  commission = 76.00f + .0034f * value;
	else if (value < 50000.00f)
	  commission = 100.00f + .0022f * value;
	else if (value < 500000.00f)
	  commission = 155.00f + .0011f * value;
	else
	  commission = 255.00f + .0009f * value;
	  
	if (commission < 39.00f)
	  commission = 39.00f;
	  
	printf("Commission: $%.2f\n",commission);
	
	if (amount<2000)
	  ccommission = 33 + 0.03 * amount;
	else 
	  ccommission = 33 + 0.02 * amount;
	
	printf("Commission of Others: $%.2f\n",ccommission);
	
	return 0;
}

4.下面是用于测量风力的蒲福风力等级的简化版本:

编写一个程序,要求用户输入风速(海里/小时),然后显示相应的描述。

#include<stdio.h> 

int main()
{
	float rate;
	
	printf("Enter the wind speed (n mile/hour): ");
	
	scanf("%f",&rate);
	
	if(rate<1)
	  printf("Calm");
	else if(rate<3)
	  printf("Light air");
	else if(rate<27)
	  printf("Breeze");
	else if(rate<47)
	  printf("Gale");
	else if(rate<63)
	  printf("Storm");
	else
	  printf("Hurricane");
	  
	return 0;
}

5.在美国的某个州,单身居民需要担负下面表格列出的所得税。

编写一个程序,要求用户输入需纳税的收入,然后显示税金。

#include<stdio.h> 

int main()
{
	float sum=0;
	
	printf("Enter taxable income: ");
	
	scanf("%f",&sum);
	
	if(sum<750)
	  printf("%.2f",sum*0.01);
	else if(sum<2250)
	  printf("%.2f",7.50+(sum-750)*0.02);
	else if(sum<3750)
	  printf("%.2f",37.50+(sum-2250)*0.03);
	else if(sum<5250)
	  printf("%.2f",82.50+(sum-3750)*0.04);
	else if(sum<7000)
	  printf("%.2f",142.50+(sum-5250)*0.05);
	else 
	  printf("%.2f",230.00+(sum-7000)*0.06);
	  
	return 0;
}

6.修改4.1节的 upc.c 程序,使其可以检测 UPC 的有效性。在用户输入 UPC 后,程序将显示 VALID 或 NOT VALID 。

#include<stdio.h>

int main()
{
	int a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p;
	
	printf("Enter the first 12 digits of a UPC:  ");
	
	scanf("%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d%1d",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j,&k,&l);
	
	m=a+c+e+g+i+k,n=b+d+f+h+j,o=m*3+n,p=9-(o-1)%10;
	
	if(p==l)
	  printf("VALID");
	else
	  printf("NOT VALID");
	  
	return 0;
}

7.编写一个程序,从用户输入的4个整数中找出最大值和最小值:

Enter four integers: 21 43 10 35 

Largest: 43

Smallest: 10

要求尽可能少用 if 语句。提示:4条 if 语句就足够了。

#include<stdio.h> 

int main()
{
	int num1,num2,num3,num4;
	int max1,max2,min1,min2;
	
	printf("Enter four integers: ");
	
	scanf(" %d %d %d %d",&num1,&num2,&num3,&num4);
	 
	if(num1>num2)
	  max1=num1,min1=num2;
	else
	  max1=num2,min1=num1;
	
	if(num3>num4)
	  max2=num3,min2=num4;
	else
	  max2=num4,min2=num3;
	
	printf("Largest: %d\n",max1>max2?max1:max2);
	printf("Smallest: %d\n",min1<min2?min1:min2);
	
	return 0;
}

8.下面的表格给出了一个城市到另一个城市的航班信息。

编写一个程序,要求用户输入一个时间(用24小时制的时分表示)。程序选择起飞时间与用户输入最接近的航班,显示出相应的起飞时间与用户输入最接近的航班,显示出相应的起飞时间和抵达时间。

Enter a 24-hour time: 13:15

Closest departure time is 12:17 p.m., arriving at 3:00 p.m.

提示:把输入用午夜开始的分钟数表示。将这个时间与表格里也用午夜开始的分钟数表示的起飞时间相比。例如, 13:15 从午夜开始是 13*60+15=795 分钟,与下午 12:47 (从午夜开始是 767 分钟)最接近。

#include<stdio.h> 

int main()
{
	int hour=0,min=0,time=0;
	
	printf("Enter a 24-hour time: ");
	
	scanf("%d:%d",&hour,&min);
	
	time=hour*60+min;
	
	if( time < (480+583)/2)
	  printf("Closest departure time is  8:00 a.m., arriving at 10:06 a.m.");
	else if (time < (583+679)/2)
	  printf("Closest departure time is  9:43 a.m., arriving at 11:52 a.m.");
	else if( time < (679+767)/2)
	  printf("Closest departure time is 11:19 a.m., arriving at  1:31 p.m.");
	else if( time < (767+840)/2)
	  printf("Closest departure time is 12:47 a.m., arriving at  3:00 p.m.");
	else if( time < (840+945)/2)
	  printf("Closest departure time is  2:00 p.m., arriving at  4:08 p.m.");
	else if( time < (945+1140)/2)
	  printf("Closest departure time is  3:45 p.m., arriving at  5:55 p.m.");
	else if( time < (1140+1305)/2)
	  printf("Closest departure time is  7:00 p.m., arriving at  9:20 p.m.");
	else if( time < (135+480)/2)
	  printf("Closest departure time is  9:45 p.m., arriving at 11:58 p.m.");
	else 
	  printf("Closest departure time is  9:45 p.m., arriving at 11:58 p.m.");
	
	return 0;
}

9.编写一个程序,提示用户输入两个日期,然后显示哪一个日期更早:

Enter first date (mm/dd/yy) : 3/6/08

Enter second date (mm/dd/yy) :5/17/07

5/17/07 is earlier than 3/6/08

#include<stdio.h> 

int main()
{
	int m1,d1,y1,m2,d2,y2;
	
	printf("Enter first date (mm/dd/yy): ");
	
	scanf("%d/%d/%d",&m1,&d1,&y1);
	
	printf("Enter second date (mm/dd/yy): ");
	
	scanf("%d/%d/%d",&m2,&d2,&y2);
	
	if(y1<y2||(y1==y2&&m1<m2)||(y1==y2&&m1==m2&&d1<d2))
	  printf("%d/%d/%02d is earlier than %d/%d/%02d",m1,d1,y1,m2,d2,y2);
	else 
	  printf("%d/%d/%02d is earlier than %d/%d/%02d",m2,d2,y2,m1,d1,y1);
	
	return 0;
}

10.利用 switch 语句编写一个程序,把用数字表示的成绩转化为用字母表示的等级。

Enter numerical grade: 84

Letter grade: B

使用下面的等级评定规则:A为 90~100,B为 80~89,C为 70~79,D为 60~69,F为 0~59。

如果成绩高于 100 或低于 0 显示出错消息。提示:把成绩分成 2 个数字,然后使用 switch 语句判定十位上的数字。

#include<stdio.h> 

int main()
{
	int grade=0,rank=0;
	
	printf("Enter numerical grade:");
	
	scanf("%d",&grade);
	
	if( grade>100 || grade<0 )
	{
		printf("Error input grade, exit.");
		return 0;
	}
	
	rank=grade/10;
	
	switch(rank)
	{
		case 10:  
		case  9:  printf("Letter grate: A");
		          break;
		case  8:  printf("Letter grate: B");
		          break;
		case  7:  printf("Letter grate: C");
		          break;
		case  6:  printf("Letter grate: D");
		          break;
		default:  printf("Letter grate: F");
		          break;
	}
	return 0;
}

11.编写一个程序,要求用户输入一个两位数,然后显示该数的英文单词:

Enter s two-digit nuumber: 45

You entered the number forty-five.

提示:把数字分为两个数字。用一个 switch 语句显示第一位数字对应的单词(“twenty” “thirty” 等),用第二的 switch 语句显示第二个数字对应的单词。不要忘记 11~19 需要特殊处理。

#include<stdio.h> 

int main()
{
	int m,d,number;
	
	printf("Enter a two-digit number: ");
	
	scanf("%d",&number);
	
	m=number/10;
	d=number%10;
	
	printf("You entered the number: ");
	
	if(number<=20)
	{
		switch(number)
	    {
	    	case 10:  printf("ten");
		         break;
		    case 11:  printf("eleven");
		         break;
		    case 12:  printf("twelve");
		         break;
		    case 13:  printf("thirteen");
		         break;
		    case 14:  printf("fourteen");
		         break;         
	     	case 15:  printf("fifteen");
		         break;         
		    case 16:  printf("sixteen");
		         break;         
		    case 17:  printf("seventeen");
		         break;         
		    case 18:  printf("eighteen");
		         break;         
		    case 19:  printf("nineteen");
		         break;
		    case 20:  printf("twenty");
		         break;
		}
		    
    
	}
	else
	{
		switch(m)
	{
		case 2:  printf("twenty");
		         break;
		case 3:  printf("thirty");
		         break;
		case 4:  printf("forty");
		         break;         
		case 5:  printf("fifty");
		         break;         
		case 6:  printf("sixty");
		         break;         
		case 7:  printf("seventy");
		         break;         
		case 8:  printf("eighty");
		         break;         
		case 9:  printf("ninety");
		         break;         
	}
	
	switch(d)
	{
		case 1:  printf("-one");
		         break;
		case 2:  printf("-two");
		         break;
		case 3:  printf("-three");
		         break;
		case 4:  printf("-four");
		         break;         
		case 5:  printf("-five");
		         break;         
		case 6:  printf("-six");
		         break;         
		case 7:  printf("-seven");
		         break;         
		case 8:  printf("-eight");
		         break;         
		case 9:  printf("-nine");
		         break;         
	}
	}
	
	
	
	return 0;
}

            

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值