c primer plus7.12编程练习

来源:互联网 发布:99宿舍软件 编辑:程序博客网 时间:2024/05/24 04:04
<pre name="code" class="html">//第11题#include <Stdio.h>#include <ctype.h>#define PRICE_ARTICHOKE 1.25//朝鲜蓟的售价是1.25美元/磅#define PRICE_BEET 0.65//甜菜的售价是0.65美元/磅#define PRICE_CARROT 0.89//胡萝卜的售价是0.89美元/磅#define ORDER_100 0.05 //100美元的订单提供%5的优惠#define LOWER_5 3.5 //5磅以下的订单收取3.5美元运输和装卸费用#define HIGHER_5_LOWER_20 10 //超过5磅不足20磅的每单收取10美元的运输和装卸费用#define HIGH_20 0.1//超过20磅的在8美元基础上每磅加收0.1美元int main (void){int a,b,c;//分别表示朝鲜蓟磅数,甜菜的磅数,胡萝卜的磅数double all_incost=0,discount,transportation,sum=0,money=0;//总订单,折扣,运输费用,总数,费用总数double cost;//花费char ch;//用来选择蔬菜double basic;//售价int pound;//购买的磅数printf("请输入a,b,c分别代表朝鲜蓟,甜菜,胡萝卜,选择您打算购买的蔬菜\n");while((ch=tolower(getchar()))!='q'){switch(ch){case 'a':printf("您想订购所少磅朝鲜蓟?\n");scanf("%d",£);basic=PRICE_ARTICHOKE;cost=basic*pound;//买这些磅数的费用printf("其中每磅的单价是%.2lf,",basic);printf("您需要花费%.2lf\n",cost);all_incost+=cost;sum+=pound;printf("请继续订购,按q退出订购\n");getchar();continue;case 'b':printf("您想订购所少磅甜菜?\n");scanf("%d",£);basic=PRICE_BEET;cost=basic*pound;//买这些磅数的费用printf("其中每磅的单价是%.2lf,",basic);printf("您需要花费%.2lf\n",cost);all_incost+=cost;sum+=pound;printf("请继续订购,按q退出订购\n");getchar();continue;case 'c':printf("您想订购所少磅胡萝卜?\n");scanf("%d",£);basic=PRICE_CARROT;cost=basic*pound;//买这些磅数的费用printf("其中每磅的单价是%.2lf,",basic);printf("您需要花费%.2lf\n",cost);all_incost+=cost;sum+=pound;getchar();continue;default:printf("输入错误,请重新输入\n");getchar();continue;printf("请继续订购,按q退出订购\n");continue;}}printf("购买%.lf磅\n",sum);if(sum<5){transportation=LOWER_5;discount=0;}if(sum>=5&&sum<20){transportation=HIGHER_5_LOWER_20;discount=0;}if(sum>=20&&sum<100){transportation=8+0.1*sum;discount=0;}if(sum>=100){transportation=8+0.1*sum;discount=ORDER_100*all_incost;}money=transportation+all_incost-discount;printf("运输费用是%.2lf",transportation);printf("折扣是%.2lf",discount);printf("总费用是%.2lf\n",money);return 0;}

<span style="font-family: Arial, Helvetica, sans-serif;">//编写一个程序,该程序读取输入直到遇到#字符,然后报告读取的空格数目,换行符数目以及读取的所有其它字符数目</span>
#include <stdio.h>int main (void){    char ch;    int blank=0,line=0,others=0;    while((ch=getchar())!='#')    {        if(ch==' '||ch=='\t')            blank++;        else if(ch=='\n')            line++;        else            others++;    }    printf("blank=%d,line=%d,others=%d\n",blank,line,others);    return 0;}        
//编写一个程序,该程序读取输入直到遇到#字符,使程序打印每个输入的字符,以及它的实际值ASCII码,每行打印8个字符/编码对,建议:利用字符计数和模运算符%,在每八个循环周期时打印一个换行符#include <Stdio.h>int main (void){    char ch;    int i=0;    while((ch=getchar())!='#')    {        printf("%c=%d    ",ch,ch);        i++;        if(i%8==0)        {            printf("\n");        }    } return 0;}


