C Primer Plus 第六版 第七章 编程练习

 1.编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量。

#include <stdio.h>
int main(void)
{
char ch;
int s_c,n_c,_ch;
s_c=n_c=_ch=0;

printf("Enter the character for count('#' to quit):\n");
while((ch=getchar())!='#')
{
if(ch==' ')
    s_c++;            //统计空格
else if(ch=='\n')
    n_c++;            //统计换行符
else
    _ch++;            //统计其他字符
}
printf("Space count=%d,'\\n' count=%d,other characters=%d\n",s_c,n_c,_ch);

return 0;
}

2.编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的 ASCII码(十进制)。每行打印8个“ 字符- ASCII码” 组合。建议: 使用字符计数和求模运算符(%)在每 8个循环周期时打印一个换行符。

#include <stdio.h>
int main(void)
{
char ch;
int count=0;     //字符计数

printf("Enter the character,'#' to quit:\n");
while((ch=getchar())!='#')
{
if(ch=='\n')         //换行符不计算在内
continue;
count++;
printf("%c-%d;",ch,ch);
if(count%8==0) 
printf("\n");
}

return 0;
}

注:由于是缓冲输出,输入Enter键时将输出在缓冲区中的字符(包括换行符本身),换行符不计算在内使得程序的运行更加清晰。

3.编写一个程序,读取整数直到用户输入0。输入结束后,程序应报告用户输入的偶数(不包括 0)个数、这些偶数的平均值、输入的奇数个数及其奇数的平均值。

#include <stdio.h>
int main(void)
{
int n;
int odd_sum,even_sum;   //偶数的和、奇数的和
int odd_count,even_count;  //偶数计数、奇数计数
float odd_average,even_average;  //偶数平均值、奇数平均值
odd_sum=even_sum=odd_count=even_count=0;

printf("Enter the integer for analysis,0 to quit:\n");
while(scanf("%d",&n)==1)
{
if(n==0)
break;
if(n%2==0)
{
odd_count++;     //统计偶数个数
odd_sum+=n;      //偶数的和
}
else
{
even_count++;      //统计奇数个数
even_sum+=n;       //奇数的和
}
}
odd_average=(float)odd_sum/odd_count;
even_average=(float)even_sum/even_count;
if(odd_count!=0)
printf("odd_count:%d,The average is %.3f\n",odd_count,odd_average);
else
	printf("No odd number.\n");
if(even_count!=0)
printf("even_count:%d,The average is %.3f\n",even_count,even_average);
else
	printf("No even number.\n");

return 0;
}

4.使用 if  else语句编写一个程序读取输入,读到#停止。用感叹号替换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。

#include <stdio.h>
int main(void)
{
char ch;
int count1,count2;
count1=count2=0;

printf("Enter the characters for analysis,'#' to quit:\n");
while((ch=getchar())!='#')
{
if(ch=='.')
{
ch='!';    //句号转换为感叹号
count1++;   //句号转换次数
putchar(ch);
}
else if(ch=='!')
{
count2++;   //感叹号转换次数
putchar(ch);
putchar(ch);   //一个感叹号转换为两个感叹号
}
else
putchar(ch);
}
pr
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值