1.编写一个程序读取输入,读到#字符停止,然后报告读取的空格数、换行符数和所有其他字符的数量。
答:
#include <stdio.h>
int main()
{
char ch;
int space = 0;
int line_break = 0;
int other = 0;
while ( ch = getchar() != '#' ){
if ( ch == ' ' )
space++;
else if ( ch == '\n' )
line_break++;
else
other++;
}
printf("%d space, %d line break, %d other", space, line_break, other);
return 0;
}
2.
编写一个程序读取输入,读到#字符停止。程序要打印每个输入的字符以及对应的ASCII码(十进制)。每行打印8个“字符-ASCII码”组合。建议:使用字符计数和求模运算符(%)在每8个循环周期时打印一个换行符。
答: 要注意换行符‘\n’和 制表符‘\t’
#include <stdio.h>
int main()
{
char ch;
int count = 0;
printf("Please input chars ( # to quit ): ");
while ( (ch = getchar()) != '#' )
{
if (count++ % 8 == 0)
printf("\n");
/* 使用计数器,每8个字符打印一个换行符。
注意,本行代码在count为0时候会先打印一个换行符
*/
if ( ch == '\n')
printf("'\\n'-%03d. ", ch);
/* 对于换行符,需要转换显示方式,
否则,可能会在不足8个字符换行 */
else if (ch == '\t')
printf("'\\t'-%03d. ", ch);
/* 对于制表符,需要转换显示方式 */
else printf("'%c'-%03d. ", ch, ch);
}
printf("Done!\n");
return 0;
}
3.编写一个程序,读取整数直到用户输入0。输入结束后,程序应报告用户输入的偶数(不包括0)个数、这些偶数的平均值、输入的奇数个数及其奇数的平均值。
答:
#include <stdio.h>
int main()
{
int odd_sum = 0;
int even_sum = 0;
int odd_count = 0;
int even_count = 0;
int dig;
printf(" Please inter the numbers (0 to quit): ");
// scanf("%d", &dig);
while ( scanf("%d", &dig )){
if ( dig == 0 )
break;
if ( dig % 2 == 0 ){
even_sum += dig;
even_count ++;
}
else{
odd_sum += dig;
odd_count ++;
}
}
printf("Have %d even number, average is %g\n", even_count, 1.0*even_sum/even_count);
printf("Have %d odd number, average is %g\n", odd_count, 1.0*odd_sum/odd_count);
printf("Done!\n");
return 0;
}
4.使用if-else语句编写一个程序读取输入,读到#停止。用感叹号替换句号,用两个感叹号替换原来的感叹号,最后报告进行了多少次替换。
答:
为何while()括号里如果用scanf语句 输入‘#’时候没有输出?
#include <stdio.h>
int main()
{
int count = 0;
char ch;
while( (ch = getchar() ) != '#' ) {
if ( ch == '.' ){
ch = '!';
printf("%c", ch);
count ++;
}
else if ( ch == '!') {
printf("!!");
count ++;
}
else{
printf("%c", ch);
}
}
printf("\n Total repalce %d times\n", count);
printf("Done!\n");
return 0;
}
5.使用switch重写练习4。
答:
#include <stdio.h>
int main()
{
int count = 0;
char ch;
while( (ch &#