我是靠谱客的博主 开心外套,最近开发中收集的这篇文章主要介绍《C Primer Plus》中文第六版 编程练习答案 第七章 C控制语句:分支和跳转关于continue和break的及i++情况说明,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C Primer Plus 第7章 C控制语句:分支和跳转

  • 关于continue和break的及i++情况说明
      • 1.编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量。
      • 2.编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的ASCII码(十进制)。一行打印8个字符。建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符。
      • 3.编写一个程序,读取整数直到用户输入0。输入结束后,程序应报告用户输入的偶数(不包括0)个数、这些偶数的平均值、输入的奇数个数及其奇数的平均值。
      • 4.使用if else 语句编写一个程序读取输入,读到#停止。用感叹号替换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。
      • 5.使用switch重写练习4。
      • 6.编写程序读取输入,读到#停止,报告ei出现的次数。
      • 7.编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入。做如下假设:
      • 8.修改练习7的假设a,让程序可以给出一个供选择的工资等级菜单。使用switch完成工资等级选择。
      • 9.编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数。
      • 10.1988年的美国联邦税收计划是近代最简单的税收方案。它分为4个类别,每个类别有两个等级。
      • 11.ABC邮购杂货店出售的洋蓟售价为2.05美元/磅,甜菜售价为1.15美元/磅,胡萝卜售价为1.09美元/磅。在添加运费之前,100美元的订单有5%的打折优惠。少于或等于5磅的订单收取6.5美元的运费和包装费,5磅~20磅的订单收取14美元的运费和包装费,超过20磅的订单在14美元的基础上每续重Ⅰ磅增加0.5美元。编写一个程序,在循环中用switch语句实现用户输入不同的字母时有不同的响应,即输入a的响应是让用户输入洋蓟的磅数,b是甜菜的磅数,c是胡萝卜的磅数,q是退出订购。程序要记录累计的重量。即,如果用户输入4磅的甜菜,然后输入5磅的甜菜,程序应报告9磅的甜菜。然后,该程序要计算货物总价、折扣(如果有的话)、运费和包装费。随后,程序应显示所有的购买信息:物品售价、订购的重量(单位:磅)、订购的蔬菜费用、订单的总费用、折扣(如果有的话)、运费和包装费,以及所有的费用总额。

关于continue和break的及i++情况说明

continue 返回到while循环 break 跳出while循环,执行下面语句
switch中无continue,while{switch() case}中break只是跳出switch循环(内层循环),while继续循环
for循环中,break执行for后面语句,不更新i++,而continue会对上轮i++更新;
再说一下关于 i++和 ++i 情况。
i++,递增完 i++本身值不改变 ,++i本身值+1
while(i++<n){} i先比较后再递增,递增是在()完了之后,立马递增,不等{}
而while(++i<n){} i先递增后比较

1.编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量。

#include <stdio.h>
#define STOP '#'
#define SPACE ' ' 
int main(void)
{
    char c;
    char prev;
    int n_space=0;
    int n_lines=0;
    int n_others;
    printf("Enter the text(# to terminate):n");
    while((c=getchar())!=STOP)
    {
    	if(c=='n')
    	{
    		n_lines++;
		}
		else if(c==SPACE)//不用空白字符是因为其包括空格 、换页符、回车符等P156 
		{
			n_space++;
		}
		else{
			n_others++;
		}	 
	}
    printf("行数是%dn 空格数是%dn 其他符号是%dn",n_lines,n_space,n_others);
    return 0;
}

2.编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的ASCII码(十进制)。一行打印8个字符。建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符。

#include <stdio.h>
#define STOP '#'
int main(void)
{
    char c;
    int n_chars=0 ;
    printf("Enter the text(# to terminate):n");
    while((c=getchar())!=STOP)
    {
    	if(n_chars++%8==0)
    	{	
    		printf("n");
	    }
	    if(c=='n') //对't'、'n'、'f'等有的转义序列需要说明 P45
	    {
	    	 printf("“\n-%d”",c);
		}
	    else 
		{
		printf("“%c-%d”",c,c);
	    }
	}
    return 0;
}