//编写一个程序,该程序读取整数,直到输入0,输入终止后程序应该报告输入的偶数(不包括0)总个数,偶数的平均值,输入的奇数总个数,奇数的平均值#include <Stdio.h>int main (void){    int a[50],i=0,even=0,odd=0,sum_even=0,sum_odd=0;    for(scanf("%d",&a[i]);a[i]!=0;scanf("%d",&a[i]))    {        if(a[i]%2==0)        {            even++;            sum_even+=a[i];        }        else        {            odd++;            sum_odd+=a[i];        }        i++;    }    printf("偶数的个数%d,平均值%.2f\n奇数的个数%d,平均值%.2f\n",even,(float)sum_even/even,odd,(float)sum_odd/odd);    return 0;}           

//不用数组来写#include <Stdio.h>int main (void){    int a,even=0,odd=0,sum_even=0,sum_odd=0;    for(scanf("%d",&a);a!=0;scanf("%d",&a))    {        if(a%2==0)        {            even++;            sum_even+=a;        }        else        {            odd++;            sum_odd+=a;        }    }    printf("偶数的个数%d,平均值%.2f\n奇数的个数%d,平均值%.2f\n",even,(float)sum_even/even,odd,(float)sum_odd/odd);    return 0;}




//利用else if语句编写程序读取输入,直到#,用一个感叹号代替每个句号,将原有的每个感叹号用两个感叹号代替,最后报告进行了多少次代替#include <Stdio.h>int main (void){    char ch;    int period_replace=0,point_replace=0;    while((ch=getchar())!='#')    {        if(ch=='.')        {            ch='!';            period_replace++;        }               else if(ch=='!')        {            point_replace++;            putchar('!');        }        putchar(ch);    }    printf("%d\n",period_replace+point_replace);    return 0;}            

//用switch重做练习3//编写一个程序,该程序读取整数,直到输入0,输入终止后程序应该报告输入的偶数(不包括0)总个数,偶数的平均值,输入的奇数总个数,奇数的平均值#include <Stdio.h>int main (void){    int a[50],i=0,even=0,sum_even=0,odd=0,sum_odd=0;    for(scanf("%d",&a[i]);a[i]!=0;i++,scanf("%d",&a[i]))    {        switch(a[i]%2)        {        case 0:sum_even+=a[i];            even++;            break;        case 1:sum_odd+=a[i];            odd++;            break;                    }                    }    printf("even is %d,average is %.2f\nodd is %d,average is %.2f\n",even,(float)sum_even/even,odd,(float)sum_odd/odd);    return 0;}

//换一种方法#include <Stdio.h>int main (void){    int a,even=0,sum_even=0,odd=0,sum_odd=0;    while(1)    {        scanf("%d",&a);        if(a==0)            break;        switch(a%2)        {        case 0:sum_even+=a;            even++;            break;        case 1:sum_odd+=a;            odd++;            break;        }     }    printf("even is %d,average is %.2f\nodd is %d,average is %.2f\n",even,(float)sum_even/even,odd,(float)sum_odd/odd);    return 0;}    

//编写一个程序读取输入,直到#,并报告序列ei出现的次数#include <stdio.h>int main (void){    char ch;    int i=0;    while((ch=getchar())!='#')        if(ch=='e')            if((ch=getchar())!='#'){                 if(ch=='i')i++;}elsebreak;        printf("%d\n",i);        return 0;}

//换一种方法,分别记录之前的字母和当前的字母#include <Stdio.h>int main (void){char previous=0,present;int i=0;while((present=getchar())!='#'){if(previous=='e'&&present=='i')i++;previous=present;}printf("%d\n",i);return 0;}

//编写程序,要求输入一周中的工作小时数,然后打印工资总额,税金以及净工资。#include <Stdio.h>#define M 40#define A 300*0.15#define B 150*0.2+A#define PAY 10*40;int main (void){int hour;double sum=0,taxe=0,net_pay=0;printf("input the hour\n");do{scanf("%d",&hour);}while(hour<0);if(hour<=M){sum=hour*10;if(sum<300)taxe=0.15*sum;else if(sum>300&&sum<450)taxe=0.2*(sum-300)+A;}else{sum=(hour-M)*1.5*10+PAY;if(sum<300)taxe=0.15*sum;else if(sum>300&&sum<450)taxe=0.2*(sum-300)+A;elsetaxe=0.25*(sum-450)+B;}net_pay=sum-taxe;printf("总工资是%lf,税是%lf,净工资是%lf\n",sum,taxe,net_pay);return 0;}


