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

1.编写程序,找出用户输入的一串数中的最大数。程序需要提示用户一个一个地输入数。当用户
输入0或负数时,程序必须显示出已输入的最大非负数:
Enter a number: 60 
Enter a number: 38.3 
Enter a number: 4.89 
Enter a number: 100.62 
Enter a number: 75.2295 
Enter a number: 0

The largest number entered was 100.62
注意,输入的数不一定是整数。

#include<stdio.h>

int main()
{
	float a=0,b=0;
	
	for (a=1;a>0;b=b>a?b:a)
	{
		printf("Enter a number: ");
		scanf("%f",&a);
		if(a<=0)
		  break;
	}
	printf("\n\nThe largest number entered was %g",b);
	
	return 0;
}

2.编写程序,要求用户输入两个整数,然后计算并显示这两个整数的最大公约数(GCD):
Enter two integers: 12 28
Greatest common divisor: 4
提示:求最大公约数的经典算法是Euclid算法,方法如下。分别让变量m和m存储两个数的值,如果n为0,那么停止操作,m中的值是GCD;否则计算m除以n的余数,把n保存到m中,并把余数保存到n中。然后重复上述过程,每次都先判定n是否为0。

#include<stdio.h>

int main()
{
	int m,n,a;
	
	printf("Enter two integers: ");
	scanf("%d %d",&m,&n);
	
	while(n!=0)
	{
		a=m%n;
		m=n;
		n=a;
	}
	
	printf("Greatest common divisor: %d",m);
	
	return 0;                                                                        
}

3.编写程序,要求用户输入一个分数,然后将其约分为最简分式:
Enter a fraction: 6/12
In lowest terms: 1/2
提示:为了把分数约分为最简分式,首先计算分子和分母的最大公约数,然后分子和分母都除
以最大公约数。

#include<stdio.h>

int main()
{
	int m,n,a,b,c;
	
	printf("Enter a fraction: ");
	scanf("%d/%d",&m,&n);
	
	a=m;
	b=n;
	
	while(n!=0){
		c=m%n;
		m=n;
		n=c;
	}
	
	a=a/m;
	b=b/m;
	
	printf("In lowest terms: %d/%d",a,b);
	
	return 0;
}

4.在5.2节的 broker.c 程序中添加循环,以便用户可以输入多笔交易并且程序可以计算每次的佣
金。程序在用户输入的交易额为0时终止。
Enter value of trade: 30000
Commission: $166.00

Enter value of trade: 20000
Commission: $144.00

Enter value of trade: 0

#include <stdio.h>
	
int main()
{
	float commission, value;
    
	printf("Enter value of trade: ");
    scanf("%f", &value);
    
    while(value!=0)
    {
    	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", commission);
    	  
    	printf("\n\nEnter value of trade: ");
    	scanf("%f", &value);
	}
	
	return 0;   
}

5.第4章的编程题1要求编写程序显示出两位数的逆序。设计一个更具一般性的程序,可以处理一位、两位、三位或者更多位的数。提示:使用do循环将输入的数重复除以10,直到值达到0为止。
 

#include<stdio.h>

int main()
{
	int n=0;
	
	printf("Enter a number: ");
	scanf("%d",&n);
	
	printf("The reversal is: ");
	
	do{
		printf("%d",n%10);
		n/=10;
	}while(n!=0);
	return 0;
}

06.编写程序,提示用户输人一个数n,然后显示出 1~n的所有偶数平方值。例如,用户输入
100,那么程序应该显示出下列内容:
4
16
36
64
100

#include<stdio.h>

int main()
{
	int n;
	
	printf ("Enter a number: ");
	scanf("%d",&n);
	
	for( int a=2; a<=n ; a+=2)
	{
		printf("%d\n",a*a);
	}
	
	return 0;
}

7.重新安排程序 square3.c,在for 循环中对变量主进行初始化、判定以及自增操作。不需要重写
程序,特别是不要使用任何乘法。

#include<stdio.h>

int main()
{
	int n;
	
	printf("This program prints an table of squares.\n");
	printf("Enter number of enries in table: ");
	scanf("%d",&n);
	
	for(int i=1,odd=3,square=1;i<=n;i++,square+=odd,odd+=2)
	{
		printf("%10d%10d\n",i,square);
	}
	return 0;
}

