C语言程序设计-习题及参考答案_第1页
C语言程序设计-习题及参考答案_第2页
C语言程序设计-习题及参考答案_第3页
C语言程序设计-习题及参考答案_第4页
C语言程序设计-习题及参考答案_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

11 《C习题答案目 录第一章习题参考答案1第二章习题参考答案4第三章习题参考答案8第四章习题参考答案15第五章习题参考答案21第六章习题参考答案38第七章习题参考答案42第八章习题参考答案46第九章习题参考答案52第十章习题参考答案60第一章习题参考答案基础题1.简述C语言的特点。(1)C语言是一种结构化程序设计语言(2)C语言语句简洁紧凑(3)C语言程序易于移植(4)C语言有强大的处理能力(5)生成的目标代码质量高,运行效率高C(1)必须有且只能有一个主函数main();主函数可以放在程序中任一位置,程序执行从main函数开始,在main函数中结束,其它函数通过函数调用得以执行。(2)C语言程序由一个或多个函数组成,函数是C程序的基本单位,每一个函数用来实现一个或者多个功能。(3)计算机所做的操作都是由C语言程序语句完成,用“;”作为语句终止符。scanfprintf完成。(5)为了增加程序的可读性,一个好的C语言程序应当包含注释性信息。CC(1)(2)编写源程序:根据算法中每一步操作的实际需求,确定数据结构的定义、程序模块的设计,在此基础上写出实现算法中每一步的源程序;(3)1.1-1CPAGE4PAGE4程序如下:#include intmain(){printf("\n\nreturn0;}1-2C答:程序如下:#include<stdio.h>floatmultiply(intm,intn,floatd);intmain(){intunitPrice,count;floatdiscount,totalPrice;printf("请输入牛奶单价:");scanf("%d",&unitPrice);printf("请输入牛奶数量:");scanf("%d",&count);printf("请输入折扣:");scanf("%f",&discount);totalPrice=multiply(unitPrice,count,discount);printf("牛奶总价为:%f",totalPrice);return0;}floatmultiply(intm,intn,floatd){floattotal;total=m*n*d;returntotal;}1-3C位人数和不能获得学位人数。答:程序如下:#include<stdio.h>intmain(){inti,sum1=0,sum2=0;intscore[5]={75,85,69,92,68};for(i=0;i<5;i++){if(score[i]>70)sum1++;elsesum2++;}printf("可获得学位人数:%d\n不能获得学位人数:%d",sum1,sum2);return0;}1C略第二章习题参考答案基础题下列哪些不是合法的标识符?为什么?(1)mohd (2)zara (3)4*abc(4)move_name (5)a_123 (6)my-name50(7)_temp (8)j (9)23b9(11)Sizeof答:则4*abc、my-name50、23b9不是合法的标识符,其中4*abc中出现非法字符’*’,my-name50中出现非法字符’-’,23b9首位出现数字。提高题1.编写程序一个程序、在屏幕上输出下列信息。Goodmorning,everybody!Thisisjustatest!IloveprogramminginC.答:程序如下:#include<stdio.h>intmain(void){printf("Goodmorning,everybody!\n");printf("Thisisjusttest!\n");printf("Iloveprogarmminginc.\n");}输出结果:Goodmorning,everybody!Thisisjusttest!IloveprogarmminginC.Processexitedafter0.05085secondswithreturnvalue0请按任意键继续...2.编写一个程序,随机生成一道小学生2位数加法运算练习题,加数和被加数都是随100(78+56=不需要给出计算结果。答:程序如下:#include<stdio.h>#include<stdlib.h>voidRandom(){inta,b,sum,choose;a=rand()%100;b=rand()%100;for(intx=1;x==1;){printf("\n请计算:\n%d+%d=",a,b);scanf("%d",&sum);if(sum==a+b){printf("回答正确\n");printf("输入1继续作答,或其他任意(数字)键退出程序\n");printf("请输入您的选择:");scanf("%d",&choose);if(choose==1){printf("您的选择是继续作答\n");printf("\n");a=rand()%100;b=rand()%100;x=1;}else{printf("您的选择是退出程序,程序结束");x=0;}}else{printf("回答错误,请重新计算\n");x=1;}}}intmain(void){Random();}输出结果:请计算:41+67=108回答正确1:1您的选择是继续作答请计算:34+0=3回答错误,请重新计算请计算:34+0=34回答正确1:2您的选择是退出程序,程序结束3.nab(浮点x(1+)=(1+) 1an答:程序如下:#include<stdio.h>#include<stdlib.h>//#include<math.h>floatmi(floatx,intn){floatresult=1;for(inti=0;i<n;i++){result=result*x;}returnresult;}//求解指数幂floatLoan(){intmoney,days;floatb,month_m//moneydaysmonth_mprintf("请输入贷款总额:\n);scanf("%d",&money);printf("请输入贷款期数:\n");scanf("%d",&days);printf("请输入贷款利率:\n");scanf("%f",&b);floatresult=mi(1+b,days);//floatresult=pow(1+b,days);floatx=money*b*result;floaty=result-1;month_m=x/y;//依指公式求解returnmonth_m;}//计算月还款额intmain(void){floatmonth_m;month_m=Loan();printf("月还款额为:%f",month_m);}输出结果:请输入贷款总额:10000请输入贷款期数:2请输入贷款利率:0.1月还款额为:5761.903809第三章习题参考答案基础题程序如下:#include"stdio.h"voidmain(){ floata,b;if(a==b)printf("a=b");elseif(a>b)printf("a>b");elseprintf("a<b");}aa+ba+ba2+b2答:程序如下:#include"stdio.h"voidmain(){ inta,b;printf("Inputa&b:");scanf("%d%d",&a,&b);if(a*a+b*b>200)printf("%d\n",(a*a+b*b)/100);elseprintf("%d\n",a*a+b*b);}a,b,c程序如下:#include"stdio.h"voidmain(){intx,y,z,c;scanf("%d%d%d",&x,&y,&z);if(y>z){c=y;y=z;z=c;}if(x>z){c=x;x=z;z=c;}if(x>y){c=x;x=y;y=c;}printf("%d,%d,%d",x,y,z);}y数+2≤ 5 8 5≤ ≤6= | 3|6≤ 10。10<答:程序如下:#include<stdio.h>#include"math.h"voidmain(){ intx;floaty;scanf("%d",&x);if(x<=-5)y=x+2;elseif(x<=6)y=x*x*x-8;elseif(x<=10)y=abs(x-3);elsey=1/(x+1);printf("%.2f",y);}3(“。答:程序如下:#include"stdio.h"#include"math.h"voidmain(){ floata,b,c,s,per;doublearea;scanf("%f%f%f",&a,&b,&c);if(a+b>c&&b+c>a&&c+a>b){ per=a+b+c;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("%f%f",per,area);if(a==b&&b==c)printf("等边三角形");elseif(a==b||b==c||a==c)printf("等腰三角形");PAGE17PAGE17elseif((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))printf("直角三角形");elseprintf("一般三角形");}elseprintf("不能组成三角形");}'A'或'a'A’B’或’b’Bswitch程序如下:#include<stdio.h>voidmain(){ charmenu;switch(menu){ case'a':case'A':printf("执行A操作");break;case'b':case'B':printf("执行B操作");break;default:printf("error!\n");}}500300200元答:程序如下:#include<stdio.h>voidmain(){ intgrade;switch(grade){}提高题

