1、编写一个程序,该程序读取输入直到遇到#字符,然后报告读取空格数目,读取的换行符数目以及读取所有的其它字符数目。
#include <stdio.h>
#include <string.h>
int main(void){
int bs = 0; //统计空格符
int es = 0; //统计换行符
int th = 0; //统计其它字符
char ch;
printf("请输入字符,输入#号后结束:\n");
fflush(stdout);
while((ch = getchar()) != '#'){
if(ch == ' '){
bs++;
}
else if(ch == '\n'){
es++;
}else
th++;
}
printf("空格数:%d,换行符数:%d,其它字符 :%d\n",bs,es,th);
printf("\nend\n");
return 0;
}
2、编写一个程序。该程序读取输入直到遇到#字符,使程序打印每个输入的字符以及它的十进制ASCII码,每行打印8个字符/编码对,建 议:利用字符计数和模运符(%)在每8个循环周期时打印一个换行符。
#include <stdio.h>
#include <string.h>
int main(void){
const int LINE = 8; //每行打印8个字符
char ch;
int chsum = 0; //统计输入的字符数
printf("请输入字符串,以#号键结束:\n");
fflush(stdout);
while((ch = getchar()) != '#'){
printf("%c %d\t",ch,ch);
chsum++;
if(chsum % LINE == 0)
printf("\n");
}
printf("\n输入了%d个字符",chsum);
printf("\nend\n");
return 0;
}
3、编写一个程序,该程序读取整数,直到输入零,输入终止。输入终止后,程序应该报告输入的偶数(不包括零)总个数,偶数的平均值,输入的奇数总个数以及平均值。
#include <stdio.h>
#include <string.h>
int main(void){
int sum = 0;
int sum2 = 0;
int sum2a =0;
int sum3 = 0;
int sum3a = 0;
int n;
printf("请输入整数,结束请输入0\n");
fflush(stdout);
while(scanf("%d",&n) != 0 && n != 0){
sum++;
if((n != 0) && (n % 2 == 0)){
sum2++;
sum2a += n;
}
else{
sum3++;
sum3a += n;
}
}
printf("共%d个整数,其中%d个偶数,平均值为%d,%d个奇数,平均值为%d\n",sum,sum2,sum2a/sum2,sum3,sum3a/sum3);
printf("\nend\n");
return 0;
}
4、利用if else语句编写程序读取输入,直到遇到#号结束,用一个感叹号替换每个句号,将原有每个感叹号用两个感叹号代替,最后报告进行了多少次替代。
#include <stdio.h>
#include <string.h>
int main(void){
char ch;
int dousum = 0;
int hansum = 0;
printf("请入字符串并以#后键结束:\n");
fflush(stdout);
while((ch = getchar()) != '#'){
if(ch == '!'){
putchar(ch);
printf("!");
hansum++;
}else if(ch == '.'){
dousum++;
printf("!");
}else{
putchar(ch);
}
}
printf("\n替换了%d句号,替换了%d感叹号,总计%d处\n",dousum,hansum,dousum+hansum);
printf("\nend\n");
return 0;
}
5、用swich重做练习3
#include <stdio.h>
#include <string.h>
int main(void){
int sum = 0;
int sum2 = 0;
int sum2a =0;
int sum3 = 0;
int sum3a = 0;
int n;
int a;
printf("请输入整数,结束请输入0\n");
fflush(stdout);
while(scanf("%d",&n) != 0 && n != 0){
sum++;
switch(n % 2){
case 0:
sum2++;
sum2a+=n;
break;
default:
sum3++;
sum3a+=n;
break;
}
}
printf("共%d个整数,其中%d个偶数,平均值为%d,%d个奇数,平均值为%d\n",sum,sum2,sum2a/sum2,sum3,sum3a/sum3);
printf("\nend\n");
return 0;
}
6、编写一个程序读取输入,直到遇到#,并报告序列号ei出现的次数。
#include <stdio.h>
#include <string.h>
int main(void){
char ch,ch2;
int sum = 0;
printf("请输入字符串,并以#号键结束\n");
fflush(stdout);
while((ch = getchar()) != '#'){
if(ch == 'e'){
ch2 = 'e';
continue;
}
if(ch == 'i' && ch2 == 'e'){
sum++;
}
ch2 = ch;
}
printf("共输入%d个ei\n",sum);
printf("\nend\n");
return 0;
}
7、编写一个程序,要求输入一周中工作小时数,然后打印工资总额,税金以及净工资,作如下假设:
a. 基本工资等级=10.00美元/小时
b.加班(超过40小时)=1.5倍的时间
c.税率 前300美元为 15%,下一个150美元为20%,余下的为25%
用#difine 定义常量,不必关心本例是否符合当前的税法
#include <stdio.h>
#include <string.h>
#define SHUI15 0.15
#define SHUI20 0.20
#define SHUI25 0.25
int main(void){
float wtime;
float g; //工资总额
float shui; //税金
float jg; //净工资
printf("请输入工作的时间数:\n");
fflush(stdout);
scanf("%f",&wtime);
if(wtime <= 40){
g = wtime * 10.0;
shui = g * SHUI15;
}else{
g = 40.0 * 10.0 + (wtime - 40) * 10.0 * 1.5;
if((g - 300.0) < 150.0){
shui = 300.0 * SHUI15 + (g - 300.0) * SHUI20;
}else{
shui = 300.0 * SHUI15 +150.0 * SHUI20 + (g - 450.0) * SHUI25;
}
}
jg = g - shui;
printf("工资总额:%.2f,税金:%.2f,净工资:%.2f",g,shui,jg);
printf("\nend\n");
return 0;
}
8、修改练习7,假设a,使程序提供一个选择工资等级的菜单,用switch选择工资等级,程序运行的开头应该像下面这样:
**********************************************************************************************************
请先择一个工资等级:
1) $8.75/小时 2) $9.33/小时
3) $10.0/小时 4) $11.20/小时
5) quit
***********************************************************************************************************
#include <stdio.h>
#include <string.h>
#define SHUI15 0.15
#define SHUI20 0.20
#define SHUI25 0.25
void fpd(void);
int main(void){
float wtime;
float g; //工资总额
float shui; //税金
float jg; //净工资
int sw;
float gz;
fpd();
while(scanf("%d",&sw) != 0){
switch(sw){
case 1:
gz = 8.75;
break;
case 2:
gz = 9.33;
break;
case 3:
gz = 10.00;
break;
case 4:
gz = 11.20;
break;
}
if(sw < 5){
printf("请输入工作的时间数:\n");
fflush(stdout);
scanf("%f",&wtime);
if(wtime <= 40){
g = wtime * gz;
shui = g * SHUI15;
}else{
g = 40.0 * gz + (wtime - 40) * gz * 1.5;
if((g - 300.0) < 150.0){
shui = 300.0 * SHUI15 + (g - 300.0) * SHUI20;
}else{
shui = 300.0 * SHUI15 +150.0 * SHUI20 + (g - 450.0) * SHUI25;
}
}
jg = g - shui;
printf("工资总额:%.2f,税金:%.2f,净工资:%.2f\n",g,shui,jg);
fpd();
}else if(sw == 5){
break;
}else{
printf("输入有误,请得重新输入:\n");
fpd();
}
}
printf("\nend\n");
return 0;
}
void fpd(void){
printf("***************************************************\n");
printf("1) $8.75/小时 2) $9.33/小时\n");
printf("3) $10.00/小时 4) $11.20/小时\n");
printf("5) quit\n");
printf("***************************************************\n");
printf("请选择一个工资等级:");
fflush(stdout);
}
9、编写一个程序,接受一个整数输入,然后显示所有小于或等于这个整数的素数
#include <stdio.h>
#include <string.h>
#include <math.h>
int is_prime(int n);
int main(void){
int a,i,j;
printf("请输入一个整数:\n");
fflush(stdout);
while(scanf("%d",&a) != 0){
for(int i = 2;i<=a;i++){
if(is_prime(i) == 1){
printf("%d ",i);
fflush(stdout);
}
}
printf("\n请输入下一数,退出输入q:\n");
fflush(stdout);
}
printf("\nend\n");
return 0;
}
int is_prime(int n){
int i;
if(n < 2) return 0;
if(n == 2) return 1;
for(i = 2; i< sqrt(n)+1; i++){
if(n % i == 0) return 0;
}
return 1;
}
10、1988r年United Stated Federal Tax Schedule 是近期最基本的,它分为四类,每类有两个等级,下面是其摘要,美元数为应征税的收入
种类 税金
单身 前17850美元按15%,超出部份按28%
户主 前23900美元按15%,超出部份按28%
已婚,共有 前29750美元按15%,超出部份按28%
已婚,离异 前14875美元按15%,超出部份按28%
例如,有20000美元应征税收收入的单身记雇佣劳动者应缴税0.15*17850美元+0.28*(20000-17850)。编写一个程序,让用户指定税金种类和应征税收入,然后计算税金,使用循环,可以多次输入。
#include <stdio.h>
#include <string.h>
void menu(void);
double shuijing(int i,double shouru);
int main(void){
int t;
double shouru;
menu();
while(scanf("%d",&t) != 0){
if(t>=1 && t<=4)
{
printf("请输入计算种类的收入\n");
fflush(stdout);
scanf("%lf",&shouru);
printf("计算类型:%d 收入:%.2f 税金:%.2f\n",t,shouru,shuijing(t,shouru));
}
else if(t == 5){
break;
}else{
printf("输入有误,请重新输入\n");
}
menu();
}
printf("\nend\n");
return 0;
}
void menu(void){
printf("\n****************************************************\n");
printf("1.单身 前17850美元按15%,超出部份按28%\n");
printf("2.户主 前23900美元按15%,超出部份按28%\n");
printf("3.已婚,共有 前29750美元按15%,超出部份按28%\n");
printf("4.已婚,离异 前14875美元按15%,超出部份按28%\n");
printf("****************************************************\n");
printf("请选择一个计算种类,退出按5或是q\n");
fflush(stdout);
}
double shuijing(int i,double shouru){
//参数i表示要计算的税金种类,取值范围为1~4
//参数shouru表示要计算的收入是多少
double s;
const double ds = 17850.0;
const double hz = 23900.0;
const double yg = 29750.0;
const double yl = 14875.0;
const double shui15 = 0.15;
const double shui28 = 0.28;
if(i < 1 || i > 4) return 0;
//--------------种类1----------------------------
if(i == 1){
if(shouru <= ds){
s = shouru * shui15;
return s;
}else{
s = ds * shui15 + (shouru-ds)*shui28;
return s;
}
}
//--------------种类2---------------------------
if(i == 2){
if(shouru <= hz){
s = shouru * shui15;
return s;
}else{
s = hz * shui15 + (shouru-hz)*shui28;
return s;
}
}
//--------------种类3---------------------------
if(i == 3){
if(shouru <= yg){
s = shouru * shui15;
return s;
}else{
s = yg * shui15 + (shouru-yg)*shui28;
return s;
}
}
//--------------种类4---------------------------
if(i == 4){
if(shouru <= yl){
s = shouru * shui15;
return s;
}else{
s = yl * shui15 + (shouru-yl)*shui28;
return s;
}
}
return 0;
}
11、ABC Mail Order Groccery朝鲜蓟的售价是1.25美元/磅,甜菜的售价是0.65美元/磅,胡罗卜的售价是0.89美元/磅,在添加运输费之前,他们为100美元的订单提供5%的打折优惠。对5磅或以上的定单收取3.50美元的运输和装卸费用,超过5磅而不足20磅的定单收取10.0美元的运输和装卸费;20磅或以上的运输,在8美元基础上每磅加0.1美元。
编写程序:在循环中使用switch语句,以便对输入a的响应是让用户输入所需的朝鲜蓟磅数,b为甜菜的磅数,c为胡萝卜的磅数,而q允许用户退出订购过程,然后程序计算总费用,折扣和运输费用(如果有运输费用的话),以及总数。随后程序应该显示所有购买信息:每磅的费用,订购的磅数,该订单每种菜的费用,订单的总费用、折扣,如果有的话加上运输费用,以及所有费用的总数。
#include <stdio.h>
#include <string.h>
float yfei(float t);
float xfei(char ch,float t);
float tt(void);
void menu(void);
void pxf(char ch,float xf,float zk,float yf,float t);
float zhekou(float xf);
int main(void){
char ch;
float xf[3]; //存放消费的单项费用xf[0]朝鲜蓟,xf[1]甜菜,xf[2]胡萝卜
float yf[3]; //存放运费的单项费用
float t[3]; //存放货物重量
float zk[3]; //存放折扣
menu();
while(scanf("%c",&ch) != 0){
if(ch == 'q')
break;
else{
switch(ch){
case 'a':
t[0] = tt();
xf[0] = xfei('a',t[0]);
yf[0] = yfei(t[0]);
zk[0] = zhekou(xf[0]);
pxf('a',xf[0],zk[0],yf[0],t[0]);
break;
case 'b':
t[1] = tt();
xf[1] = xfei('b',t[1]);
yf[1] = yfei(t[1]);
zk[1] = zhekou(xf[1]);
pxf('b',xf[1],zk[1],yf[1],t[1]);
break;
case 'c':
t[2] = tt();
xf[2] = xfei('c',t[2]);
yf[2] = yfei(t[2]);
zk[2] = zhekou(xf[2]);
pxf('c',xf[2],zk[2],yf[2],t[2]);
break;
default:
continue;
}
}
menu();
}
printf("**********************************************************************************\n");
printf("名称 重量 单价 折扣 运费 金额 总计\n");
printf("朝鲜蓟 %.2f %.2f %.2f %.2f %.2f %.2f\n",t[0],1.25,zk[0],yf[0],xf[0],yf[0]+xf[0]);
printf("甜菜 %.2f %.2f %.2f %.2f %.2f %.2f\n",t[1],0.65,zk[1],yf[1],xf[1],yf[1]+xf[1]);
printf("胡萝卜 %.2f %.2f %.2f %.2f %.2f %.2f\n",t[2],0.89,zk[2],yf[2],xf[2],yf[2]+xf[2]);
printf("总计:%.2f美元\n",yf[0]+xf[0]+yf[1]+xf[1]+yf[2]+xf[2]);
printf("**********************************************************************************\n");
fflush(stdout);
printf("end\n");
return 0;
}
float yfei(float t){
//t为磅数
if(t <= 5.0) return 3.50;
if(t > 5.0 && t < 20.0) return 10.0;
if(t >= 20.0) return 8 + t*0.1;
return 0;
}
void menu(void){
printf("***************************************************\n");
printf("a)朝鲜蓟 b)甜菜 c)胡萝卜 q)退出\n");
printf("***************************************************\n");
printf("请选择要要订购的蔬菜:\n");
fflush(stdout);
}
float xfei(char ch,float t){
//根据选择菜名ch,重量t返回所需要的费用
const float c = 1.25; //朝鲜蓟
const float tc = 0.65; //甜菜
const float h = 0.89; //胡萝卜
switch(ch){
case 'a':
if(c*t < 100.0)
return c*t;
else
return c*t - c*t*0.05;
break;
case 'b':
if(tc*t < 100.0)
return tc*t;
else
return tc*t - tc*t*0.05;
break;
case 'c':
if(h*t < 100.0)
return h*t;
else
return h*t - h*t*0.05;
break;
default:
return 0;
}
}
float tt(void){
//返回货物的重量
float t;
printf("请输入货物重量\n");
fflush(stdout);
scanf("%f",&t);
return t;
}
void pxf(char ch,float xf,float zk,float yf,float t){
//打印显示本项输入货物的名细
switch(ch){
case 'a':
printf("朝鲜蓟:%.2f磅\t单价:%.2f美元/磅\t 折扣:%.2f美元\t运费:%.2f美元\t 金额:%.2f美元\n",t,1.25,zk,yf,xf+yf);
break;
case 'b':
printf("甜菜:%.2f磅\t单价:%.2f美元/磅\t 折扣:%.2f美元\t运费:%.2f美元\t 金额:%.2f美元\n",t,1.25,zk,yf,xf+yf);
break;
case 'c':
printf("胡萝卜:%.2f磅\t单价:%.2f美元/磅\t 折扣:%.2f美元\t运费:%.2f美元\t 金额:%.2f美元\n",t,1.25,zk,yf,xf+yf);
break;
default:
printf("发生错误\n");
}
}
float zhekou(float xf){
if(xf < 100.0) return 0;
if(xf >= 100.0) return xf * 0.05;
return 0;
}