8.编写程序显示单月的日历。用户指定这个月的天数和该月起始日是星期几:
Enter number of days in month: 31
Enter starting day of the week (1=Sun, 7=Sat): 3
              1    2    3   4    5
  6    7    8    9  10  11  12
13  14  15  16  17  18  19
20  21  22  23  24  25  26
27  28  29  30  31
提示:此程序不像看上去那么难。最重要的部分是一个使用变量 i 从1计数到n的for语句(这里 n 是此月的天数),for 语句中需要显示 i 的每个值。在循环中,用if语句判定 i 是否是一个星期的最后一天,如果是,就显示一个换行符。

#include<stdio.h>

int main()
{
	int day,week;
	
	printf("Enter number of days in month: ");
	scanf("%d",&day);
	printf("Enter starting day of week (1=Sun, 7=Sat): ");
	scanf("%d",&week);
	
	for(int a=1;a<week;a++)
	{
		printf("   ");
	}
	
	for(int i=1,b=week;i<=day;i++,b=i+week-1)
	{
		printf("%3d",i);
		if(b%7==0)printf("\n");
	}
	return 0;
}

9.第2章的编程题8要求编程计算第一、第二、第三个月还贷后剩余的贷款金额。修改该程序,
要求用户输入还贷的次数并显示每次还贷后剩余的贷款金额。

#include<stdio.h>

int main()
{ 
	float loan=0,rate=0,pay=0;
	int times;
	
	printf("Enter amount of loan: ");
	scanf("%f",&loan);
	
	printf("Enter interest rare: ");
	scanf("%f",&rate);
	
	printf("Enter monthy payment: ");
	scanf("%f",&pay);
	
	printf("Enter payment month: ");
	scanf("%d",&times);
	
	float money_rate=rate/1200;
	
	for(int i=1;i<=times;i++)
	{
		loan=loan-pay+loan*money_rate;
		printf("Balance remaining after %d payment: %0.2f\n",i,loan);
	}
	return 0;
}

10、第5章的编程题9要求编写程序判断哪个日期更早。泛化该程序,使用户可以输入任意一个日
期。用 0/0/0 指示输入结束,不再输入日期。

Enter a date (mm/dd/yy): 3/6/08
Enter a date (mm/dd/yy): 5/17/07 
Enter a date (mm/dd/yy): 6/3/07 
Enter a date (mm/dd/yy): 0/0/0 
5/17/07 is the earliest date

#include<stdio.h>

int main()
{
	int m,d,y;
	
	printf("Enter a date (mm/dd/yy): ");
	scanf("%d/%d/%d",&m,&d,&y);
		
	for(int m1,d1,y1;m1!=0||d1!=0||y1!=0; )
	{
		printf("Enter a date (mm/dd/yy): ");
		scanf("%d/%d/%d",&m1,&d1,&y1);
		
		if(m1==0&&d1==0&&y1==0)
		break;
		
		if(y1<y||(y1==y&&m1<m)||(y==y1&&m==m1&&d1<d))
		m=m1,d=d1,y=y1;
	}
	printf("%d/%d/%02d is earliest date ",m,d,y);
	
	return 0;
}

11.数学常量e的值可以用一个无穷级数表示:
e=1+1/1!+1/2!+1/3!+…
编写程序,用下面的公式计算e的近似值:
1+1/1!+1/2!+1/3!+…+1/n!
这里 n 是用户输入的整数。

#include<stdio.h>

int main()
{
	int n;
	float e=1.0f,a=1;
	
	printf("Enter a number: ");
	scanf("%d",&n);
	
	for(int i=1;i<=n;i++)
	{
		a*=i;
		e+=1.0f/a;
	}
	printf("e=%f",e);
	
	return 0;
}

12.修改编程题11,使得程序持续执行加法运算,直到当前项小于 ε 为止,其中 ε 是用户输人的较
小的(浮点)数。

#include<stdio.h>

int main()
{
	float e=1.0f,a=1,n=0;
	
	printf("Enter a number: ");
	scanf("%f",&n);
	
	for(int i=1;e<n;i++)
	{
		a*=i;
		e+=1.0f/a;
		if(e>=n)
		{
			e-=1.0f/a;
			break;
		}
	}
	printf("e=%f",e);
	
	return 0;
}

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值