3.编写一个程序,读取整数直到用户输入0。输入结束后,程序应报告用户输入的偶数(不包括0)个数、这些偶数的平均值、输入的奇数个数及其奇数的平均值。

#include <stdio.h>
int main(void)
{
    int num;
    int n_even=0,n_odd=0;
    float sumeven=0,sumodd=0;//此处注意类型转换 
    float mean_even, mean_odd;
    printf("Enter the number(0 to terminate):n");
    while(scanf("%d", &num) == 1 && num != 0)
    {
        if(num%2==0)
    	{
		    n_even++;
		    sumeven+=num;
	    }
	    else
	    {
	    	n_odd++;
	    	sumodd+=num;
		}
	}
    mean_even=sumeven/n_even;
	mean_odd=sumodd/n_odd;
	printf("偶数个数是%d,偶数平均数是%fn",n_even,mean_even);
	printf("奇数个数是%d,奇数平均数是%fn",n_odd,mean_odd);
    return 0;
}

4.使用if else 语句编写一个程序读取输入,读到#停止。用感叹号替换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。

#include <stdio.h>
#define STOP '#' 
int main(void)
{
    char c;
    int n=0;
    while((c=getchar())!=STOP)
    {
    	if(c=='.')
    	{
    		printf("!");
    		n++;
		}
		else if(c=='!')
		{
			printf("!!");
			n++;
		}
		else
        {
            printf("%c",c);
        }
	}
	printf("n转换次数总数是%d",n);
    return 0;
}

5.使用switch重写练习4。

#include <stdio.h>
#define STOP '#' 
int main(void)
{
    char c;
    int n=0;
    while((c=getchar())!=STOP)
    {
    	switch(c)
    	{
    	case'.':
		{	
		    printf("!");
    	    n++;
		    break;
	    }
		case'!': 
		{
		    printf("!!");
		    n++;
		    break;
	    }
		default :
		{
	        printf("%c",c);
	        break;
	    }
	    }
	}
	printf("n转换次数总数是%d",n);
    return 0;
}

6.编写程序读取输入,读到#停止,报告ei出现的次数。

(注意:该程序要记录前一个字符和当前字符。用“Receive your eieio award”这样的输入来测试.)

#include <stdio.h>
#define STOP '#' 
int main(void)
{
    char c;
    char prev=0;
    int n=0;
    while((c=getchar())!=STOP)
    {
    	if(c=='e') //对于if else if一个成立后面不执行,而if if if语句会挨个执行
    	{
    		prev=1;	
		}
		else if(prev==1&&c=='i')
		{
			n++;
			prev=0;	
		}
		else if(prev==1&&c!='i')
		prev=0;		
	}
	printf("n出现的次数是%d",n);
    return 0;
}

7.编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入。做如下假设:

a.基本工资= 1000美元/小时
b. 加班(超过40小时)= 1.5倍的时间
c. 税率:前300美元为15%
 续150美元为20%
 余下的为25%
用#define定义符号常量。不用在意是否符合当前的税法。

#include <stdio.h>
#define HOUR1 30
#define HOUR2 40
#define BASE_salary 10
#define add_salary BASE_salary*1.5  
#define RATE1 0.15
#define RATE2 0.2
#define RATE3 0.25
#define SALARY1 HOUR1*BASE_salary
int main(void)
{
    float hours,total_salary,tax,salary;
	printf("Enter your working hours:") ;
	while ((!scanf("%f", &hours)) || (hours < 0))
    {
        while (getchar() != 'n')
            continue;
        printf("Enter a positive number:");
    }
    
	if(hours<=HOUR1)
	{
		total_salary=hours*BASE_salary;
		tax=total_salary*RATE1;
		salary=total_salary-tax;	
	}
	else if(hours<=HOUR2)
	{
		total_salary=hours*BASE_salary;
		tax=SALARY1*RATE1+(total_salary - 300) *RATE2;
		salary=total_salary-tax;
	}
    else 
    {    total_salary=HOUR2*BASE_salary+(hours-HOUR2)*add_salary;
    	 if(total_salary<=450)
    	 {
    		 tax=SALARY1*RATE1+(total_salary - 300) *RATE2;			
		 }
		 else
    	 {
    		 tax=SALARY1*RATE1+(450 - 300) *RATE2+(total_salary - 450) *RATE3;			
		 }
    	 salary=total_salary-tax;
   }
   printf("工作时间是%gh,工资总额为$%gn",hours,total_salary);
   printf("税金为$%g,净收入为$%g",tax,salary);
	return 0;
}

