7.12编程练习
/*
编写一个程序读取输入,读到#字符停止,
然后报告读取的空格数、换行数和其他所有字符的数量
*/
#include <stdio.h>
int main(void)
{
int sp_c = 0;
int nl_c = 0;
int ot_c = 0;
char ch = 0;
while ((ch=getchar()) != '#')
{
if (ch == ' ')
sp_c++;
else if (ch == '\n')
nl_c++;
else
ot_c++;
}
printf("%d space, %d newline, %d other \n ", sp_c, nl_c, ot_c);
return 0;
}
/*
编写一个程序读取输入,读到#字符停止。
程序要打印每个输入的字符以及对应的ASCII码(十进制),一行打印8个字符
建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符
*/
#include <stdio.h>
int main(void)
{
char ch;
int count = 0;
while ((ch =getchar()) != '#')
{
count++;
printf(" Character: %c, ASCII code: %d", ch, ch);
if (count % 8 == 0)
printf("\n");
}
return 0;
}
/*
编写一个程序,读取整数直到用户输入0.
输入结束后,程序应该报告用户输入的偶数(不包括0)个数
以及这些偶数的平均值、输入的奇数以及奇数的平均值
*/
#include <stdio.h>
int main(void)
{
int num;
int even_c = 0;
int odd_c = 0;
int even_sum = 0;
int odd_sum = 0;
float even_aver;
float odd_aver;
while ( scanf("%d", num) && num != 0)
{
if (num % 2) //odd number
{
odd_c++;
odd_sum += num;
}
else
{
even_c++;
even_sum += num;
}
}
even_aver = (float)even_sum / even_c;
odd_aver = (float)odd_sum / odd_c;
if (even_c > 0)
printf("%d even numbers and average is %.3f \n", even_c, even_aver);
if (odd_c > 0)
printf("%d odd numbes and averag is %.3f \n", odd_c, odd_aver);
printf("Done! \n");
return 0;
}
这道题的意思是:输入一句话,打印出来的结果是将句子里的’.‘替换为’!’, '!'替换为"!!",不能理解错了= = !, 理解了就很简单了
注意,这里用的是英文字符,测试的时候一定要用英文来测试,否则会怀疑人生的!!
/*
使用if else语句编写一个程序读取输入,读到#停止
使用感叹号替换句号,用两个感叹号替换原来的感叹号
最后报告进行了多少次替换
*/
#include <stdio.h>
int main(void)
{
char ch;
int ct1 = 0;
int ct2 = 0;
while ((ch = getchar()) != '#')
{
if (ch == '.')
{
putchar('!');
ct1++;
}
else if (ch == '!')
{
putchar('!');
putchar('!');
ct2++;
}
else
putchar(ch);
}
printf("replace . %d times, replace ! %d times \n", ct1, ct2);
return 0;
}
注意,这里用的是英文字符,测试的时候一定要用英文来测试,否则会怀疑人生的!!
/*
使用switch重写上面的练习
*/
#include <stdio.h>
int main(void)
{
char ch;
int ct1 = 0;
int ct2 = 0;
while ((ch = getchar()) != '#')
{
switch (ch)
{
case '.' :
putchar('!');
ct1++;
break;
cas