




已阅读5页,还剩29页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章 C控制语句:循环编程练习 1编写一个程序,创建一个具有26个元素的数组,并在其中存储26个小写字母。并让该程序显示该数组的内容。 #includeint main(void) char ABC26; int i; for(i=0;i26;i+) ABCi = a + i; for(i=0;i26;i+) printf(%c,ABCi); printf(n); return(0); 2使用嵌套循环产生下列图案: S $ $ $ $ #includeint main(void) int i,j; for(i=0;i5;i+) for(j=0;j=i;j+) printf($); printf(n); return(0); 3使用嵌套循环产生下列图案:FFEFEDFEDCFEDCBFEDCBA 请注意:如果您的系统不使用ASC或其他以数字顺序编码的码,您可以把一个字符数组初始化为字母表中的字母:char lets26=ABCDEFGHIJKLMNOPQRSTUVWXYZ;然后就可以使用数组索引来选用单个的字母,例如lets0是A,等等。 #includeint main(void) int i,j; for(i=0;i6;i+) for(j=0;j=i;j+) printf(%c,F-j); printf(n); return(0); 4让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案: A ABA ABCBA ABCDCDAABCDEDCBA 这种图案要扩展到用户输入的字符。例如,前面的图案是在输入E时需要产生的。提示:使用一个外部循环来处理行,在每一行中使用三个内部循环,一个处理空格,一个以升序打印字母,一个以降序打印字母。如果您的系统不使用ASCII或类似的以严格数字顺序表示字母的编码,请参见在编程练习3中给出的建议。 #includeint main(void) int i,j,k; char letter; printf(Please input a capital:); scanf(%c,&letter); k=letter-A+1; for(i=0;ik;i+) for(j=0;jk-i;j+) printf( ); for(j=0;j=0;j-) printf(%c,A+j); printf(n); return(0); 5编写一个程序打印一个表,表的每一行都给出一个整数、它的平方以及它的立方。要求用户输入表的上限与下限。使用一个for循环。 #includeint main(void) int i,min,max; printf(Please input the min and max:); scanf(%d %d,&min,&max); printf(%10s%10s%10sn,num,square,cube); for(i=min;i=max;i+) printf(%10d%10d%10dn,i,i*i,i*i*i); return(0); 6编写一个程序把一个单词读入一个字符数组,然后反向打印出这个词。提示:使用strlen()(第4章)计算数组中最后一个字符的索引。 #include#includeint main(void) char word20; int i; printf(Please input a word:); scanf(%s,&word); for(i=strlen(word)-1;i=0;i-) printf(%c,wordi); printf(n); return(0); 7编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者的乘积所得的结果。在用户键入非数字的输入之前程序循环处理每对输入值。 #includeint main(void) float a,b; printf(Please input two floats:); while(scanf(%f%f,&a,&b) =2 ) printf(%.2f-%.2f) / (%.2f*%.2f) = %.2fn,a,b,a,b,(a-b) / (a*b); printf(Please input two floats:); printf(endn); return(0); 8对练习7进行修改,让它使用一个函数来返回计算值。 #includefloat calculate(float,float);int main(void) float a,b; printf(Please input two floats:); while(scanf(%f%f,&a,&b) =2 ) printf( (%.2f-%.2f) / (%.2f*%.2f) = %.2fn,a,b,a,b,calculate(a,b) ); printf(Please input two floats:); printf(endn); return(0);float calculate(float x,float y) return( (x-y) / (x*y) ); 9编写一个程序,要求用户输入下限整数和一个上限整数,然后,依次计算从下限到上限的每一个整数的平方的加和,最后显示结果。程序将不断提示用户输入下限整数和上限整数并显示出答案,直到用户输入的上限整数等于或小于下限整数为止。程序运行的结果示例应该如下所示: Enter lower and upper integer limits: 5 9 The sums of the squares from 25 t0 81 is 255 Enter next set of limits:3 25 The sums of the squares from 9 t0 625 iS 5520 Enter next set of limits:5 5 Done #includeint main(void) int lower,upper,sum,i; printf(Enter lower and upper integer limits:); scanf(%d%d,&lower,&upper); while(lowerupper ) for(i=lower,sum=0;i=upper;i+) sum+=i*i; printf(The sums of the squates from %d to %d is %dn,lower*lower,upper*upper,sum); printf(Enter next set of limits:); scanf(%d%d,&lower,&upper); printf(Donen); return(0); 10.编写一个程序把8个整数读入一个数组中,然后以相反的顺序打印它们。 #includeint main(void) int num8,i; printf(Enter 8 numbers:); for(i=0;i=0;i-) printf(%dt,numi); printf(n); return(0); 11.考虑这两个无限序列: 1.0+1.0/2.0+1.0/3.0+1.0/4.0+ 1.0 - 1.0/2.0+1.0/3.0 - 1.0/4.0+ 编写一个程序来计算这两个序列不断变化的总和,直到达到某个次数。让用户交互地输入这个次数。看看在20次、100次和500次之后的总和。是否每个序列都看上去要收敛于某个值?提示:奇数个-1相乘的值为-1,而偶数个-1相乘的值为1。 #includeint main(void) double i,sum1,sum2; int sign,count; printf(Enter the count:); scanf(%d,&count); for(i=1.0,sign=1,sum1=0,sum2=0;i=count;i+,sign *= -1) sum1 += 1.0 / i; sum2 += sign * 1.0 / i; printf(1.0 + 1.0/2.0 + 1.0/3.0 + 1.0/4.0 .(%d terms) = %lfn,count,sum1); printf(1.0 - 1.0/2.0 + 1.0/3.0 - 1.0/4.0 .(%d terms) = %lfn,count,sum2); return(0); 12.编写一个程序,创建一个8个元素的int数组,并且把元素分别设置为2的前8次幂,然后打印出它们的值。使用for循环来设置值;为了变化,使用do while循环来显示这些值。 #include#includeint main(void) int num8,i; for(i=0;i8;i+) numi = pow(2,i); /pow乘幂函数 用到math头文件 i = 0; do printf(%dt,numi); while(+i8); printf(n); return(0); 13.编写一个程序,创建两个8元素的double数组,使用一个循环来让用户键入第一个数组的8个元素的值。程序把第二个数组的元素设置为第一个数组元素的累积和。例如,第二个数组的第4个元素应该等于第一个数组的前4个元素的和,第二个数组的第5个元素应该等于第一个数组的前5个元素的和(使用嵌套循环可以做到这一点。不过利用第二个数组的第5个元素等于第二个数组的第4个元素加上第一个数组的第5个元素这一事实,可以避免嵌套而只使用单个循环来完成这个任务)。最后,使用一个循环来显示两个数组中的内容,第一个数组在一行中显示,而第二个数组中的每个元素在第一个数组的对应元素之下进行显示。 #includeint main(void) double num8,sum8; int i,j; printf(Enter 8 numbers:); for(i=0;i8;i+) scanf(%lf,&numi); for(j=0,sumi=0;j=i;j+) sumi += numj; for(i=0;i8;i+) printf(%8.3lf,numi); printf(n); for(i=0;i8;i+) printf(%8.3lf,sumi); printf(n); return(0); 14.编写一个程序读入一行输入,然后反向打印该行。您可以把输入存储在一个char数组中;假定该行不超过255个字符。回忆一下,您可以使用具有%c说明符的scanf()从输入中一次读入一个字符,而且当您按下回车键时会产生换行字符(n)。 #include#define LENGTH 20int main(void) char a255; int i; for(i=0;i=0;i-) printf(%c,ai); printf(n); return(0); 15. Daphne以10%的单利息投资了100美元(也就是说,每年投资赢得的利息等于原始投资的10%)。Deirdre则以每年5%的复合利息投资了10O美元(也就是说,利息是当前结余的5%,其中包括以前的利息)。编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,并且显示出到那时两个人的投资额。 #includeint main(void) double Daphne=100,Deirdre=100; int i=0; while(Daphne=Deirdre) Daphne += 100 * 0.1; Deirdre += Deirdre * 0.05; i+; printf(After %d years,Deirdres investment is %lf,Daphnes investment is %lfn,i,Deirdre,Daphne); return(0); 16. Chuckie Lucky赢了100万美元,他把它存入一个每年赢得8%的帐户。在每年的最后一天,Chuckie取出10万美元。编写一个程序,计算需要多少年Chuckie就会清空他的帐户。 #includeint main(void) double investment = 100; int i=0; while(investment 0) investment += investment * 0.08; investment -= 10; i+; printf(After %d years,Chuckie Luckys investment is outn,i); return(0);第七章 C控制语句:分支和跳转编程练习 1编写一个程序。该程序读取输入直到遇到#字符,然后报告读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。 #includeint main(void) int space=0,newline=0,others=0; char a; printf(Please input a string end by #:); while(a=getchar() != #) if(a = ) space+; else if (a = n) newline+; else others+; printf(space: %d,newline: %d,others: %dn,space,newline,others); return(0); 2编写一个程序,该程序读取输入直到遇到#字符。使程序打印每个输入的字符以及它的十进制ASCII码。每行打印8个字符,编码对。建议:利用字符计数和模运算符(%)在每8个循环周期时打印一个换行符。 #includeint main(void) char a; int i; printf(Please input a string end by #:); for(i = 1; (a = getchar() != #; i+) printf(%c-%dt,a,a); if(i%8 = 0) printf(n); printf(n); return(0); 3编写一个程序。该程序读取整数,直到输入0。输入终止后,程序应该报告输入的偶数(不包括0)总个数、偶数的平均值,输入的奇数总个数以及奇数的平均值。 #includeint main(void) int i_even = 0, sum_even = 0, i_odd = 0, sum_odd = 0, num; printf(Please input numbers (0 to quit):); while(1) scanf(%d,&num); if (num = 0) break; if (num % 2 = 0) i_even+; sum_even += num; else i_odd+; sum_odd += num; printf(even numbers count:%dn,i_even); printf(even numbers average:%dn,sum_even / i_even); printf(odd numbers count:%dn,i_odd); printf(odd numbers average:%dn,sum_odd / i_odd); return(0); 4利用if else语句编写程序读取输入,直到#。用一个感叹号代替每个句号,将原有的每个感叹号用两个感叹号代替,最后报告进行了多少次替代。 #includeint main(void) int a=0,b=0; char ch; printf(Please input a string end by #:); while(ch = getchar() != #) if(ch = .) putchar(!); a+; else if(ch = !) putchar(!);putchar(!); b+; else putchar(ch); printf(nthe times of . replaced by !: %dn,a); printf(the times of ! replaced by !: %dn,b); return(0); 5用switch重做练习3。 #includeint main(void) int i_even = 0, sum_even = 0, i_odd = 0, sum_odd = 0, num; printf(Please input numbers (0 to quit):); while(1) scanf(%d,&num); if (num = 0) break; switch(num % 2) case 0: i_even+; sum_even += num; break; case 1: i_odd+; sum_odd += num; printf(even numbers count:%dn,i_even); printf(even numbers average:%dn,sum_even / i_even); printf(odd numbers count:%dn,i_odd); printf(odd numbers average:%dn,sum_odd / i_odd); return(0); 6编写一个程序读取输入,直到#,并报告序列ei出现的次数。 此程序必须要记住前一个字符和当前的字符。用诸如“Receive your eieio award.”的输入测试它。 #includeint main(void) char former=0,present; int count=0; while(present=getchar() != #) if(former = e) & (present = i) count+; former = present; printf(ei has appeared %d timesn,count); return(0); 7编写程序,要求输入一周中的工作小时数,然后打印工资总额、税金以及净工资。作如下假设: a基本工资等级=10.00美元/J,时 b加班(超过40小时)=1.5倍的时间 c税率 前300美元为15% 下一个150美元为20% 余下的为25% 用#define定义常量,不必关心本例是否符合当前的税法。 #include/a.基本工资#define BASIC 10.00 /基本工资等级=BASIC美元/小时/b.加班#define TIME 40 /加班(超过TIME小时) =#define ADD 1.5 /ADD倍的时间/c.税率#define LIMIT1 300 /前LIMIT1美元为RATE1#define RATE1 0.15 #define LIMIT2 150 /下一个LIMIT2美元为RATE2#define RATE2 0.20#define RATE3 0.25 /余下的位RATE3int main(void) double hours,gross,tax; printf(input the work hours of a week:); scanf(%lf,&hours); if (hours 40) hours = 40 + (hours - 40) * 1.5; gross = hours * BASIC; printf(gross income:tt%lfn,gross); if (gross = LIMIT1) tax = gross * RATE1; else if (gross = LIMIT2) tax = LIMIT1 * RATE1 + (gross - LIMIT1) * RATE2; else tax = LIMIT1 * RATE1 + LIMIT2 * RATE2 + (gross - LIMIT1 - LIMIT2) * RATE3; printf(tax:ttt%lfn,tax); printf(net income:tt%lfn,gross - tax); return(0); 8修改练习7中的假设a,使程序提供一个选择工资等级的菜单。用switch选择工资等级。程序运行的开头应该像这样:Enter the number corresponding to the desired pay rate or action:1) $8.75/hr 2) $9.33/hr3) $lO.OO/hr 4) $11.20/hr5) quit 如果选择l到4那么程序应该请求输入工作小时数。程序应该一直循环运行,直到输入5。如果输入l到5以外的选项,那么程序应该提醒用户合适的选项是哪些,然后再循环。用#define为各种工资等级和税率定义常量。 #includeint get_int(void);/b.加班#define TIME 40 /加班(超过TIME小时) =#define ADD 1.5 /ADD倍的时间/c.税率#define LIMIT1 300 /前LIMIT1美元为RATE1#define RATE1 0.15 #define LIMIT2 150 /下一个LIMIT2美元为RATE2#define RATE2 0.20#define RATE3 0.25 /余下的位RATE3int main(void) double basic,hours,gross,tax; printf(Enter the number corresponding to the desired pay rate or action:n); printf(1) $8.75/hrttt2) $9.33/hrn); printf(3) $10.00/hrttt4) $11.20/hrn); printf(5) quitn); switch( get_int() ) case 1: basic = 8.75; break; case 2: basic = 9.33; break; case 3: basic = 10.00; break; case 4: basic = 11.20; break; default: printf(quitn); return(0); /退出程序 printf(you have select $%.2lfn,basic); printf(input the work hours of a week:); scanf(%lf,&hours); if (hours 40) hours = 40 + (hours - 40) * 1.5; gross = hours * basic; printf(gross income:tt%lfn,gross); if (gross = LIMIT1) tax = gross * RATE1; else if (gross = LIMIT2) tax = LIMIT1 * RATE1 + (gross - LIMIT1) * RATE2; else tax = LIMIT1 * RATE1 + LIMIT2 * RATE2 + (gross - LIMIT1 - LIMIT2) * RATE3; printf(tax:ttt%lfn,tax); printf(net income:tt%lfn,gross - tax); return(0);int get_int(void) /得到一个合适的整数,滤除非法数 int num; char str40; while(scanf(%d,&num)!=1) gets(str); printf(error! %s is not a number. input again.n,str); while ( getchar() != n); return num; 9编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。 #includeint isprime(int);int main(void) int num,i; printf(input a positive number:); scanf(%d,&num); printf(all the primes = %d:n,num); for(i=2;i=num;i+) if( isprime(i) ) printf(%dt,i); printf(n); return(0);int isprime(int n) /如果n是素数 返回1,反之 返回0 int div; for(div = 2; div * div = n; div+) if (n % div = 0) return 0; return 1; 10. 1988年United States Federal Tax Schedule是近期最基本的。它分为4类,每类有两个等级。下面是其摘要;美元数为应征税的收入。 种 类 税 金 单身 前17850美元按15%,超出部分按28% 户主 前23,900美元按15%,超出部分按28%已婚,共有 前29,750美元按15%,超出部分按28% 已婚,离异 前14,875美元按l5%,超出部分按28% 例如,有20 000美元应征税收入的单身雇佣劳动者应缴税金0.1517 850美元+0.28(20 000美元-17 850美元)。编写一个程序,让用户指定税金种类和应征税收入,然后计算税金。使用循环以便用户可以多次输入。 #include#define SINGLE 17850#define HOST 23900#define MARRIED_SHARE 29750#define MARRIED_DIVORCE 14875#define RATE1 0.15#define RATE2 0.28int main(void) double type,pay,tax; char ch; while(1) printf(Select the type of marriage:n); printf(1)SINGLEn2)HOSTn3)MARRIED_SHAREn4)MARRIED_DIVORCEn5)quitn); while(ch = getchar() = n) continue; /滤掉回车 switch(ch) case 1: type = SINGLE; break; case 2: type = HOST; break; case 3: type = MARRIED_SHARE; break; case 4: type = MARRIED_DIVORCE; break; case 5: printf(quitn); return(0); /退出程序 default : printf(input errorn); continue; printf(you have select %cn,ch); printf(input the pay:); scanf(%lf,&pay); if (pay = type) tax = pay * RATE1; else tax = type * RATE1 + (pay - type) * RATE2; printf(wax is %.2lfn,tax); 11. ABC Mail Order Grocery朝鲜蓟的售价是1.25美元/磅,甜菜的售价是0.65美元/磅,胡萝卜的售价是0.89美元/磅。在添加运输费用之前,他们为100美元的订单提供5%的打折优惠。对5磅或以下的定单收取3.50美元的运输和装卸费用;超过5磅而不足20磅的定单收取1O.OO美元的运输和装卸费用:加磅或以上的运输,在8美元基础上每磅加收0.1美元。编写程序,在循环中使用switch语句,以便对输入a的响应是让用户输入所需的朝鲜蓟磅数,b为甜菜的磅数,c为胡萝卜的磅数,而q允许用户退出订购过程。然后程序计算总费用、折扣和运输费用(如果有运输费的话),以及总数。随后程序应该显示所有的购买信息:每磅的费用、订购的磅数、该订单每种蔬菜的费用、订单的总费用、折扣,如果有的话加上运输费用,以及所有费用的总数。 #include #include /需要调用tolower函数#define ARTICHOKE 1.25 /单价#define BEET 0.65#define CARROT 0.89#define DISCOUNT_LIMIT 100#define DISCOUNT_RATE 0.05#define FREIGHT_FEE1 3.50#define FREIGHT_LIMIT1 5#define FREIGHT_FEE2 10.00#define FREIGHT_LIMIT2 20#define FREIGHT_FEE3 8#define FREIGHT_RATE 0.1int main(void) char ch; double artichoke=0,beet=0,carrot=0; /磅数 double sum,discount,freight; printf(Please select your vegetable: a,b,c,qn); printf(a.artichoke price:$%.2fn,ARTICHOKE); printf(b.beet price:$%.2fn,BEET); printf(c.carrot price:$%.2fn,CARROT); printf(q.endn); printf(price as dollars per pound)n); while( ( ch = tolower( getchar() ) ) != q) /tolower:大写转小写 switch(ch) case a: printf(How many pounds of artichokes do you want?); scanf(%lf,&artichoke); printf(Please select your vegetable: a,b,c,q:); continue; case b: printf(How many pounds of beets do you want?); scanf(%lf,&beet); printf(Please select your vegetable: a,b,c,q:); continue; case c: printf(How many pounds of carrots do you want?); scanf(%lf,&carrot); printf(Please select your vegetable: a,b,c,q:); continue; default: break; printf(%10s%10s%10s%10sn, ,artichoke,beet,carrot); printf(%10s%10.2lf%10.2lf%10.2lfn,price,ARTICHOKE,BEET,CARROT); printf(%10s%10.2lf%10.2lf%10.2lfn,pound,artichoke,beet,carrot); printf(%10s%10.2lf%10.2lf%10.2lfn,charge,ARTICHOKE * artichoke,BEET * beet,CARROT * carrot); sum = ARTICHOKE * artichoke + BEET * beet + CARROT * carrot; if (sum DISCOUNT_LIMIT) discount = sum*DISCOUNT_RATE; else discount = 0; printf(discount: %.2fn,discount); if (artichoke + beet + carrot = 5) freight = 3.50; else if (artichoke + beet + carrot 20) freight = 10; else freight = 8 + (artichoke + beet + carrot) * 0.1; printf(freight: %.2fn,freight); sum = sum - discount + freight; printf(sum: %.2fn,sum); return 0;第8章 字符输入/输出和输入确认编程练习 下面的一些程序要求输入以EOF终止。如果您的操作系统难以使用或不能使用重定向,则使用一些其他的判断来终止输入,例如读取&字符。 1设计一个程序,统计从输入到文件结尾为止的字符数。 #include int main(void) int i; for(i=0; getchar() != EOF; i+); printf(There are %d char,i); return 0; 2编写一个程序,把输入作为字符流读取,直到遇到EOF。令该程序打印每个输入字符及其ASCII编码的十进制值。注意在ASCII序列中空格字符前面的字符是非打印字符,要特殊处理这些字符。如果非打印字符是换行符或制表符,则分期打印n或t。否则,使用控制字符符号。例如,ASCII的l是Ctrl+A,可以显示为AA。注意A的ASC值是Ctrl+A的值加64。对其他非打印字符也保持相似的关系。除去每次遇到一个换行符时就开始一个新行之外,每行打印10对值。 #include int main(void) char ch; int i; for(i=1; (ch=getchar() != EOF; i+) if (ch = | ch = n | ch = t) printf(%-5c,ch); else printf(%-4c,ch+64); printf(%-5d,ch); if(i%8 = 0) printf(n); return 0; 3编写一个程序,把输入作为字符流读取,直至遇到EOF。令其报告输入中的大写字母个数和小写字母个数。假设小写字母的数值是连续的,大写字母也是如此。或者你可以使用ctypc,h库中的合适的函数来区分大小写。 #include #include int main(void) char ch; int lower=0,upper=0; while ( (ch=getchar() != EOF ) if ( islower(ch) ) lower+; if ( isupper(ch) ) upper+; printf(lower: %d, upper: %dn,lower,upper); return 0; 4编写一个程序,把输入作为字符流读取,直至遇到EOF。令其报告每个单词的平均字母数。不要将空白字符记为单词中的字母。实际上,标点符号也不应该计算,但现在不必考虑这一点(如果您想做得好一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 腰椎间盘突出合并马尾综合征护理查房
- 桡骨远端骨折合并腕管综合征护理查房
- 2020年1月国开电大法律事务专科《行政法与行政诉讼法》期末纸质考试试题及答案
- 广西南宁市第十中学2025年春季学期高一年级历史第21课战时共产主义到斯大林模式同步测试卷
- 社区美篇消防知识培训课件
- 宁夏银川市2024-2025学年高一下学期期末地理试卷(含答案)
- 小车挂靠公司合同范本
- 读书合同范本模板
- 现在的装修合同范本
- 墙体修复合同范本
- 新能源汽车行业的营销渠道与渠道管理
- 基于5G通信技术的无人机立体覆盖网络白皮书
- 2024年度国网基建安全(变电土建)安全准入备考试题库(附答案)
- 《HSK标准教程3》第1课
- 石油储量与产量预测模型研究
- 《学习国旗法》课件
- 中智人力测评题库答案
- 安全保密审计报告
- 《忆秦娥~ 娄山关》
- 医疗设备采购 投标技术方案 (技术方案)
- 小批量试产报告1
评论
0/150
提交评论