8.修改练习7的假设a,让程序可以给出一个供选择的工资等级菜单。使用switch完成工资等级选择。

运行程序后,显示的菜单应该类似这样:
Enter the number corresponding to the desired pay rate or action:1) $8.75/hr
2)$9.33/hr
3)$10.00 /hr
4)$11.20 /hr
5) quit
如果选择1-4其中的一个数字,程序应该询问用户工作的小时数。程序要通过循环运行,除非用户输入5。如果输入1~5以外的数字,程序应提醒用户输入正确的选项,然后再重复显示菜单提示用户输入。使用#define创建符号常量表示各工资等级和税率。

#include <stdio.h>
#define HOUR1 30
#define HOUR2 40
#define add_salary BASE_salary*1.5 
#define PAY1 8.75
#define PAY2 9.33
#define PAY3 10.00
#define PAY4 11.20
#define RATE1 0.15
#define RATE2 0.20
#define RATE3 0.25
int main(void)
{	
	int num;
	float hours,total_salary,tax,salary,BASE_salary;
	showprintf:
	printf("*****************************************************************n");
    printf("Enter the number corresponding to the desired pay rate or action:n");
    printf("1) $8.75/hr                           2) $9.33/hrn");
    printf("3) $10.00/hr                          4) $11.20/hrn");
    printf("5) quitn");
    printf("******************************************************************n");
    printf("Please choose your number:");
    while(scanf("%d", &num) == 1)
    {
    	switch(num)
		{
                case 1: BASE_salary= PAY1; break;
                case 2: BASE_salary= PAY2; break;
                case 3: BASE_salary= PAY3; break;
                case 4: BASE_salary= PAY4; break;
                case 5: return 0;
                default:printf("Please enter the valid number:n");
				        goto showprintf;
        }
		printf("Enter your working hours:") ;
		while ((!scanf("%f", &hours)) || (hours < 0))
    	{
        	while (getchar() != 'n')//在输无效字符后,gerchar()一直读取,直到摁了Enter键,执行下一句
        	{
            	continue;
            }
        	 printf("Enter a positive number:");
    	}
		if(hours<=HOUR1)
		{
			total_salary=hours*BASE_salary;
			tax=total_salary*RATE1;	
		}
		else if(hours<=HOUR2)
		{
			total_salary=hours*BASE_salary;
			tax=300*RATE1+(total_salary - 300) *RATE2;
		}
    	else 
    	{   total_salary=HOUR2*BASE_salary+(hours-HOUR2)*add_salary;
    	 	if(total_salary<=450)
    	 	{
    		    tax=300*RATE1+(total_salary - 300) *RATE2;			
		 	}
		 	else
    		{
    		 	tax=300*RATE1+(450 - 300) *RATE2+(total_salary - 450) *RATE3;			
		 }
   		}
   		salary=total_salary-tax;
   		printf("工作时间是%gh,工资总额为$%gn",hours,total_salary);
   		printf("税金为$%g,净收入为$%gn",tax,salary);
   		goto showprintf;
   	}
	return 0;
}

9.编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数。

