1.编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量。
#include <stdio.h>
#define STOP '#'
int main(void)
{
int space = 0;
int n = 0;
int word = 0;
char ch;
printf("请输入一行字符(#代表结束):\n");
while((ch = getchar())!=STOP)
{
if(ch == ' ')
space++;
else if(ch == '\n')
n++;
else
word++;
}
printf("空格数:%d个\t换行符数:%d个\t其他字符数:%d个\t",space,n,word);
return 0;
}
2.编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的ASCII码(十进制)。一行打印8个字符。建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符。
#include <stdio.h>
#define STOP '#'
int main(void)
{
int n = 0;
char ch;
printf("请输入一行字符:\n");
while((ch = getchar())!=STOP)
{
if(n % 8 == 0)
{
printf("\n");
printf("%c %d\t",ch,ch);
}
else
{
printf("%c %d\t",ch,ch);
}
n++;
}
return 0;
}
3.编写一个程序,读取整数直到用户输入0。输入结束后,程序应报告用户输入的偶数(不包括0)个数、这些偶数的平均值、输入的奇数个数及其奇数的平均值。
#include <stdio.h>
int main(void)
{
int n;
int even = 0;
int odd = 0;
double sum_even;
double sum_odd;
printf("请输入一行数字(0为结束):\n");
while(scanf("%d",&n) == 1)
{
if(n == 0)
{
break;
}
else if(n % 2 == 0)
{
sum_even += n;
even++;
}
else
{
sum_odd += n;
odd++;
}
}
printf("偶数:%d 偶数平均数:%.1lf\t奇数:%d 奇数平均数:%.1lf\n",even,sum_even/even,odd,sum_odd/odd);
return 0;
}
4.使用if else语句编写一个程序读取输入,读到#停止。用感叹号替换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。
#include <stdio.h>
int main(void)
{
int n = 0;
char ch;
while((ch = getchar())!='#')
{
if(ch == '.')
{
n++;
putchar('!');
}
else if(ch == '!')
{
n++;
putchar('!');
putchar('!');
}
else
putchar(ch);
}
printf("\n");
printf("进行了%d次替换\n",n);
return 0;
}
5.使用switch重写练习4。
#include <stdio.h>
int main(void)
{
int n = 0;
char ch;
while((ch = getchar())!='#')
{
switch(ch)
{
case '.':
n++;
putchar('!');
break;
case '!':
n++;
putchar('!');
putchar('!');
break;
default:
putchar(ch);
break;
}
}
printf("\n");
printf("进行了%d次替换\n",n);
return 0;
}
6.编写程序读取输入,读到#停止,报告ei出现的次数。
#include <stdio.h>
int main(void)
{
char ch;
char ch_pre;
int n = 0;
printf("请输入一行字符\n");
ch_pre = getchar();
while(ch_pre!='#'&&(ch=getchar())!='#')
{
if(ch_pre == 'e' && ch == 'i')
n++;
ch_pre = ch;
}
printf("ei出现的次数为:%d\n",n);
return 0;
}
7.编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、税金和净收入。做如下假设:
a.基本工资= 1000美元/小时
b.加班(超过40小时)= 1.5倍的时间
c.税率:前300美元为15%
#续150美元为20%余下的为25%
用#define定义符号常量。不用在意是否符合当前的税法。
#include <stdio.h>
#define BASIS 10 //应该为10 $/hour
#define BASIST 40
#define OBASIS 1.5
#define MONEY1 300
#define MONEY2 150
#define RATE1 0.15
#define RATE2 0.2
#define RATE3 0.25
int main(void)
{
double hours;
double sum;
double taxes;
double net;
printf("请输入一周工作的小时数:\n");
scanf("%lf",&hours);
if(hours<BASIST)
sum = hours * BASIS;
else
sum = BASIST * BASIS + (hours - BASIST) * OBASIS * BASIS;
if(sum<MONEY1)
{
taxes = sum * RATE1;
net = sum - taxes;
}
else if(sum<MONEY1+MONEY2)
{
taxes = MONEY1 * RATE1 + (sum - MONEY2) * RATE2;
net = sum - taxes;
}
else
{
taxes = MONEY1 * RATE1 + MONEY2 * RATE2 + (sum - MONEY2-MONEY1) * RATE3;
net = sum -taxes;
}
printf("一周工作的小时数为:%.2lf\t工资总额:%.2lf\t税金:%.2lf\t净收入:%.2lf\n",hours,sum,taxes,net);
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 BASIS1 8.75
#define BASIS2 9.33
#define BASIS3 10.00
#define BASIS4 11.20
#define BASIST 40
#define OBASIS 1.5
#define MONEY1 300
#define MONEY2 150
#define RATE1 0.15
#define RATE2 0.2
#define RATE3 0.25
void menu();
int main(void)
{
int n;
double basis;
double hours;
double sum;
double taxes;
double net;
menu();
while(scanf("%d",&n)==1)
{
switch(n)
{
case 1:basis = BASIS1;break;
case 2:basis = BASIS2;break;
case 3:basis = BASIS3;break;
case 4:basis = BASIS2;break;
}
if(n<5)
{
printf("请输入一周工作的小时数:\n");
scanf("%lf",&hours);
if(hours<BASIST)
sum = hours * basis;
else
sum = BASIST * basis + (hours - BASIST) * OBASIS * basis;
if(sum<MONEY1)
{
taxes = sum * RATE1;
net = sum - taxes;
}
else if(sum<MONEY1+MONEY2)
{
taxes = MONEY1 * RATE1 + (sum - MONEY2) * RATE2;
net = sum - taxes;
}
else
{
taxes = MONEY1 * RATE1 + MONEY2 * RATE2 + (sum - MONEY2-MONEY1) * RATE3;
net = sum -taxes;
}
printf("一周工作的小时数为:%.2lf hours\t工资总额:$%.2lf\t税金:$%.2lf\t净收入:$%.2lf\n",hours,sum,taxes,net);
printf("请重新输入工资等级:\n");
menu();
}
else if(n==5)
break;
else
{
printf("输入有误,请重新输入:\n");
menu();
continue;
}
}
printf("Bye\n");
return 0;
}
void menu(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");
}
9.编写一个程序,只接受正整数输入,然后显示所有小于或等于该数的素数。
#include <stdio.h>
int main(void)
{
int num;
int enter;
int n;
int flag;
printf("请输入一个正整数:\n");
while(scanf("%d",&enter)==1&&enter>0)
{
if(enter>2)
printf("以下是%d的素数:\n",enter);
else
printf("没有素数\n");
for(num=2;num<=enter;num++)
{
for(n=2,flag=1;(n*n)<=num;n++)
{
if(num%n==0)
flag = 0;
}
if(flag==1)
printf("%d ",num);
}
printf("\n");
printf("请输入一个正整数(q为退出):\n");
}
printf("Bye\n");
return 0;
}