[C primer plus] 编程练习 ——第七章

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 &#
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值