#include <stdio.h>
int main(void)
{
    int num,i,j,isprime;
    printf("Enter the number:") ;
    while(!(scanf("%d",&num))||num<0)  //主要就是再熟悉一下这个写法 
    {
    	while(getchar()!='n')
    	{
    		continue;
		}
    	printf("please enter the valid numbern"); 
    }//while ((scanf("%d", &number) == 1) && (number > 0))
	if (num == 1)
    {
        printf("1不是素数!n");
        printf("Please enter the valid number:");
    }
    printf("小于或等于%d的素数有:n",num);
	for(i=2;i<=num;i++)
	{   
	    isprime=1;
	    for(j=2;j*j<=i;j++)
	    {	
			if(i%j==0)
			{
				isprime=0;
				break;	
			}			
		}
		if(isprime) 
		printf("%-5d", i);
    }
	return 0;
}

10.1988年的美国联邦税收计划是近代最简单的税收方案。它分为4个类别,每个类别有两个等级。

下面是该税收计划的摘要(美元数为应征税的收入):
类别            税金
单身      17850美元按15%计,超出部分按28%计
户主      23900美元按15%计,超出部分按28%计
已婚,共有   29750美元按15%计,超出部分按28%计
已婚,离异   14875美元按15%计,超出部分按28%计

例如,一位工资为20000美元的单身纳税人,应缴纳税费0.15×17850+0.28×(20000-17850)美元。编写一个程序,让用户指定缴纳税金的种类和应纳税收入,然后计算税金。程序应通过循环让用户可以多次输入。

#include <stdio.h>
#define PAY1 17850
#define PAY2 23900
#define PAY3 29750
#define PAY4 14875
#define RATE1 0.15
#define RATE2 0.28
int main(void)
{	
	int num;
	double salary,tax,BASE_salary;
	showprintf:
	printf("*****************************************************************n");
    printf("Enter the number corresponding to the desired pay rate or action:n");
    printf("1) 单身                                2) 户主n");
    printf("3) 已婚,共有                          4) 已婚,离异n");
    printf("5) quitn");
    printf("******************************************************************n");
    printf("Please choose your number:");
    while(scanf("%d", &num) == 1)
    {
    	switch(num)
		{
                case 1: BASE_salary= PAY1; break;
                case 2: BASE_salary= PAY2; break;
                case 3: BASE_salary= PAY3; break;
                case 4: BASE_salary= PAY4; break;
                case 5: return 0;
                default:printf("Please enter the valid number:n");
				        goto showprintf;
        }
		printf("Enter your salary:") ;
		while ((!scanf("%lf", &salary)) || (salary < 0))
    	{
        	while (getchar() != 'n')
        	{
            	continue;
            }
        	 printf("Enter a positive salary:");
    	}
		if(salary>BASE_salary)
		{
			tax=BASE_salary*RATE1+(salary-BASE_salary)*RATE2;	
		}
		else {
			tax=salary*RATE1;
		}
   		printf("您的税金为为$%gn",tax);
   		goto showprintf;
   	}
	return 0;
}

11.ABC邮购杂货店出售的洋蓟售价为2.05美元/磅,甜菜售价为1.15美元/磅,胡萝卜售价为1.09美元/磅。在添加运费之前,100美元的订单有5%的打折优惠。少于或等于5磅的订单收取6.5美元的运费和包装费,5磅~20磅的订单收取14美元的运费和包装费,超过20磅的订单在14美元的基础上每续重Ⅰ磅增加0.5美元。编写一个程序,在循环中用switch语句实现用户输入不同的字母时有不同的响应,即输入a的响应是让用户输入洋蓟的磅数,b是甜菜的磅数,c是胡萝卜的磅数,q是退出订购。程序要记录累计的重量。即,如果用户输入4磅的甜菜,然后输入5磅的甜菜,程序应报告9磅的甜菜。然后,该程序要计算货物总价、折扣(如果有的话)、运费和包装费。随后,程序应显示所有的购买信息:物品售价、订购的重量(单位:磅)、订购的蔬菜费用、订单的总费用、折扣(如果有的话)、运费和包装费,以及所有的费用总额。

