概述
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++情况说明所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复