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

  • Post author:
  • Post category:其他



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 &#



版权声明:本文为2301_76420023原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。