7-1
#include<stdio.h>
int main(void)
{
char stop = '#';
int num_others = 0;
int num_blank = 0;
int num_enter = 0;
char ch;
printf("请输入一段字符串:");
while ((ch = getchar()) != stop)
{
if (ch == ' ') //注意字符和字符串区别,一个是单引号,一个是双引号
num_blank++;
else if (ch == '\n')//注意字符和字符串区别,一个是单引号,一个是双引号
num_enter++;
else
num_others++;
}
printf("空格数有%d个,换行符数有%d个,其他字符有%d个", num_blank, num_enter, num_others);
return 0;
}
7-2
int main(void)
{
char stop = '#';
int num_char = 0;
char ch;
printf("请输入一串字符:\n");
while ((ch = getchar()) != stop)
{
//num_char++;
if (num_char++ % 8 == 0)//如果上一步++,这里便不再是%8,而是%7
{
printf("\n");
}
if (ch == '\n')//换行符要显示出来
printf("'\\n'-%.3d ", ch);
else if (ch == '\t')//制表符要显示出来
printf("'\\t'-%.3d ", ch);
else
printf("%c-%.3d ", ch, ch);
}
printf("Done");
return 0;
}
这里有一个缺点,只要输入换行键程序就会输出结果,此时继续输入的话,第一行的8个便不再是8个,而是和上一次输出剩的最后一行输出加起来为8个;
这样就是一直等待输入,直到输入#才开始运行;
7-3
int main(void)
{
int num_odd = 0;
int num_even = 0;
double average = 0;
int sum = 0;
int num = 0;
int input;
printf("输入一串整数(输入0结束程序):");
while (scanf("%d", &input) == 1 && input != 0)
{
if (input % 2 == 0)
num_even++;
else
num_odd++;
num++;
sum += input;
}
average = (double)sum / num;
printf("你输入的偶数有%d个,奇数有%d个,平均数为%lf.", num_even, num_odd, average);
return 0;
}
7-4
int main(void)
{
char stop = '#';
int num_convert1 = 0;
int num_convert2 = 0;
char ch;
printf("Enter your input:\n");
while ((ch = getchar()) != stop)
{
if (ch == '.')
{
num_convert1++;
printf("!");
}
else if (ch == '!')
{
num_convert2++;
printf("!!");
}
else
putchar(ch);
}
printf("\n");
printf(".转换成!的次数为%d,!转换成!!的次数为%d。", num_convert1, num_convert2);
return 0;
}
7-5
int main(void)
{
char stop = '#';
int num_convert1 = 0;
int num_convert2 = 0;
char ch;
int flag=3;
printf("Enter your input:\n");
while ((ch = getchar()) != stop)
{
if (ch == '.')
flag = 1;
if (ch == '!')
flag = 2;
switch(flag)
{
case 1:
printf("!");
num_convert1 ++;
break;//break语句作用跳出switch语句
case 2:
printf("!!");
num_convert2++;
break;
default:
putchar(ch);
}
}
printf("\n");
printf(".转换成!的次数为%d,!转换成!!的次数为%d。", num_convert1, num_convert2);
return 0;
}
7-6
int main(void)
{
int num_times = 0;
char ch;
char ch_next;
char stop = '#';
int flag = 0;
printf("Enter your input\n");
while ((ch = getchar()) != stop)
{
//ch_next = getchar();
//if (ch == 'e' && ch_next == 'i')
// num_times++; // 不对,因为e也可以为ch_next
switch (ch)
{
case 'e':
flag = 1;
break;
case 'i':
if (flag == 1)
num_times++;
break;
default:
flag = 0;
}
}
printf("ei出现的次数为%d", num_times);
return 0;
}
7-7
int main(void)
{
int hour = 0;
double salary = 0;
double tax = 0;
double money = 0;
printf("请输入你的工作时间:");
scanf("%d", &hour);
if (hour <= 40)
salary = salary_per_hour * hour;
else
salary = salary_per_hour * hour * 1.5;
if (salary < 300 )
tax = rate_300 * salary;
else if (salary >= 300 && salary <= 450)
tax = 45 + rate_left_150 * (salary - 300);
else
tax = 45 + 30 + rate_left * (salary - 450);
money = salary - tax;
printf("你的工资总额是%.3lf,税金是%.3lf,净收入是%.3lf。", salary, tax, money);
return 0;
}
7-8
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define salary_per_hour_a 8.75
#define salary_per_hour_b 9.33
#define salary_per_hour_c 10.00
#define salary_per_hour_d 11.20
#define rate_300 0.15
#define rate_left_150 0.2
#define rate_left 0.25
int selection(void);
int main(void)
{
int hour = 0;
double salary = 0;
double tax = 0;
double money = 0;
double salary_per_hour;
int flag;
do {
selection();
printf("请输入你的工作等级:");
scanf("%d", &flag);
switch (flag)
{
case 1:
salary_per_hour = salary_per_hour_a;
printf("请输入你的工作时间:");
break;
case 2:
salary_per_hour = salary_per_hour_b;
printf("请输入你的工作时间:");
break;
case 3:
salary_per_hour = salary_per_hour_c;
printf("请输入你的工作时间:");
break;
case 4:
salary_per_hour = salary_per_hour_d;
printf("请输入你的工作时间:");
break;
case 5:
goto end;
break;
default:
printf("请输入正确选项\n");
continue;
}
scanf("%d", &hour);
if (hour <= 40)
salary = salary_per_hour * hour;
else
salary = salary_per_hour * hour * 1.5;
if (salary < 300)
tax = rate_300 * salary;
else if (salary >= 300 && salary <= 450)
tax = 45 + rate_left_150 * (salary - 300);
else
tax = 45 + 30 + rate_left * (salary - 450);
money = salary - tax;
printf("你的工资总额是%.3lf,税金是%.3lf,净收入是%.3lf。\n", salary, tax, money);
} while (flag != 5);
end:printf("quit!");
return 0;
}
int selection(void)
{
printf("**********************************************************************************************************************\n");
printf("Enter the number corresponding to the desired pay rate or action\n");
printf("1)$8.75/hr 2)$9.33/hr\n");
printf("3)$10.00/hr 4)$11.20/hr\n");
printf("5)quit\n");
printf("**********************************************************************************************************************\n");
}
7-9
#include<stdio.h>
int SuShu(int n);
int main(void)
{
int input;
printf("请输入一个正整数:");
while (scanf("%d", &input) == 1 && input>0)
{
for (int i = 2; i <= input; i++)
{
SuShu(i);
}
}
printf("请输入正确的数字");
return 0;
}
int SuShu(int n)
{
int i;
if (n <= 2)
printf("2 ");
for (i = 2; i < n; i++)
{
if (n % i == 0)
break;
if (i == n - 1)
printf("%d ", n);
}
return 0;
}
7-10
int main(void)
{
int flag;
int max;
int salary;
double tax;
do
{
printf("请选择你的类别:\n");
printf("1.单身 2.户主 3.已婚共有 4.已婚离异(输入5退出)");
scanf("%d", &flag);
switch (flag)
{
case 1:
max = 17850;
break;
case 2:
max = 23900;
break;
case 3:
max = 29750;
break;
case 4:
max = 14875;
break;
case 5:
goto end;
}
printf("输入您的收入:");
scanf("%d", &salary);
if (salary < max)
tax = salary * 0.15;
else
tax = max * 0.15 + (salary - max) * 0.28;
printf("您的税款为%lf\n", tax);
} while (flag != 5);
end:
printf("程序结束。");
return 0;
}
7-11
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<ctype.h>
int main(void)
{
char flag;
double unit_price;
int weight = 0;
int weight_sum = 0;
int weight_a = 0;
int weight_b = 0;
int weight_c = 0;
double money = 0;
double pay = 0;
double money_goods;
double discount = 0;
double dilivery = 0;
do
{
printf("您要购买什么菜品:\n");
printf("a.洋蓟 b.甜菜 b.胡萝卜 q.退订\n");
scanf("%c", &flag);
if (isalpha(flag))
flag = flag;
else
scanf("%c", &flag);
switch (flag)
{
case 'a':
printf("您要购买的磅数为:");
scanf("%d", &weight);
weight_sum += weight;
weight_a += weight;
unit_price = 2.05;
money_goods = weight * unit_price;
money += money_goods;
break;
case 'b':
printf("您要购买的磅数为:");
scanf("%d", &weight);
weight_sum += weight;
weight_b += weight;
unit_price = 1.15;
money_goods = weight * unit_price;
money += money_goods;
break;
case 'c':
printf("您要购买的磅数为:");
scanf("%d", &weight);
weight_sum += weight;
weight_c += weight;
unit_price = 1.09;
money_goods = weight * unit_price;
money += money_goods;
break;
case 'q':
goto calculate;
default:
break;
}
} while (flag != 4);
calculate:
if (money >= 100)
discount = money * 0.05;
if (weight_sum <= 5)
dilivery = 6.5;
else if (weight_sum <= 20)
dilivery = 14;
else
dilivery = 14 + 0.5 * (weight_sum - 20);
pay = money - discount + dilivery;
if (weight_a != 0)
{
printf("你购买了%d磅单价为2.05美元/磅的洋蓟\n", weight_a);
}
if (weight_b != 0)
{
printf("你购买了%d磅单价为1.15美元/磅的甜菜\n", weight_b);
}
if (weight_c != 0)
{
printf("你购买了%d磅单价为1.09美元/磅的胡萝卜\n", weight_c);
}
printf("您订购的蔬菜费用为%lf,折扣费用为%lf,运费和包装费为%lf,您所需要支付的总费用为%lf", money, discount, dilivery, pay);
return 0;
}