#include <stdio.h>
#define ARTICHOKE 2.05 //洋蓟
#define BEET 1.15  //甜菜 
#define CARROT 1.09   //胡萝卜 
#define BASE 100
#define DISCOUNT 0.05
#define WEIGHT_PAY1 6.5
#define WEIGHT_PAY2 14
#define WEIGHT_PAY3 0.5
#define WEIGHT1 5
#define WEIGHT2 20
int main(void)
{	
	char ch;
	double weight,total_weight,artichoke_weight=0,beet_weight=0,carrot_weight=0; 
	double vegetable_pay,express_pay,total_pay;
	double discount=0;
	showprintf:
	printf("*****************************************************************n");
    printf("Enter the number corresponding to the desired pay rate or action:n");
    printf("a) 洋蓟                            b) 甜菜n");
    printf("c) 胡萝卜                          q) quitn");
    printf("******************************************************************n");
    while((ch = getchar()) != 'q')
	{
        if(ch == 'n')  //消除'n',scanf()函数可以省略,getchar不可
             continue;
	    printf("Enter weight of the vegetable you want : ");
        
        while ((!scanf("%lf", &weight)) || (weight < 0))
    	{
        	while (getchar() != 'n')
        	{
            	continue;
            }
        	 printf("Enter a positive weight:");
    	}
    	switch(ch)
		{
            case 'a': artichoke_weight += weight; break;
            case 'b': beet_weight += weight; break;
            case 'c': carrot_weight += weight; break;
            case 'q': return 0;
            default : printf("please enter the valid charactern");
                      goto showprintf;
    	}
     	printf("您所选的各种蔬菜重量如下:n");
        printf("洋蓟: %.2lf 磅, 甜菜: %.2lf 磅,胡萝卜: %.2lf 磅n",
            artichoke_weight, beet_weight, carrot_weight);
            printf("n");
			goto showprintf;
	}
    vegetable_pay = artichoke_weight * ARTICHOKE + beet_weight * BEET + carrot_weight * CARROT;
    if(vegetable_pay >= BASE)//计算蔬菜本身费用
	{
        discount = vegetable_pay * DISCOUNT;
    }
    total_weight = artichoke_weight + beet_weight + carrot_weight;
    if(total_weight<=WEIGHT1 )//计算运费打包费
    {
    	express_pay= WEIGHT_PAY1;
	}
	else if(total_weight<=WEIGHT2)
	{
		express_pay= WEIGHT_PAY2;
	}
    else 
    {
    	express_pay=	WEIGHT_PAY2	+(total_weight-WEIGHT2)*WEIGHT_PAY3;
	}
	total_pay=vegetable_pay+express_pay-discount;
	printf("n");
	printf("*****************************************************************n");
	printf(" 蔬菜名         洋蓟         甜菜        胡萝卜n "); 
	printf("单价           2.05         1.15        1.09 n "); 
	printf("重量(磅)   %8.2lf     %8.2lf    %8.2lfn",
	        artichoke_weight,    beet_weight,     carrot_weight); 
    printf(" 价格       %8.2lf     %8.2lf    %8.2lfn ",
	       artichoke_weight * ARTICHOKE,  beet_weight * BEET,  carrot_weight * CARROT); 
    printf("蔬菜费用: %6.2lf,折扣: %6.2lf, 运费和包装费: %6.2lfn        总费用: %6.2lfn",
            vegetable_pay, discount, express_pay, total_pay);   
    printf("*****************************************************************n");  
	return 0;
}

最后

以上就是开心外套为你收集整理的《C Primer Plus》中文第六版 编程练习答案 第七章 C控制语句:分支和跳转关于continue和break的及i++情况说明的全部内容,希望文章能够帮你解决《C Primer Plus》中文第六版 编程练习答案 第七章 C控制语句:分支和跳转关于continue和break的及i++情况说明所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部