case1:printf("500");break;case2:printf("300");break;case3:printf("200");break;default:printf("未获得奖励!\n");}3,5,7(1)能同时被3,5,7整除(2)。(3)(。(4)不能被任何一个整除。答:程序如下:#include"stdio.h"voidmain(){ intm;printf("Inputanumber:");scanf("%d",&m);if(m%3==0&&m%5==0&&m%7==0)printf("能同时被3,5,7整除");elseif((m%3==0&&m%5==0)||(m%3==0&&m%7==0)||(m%5==0&&m%7==0)){ printf("");if(m%3==0&&m%5==0printf("(3,5)");elseif(m%3==0&&m%7==0)printf("(3,7)");elseprintf("(5,7)");}elseif(m%3==0||m%5==0||m%7==0){ printf("");if(m%3==0)printf("(3)");elseif(m%5==0)printf("(5)");elseprintf("(7)");}elseprintf("不能被任何一个整除");}设金率下(a表奖,r表率)a<500 r=0%500≤a<1000 r=5%1000≤a<2000 r=8%2000≤a<3000 r=10%3000≤a r=15%编写程序实现输入一个奖金数,求税率和应交税款以及实得奖金数(扣除奖金税后)。答:程序如下:#include"stdio.h"voidmain(){ floata,r,t,b;intc;scanf("%f",&a);if(a>=3000)c=6;elsec=a/500;switch(c){ case0:r=0;break;case1:r=0.05;break;case2:case3:r=0.08;break;case4:case5:r=0.1;break;case6:r=0.15;break;}t=a*r;b=a-t;printf("r=%f,t=%f,b=%f",r,t,b);}383200答:程序如下:#include<stdio.h>voidmain(){ floatdistance,price;intflag=0;scanf("%f",&distance);if(distance>20)flag=1;if(distance<=3)price=8;elseprice=8+(distance-3)*2;if(flag==1)//1代表单程price=price*1.5;printf("%f",price);}(1)热爱祖国,热爱社会主义,拥护中国共产党的领导。遵守宪法和法律,遵守学校规章制度。诚实守信,道德品质优良,思想品德成绩不低于80分。0(含编程程序实现学生是否具有评选奖学金的资格。答:程序如下:#include<stdio.h>intmain(){floatmoral,number,a,b;printf("输入道德考核成绩:");scanf("%f",&moral);if(moral>=80){ :");scanf("%f&number);printf("请输入学业成绩与综合测评成绩专业排名");scanf("%f%f",&a,&b);if(a<=0.1*number&&b<=0.1*number)printf("具有评选资格");elseprintf("没有评选资格");}else}

printf("没有评选资格");居民阶梯电价是指将现行单一形式的居民电价改为按照用户消费的电量分段定价,第一档电量为每户每月0-260度的用电量,其电价不作调整;261-6000.056010.30元。=++=×第二档电费=超出第一档标准并且在第二档标准以内的电量×(第一档电价+0.05元/度)第三档电费=超出第二档标准的电量×(第一档电价+0.3元/度)计算。试编程实现用户的电费计费程序。(本章其它题型习题参见本书的课程资源)答:程序如下:#include<stdio.h>intmain(){floatuse,cost;scanf("%f",&use);if(use<0){printf("InvalidValue!");}elseif(use>260&&use<=600){cost=use*0.53+(use-260)*0.58;printf("cost=%.2f",cost);}elseif(use>600){cost=use*0.53+(use-260)*0.58+(use-600)*0.83;printf("cost=%.2f",cost);}else{cost=use*0.53;//规定正常用电0.53每度printf("cost=%.2f",cost);}return0;}第四章习题参考答案基础题1.求1+2+3!+..+20!的和。答:程序如下:#include<stdio.h>main(){floatn,s=0,t=1;for(n=1;n<=20;n++){t*=n;s+=t;}printf("1+2!+3!...+20!=%e\n",s);}2.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13..求出这个数列的前20项之和。答:程序如下:#include<stdio.h>intmain(){floatsum=0,temp=0;floata=2,b=1;for(inti=0;i<20;i++){sum+=a/b;temp=a+b;b=a;a=temp;}printf("2/1+3/2+5/3+8/5+13/8+21/13...=%f\n",sum);return0;}3.输入两个正整数,输出它们的最大公约数和最小公倍数。答:程序如下:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){intm,n,i,j,temp;printf("请输入m:");scanf_s("%d",&m);printf("请输入n:");scanf_s("%d",&n);if(m>n){temp=m;m=n;n=temp;}for(i=m;i>0;i--){if(m%i==0&&n%i==0){printf("最大公约数为:\t%d\n",i);break;}}for(j=m;;j++){if(j%m==0&&j%n==0){printf("最小公倍数为:\t%d\n",j);break;}}return0;}4.求Sn=a+aa+aaa+..+aa..a(最后一项为n个a)的值,其中a是一个数字。如:2+2+22+22+222此时=n程序如下:#include<stdio.h>intmain(){inta=0,n=0,i=1,Sn=0,Tn=0;printf("请分别输入a,n的值:");scanf("%d,%d",&a,&n);for(i=1;i<=n;i++){Tn=Tn+a;Sn=Sn+Tn;Tn=10*Tn;}printf("Sn=%d",Sn);return0;}5.有一篮子苹果,两个一取余一,三个一取余二,四个一取余三,五个一取刚好不剩,问篮子至少有多少个苹果?答:程序如下:#include<stdio.h>intmain(){for(inti=5;;i+=5)if(i%2==1&&i%3==2&&i%4==3){}return0;}

printf("框中至少有%d个苹果",i);break;提高题1.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。答:程序如下:#include<stdio.h>intmain(){charc;intletters=0,k=0,s=0,o=0;printf("请输入一行字符:");while((c=getchar())!='\n'){if(c>='a'&&c<='z'||c>='A'&&c<='Z')letters++;elseif(c=='')k++;elseif(c>='0'&&c<='9')s++;else}

o++;printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d\n",letters,k,s,o);return0;}2.打印出所有的“水仙花数”。所谓“水仙花数“是指一个三位数,其各位数的立方和等于该数本身。如:153=13+53+33,则153是一个水仙花数。答:程序如下:#include<stdio.h>intmain(){for(inti=100;i<1000;i++){inta1=i%10,a10=(i%100)/10,a100=i/100;if(a1*a1*a1+a10*a10*a10+a100*a100*a100==i)printf("%d ",i);}return0;}10答:程序如下:#include<stdio.h>intmain(){intday=10;intremaining_peaches=1;for(inti=day-1;i>=1;i--){remaining_peaches=(remaining_peaches+1)*2;}printf("%d\n",remaining_peaches);return0;}134程序如下:#include<stdio.h>intmain(){inti,j,k;ints=0;for(i=1;i<5;i++)for(j=1;j<5;j++)for(k=1;k<5;k++){if(i!=k&&i!=j&&j!=k){printf("%d\n",i*100+j*10+k);s++;}}printf("一共可以生成%d个三位数\n",s);return0;}5.输入某年某月某日,判断这一天是这一年的第几天?答:程序如下:#include<stdio.h>#include<stdbool.h>boolisLeapYear(intyear){if((year%4==0&&year%100!=0)||(year%400==0)){returntrue;}returnfalse;}intmain(){intyear,month,day;intdays=0;boolleapYear;printf("请输入年:");scanf("%d",&year);printf("请输入月:");scanf("%d",&month);printf("请输入日:");scanf("%d",&day);leapYear=isLeapYear(year);switch(month-1){case11:days+=30;case10:days+=31;case9:days+=30;case8:days+=31;case7:days+=31;case6:days+=30;case5:days+=31;case4:days+=30;case3:days+=31;case2:if(leapYear){PAGE29PAGE29days+=29;}else{days+=28;}case1:days+=31;case0:break;}days+=day;printf("%d年%d月%d日是该年的第%d天\n",year,month,day,days);return0;}第五章习题参考答案基础题1100-10:1a[100]={0};方法2,使用循环进行赋值:inti;inta[100];for(i=0;i<100;i++)a[i]=0;方法3,使用memset,函数包含在头文件string.h中inta[100];memset(a,0,sizeof(a));若是使数组元素值都为-1,上述方法1不适用,方法2和方法3都可以。2、输入一个整数n,输入n个数存储在数组中,编写程序,将数组元素逆序存放并输出。答:程序如下:#include<stdio.h>intmain(){intn;printf("请输入整数n:");scanf("%d",&n);intarr[20];printf("请输入%d个数:\n",n);for(inti=0;i<n;i++){scanf("%d",&arr[i]);}printf("");for(inti=0;i<n;iprintf("%d",arr[i]);}//逆序存放数组元素inttemp;for(inti=0;i<n/2;i++){temp=arr[i];arr[i]=arr[n-1-i];arr[n-1-i]=temp;}printf("\n逆序存放后的数组:");for(inti=0;i<n;i++){printf("%d",arr[i]);}return0;}38{10%,20%,5答:程序如下:#include<stdio.h>intmain(){intnum_professions=5;intnum_indicators=8;floatweights[]={0.1,0.2,0.2,0.15,0.05,0.2,0.05,0.05};floatscores[num_professions][num_indicators];floattotal_scores[num_professions];//读入各专业各项指标得分for(inti=0;i<num_professions;i++){printf("请输入第%d个专业的8项指标得分:\n",i+1);for(intj=0;j<num_indicators;j++){scanf("%f",&scores[i][j]);}}//计算每个专业的综合得分for(inti=0;i<num_professions;i++){total_scores[i]=0;for(intj=0;j<num_indicators;j++){total_scores[i]+=scores[i][j]*weights[j];}}//输出每个专业的综合得分for(inti=0;i<num_professions;i++){printf("第%d个专业的综合得分为:%.2f\n",i+1,total_scores[i]);}return0;}4答:程序如下:#include<stdio.h>intmain(){intnum_programs;printf("请输入参与节目的数量:");scanf("%d",&num_programs);intvotes[20];for(inti=0;i<num_programs;i++){votes[i]=0;}prnf((1n);intvote;while(1){scanf("%d",&vote);if(vote==0){break;}if(vote>=1&&vote<=num_programs){votes[vote-1]++;}else{printf("请输入有效的节目编号!\n");}}printf("投票统计结果:\n");for(inti=0;i<num_programs;i++){printf("%d%d票\ni1,votes[i]);}//找出最受欢迎的节目intmax_votes=0;intmost_popular_program=0;for(inti=0;i<num_programs;i++){if(votes[i]>max_votes){max_votes=votes[i];most_popular_program=i+1;}}printf("最受欢迎的节目是节目%d,共获得%d票!\n",most_popular_program,max_votes);return0;}5mn答:程序如下:#include<stdio.h>intmain(){intm,n;printf("请输入矩阵的行数m:");scanf("%d",&m);printf("请输入矩阵的列数n:");scanf("%d",&n);intmatrix[m][n];//生成矩阵for(inti=0;i<m;i++){for(intj=0;j<n;j++){matrix[i][j]=(i>j)?i:j;}}//输出矩阵printf("生成的矩阵为:\n");for(inti=0;i<m;i++){for(intj=0;j<n;j++){printf("%d",matrix[i][j]);}printf("\n");}return0;}6mn00答:程序如下:#include<stdio.h>intmain(){intm,n;printf("请输入迷宫的行数m:");scanf("%d",&m);printf("请输入迷宫的列数n:");scanf("%d",&n);intmaze[m][n];//读入迷宫数字prnf((00n");for(inti=0;i<m;ifor(intj=0;j<n;j++){scanf("%d",&maze[i][j]);}}//检测整行畅通for(inti=0;i<m;i++){introw_sum=0;for(intj=0;j<n;j++){row_sum+=maze[i][j];}if(row_sum==0){printf("第%d行整行畅通!\n",i+1);}}//检测整列畅通for(intj=0;j<n;j++){intcol_sum=0;for(inti=0;i<m;i++){col_sum+=maze[i][j];}if(col_sum==0){printf("第%d列整列畅通!\n",j+1);}}return0;}7、在矩阵中,若某个位置的数字比其上下左右四个方向的数字值都小,称其为一个极小值点,编写程序判断输入的m行n列数字矩阵是否有极小值点,若有则输出其位置。答:程序如下:#include<stdio.h>intmain(){intm,n;printf("请输入矩阵的行数m:");scanf("%d",&m);printf("请输入矩阵的列数n:");scanf("%d",&n);intmatrix[m][n];//读入矩阵数字printf("请输入矩阵数字:\n");for(inti=0;i<m;i++){for(intj=0;j<n;j++){scanf("%d",&matrix[i][j]);}}//判断是否存在极小值点intcount=0;for(inti=0;i<m;i++){for(intj=0;j<n;j++){intcurrent=matrix[i][j];intup=(i>0)?matrix[i-1][j]:current;intdown=(i<m-1)?matrix[i+1][j]:current;intleft=(j>0)?matrix[i][j-1]:current;intright=(j<n-1)?matrix[i][j+1]:current;if(current<up&¤t<down&¤t<left&¤t<right){printf("极小值点位置:(%d,%d)\n",i,j);count++;}}}if(count==0){printf("矩阵中不存在极小值点。\n");}return0;}8、编写程序,读入两个字符串,将第二个字符串连接到第一个字符串末尾并输出。答:程序如下:#include<stdio.h>intmain(){charstr1[100],str2[100];intlen1=0,len2=0;printf("请输入第一个字符串:");scanf("%s",str1);printf("请输入第二个字符串:");scanf("%s",str2);//计算第一个字符串的长度while(str1[len1]!='\0'){len1++;}//将第二个字符串连接到第一个字符串末尾inti=0;while(str2[i]!='\0'){str1[len1+i]=str2[i];i++;}str1[len1i]='\0//printf("连接后的字符串为:%s\n",str1);return0;}9、编写程序,读入一个字符串,将这个字符串逆序复制到另一个字符串中并输出。答:程序如下:#include<stdio.h>intmain(){charstr1[100],str2[100];intlen=0;printf("请输入一个字符串:");scanf("%s",str1);//计算字符串长度while(str1[len]!='\0'){len++;}//逆序复制字符串for(inti=0;i<len;i++){str2[i]=str1[len-1-i];}str2[len\0//printf("逆序复制后的字符串为:%s\n",str2);return0;}10、编写程序,读入一个字符串,将非数字字符过滤后剩余数字字符组成一个整数并输出。答:程序如下:#include<stdio.h>intmain(){charstr[100];intnum=0;printf("请输入一个字符串:");scanf("%s",str);for(inti=0;str[i]!='\0';i++){if(str[i]>='0'&&str[i]<='9'){num=num*10+(str[i]-'0');}}printf("过滤后的数字为:%d\n",num);return0;}提高题1.答:程序如下:#include<stdio.h>#defineNUM_STUDENTS20//假设有20个学生#defineNUM_CRITERIA5//四项成绩加上综合成绩voidcalculateScores(floatscores[NUM_STUDENTS][NUM_CRITERIA]){for(inti=0;i<NUM_STUDENTS;i++){scores[i][4]=scores[i][0]*0.8+scores[i][1]*0.1+scores[i][2]*0.05+scores[i][3]*0.05;}}voidsortScores(floatscores[NUM_STUDENTS][NUM_CRITERIA]){for(inti=0;i<NUM_STUDENTS-1;i++){for(intj=i+1;j<NUM_STUDENTS;j++){if(scores[i][4]<scores[j][4]){for(intk=0;k<NUM_CRITERIA;k++){floattemp=scores[i][k];scores[i][k]=scores[j][k];scores[j][k]=temp;}}}}}intmain(){floatscores[NUM_STUDENTS][NUM_CRITERIA];//输入每个学生的成绩for(inti=0;i<NUM_STUDENTS;i++){printf("输入学生%d的学业平均成绩、竞赛获奖成绩、班级贡献成绩、活动参与成绩:",i+1);for(intj=0;j<NUM_CRITERIA-1;j++){scanf("%f",&scores[i][j]);PAGE30PAGE30}}//计算综合成绩calculateScores(scores);//排序综合成绩sortScores(scores);//输出排序后的综合成绩printf("\n学生的综合成绩排序:\n");for(inti=0;i<NUM_STUDENTS;i++){printf("学生%d:综合成绩%.2f\n",i+1,scores[i][4]);}return0;}编写程序,读入一个字符串,将非十六进制字符过滤后的剩余字符组成一个十六进答:程序如下:#include<stdio.h>intcharToDigit(charc){if(c>='0'&&c<='9'){returnc-'0';}elseif(c>='a'&&c<='f'){returnc-'a'+10;}elseif(c>='A'&&c<='F'){returnc-'A'+10;}else{return-1//-1}}intmain(){charstr[100];intdecimal=0;printf("请输入一个字符串:");scanf("%s",str);//过滤非十六进制字符并转换为十进制整数for(inti=0;str[i]!='\0';i++){intdigit=charToDigit(str[i]);if(digit!=-1){decimal=decimal*16+digit;}}printf("转换为十进制整数为:%d\n",decimal);return0;}m*nn*t程序如下:#include<stdio.h>intmain(){intm,n,t;//读入矩阵的行列数printf("请输入第一个矩阵的行数m:");scanf("%d",&m);printf("请输入第一个矩阵的列数n:");scanf("%d",&n);printf("请输入第二个矩阵的列数t:");scanf("%d",&t);//定义两个矩阵intmatrix1[m][n],matrix2[n][t],result[m][t];//读入第一个矩阵printf("请输入第一个矩阵的元素:\n");for(inti=0;i<m;i++){for(intj=0;j<n;j++){scanf("%d",&matrix1[i][j]);}}//读入第二个矩阵printf("请输入第二个矩阵的元素:\n");for(inti=0;i<n;i++){for(intj=0;j<t;j++){scanf("%d",&matrix2[i][j]);}}//计算矩阵乘积for(inti=0;i<m;i++){for(intj=0;j<t;j++){result[i][j]=0;for(intk=0;k<n;k++){result[i][j]+=matrix1[i][k]*matrix2[k][j];}}}//输出乘积矩阵printf("两个矩阵的乘积为:\n");for(inti=0;i<m;i++){for(intj=0;j<t;j++){printf("%d",result[i][j]);}printf("\n");}return0;}程序如下:#include<stdio.h>#include<string.h>intisSubstring(charstr1[],charstr2[]){intlen1=strlen(str1);intlen2=strlen(str2);for(inti=0;i<=len1-len2;i++){intj;for(j=0;j<len2;j++){if(str1[i+j]!=str2[j]){break;}}if(j==len2){return1;//str2是str1的子串}}return0;//str2不是str1的子串}intmain(){charstr1[100],str2[100];printf("请输入第一个字符串:");scanf("%s",str1);printf("请输入第二个字符串:");scanf("%s",str2);if(isSubstring(str1,str2)){printf("%s%s\nstr2,str1);}elseif(isSubstring(str2,str1)){printf("%s%s\nstr1,str2);}else{printf("两个字符串互不是对方的子串。\n");}return0;}(),A20%,B、C30%,D20%AB、CD程序如下:#include<stdio.h>intmain(){inttotalStudents,numA,numB,numC,numD;floatscores[100],scoreA,scoreB,scoreC,scoreD;printf("请输入总学生人数:");scanf("%d",&totalStudents);printf("请输入每个学生的成绩(按从高到低顺序输入):\n");for(inti=0;i<totalStudents;i++){scanf("%f",&scores[i]);}numA=totalStudents*2/10;numB=totalStudents*3/10;numC=totalStudents*3/10;numD=totalStudents*2/10;scoreA=scores[numA-1];//A等级的最低分数为第numA名学生的分数scoreB=scores[numA+numB-1];//B等级的最低分数为第numA+numB名学生的分数scoreC=scores[numA+numB+numC-1];//C等级的最低分数为第numA+numB+numC名学生的分数scoreD=scores[numA+numB+numC+numD-1];//D等级的最低分数为第numA+numB+numC+numD名学生的分数printf("A等级成绩区间:%.2f-%.2f\n",scoreA,scores[0]);printf("B等级成绩区间:%.2f-%.2f\n",scoreB,scores[numA]);printf("C等级成绩区间:%.2f-%.2f\n",scoreC,scores[numA+numB]);printf("D等级成绩区间:%.2f-%.2f\n",scoreD,scores[numA+numB+numC]);return0;}ABCD、E共5个等级,各等级人数所占比例分别为15%、35%、35%、13%、2%。将A至E等级内的原始成绩,依照等比例转换原则,分别转换到100~86、85~71、70~56、55~41和40~30五个分数区间,得到相应的等级转换分。等级转换公式:F1F2X1X2FX例如,某同学的一门选修课考试成绩是75分,而该门课程的成绩等级划分如表5.1所示。表5.1课程成绩等级划分对应的最低最高分原始 原始成转换成转换成成绩等级 成绩最低 绩最高分 分 绩最低分绩最高分A839686100B61827185C51605670D41504155E30403040这样,这位同学的转换成绩就可以使用方程求得,即转换后成绩为80分。()程序如下:#include<stdio.h>//定义等级转换函数floatconvertGrade(floatF,floatF1,floatF2,floatX1,floatX2){//return((F2-F)/(F-F1))*(X2-X1)+X2;if(F2!=F1)return(X2*(F-F1)+X1*(F2-F))/(F2-F1);else //X1+X2)/2;}intmain(){inttotalStudents,numA,numB,numC,numD,numE;floatscores[200],convertedScores[200];freopen("in.txt","r",stdin);printf("请输入总学生人数:");scanf("%d",&totalStudents);printf("请输入每个学生的原始成绩(按从高到低顺序输入):\n");for(inti=0;i<totalStudents;i++){scanf("%f",&scores[i]);}numA=totalStudents*15/100;numB=totalStudents*35/100;numC=totalStudents*35/100;numD=totalStudents*13/100;numE=totalStudents*2/100;//等级转换for(inti=0;i<totalStudents;i++){if(i<numA){convertedScores[i]=convertGrade(scores[i],scores[numA-1],scores[0],86,100);}elseif(i<numA+numB){convertedScores[i]=convertGrade(scores[i],scores[numA+numB-1],scores[numA],71,85);}elseif(i<numA+numB+numC){convertedScores[i]=convertGrade(scores[i],scores[numA+numB+numC-1],scores[numA+numB],56,70);}elseif(i<numA+numB+numC+numD){convertedScores[i]=convertGrade(scores[i],scores[numA+numB+numC+numD-1],scores[numA+numB+numC],41,55);}else{convertedScores[i]=convertGrade(scores[i],scores[numA+numB+numC+numD],scores[totalStudents-1],30,40);}}//输出转换后的成绩printf("转换后的成绩为:\n");for(inti=0;i<totalStudents;i++){printf("%.2f->%.2f\n",scores[i],convertedScores[i]);}return0;} 第六章习题参考答案基础题s=sum1+sum2+sum3+sum4sum1=1+1/2+1/3+…+1/50sum2=1+1/2+1/3+…+1/100sum3=1+1/2+1/3+…+1/150sum4=1+1/2+1/3+…+1/200sumsuml~sum4。答:程序如下:#include"stdio.h"doublesum(intnum){doubles=0.;inti;for(i=1;i<=num;i++)s+=1.0/i;returns;}intmain(){doubles=0.0;inti;for(i=50;i<=200;i+=50)s+=sum(i);printf("sum=%lf\n",s);}1~20isPrime程序如下:#include"stdio.h"#include"math.h"intisPrime(intnum){inti;for(i=2;i<=int(sqrt(num));i++)if(num%i==0)return0;return1;}intmain(){inti;intsum=0;for(i=2;i<=20;i++)if(isPrime(i))sum+=i;printf("sum=%d",sum);}a程序如下:#include"stdio.h"voidreverse(inta[],intn){inti,temp;for(i=0;i<n/2;i++){temp=a[i];a[i]=a[n-i-1];a[n-i-1]=temp;}}intmain(){inti;inta[10]={1,2,3,4,5,6,7,8,9,10};reverse(a,10);for(i=0;i<10;i++){printf("%d\t",a[i]);}}提高题10,-1,9,2,5,4,0,7,12,-3答:程序如下:#include"stdio.h"voidsort(intb[],intn){inti,j,k,temp;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++){if(b[j]<b[k])k=j;}temp=b[i];b[i]=b[k];b[k]=temp;}}intmain(){inta[10]={10,-1,9,2,5,4,0,7,12,-3};inti;sort(a,10);PAGE42PAGE42for(i=0;i<10;i++)printf("%d",a[i]);return0;}a[]={-1,6,4,9,7,3,17,-8,0}答:程序如下:#include"stdio.h"intimax;int max(intb[],intn){inti,m;m=b[0];for(i=1;i<n;i++){if(m<b[i]){m=b[i];imax=i;}}returnm;}intmain(){inta[9]={-1,6,4,9,7,3,17,-8,0};printf("index=%d\nmax=%d\n",imax,max(a,10));}程序如下:#include"stdio.h"void trans(intb[][3]){inttemp;inti,j;for(i=0;i<3;i++)for(j=i+1;j<3;j++){temp=b[i][j];b[i][j]=b[j][i];b[j][i]=temp;}}intmain(){inta[3][3]={{1,2,3},{4,5,6},{7,8,9}};inti,j;trans(a);for(i=0;i<3;i++){for(j=0;j<3;j++)printf("%d\t",a[i][j]);printf("\n");}}程序如下:#include"stdio.h"intsum(intnum){ints=0;while(num){s+=num%10;num=num/10;}returns;}intmain(){intnum;scanf("%d",&num);printf("sum=%d\n",sum(num));}第七章习题参考答案基础题1.使用结构体编写求解2个复数和值的程序。结构体类型成员定义如下:答:程序如下:typedefstruct{floatreal;//实部floatimag;//虚部}COMPLEX;#include<stdio.h>typedefstruct{floatreal;//实部floatimag;//虚部}COMPLEX;intmain(){COMPLEX a,b,c;printf("输入第1个复数\n");scanf("%f%f",&a.real,&a.imag);printf("输入第2个复数\n");scanf("%f%f",&b.real,&b.imag);c.real=a.real+b.real;c.imag=a.imag+b.imag;printf("%f+%fi\n",c.real,c.imag);return0;}2.定义结构体类型Rectangle如下:structRectangle{floatlength;//长度floatwidth;//宽度定义一个结构体变量,用户输入长度和宽度后,计算该矩形的面积和周长。#include<stdio.h>structRectangle{floatlength;//长度floatwidth;//宽度};intmain(){structRectangler;printf("输入矩形的长度\n");scanf("%f",&r.length);printf("输入矩形的宽度\n");scanf("%f",&r.width);printf("矩形的面积为%f\n",r.length*r.width);printf("矩形的周长为%f\n",2*(r.length+r.width));return0;}提高题1n6(6。答:程序如下:#include"stdio.h"#definen10struct student{int floataverage;}stud[n];voidinput() /**/{inti;for(i=0;i<n;i++){printf("第%d个学生的成绩:\n",i+1);scanf("%d%d%d%d%d%d",&stud[i].score[0],&stud[i].score[1],&stud[i].score[2],&stud[i].score[3],&stud[i].score[4],&stud[i].score[5]);}}voidaverage() /**/{inti;for(i=0;i<n;i++){stud[i].average=(stud[i].score[0]+stud[i].score[1]+stud[i].score[2]+stud[i].score[3]+stud[i].score[4]+stud[i].score[5])/3.0;}}voidsort() /**/{inti,j;structstudenttemp;for(i=0;i<n;i++){for(j=0;j<n-i-1;j++){if(stud[j].average<stud[j+1].average){temp=stud[j];stud[j]=stud[j+1];stud[j+1]=temp;}}}}voidoutput() /**/{inti;printf("\n");for(i=0;i<n;i++)printf("%d%d%d%d%d%d%3.1f\n",stud[i].score[0],stud[i].score[1],stud[i].score[2],stud[i].score[3],stud[i].score[4],stud[i].score[5],stud[i].average);}intmain(){input();average();sort();output();return0;}答:程序如下:#include<stdio.h>typedefstructdate{intyear;/*年*/intmonth;/*月*/intday;/**/}date;intm[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};intisLeap(intyear){return(year%4==0&&year%100!=0)||(year%400==0);}/*求日期为当年的第几天*/intcount(intyear,intmonth,intday){inti;intdays=0;/*年初至上月天数累加*/for(i=1;i<month;i++)days+=m[i];if(month>2&&isLeap(year))/*闰年加1天*/days++;days+=day;/*月初至当前天数累加*/returndays;x);

}intmain(){datedt;intx=0;inti;printf("输入年月日:");scanf("%d%d%d",&dt.year,&dt.month,&dt.day);x=count(dt.year,dt.month,dt.day);printf("%d年%d月%d日是%d年的第%d天!\n",dt.year,dt.month,dt.day,dt.year,return0;} 第八章习题参考答案基础题1.输入3个整数,按由小到大的顺序输出,使用整形指针实现。答:程序如下:#include<stdio.h>voidsort(int*a,int*b,int*c){inttemp;//通过交换值来排序if(*a>*b){temp=*a;*a=*b;*b=temp;}if(*a>*c){temp=*a;*a=*c;*c=temp;}if(*b>*c){temp=*b;*b=*c;*c=temp;}}intmain(){intx,y,z;//输入3个整数printf("请输入三个整数:\n");scanf("%d%d%d",&x,&y,&z);//调用排序函数sort(&x,&y,&z);//输出排序后的结果printf("从小到大的顺序是:%d%d%d\n",x,y,z);return0;}2.输入3个字符串,按由小到大的顺序输出,使用字符指针实现。答:程序如下:#include<stdio.h>#include<string.h>voidsort(char*str1,char*str2,char*str3){char*temp;//使用strcmp进行字符串比较并交换if(strcmp(str1,str2)>0){temp=str1;str1=str2;str2=temp;}if(strcmp(str1,str3)>0){temp=str1;str1=str3;str3=temp;}if(strcmp(str2,str3)>0){temp=str2;str2=str3;str3=temp;}//输出排序后的结果printf("排序后的字符串顺序是:\n");printf("%s\n%s\n%s\n",str1,str2,str3);}intmain(){charstr1[100],str2[100],str3[100];//输入3个字符串printf("请输入三个字符串:\n");scanf("%s%s%s",str1,str2,str3);//调用排序函数sort(str1,str2,str3);return0;}3.编写一程序:将两个字符串进行连接。在main函数中输入字符串,输出连接结果,使用函数和字符指针实现。答:程序如下:#include<stdio.h>#include<string.h>//字符串连接函数voidconcat(char*dest,constchar*src){//destwhile(*dest){dest++;}//将srcdestwhile(*src){*dest=*src;dest++;src++;}//添加字符串结束符'\0'*dest='\0';}intmain(){charstr1[200],str2[100];//输入两个字符串printf("请输入第一个字符串:\n");fgets(str1,sizeof(str1),stdin);//去掉字符串末尾的换行符str1[strcspn(str1,"\n")]=0;printf("请输入第二个字符串:\n");fgets(str2,sizeof(str2),stdin);//去掉字符串末尾的换行符str2[strcspn(str2,"\n")]=0;//调用字符串连接函数concat(str1,str2);//输出连接后的结果printf("连接后的字符串是:%s\n",str1);return0;}提高题1.编写一个程序,输入月份号,输出该月的英文月名。例如,输入3,则输出”March”。要求用指针数组处理。答:程序如下:#include<stdio.h>intmain(){//指针数组,存储12个月份的英文名称constchar*months[]={"January","February","March","April","May","June","July","August","September","October","November","December"};intmonth;//提示用户输入月份号prnf((1-1n");scanf("%d&month);//检查月份号是否有效if(month>=1&&month<=12){//printf("对应的月份是:%s\n",months[month-1]);}else{//printf("无效的月份号,请输入1到12之间的数。\n");}return0;}2.编写一个程序,将n个数按输入时顺序的逆序排列,要求用函数和

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论