版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言参考答案第四章顺序结构程序设计1.单项选择题(1)【答】D(2)【答】B(3)【答】scanf()函数中没有精度控制。本题答案为D。(4)【答】D(5)【答】D(6)【答】C(7)【答】C(8)【答】D(9)【答】①B②A(10)【答】输入的数据与scanf()函数的格式不匹配。本题答案为D。(11)【答】①A②B(12)【答】C(13)【答】C(14)【答】A(15)【答】A(16)【答】B(17)【答】D2.填空题(1)【答】3.141593,3.1416,3.142(2)【答】3.500000,3.5(3)【答】31.415920,3.141592e+001(4)【答】127,127,177,7f,127(5)【答】127,127,177,7f,127(6)【答】c=K(7)【答】a=12,b=345(8)【答】c=A(9)【答】n=64(10)【答】x=1.23,y=50.00(11)【答】a=3b=7x=8.5y=71.82c1=Ac2=a↙3.编程题(1)编写一个程序,求出任一输入字符的ASCII码。【解】程序如下:#include<stdio.h>main(){charc;printf("输入字符:");scanf("%c",&c);printf("字符%c的ASCII码为%d\n",c,c);}2.填空题(1)【答】x%2==0(2)【答】a%b==0(3)【答】a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a(4)【答】(a+b<c&&a+c<b&&b+c<a)(5)【答】k=2,执行case2分支,k++返回2,此时k=3,输出2,后跟一空格。由于没有break语句,继续执行case3分支,k++返回3,此时k=4,输出3,由于有break语句,退出switch语句。所以输出为:23。(6)【答】a>0,s变为2。a>b为真,t=t+s=3。所以输出为:s=2,t=3。(7)【答】k=2,执行case2分支,k++返回2,此时k=3,屏幕输出2,后跟一空格。由于没有break语句,继续执行case3分支,k++返回3,此时k=4,屏幕输出3,由于没有break语句,继续执行case4分支,k++返回4,此时k=5,屏幕输出4,由于有break语句,退出switch语句。所以输出为:234。(8)【答】x=0,执行外层switch语句的case0部分,y==2为真,则执行里层switch语句的case1部分,输出“*”,遇到break语句,退出里层的switch语句,由于里层的switch语句之后没有break语句,所以转而执行外层switch语句的case1部分,这时z=3,故执行里层switch语句的default部分,输出“#”,整个程序执行完毕。所以输出为:*#。3.编程题(1)编写一个程序判断用户输入的字符是数字字符、字母字符还是其他字符。【解】在'0'到'9'之间的为数字字符,在'a'到'z'或'A'到'Z'之间的为字母字符;否则为其他字符。程序如下:#include<stdio.h>main(){charc;printf("输入一个字符:");scanf("%c",&c);if(c>='0'&&c<='9')printf("\n%c是数字字符\n\n",c);elseif((c>='a'&&c<='z')||(c>='A'&&c<='Z'))printf("\n%c是字母字符\n\n",c);elseprintf("\n%c是其他字符\n\n",c);}(2)假设今天是星期日,编写一个程序,求123456天后是星期几。【解】星期是7天一个轮回,由于今天是星期日,所以123456除以7的余数即为星期几。程序如下:#include<stdio.h>main(){intn=123456;n=n%7;printf("\n星期");switch(n){case0:printf("天");break;case1:printf("一");break;case2:printf("二");break;case3:printf("三");break;case4:printf("四");break;case5:printf("五");break;case6:printf("六");break;}printf("\n\n");}(3)编写一个程序,输入年号和月份,判断该年是否为闰年,并根据给出的月份判断是什么季节和该月有多少天?闰年的条件是年号能被4整除但不能被100整除,或者能被400整除。【解】直接根据闰年的定义求解,如果是闰年,2月份为29天;否则为28天,其他月份相同。规定3~5月为春季,6~8月为夏季,9~11月为秋季,1、2和12月为冬季。本题程序如下:#include<stdio.h>main(){inty,m,leap,season,days;printf("年份,月份:");scanf("%d,%d",&y,&m);if((y%4==0&&y0!=0)||(y@0==0))leap=1;elseleap=0;if(m>=3&&m<=5)season=1;elseif(m>=6&&m<=8)season=2;elseif(m>=9&&m<=11)season=3;elseseason=4;switch(m){case1:case3:case5:case7:case8:case10:case12:days=31;break;case4:case6:case9:case11:days=30;break;case2:if(leap==1)days=29;elsedays=28;}printf("%d年%s闰年\n",y,(leap==1?"是":"不是"));printf("该季度是");switch(season){case1:printf("春季\n");break;case2:printf("夏季\n");break;case3:printf("秋季\n");break;case4:printf("冬季\n");break;}printf("当月天数:%d\n",days);}(4)报数游戏。A、B、C、D、E、F、G、H共8人站成一排,按图4.1所示的方法从1开始报数。问谁先报到123456?ABCDEFGH1→2→3→4→5→6→7→814←13←12←11←10←915→16→17→18→19→20→21→2228←27←26←25←24←2329→30→…图4.1游戏报数过程【解】从图4.1中看到1到14是一个来回,再重复这一过程,所以只需对123456除以14的余数加以判断即可。程序如下:#include<stdio.h>main(){intn=123456,i;i=n;printf("\n报数到%d的人是",n);switch(i){case1:printf("A");break;case2:case14:printf("B");break;case3:case13:printf("C");break;case4:case12:printf("D");break;case5:case11:printf("E");break;case6:case10:printf("F");break;case7:case9:printf("G");break;case8:printf("H");break;}printf("\n");}程序的运行结果:报数到123456的人是D(5)编写一个程序,求ax2+bx+c=0方程的根。【解】先计算d=b2-4ac,再根据d是大于0、等于0还是小于0分别求根。程序如下:#include<stdio.h>#include<math.h>intfunc(floata,floatb,floatc,float*x1,float*x2){floatd;d=b*b-4*a*c;if(d>0){*x1=(-b+sqrt(d))/(2*a);*x2=(-b-sqrt(d))/(2*a);return2;}elseif(d==0){*x1=(-b)/(2*a);return1;}elsereturn0;}main(){floata,b,c,x1,x2,n;printf("输入a,b,c:");scanf("%f,%f,%f",&a,&b,&c);n=func(a,b,c,&x1,&x2);if(n==2){printf("两个根:\n");printf("\tx1=%f\n",x1);printf("\tx2=%f\n",x2);}elseif(n==1){printf("一个根:\n");printf("\tx=%f\n",x1);}elseprintf("没有根\n");}【第六章循环】练习题答案(2011-05-0709:25:23)转载▼标签:杂谈分类:C语言教学1.单项选择题(1)【答】!e等价于!(e!=0),即e==0。本题答案为A。(2)【答】D(3)【答】D(4)【答】A(5)【答】C(6)【答】A(7)【答】A(8)【答】B(9)【答】C2.填空题(1)【答】s=7(2)【答】执行第1次循环时,i++返回1,i=2,s=3+1=4,执行else部分,i=3;执行第2次循环时,i++返回3,i=4,s=4+3=7,执行if部分;执行第3次循环时,i++返回4,i=5,s=7+4=11,执行else部分,i=6;执行第4次循环时,i++返回6,i=7,s=11+6=17,执行else部分,i=8,此时while条件不满足,退出循环。所以输出结果为:8。(3)【答】使用两重循环。本题答案为:**********(4)【答】使用两重循环。本题答案为:122333444455555666666(5)【答】使用两重循环。本题答案为:112112321123432112345432112345654321(6)【答】使用两重循环。本题答案为:*************************3.编程题(1)编写一个程序,求s=1-1/2+1/3-1/4…+1/99+1/100之值。【解】使用一个for循环即可。程序如下:#include<stdio.h>main(){inti;floats;s=0;for(i=1;i<=100;i++){if(i%2==0)s=s-1.0/i;elses=s+1.0/i;}printf("s=%f",s);}程序运行结果:s=0.688172(2)编写一个程序,求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。【解】采用两层循环求解,外层i从1到n,里层从1到i。程序如下:#include<stdio.h>main(){inti,j,s1,s=0,n;printf("输入n:");scanf("%d",&n);for(i=1;i<=n;i++){s1=0;for(j=1;j<=i;j++)s1=s1+j;s=s+s1;}printf("s=%d\n",s);}(3)编写一个程序,用户输入一个正整数,把它的各位数字前后颠倒一下,并输出颠倒后的结果。【解】对于正整数n,从高位到低位依次计算出它的各位上的数字d,在计算出d后立即输出该数字,输出序列构成的数正好是n的各位数字前后颠倒的结果。程序如下:#include<stdio.h>main(){intn,d;printf("输入一个正整数:");scanf("%d",&n);printf("颠倒结果:");do{d=n;printf("%d",d);n=n/10;}while(n!=0);printf("\n\n");}(4)编写一个程序,求输入的三个正整数的最小公倍数。【解】采用穷举法求解。输入三个整数分别为x,y和z,该最小公倍数一定是x的倍数。程序使用while循环,倍增x查找满足s%y==0&&s%z==0条件的s。程序如下:#include<stdio.h>main(){intx,y,z,s;printf("输入三个整数=>x,y,z:");scanf("%d,%d,%d",&x,&y,&z);s=x;while(1){if(s%y==0&&s%z==0)break;s+=x;}printf("最小公倍数:%d\n",s);}(5)编写一个程序,求出200到300之间的数,且满足条件:它们三个数字之积为42,三个数字之和为12。【解】采用穷举法求解。使用两重for循环嵌套语句,i、j、k分别表示该数的百位数、十位数、个位数,i只能是2,j和k进行循环。程序如下:#include<stdio.h>main(){inti,j,k;i=2;for(j=0;j<=9;j++)for(k=0;k<=9;k++)if(i*j*k==42&&i+j+k==12)printf("i=%d,j=%d,k=%d\n",i,j,k);}(6)编写一个程序,求出满足下列条件的四位数:该数是个完全平方数,且第一、三位数字之和为10,第二、四位数字之积为12。【解】采用穷举法求解。该数是一个四位数,其平方数只能在32到99之间,使用一个for循环即可。程序如下:#include<stdio.h>main(){inti,j,a,b,c,d;for(i=32;i<=99;i++){j=i*i;a=j/1000;b=j/100-a*10;c=j/10-a*100-b*10;d=j-a*1000-b*100-c*10;if(a+c==10&&b*d==12)printf("%d",j);}}(7)编写一个程序,求e的值。【解】采用do-while循环语句,程序如下:#include<stdio.h>main(){floatt,e=0;intn=2;t=1;do{e+=t;t=t/n++;}while(t>1.0e-6);printf("e=%f\n",e);}(8)编写一个程序,从键盘输入一个整数,将每位数字转变为英文,如输入9124,则输出:nine,one,two,four。【解】使用一个for循环获取输入的每个数字,然后使用switch语句进行转变。程序如下:#include<stdio.h>main(){charc;inti;printf("输入一个数:");for(i=0;(c=getchar())!='\n';i++){if(i>0)printf(",");switch(c){case'0':printf("zero");break;case'1':printf("one");break;case'2':printf("two");break;case'3':printf("three");break;case'4':printf("four");break;case'5':printf("five");break;case'6':printf("six");break;case'7':printf("serven");break;case'8':printf("eight");break;case'9':printf("nine");break;}}printf("\n");}(9)某人摘下一些桃子,卖掉一半,又吃了一只;第二天卖掉剩下的一半,又吃了一只;第三天、第四天、第五天都如此办理,第六天一看,发现就剩下一只桃子了。编写一个程序,采用迭代法问某人共摘了多少只桃子。【解】经分析有:第6天的桃子数:1第5天的桃子数:(1+1)*2=4第4天的桃子数:(4+1)*2=10第3天的桃子数:(10+1)*2=22第2天的桃子数:(22+1)*2=46第1天的桃子数:(46+1)*2=94迭代变量为n,迭代初值为1,迭代表达式为(n+1)*2,迭代条件为5≥i≥1。程序如下:#include<stdio.h>main(){inti,n=1;for(i=5;i>=1;i--)n=(n+1)*2;printf("n=%d\n",n);}【第七章数组】C语言练习题答案(2011-05-1407:57:18)转载▼标签:杂谈分类:C语言教学1.单项选择题(1)【答】C(2)【答】B(3)【答】B(4)【答】D(5)【答】D(6)【答】C(7)【答】C(8)【答】C(9)【答】D(10)【答】D(11)【答】C(12)【答】B(13)【答】B(14)【答】C(15)【答】B(16)【答】B(17)【答】D(18)【答】B(19)【答】B2.填空题(1)【答】Language(2)【答】123(3)【答】s=15(4)【答】s=45(5)【答】place=6(6)【答】a(1,1)=-5(7)【答】第9个元素(1,3)值是-3(8)【答】-9是第6个元素(9)【答】12(10)【答】①s[j++]=s[i]②s[j]='\0'3.编程题(1)编写一个程序,将两个字符串合并成一个字符串。【解】程序如下:#include<stdio.h>main(){chars1[20],s2[20],s3[40];inti,j;printf("字符串1:");gets(s1);printf("字符串2:");gets(s2);for(i=0;s1[i]!='\0';i++)s3[i]=s1[i];for(j=0;s2[j]!='\0';j++)s3[i+j]=s2[j];s3[i+j]='\0';printf("合并字符串:%s\n",s3);}(2)编写一个程序,将一个子字符串插入到主字符串中指定位置。【解】程序如下:#include<stdio.h>main(){intn,i,j,k;chars1[20],s2[20],s3[40];printf("主字符串:");gets(s1);printf("子字符串:");gets(s2);printf("起始位置:");scanf("%d",&n);for(i=0;i<n;i++)s3[i]=s1[i];for(j=0;s2[j]!='\0';j++)s3[i+j]=s2[j];printf("i=%d,j=%d\n",i,j);for(k=n;s1[k]!='\0';k++)s3[j+k]=s1[k];s3[j+k]='\0';printf("结果字符串:%s\n",s3);}(3)编写一个程序,输出一个字符串的逆转串。【解】程序如下:#include<stdio.h>main(){chars1[20],s2[20];inti,j;printf("字符串:");scanf("%s",s1);for(i=0;s1[i]!='\0';i++);for(j=0;s1[j]!='\0';j++)s2[i-j-1]=s1[j];s2[i]='\0';printf("逆转串:%s\n",s2);}(4)编写一个程序,判定一个字符串是否是另一个字符串的子串。【解】程序如下:#include<stdio.h>main(){inti,j,k,index;chars1[20],s2[20];printf("主字符串:");gets(s1);printf("子字符串:");gets(s2);index=0;for(i=0;s1[i];i++){for(j=i,k=0;s1[j]==s2[k];j++,k++)if(!s2[k+1]){index=i;break;}if(index!=0)break;}printf("位置=%d\n",index);}(5)编写一个程序,计算一个字符串中子串出现的次数。【解】程序如下:#include<stdio.h>main(){inti,j,k,count=0;chars1[20],s2[20];printf("主字符串:");gets(s1);printf("子字符串:");gets(s2);for(i=0;s1[i];i++)for(j=i,k=0;s1[j]==s2[k];j++,k++)if(!s2[k+1])count++;printf("出现次数=%d\n",count);}(6)编写一个程序,计算一个3×4阶矩阵和一个4×3阶矩阵相乘,并打印出结果。【解】使用两个二维数组a和b存储两个3×4阶矩阵的元素值,然后用三重for循环进行相乘求值产生二维数组c,最后输出c的各元素值。程序如下:#include<stdio.h>main(){inta[3][4]={{2,3},{4,2},{1,2,3}};intb[4][3]={{1,2,3},{2,3,4},{3,4,5}};intc[3][3],i,j,k,s;for(i=0;i<3;i++)for(j=0;j<3;j++){s=0;for(k=s=0;k<4;k++)s+=a[i][k]*b[k][j];c[i][j]=s;}for(i=0;i<3;i++){for(j=0;j<3;j++)printf("M",c[i][j]);printf("\n");}}(7)已知某班30个学生的姓名、学号,以及英语、程序设计、数学三门课的成绩,编写一个程序,完成下列工作:·全班每个学生姓名、学号和三门课成绩的输入及总分计算。·统计各科的总成绩。·当给出学生姓名或学号时,检索出该生每门功课的成绩及总成绩。【解】定义一维数组no存储学生学号,二维数组name存储学生姓名,二维数组degree存储学生三门课成绩及总分。程序如下:#include<stdio.h>#include<string.h>#defineRS3charname[RS][10];intno[RS];floatdegree[RS][4];voidinput(){inti;printf("输入数据:\n");for(i=1;i<=RS;i++){printf("第%d个学生\n",i);printf("姓名:");scanf("%s",&name[i-1]);printf("学号:");scanf("%d",&no[i-1]);printf("英语成绩:");scanf("%f",°ree[i-1][0]);printf("程序设计成绩:");scanf("%f",°ree[i-1][1]);printf("数学成绩:");scanf("%f",°ree[i-1][2]);degree[i-1][3]=degree[i-1][0]+degree[i-1][1]+degree[i-1][2];}}voidsum(){inti;floats1=0,s2=0,s3=0;printf("\n统计各科总成绩\n");printf("-------------------------\n");for(i=0;i<RS;i++){s1+=degree[i][0];s2+=degree[i][1];s3+=degree[i][2];}printf("英语总成绩:%g\n",s1);printf("程序设计总成绩:%g\n",s2);printf("数学总成绩:%g\n",s3);printf("--------------------------\n\n");}voidquery(){intsel,bh,i;charxm[8];printf("数据查询\n");printf("1.姓名2.学号请选择:");scanf("%d",&sel);switch(sel){case1:printf("输入姓名:");scanf("%s",&xm);for(i=0;i<RS;i++)if(strcmp(xm,name[i])==0){printf("姓名:%s\n",name[i]);printf("学号:%d\n",no[i]);printf("英语成绩:%g\n",degree[i][0]);printf("程序设计成绩:%g\n",degree[i][1]);printf("数学成绩:%g\n",degree[i][2]);printf("总成绩:%g\n",degree[i][3]);}break;case2:printf("输入学号:");scanf("%d",&bh);for(i=0;i<RS;i++)if(bh==no[i]){printf("姓名:%s\n",name[i]);printf("学号:%d\n",no[i]);printf("英语成绩:%g\n",degree[i][0]);printf("程序设计成绩:%g\n",degree[i][1]);printf("数学成绩:%g\n",degree[i][2]);printf("总成绩:%g\n",degree[i][3]);}break;}}main(){input();sum();query();}第八章函数1.单项选择题(1)【答】B(2)【答】D(3)【答】A(4)【答】A(5)【答】C语言函数调用时,只有单向的值传递,即实参将值传递给形参,传址调用也是一种单向的值传递,它是通过间接方式达到将形参回传给实参的。本题答案为B。(6)【答】C(7)【答】D(8)【答】C(9)【答】B(10)【答】D(11)【答】A(12)【答】函数fun()中的变量t是静态变量,第一次调用该函数时执行staticintt=3,以后调用时忽略该初始化语句,但保留上次t的值。另外,函数fun()是传值调用。本题答案为D。(13)【答】B(14)【答】A(15)【答】D(16)【答】C(17)【答】B2.填空题(1)【答】main()中的n与func函数中的n都是局部变量,前者作为实参,后者作为形参,两者之间是传值调用。程序输出为:5050100(2)【答】a=10,b=3(3)【答】8(4)【答】120(5)【答】0246(6)【答】执行func((x--,y++,x+y),z--)语句时,函数中的实参从右向左求值,先计算z--返回8,此时z=7,再计算(x--,y++,x+y),该逗号表达式从左向右执行,先计算x--,x=6,再求y++,y=8,最后计算并返回x+y=13。这个调用函数语句变为r=func(13,8)。程序输出为:21。(7)【答】函数fact()中的i是一个静态变量,fact又是一个递归函数。程序输出为:fact=120。(8)【答】在main()函数中调用fun(a)二次。第1次调用fun(a)时,j=0,执行一次do-while循环:s[0]=s[0]+s[1]=3,++j返回1(j=1);再执行一次do-while循环:s[1]=s[1]+s[2]=5,++j返回2(j=2),do-while循环终止,fun(a)执行完毕。第2次调用fun(a)时,j=2,执行一次do-while循环:s[2]=s[2]+s[3]=7,++j返回3(j=3),do-while循环终止,fun(a)执行完毕。所以输出为:35745。3.编程题(1)编写一个程序,逆序放置a数组中的元素。【解】调用一个invert()函数进行数组逆置。该函数将数组a的前一半元素与对应的后一半元素交换即可。程序如下:#include<stdio.h>voidinvert(inta[],intn);main(){inta[10]={0,1,2,3,4,5,6,7,8,9},i;invert(a,10);for(i=0;i<=9;i++)printf("%d",a[i]);printf("\n");}voidinvert(inta[],intn){inti,tmp;for(i=0;i<n/2;i++){tmp=a[i];a[i]=a[n-i-1];a[n-i-1]=tmp;}}也可以采用递归方法编写invert()函数,invert(s,i,j)每次将s的第i个元素与第j个元素进行交换,直到i大于或等于j为止。程序如下:#include<stdio.h>voidinvert(int*s,inti,intj);main(){inta[10]={0,1,2,3,4,5,6,7,8,9},i;invert(a,0,9);for(i=0;i<=9;i++)printf("%d",a[i]);printf("\n");}voidinvert(int*s,inti,intj){intt;if(i<j){t=*(s+i);*(s+i)=*(s+j);*(s+j)=t;invert(s,i+1,j-1);}}(2)编写一个程序,计算任一输入的整数的各位数字之和。【解】对任一输入的整数,先求其绝对值,然后分解各位上的数字,边分解边进行累加,直到分解完毕。程序如下:#include<stdio.h>#include<stdlib.h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年岳麓版选修6历史下册阶段测试试卷含答案
- 2025年华师大版选修2地理下册阶段测试试卷
- 2025年北师大新版选修5历史上册阶段测试试卷含答案
- 2025年外研版三年级起点选择性必修3历史上册月考试卷含答案
- 2025年浙教版选修6历史下册月考试卷
- 二零二五版面料行业标准制定与采购合同范本3篇
- 二零二五年度生物制药项目与派遣公司研发人员派遣合同4篇
- 二零二五版派遣人力资源管理顾问人才派遣与咨询合同4篇
- 二零二五版商业综合体租赁合同范本4篇
- 二零二五年度个人汽车租赁贷款合同范本3篇
- 选煤厂安全知识培训课件
- 项目前期选址分析报告
- 急性肺栓塞抢救流程
- 《统计学-基于Python》 课件全套 第1-11章 数据与Python语言-时间序列分析和预测
- 《形象价值百万》课件
- 红色文化教育国内外研究现状范文十
- 中医基础理论-肝
- 小学外来人员出入校门登记表
- 《土地利用规划学》完整课件
- GB/T 25283-2023矿产资源综合勘查评价规范
- 《汽车衡全自动智能称重系统》设计方案
评论
0/150
提交评论