答案-C语言考试系统题库答案.docx
分类一1 .编写一程序P1-ULC实现以下功能x(x只考虑整数int且必须定义为int、但F(x)完全可能超过int的表示范围)通过键盘输入(输入前给出提示Please input x:),然后计算并在屏幕上输出国数值。注意,图1中的括号不是而是0,编程可用素材:printf (*Please input x:*).0r -5x+27(x<0)F(x)= F 7909(x=0)L 2x-l (x>0)程序的运行效果应类似地如图1所示,图1中的3是从键盘输入的内容。尹命令提示符回回iPlease input x:3 F<3>=5.14l 习)include < stdio. h > int main(void)(int x; double y;printf(*Please input x:*); scanf(*%d*,&x);if (x >0)(y =(double)2* x -1;) else (if (x =0)( y =(double)7909; else (y =(double)-5* x +27;)printf (*nF (%d)=%.x, y);return 0;2. Pl-113已知某银行整存整取存款不同期限的年息利率分别为:3.15%期限一年,3.63%期限二年,4.02%期限三年,4.69%期限五年,5.36%期限八年。从键盘上输入存钱的本金(以元为单位,必须定义为int且应考虑金额很大的情况)和存款期限(只考虑1,2,3,5,8),求到期时能从银行得到的利息(以元为单位,应考虑有小数,不计复利)。编程可用素材: printf (*nPlease input benj in, cunqi:")、printf (*nl ixi =. yuan*. o程序的运行效果应类似地如图1所示,图1中的10000,8是从键盘输入的内容。ttinclude < stdio. h >int main(void)(int benjin, cunqi;double lixi;double money;printf(*nPlease input benjin, cunqi:*): scanf(*%d,%d*,&benjin,&cunqi);money = benjin;if ( cunqi =1)(lixi = money * cunqi *3.15/100;else(if ( cunqi =2)(lixi = money * cunqi *3.63/100;)else(if ( cunqi =3)lixi = money * cunqi *4.02/100; else if ( cunqi =5)lixi = money * cunqi *4.69/100;elseif ( cunqi =8)(lixi = money * cunqi *5.36/100;)printf(*nlixi =%.2f yuann*, lixi);return 0;)3. Pl-114编写一个简单计算器程序,输入格式为:datal op data20其中datal和data2是参加运算的两个数(datal、data2必须定义为int,但二者相加可能超出int能表示的范围),op为运算符,它的取值只能是+、-、*、/、%o程序的运行效果应类似地如图1、图2、图3、图4所示,图1中的3000+2000、图2中的3000%2000、图3中的3000%0和图4中的3000/0是从键盘输入的内容。ftinclude < stdio. h > int main( void ) int datal, data2; double jieguo; char op;printf(*nPlease input datal op data2:"); scanf("%d %c %d”, &datal, &op, &data2);switch ( op )case + :jieguo = ( double ) datal printf Crn%d%c%d=%. Ofn”, break;,, case -:jieguo = ( double ) datal printf(*n%d%c%d=%. Ofn”, break;case ':jieguo = ( double ) datal printf(*n%d%c%d=%. Ofn”, break;case ' /':if ( data2 != 0 )+ data2;datal, op, data2,-data2;datal, op, data2,* data2;datal, op, data2,jieguo);jieguo);jieguo);jieguo =( double ) datal / data2;printf(*n%d%c%d=%. Ofn*, datal, op, data2, jieguo); break; else(printf(*nError! chu shu wei 0.n"); break;case ':if ( data2!=0)jieguo = datal % data2;printf(*n%d%c%d=%. Ofn*, datal, op, data2, jieguo); break;)elseprintf(*nError! chu shu wei 0.n*);break;default:printf(*nError!n*);)return 0;)4.输入月份,打印2003年该月有几天。当输入的月份超范围时,应显示“Invalid month input”。程序的运行效果应类似地如图1和图2所示,图1中的4和图2中的13是从键盘输入的内容。#include < stdio. h > int main( void )(int month;int day;printf(*nplease input the month number:*); scanfftmonth);switch ( month )(case 1:case 3:case 5:case 7:case 8:case 10:case 12:day =31;printf (*n2003.%d has %d days.n", month, day);break;case 4:case 6:case 9:case 11:day =30;printf (*n2003.%d has %d days.n*, month, day);break;case 2:day =28;printf C"n2003.%d has %d days.n", month, day);break;default:printfCnlnvalid month inputn*);)return 0;5.已知某公司员工的保底薪水为500,某月所接工程的利润profit (整数)与利润提成的关系如下(计量单位:元):profit<1000没有提成;1000< prof it<2000提成10%;2000< profit<5000提成15%;5000< prof it<10000提成20%;10000<profit25%。请根据输入的利润计算员工的薪水。程序的运行效果应类似地如图1所示,图1中的2000是从键盘输入的内容。#include < stdio. h > int main( void )int profit;double salary =500;printf(*nlnput profit:*);scanf(*%d*, ftprofit);if ( profit <=1000)(salary =500;if ( profit >1000&& profit <=2000)(salary = salary + profit *0.1;if ( profit >2000&& profit <=5000)salary = salary + profit *0.15;if ( profit >5000&& profit <=10000)(salary = salary + profit *0.2;if ( profit >10000)(salary = salary + profit *0.25;printf(*salary=%.2fn*, salary);return 0;6.编写一程序P7-708. C实现以下功能输入一个三位正整数,然后逆序输出。如输入123,则输出321。程序的运行效果应类似地如图1所示,图1中的752是从键盘输入的内容。lid#include<stdio. h>#include<stdlib. h>/int main(void)int num, i;char str4;printf("Input an integer:*);scanf("%d”,&num);itoa(num, str,10);printf(*The result is *);for(i =2; i >=0; i)(printfstri);)printf(*n*);return 0;*/int main(void)(int num;printf(*Input an integer:*);scanf&num);printf(*The result is ");do(printfnum%10);num = num/10: while (num);printf('n");return 0;)7.编写一程序P7-713.C实现以下功能用scanf输入某年某月某日,判断这一天是这一年的第几天?以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。注:判断年份是否为闰年的方法一一为400的倍数为闰年,如2000年;若非100的倍数,而是4的倍数,为闰年,如1996年。程序的运行效果应类似地如图1所示,图1中的2000-3-1是从键盘输入的内客。立命令提示符回Please input : yeai*-nonth-day 2000-3-1It is the 61th day.#include<stdio. h>int main(void)(int ye, mo, da, sum =0, i;int mday13=0,31,28,31,30,31,30,31,31,30,31,30,31);printf("Please input: year-month-dayn");scanf(*%d-%d-%d*,&ye,&mo,&da);for (i =1; i < mo; i+)(sum = sum + mdayi;if (ye %400=0| ye %100!=0&& ye %4=0)&& mo >2)(sum+;)sum = sum + da;printf(*It is the %dth day.n*, sum);return 0;8 . P7-723.C输入三角形的三边长a、b、c (边长可以是小数),求三角形面积area,并输出。如果输入的三边构不成三角形,应给出"data error"的信息提示。注:根据"海伦-秦九韶”公式,area =a/p(P-a)(p-b)(p-c),其中 p =(a+b+c)/2O程序的运行效果应类似地如图1和图2所示,图1中的3,4,5和图2中的3,4,8是从键盘输入的内容。include < stdio. h >#include < math, h >int main( void )double aa, bb, cc, pp, ss, tt;printf(*nplease input triange sides:*);scanf (*%lf,%lf,%lf*,&aa,&bb,&cc);if ( aa + bb > cc )&&( aa + cc > bb )&&( bb + cc > aa )(pp =( aa + bb + cc )/2;tt = pp *( pp - aa )*( pp - bb )*( pp - cc );ss = sqrt( tt ):printf(*narea=%.21fn*, ss);else(printf("ndata errorn*);)return 0;9 .7-731输出n行星号,每行5个*星号。程序的运行效果应类似地如图1所示,图1中的4是从键盘输入的内容。ttinclude < stdio. h >int main( void )(int nn, i;printf(*nplease input n:");scanf&nn);for ( i =1; i <= nn; i+)(printf C*n*);)return 0;)10 .编写一程序P7-736. C实现以下功能从键盘上输入一个四位整数,计算各个位上的数字之和。程序的运行效果应类似地如图1所示,图1中的1234是从键盘输入的内容。#include<stdio. h> int main(void)int num, sum =0;printf("Input a number with 4-digit:"); scanf&num);do(sum = sum + num %10;num = num /10; while (num);printf(*sum=%dn*, sum);return 0;)11 .从键盘输入3个整数,输出绝对值最大的数。程序的运行效果应类似地如图1所示,图1中的1,2,3是从键盘输入的内容。#include<stdio. h>int ab(int x);int main(void)(int num3, i, j;printf(*Input 3 numbers:*);scanf (*%d,%d,%d*,&num0,&numl,&num2);j =0;for (i =1: i <3; i+)(if (ab(numj)< ab(numi)(j = i;)printf(*The number with maximum absolute value is %d.n", numj); return 0;)int ab(int x)(if (x >=0)return x;return12 .设某企业2006年的产值为5000万,计划以后每年的增长率为x (x从键盘输入,例如输入8.75表示8.75%),计算该企业的产值在哪年实现翻番以及翻番时的产值,然后输出(输出时以万为单位,应考虑有小数)。程序的运行效果应类似地如图1所示,图1中的50是从键盘输入的内容。#include < stdio. h > int main(void)(float chanzhi =5000, xx;int year =2006;printf(*nPlease input x:*);scanf(*%f*,&xx);while ( chanzhi <10000)chanzhi = chanzhi *(1+ xx /100);year+;printf(*nyear =%d nian, chanzhi =%.2fn”, year, chanzhi);return 0;13 .编写一程序P2-221. C实现以下功能从键盘读入一个字符串(最多127个字符),检查该字符串是否是回文。所谓回文即正向与反向的拼写都一样,例如:adgdao程序的运行效果应类似地如图1和图2所示,图1中的asdfghjhgfdsa和图2中的asdfghjhgfdsaa 是从键盘输入的内容。-ln|xN命令提示符Please input string:asdfghjhgfdsaa asdfghjhgfdsaa bu shi hui wend和。#include < stdio. h >ttinclude < string, h >int main( void )(int i, j, len;char aa128;printf(*nPlease input string:*);gets(aa);len = strlen(aa);for ( i =0, j = len -1; i < j; i+, j-)if ( aai!= aaj)(break;)if ( i >= j )(printf("n%s shi hui wen.*, aa);else(printf (*n%s bu shi hui wen.”, aa);)return 0;14.用scanf输入10个整数(采用int数据类型),计算所有正数的和、负数的和以及10个数的程序的运行效果应类似地如图1所示,图1中的4620-453556-23-4970是从键盘输入的内容。司命令提示符Bl回Input 10 integers.4620-453556-23-4970zhengshu=200J.f ushu=-72,all=128#include < stdio. h >int main( void )(int aa10, i;float suml =0, sum2=0, sum3=0;printf(*nlnput 10 integers.n");for ( i=0; i<10; i+)(scanf(*%d*t &aai);for ( i=0; i<10; i+)if ( aai>0)(suml = suml + aai;else(sum2= sum2+ aai;sum3= suml + sum2;printf(*nzhengshu=%. Of, fushu=%. Of, all=%.0fn*, suml, sum2, sum3);return 0;)15. 7-732编写一程序P7-732.C实现以下功能,输入3行3列的矩阵,输出所有元素的累加和。程序的运行效果应类似地如图1所示,图1中的1 234 567 89是从键盘输入的内容。嬴命令提示符-ln|x369258147#include < stdio. h > int main( void )(0;int i, j, aa33, sumfor ( i =0; i <3; i+)(for ( j =0; j <3; j+)(scanf&aaij);)for ( i =0; i <3; i+)(for ( j =0; j <3; j+)(sum = sum + aaij;)printf(*sum=%d*, sum);return 0:)16 .编写一程序P7-743.C实现以下功能从键盘输入一串可带空格的字符串,按逆序输出该字符串。注意,程序中不能使用库函数strrev 或使用同名的变量、函数、单词。程序的运行效果应类似地如图1所示,图1中的abc xyz是从键盘输入的内容。ttinclude < stdio. h >include < string, h > int main( void )char aa100, bb100;int i, j, len;printf(*Input a string:*); gets(aa);len = strlen(aa);bblen=>0*;for ( i =0, j = len -1; i < len; i+, j)bbj= aai;)printf(*The result is:");puts(bb);return 0;17 .从键盘输入一个一百分制成绩,如果不在0100范围内,则要求重新输入数据,直到输入的数据在0100范围内。将输入的数据转换成等级组,c,qy,9。分以上为“,8。一89分为7079分为6069分为60分以下为“E,要求使用 switch case/default 语句,结果赋值给变量grade,并将变量grade的值输出到屏幕上。注意:变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。编程可用素材:printf Cplease input the score (0-100):>printf("score二,grade=.n”,°程序的运行效果应类似地如图1所示,图1中的103和55是从键盘输入的内容。Sinclude < stdio. h > int main( void )float score;char grade;printf(*please input the score(0-100):*); scanf("%f”,&score);while ( score >100| score <0)printfCXnplease input the score(0-100)/);scanf('%f”, ftscore);switch ( int )(score /10)case 10:case 9:grade =,A,;break;case 8:grade =,B,;break;case 7:grade =' C'break;case 6:grade =' D'break;default:grade =' E'printf(*score=%. If, grade=%cn*, score, grade);return 0;18 .编写一程序P7-750.C实现以下功能输入字符串s (不超过100个字符),将字符串s中所有字符'*,删除,并将修改后的字符串显示出来。程序的运行效果应类似地如图1所示,图1中的*dgjk*%&*df78dg 88*是从键盘输入的内容。ttinclude <stdio. h> int main( void )(int i:char ss101;printf("Please input a string:*);gets(ss);for (i =0; ssi; i+)(if ( ssi!='0'&& ssi!='*')printf ssi);printf(n );return 0;19 .键盘输入叫n (不超过1000的正整数),输出介于m和n (含m和n)中能被3整除且至少有位数字是5的所有整数。程序的运行效果应类似地如图1和图2所示,图1中的100,200和图2中的195,15是从键盘输入的内容。至命令提示符Input m. n:19515 45 51 54 57#include<stdio. h>int main(void)(int mm, nn, i, kk;printf(*Input m, n:*);scanf (*%d,%d”,&mm,&nn);if (mm > nn)(kk = mm;mm = nn;nn = kk;for (i = mm; i <= nn; i+)(if (i %3=0&&(i %10=5| i %100/10=511 i /100=5)(printf(*%d ", i);)return 0;20 .计算X的丫次方,其中丫为整数(可以是负整数或0), X为实型。注意,程序中不能使用库函数pow或使用同名的变量、函数、单词。程序的运行效果应类似地如图1和图2所示,图1中的3.7,5和图2中的4,-2是从键盘输入的内容。#include<stdio. h> int main(void)(int yy, i;double xx, result =1;printf(*Input x, y:*):scanf%d”,&xx,&yy);if (yy >0)(for (i =1; i <= yy; i+)(result = result * xx;)if (yy <0)(for (i =1; i <=- yy; i+)(result = result / xx;)printf("%.61f-%d=%.61fn*, xx, yy, result);return 0;分类二21 .求S=l/1!+1/2!+1/3!+1/N!并输出结果(显示时小数部分占16位,计算时要求从第1项开始往后累加)o N为任意自然数(只考虑int型),从键盘读入。程序的运行效果应类似地如图1所示,图1中的18是从键盘输入的内容。#include < stdio. h >int main( void )(int i, nn;double ss =0, tt =1;printf(*Please input n:*);scanf&nn);for (i =1; i <= nn; i+)(tt = tt * i;ss = ss +1/ tt;printf(*ns=l/l!+l/2!+.+l/%d!=%.16fn*, nn, ss);return 0;)22 .编写一程序P2-219.C实现以下功能从键盘读入一行字符(最多127个字符),将其中的数字字符以及这些数字字符的数量在屏幕上显示,注意:要求先显示这些数字字符的数量。程序的运行效果应类似地如图1所示,图1中的gfaskl45623cvsac,53dwafl faf32535as3bf0是从键盘输入的内容。ttinclude < stdio. h > ttinclude < string, h > int main( void )int i, j =0, num =0;char aa128, result128:printf(*nPlease input string:*);gets(aa);for ( i =0; aai!=,0*; i+)(if ( aai>=' O'&& aai<='9')(num+;resultj= aai;j+;)resultj='0'printf(*nshu zi ge shu wei:%dnshu zi wei:%sn*, num, result);return 0;)23 .编写一程序P2-220.C实现以下功能从键盘读入一行字符(最多127个字符),统计及输出其中的字母、数字、空格和其他符号的个数。程序的运行效果应类似地如图1所示,图1中的gfaskl45623cvsac,53dwafl faf32535是从键盘输入的内容。include < stdio. h >ttinclude < string, h >int main(void)(int i, zimu =0, shuzi =0, kongge =0, qita =0;char aa128;printf('nPlease input string:*);gets(aa);for ( i =0; aai; i+)(if ( aai>=' a'&& aai<=' z'| aai>='A'&& aai<=' Z')(zimu+;else if ( aai>=' O'&& aai<='9') shuzi+;else if ( aai='')(kongge+;)elseqita+;)printf(*zimu=%d, shuzi=%d, kongge=%d, qita=%d*, zimu, shuzi, kongge, qita); return 0;)24 .编写一程序P2-222.C实现以下功能从键盘上读入一行字符(最多127个字符),按以下方法将其加密变换:A->Z a->zB->Y b->yC->X c->xZ->A z_>a即字母A变成Z、字母B变成Y.,非字田字符不变。最后在屏幕上先显示这一行字符的长度,再显示生成的密文。程序的运行效果应类似地如图1所示,图1中的sfasfk, lmw4tywerysfcvasgewr xfasftg是从键盘输入的内容。include < stdio. h >#include < string.h > int main( void )(char aa128;int i, len;printf(*Please input string:*): gets(aa);for ( i =0; aai!=,0' i+)if ( aai>=' a'&& aai<='z')(aai='a +' z - aai;if ( aai>='A'&& aai<='Z')(aai='A'+'Z'- aai;) len = strlen(aa); printf(*nzi fu chuan chang du:%dnmi wen:*, len); puts(aa);return 0;)25 .编写一程序P2-223.C实现以下功能一个球从10000m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求它在第 n(n从键盘输入)次落地时,共经过多少米?第n次反弹多高?注意,计算精度为小数点后6位,变量数据类型的选择应适当,在保证满足设计要求精度的情况下,养成不浪费内存空间和计算时间的好习惯。编程可用素材:printf ("Please input n、printf (*sn=., hn=.o程序的运行效果应类似地如图1所示,图1中的10是从键盘输入的内容。#include<stdio. h> int main(void)int i, nn;float sn =10000, hn =5000;printf(*Please input n:*); scanf&nn);for (i =2; i <= nn; i+)(sn = sn +2* hn;hn = hn /2;printf (*sn=%.6f, hn=%.6fn*, sn, hn);return 0;26 .编写一程序P2-224.C实现以下功能猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第 n(n从键盘输入)天早上想再吃时,就只剩下一个桃子了。求第一天共摘了多少个桃子(不考虑猴子是否真的能吃多少桃子)。程序的运行效果应类似地如图1所示,图1中的13是从键盘输入的内容。#include < stdio. h >int main( void )(int sum =1, nn, i;printf("Please input n:");scanf&nn);for ( i =1; i < nn; i+)(sum =2*( sum +1);printf(*total=%d*, sum);return 0;27 .编写一程序P7-716.C实现以下功能求s=a+aa+aaa+aaaa+aa. a的值,其中a是一个数字(可取1一9之间的一1K值)。例如2+22+222+2222+22222(此时共有5个数相加),其中a值和有几个数相加由键盘输入控制。(注意s 的值有可能超出int的范围。)程序的运行效果应类似地如图1所示,图1中的2,3是从键盘输入的内容。#include<stdio. h> int main(void)int aa, nn, i;double sum =0, suml =0;printf(*Please input a, n:"); scanf ("%d,%d”,&aa,&nn);for (i =1; i <= nn; i+)suml = suml *10+ aa;sum = sum + suml;)printf ('a+aa+,=%.01fn*, sum);return 0;28 .编写一程序P7-717. C实现以下功能输入10个整型数存入一维数组,输出值和下标都为奇数(数组第1个元素的下标为0)的元素及其个数。辿序的运行效果应类似地如图1所示,图1中的2453456781241558637是从键盘输入的内容。#include <stdio. h> int main( void )(int i, count =0, aa10;printf(*Input 10 intergers:n*); for ( i =0; i <10; i+)(scanf&aai);if ( i %2=1)if ( aai%2=1)(