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("行数是%d\n 空格数是%d\n 其他符号是%d\n",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,偶数平均数是%f\n",n_even,mean_even);
printf("奇数个数是%d,奇数平均数是%f\n",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