//优化前一种方法#include <Stdio.h>#define M 40#define A 300*0.15#define B 150*0.2+Aint main (void){int hour,number;double sum=0,taxe=0,net_pay=0,basic;printf("Enter  the number corresponding to the desired pay rate or action\n");printf("1)$8.75/hr2)$9.33/hr\n3)$10.00/hr4)$11.20/hr\n5)quit\n");scanf("%d",&number);while(number!=5){switch(number){case 1:basic=8.75;break;case 2:basic=9.33;break;case 3:basic=10;break;case 4:basic=11.2;break;default:printf("请输入1-4\n");}printf("input the hour\n");do{scanf("%d",&hour);}while(hour<0);if(hour<=M){sum=hour*basic;if(sum<300)taxe=0.15*sum;else if(sum>300&&sum<450)taxe=0.2*(sum-300)+A;}else{sum=(hour-M)*1.5*basic+basic*40;if(sum<300)taxe=0.15*sum;else if(sum>300&&sum<450)taxe=0.2*(sum-300)+A;elsetaxe=0.25*(sum-450)+B;}net_pay=sum-taxe;printf("总工资是%lf,税是%lf,净工资是%lf\n",sum,taxe,net_pay);printf("请输入下一组数据\n");scanf("%d",&number);}return 0;}

//略微改动的尝试#include <Stdio.h>#define M 40#define A 300*0.15#define B 150*0.2+Aint main (void){int hour,number;double sum=0,taxe=0,net_pay=0,basic;printf("Enter  the number corresponding to the desired pay rate or action\n");printf("1)$8.75/hr2)$9.33/hr\n3)$10.00/hr4)$11.20/hr\n5)quit\n");scanf("%d",&number);while(1){switch(number){case 1:basic=8.75;break;case 2:basic=9.33;break;case 3:basic=10;break;case 4:basic=11.2;break;case 5:return 0;default:printf("请输入1-4\n");}printf("input the hour\n");do{scanf("%d",&hour);}while(hour<0);if(hour<=M){sum=hour*basic;if(sum<300)taxe=0.15*sum;else if(sum>300&&sum<450)taxe=0.2*(sum-300)+A;}else{sum=(hour-M)*1.5*basic+basic*40;if(sum<300)taxe=0.15*sum;else if(sum>300&&sum<450)taxe=0.2*(sum-300)+A;elsetaxe=0.25*(sum-450)+B;}net_pay=sum-taxe;printf("总工资是%lf,税是%lf,净工资是%lf\n",sum,taxe,net_pay);printf("请输入下一组数据\n");scanf("%d",&number);}return 0;}

//编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数#include <Stdio.h>int main (void){unsigned long num; //接受的整数unsigned long div;//可能的素数unsigned long number;//小于输入num的数int isprime; //素数的标记printf("please input an integer for analysis: ");printf("Enter q to quit\n");while(scanf("%lu",&num)==1){for(number=2;number<=num;number++){for(div=2,isprime=1;(div*div)<=number;div++)if(number%div==0){isprime=0; //不是素数}if(isprime)printf("%lu is prime.\n",number);}printf("Please enter another integer for analysis: ");printf("Enter q to quit.\n");}printf("Bye\n");return 0;}

//第十题#include <Stdio.h>#define RATE1 0.15#define RATE2 0.28#define SINGLE 17850#define HOUSEHOLDER 23900#define MARRIED_COMMON 29750#define MARRIED_DIVORCED 14875int main (void){int basic,number;unsigned long tax,income;printf("Please enter a number: ");printf("1-----已婚\n2------户主\n3------已婚,共有\n4--------已婚,离异\n");printf("按q退出\n");while((scanf("%d",&number)==1)){switch(number){case 1:basic=SINGLE;break;case 2:basic=HOUSEHOLDER;break;case 3:basic=MARRIED_COMMON;break;case 4:basic=MARRIED_DIVORCED;break;default:printf("输入错误,请选择1-4之间的数\n");}printf("请输入您的收入\n");scanf("%lu",&income);if(income>basic){tax=RATE1*basic+RATE2*(income-basic);}elsetax=RATE1*basic;printf("tax is %d\n",tax);printf("请输入下一组数据");}return 0;}



0 0
原创粉丝点击