c primer plus(五版)编程练习-第八章编程练习

1.编写一个程序。该程序读取输入直到遇到#字符,然后报告读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。

1.设计一个程序,统计从输入到文件结尾为止的字符数。

#include<stdio.h>
#include<ctype.h>
int main(void){
    char ch;
    int count1,count2,count3;
    count1 = count2 = count3 = 0;
   printf("Enter text to be analyzed(#to terminate):n");
    while((ch = getchar()) != '#'){
        if ( ch == 'n'){
            count1++;
        } else if(isspace(ch)){
            count2++;
        } else if (!isspace(ch)){
            count3++;
        }
    }
    printf("换行数量%d,空格数量%d,其他字符数量%d",count1,count2,count3);
    return 0;
}
#include<stdio.h>int main(void){    int ch;    int i;    i=0;    while((ch = getchar!=EOF){       if(ch != 'n')            i++;    }    printf("char for count %d",i);    return 0;}

上海快三,2.编写一个程序。该程序读取输入直到遇到#字符。使程序打印每个输入的字符以及它的十进制ASCII 码。每行打印8 个字符/编码对。建议:利用字符计数和模运算符(%)在每8 个循环周期时打印一个换行符。

2.编写一个程序,把输入作为字符流读取,直到遇到EOF。令该程序打印每个输入字符及其ASCII编码的十进制值。注意在ASCII 序列中空格字符前面的字符是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分别打印n 或t。否则,使用控制字符符号。例如,ASCII 的1是Ctrl+A,可以显示为^A。注意A 的ASCII 值是Ctrl+A 的值加64。对其他非打印字符也保持相似
222的关系。除去每次遇到一个换行符时就开始一个新行之外,每行打印10 对值。

#include<stdio.h>
#define STOP '#'
int main(void){
    char ch;
    int length = 1;
    printf("Enter text to be analyzed(#to terminate):n");
    while((ch = getchar()) != STOP){
        if(length%8==0){
            printf("n");
        }
        printf("%c/%d ",ch,ch);
        length++;
    }
    return 0;
}

3.编写一个程序。该程序读取整数,直到输入0。输入终止后,程序应该报告输入的偶数(不包括0)总个数、偶数的平均值,输入的奇数总个数以及奇数的平均值。

#include<stdio.h>
int main(void){
    int num,even_num,odd_num;
    double even_count,odd_count;//必需定义为double类型,否则打印平均值会出错
    even_num = odd_num = 0;
    even_count = odd_count = 0.0 ;
    printf("Enter int to be analyzed(0 to terminate):n");
    while (scanf("%d", &num) == 1 && num != 0){
            if (num%2 == 0){
                even_num++;
                even_count +=num;
            } else {
                odd_num++;
                odd_count +=num;
            }
    }
    if (even_count > 0)
        printf("Even have %d, even average is %.2fn",even_num,even_count / even_num);
    if (odd_num > 0)
        printf("Odd have %d,odd average is %.2f",odd_num,odd_count/odd_num);
    return 0;
}

4.利用if else 语句编写程序读取输入,直到#。用一个感叹号代替每个句号,将原有的每个感叹号用两个感叹号代替,最后报告进行了多少次替代。

#include<stdio.h>
#define STOP '#'
int main(void){
    char ch;
    int i;
    i = 0;
    while((ch = getchar()) != STOP){
        if (ch == '.'){
            putchar('!');
            i++;
        } else if (ch == '!'){
            putchar(ch);
            putchar(ch);
            i++;
        } else {
            putchar(ch);
        }
    }
    printf("n");
    printf("count %d",i);
    return 0;
}

5.用switch 重做练习3。

#include<stdio.h>
int main(void){
    int num,even_num,odd_num;
    double even_count,odd_count;//必需定义为double类型,否则打印平均值会出错
    even_num = odd_num = 0;
    even_count = odd_count = 0.0 ;
    printf("Enter int to be analyzed(0 to terminate):n");
    while (scanf("%d", &num) == 1 && num != 0){
            switch (num%2){
                case 0:
                    even_num++;
                    even_count +=num;
                    break;
                case 1:
                    odd_num++;
                    odd_count +=num;
                    break;
            }
    }
    if (even_count > 0)
        printf("Even have %d, even average is %.2fn",even_num,even_count / even_num);
    if (odd_num > 0)
        printf("Odd have %d,odd average is %.2f",odd_num,odd_count/odd_num);
    return 0;
}

 6.编写一个程序读取输入,直到#,并报告序列ei 出现的次数。说明此程序必须要记住前一个字符和当前的字符。用诸如“Receive your eieio award.”的输入测试它。

#include<stdio.h>
#define STOP '#'
#define PREV_CHAR 'e'
#define CURRENT_CHAR 'i'
int main(void){
    char ch, prev_char;
    int i;
    i = 0;
    prev_char = 0;
    printf("Enter text to be analyzed(#to terminate):n");
    while((ch = getchar()) != STOP){
        if (ch == PREV_CHAR){
            prev_char = ch;
        }
        if (ch == CURRENT_CHAR && prev_char == PREV_CHAR){
            i++;
        }
    }
    printf("Enter of 'ei' %d ",i);
    return 0;
}

7.编写程序,要求输入一周中的工作小时数,然后打印工资总额、税金以及净工资。作如下假设:
a.基本工资等级=10.00 美元/小时
b.加班(超过40 小时)=1.5 倍的时间
c.税率前300 美元为15%
下一个150 美元为20%余下的为25%。

用#define 定义常量,不必关心本例是否符合当前的税法。

#include<stdio.h>
#define BASE 10.00
#define TAX_LEVEL1 300
#define TAX_LEVEL2 150
#define TAX_LEVEL1_RATE 0.15
#define TAX_LEVEL2_RATE 0.2
#define TAX_LEVEL3_RATE 0.25
#define BASE_HOUR 40
#define OVER_RATE 1.5
int main(void){
    float num,wage,tax,real_wage,temp,real_hour;
    wage = tax = real_wage = real_hour = 0.0;
    printf("Please enter the number of hours you work a week:n");
    scanf("%f",&num);

    if (num > BASE_HOUR){
        real_hour = num + (num - BASE_HOUR)*OVER_RATE;
    } else {
        real_hour = num;
    }
    wage = real_hour*BASE;
    temp = wage - TAX_LEVEL1;
    if (temp <= 0){
        tax += wage*TAX_LEVEL1_RATE;
    } else {
        tax +=TAX_LEVEL1*TAX_LEVEL1_RATE;
        if (temp<= TAX_LEVEL2){
            tax += temp*TAX_LEVEL2_RATE;
        } else {
            tax += TAX_LEVEL2*TAX_LEVEL2_RATE;
            tax += (temp - TAX_LEVEL2) * TAX_LEVEL3_RATE;
        }
    }
    real_wage = wage - tax;
    printf("hour:%.2f wage:%.2f tax:%.2f real wage :%.2f",num,real_hour,wage,tax,real_wage);
    return 0;
}

 

8.修改练习7 中的假设a,使程序提供一个选择工资等级的菜单。用switch 选择工资等级。程序运行的开头应该像这样:
*****************************************************************
Enter the number corresponding to the desired pay rate or action:
1)$8.75/hr       2)$9.33/hr
3)$10.00/hr     4)$11.20/hr
5)quit
*****************************************************************

如果选择1 到4,那么程序应该请求输入工作小时数。程序应该一直循环运行,直到输入5。如果输入1 到5 以外的选项,那么程序应该提醒用户合适的选项是哪些,然后再循环。用#define 为各种工资等级和税率定义常量。

本文由上海快三发布于小说,转载请注明出处:c primer plus(五版)编程练习-第八章编程练习

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。