版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章C语言概述课后习题1.单选题(1)计算机能直接执行的是(C)。A.高级语言编写的源程序B.汇编语言编写的源程序C.CPU机器指令编写的程序D.C语言编写的源程序(2)C语言被执行时的入口是(B)。A.程序中的第一条语句B.main函数C.第一条注释D.第一个变量定义语句(3)C语言编写的源程序,需要经过(A)翻译成计算机可以直接执行的机器码。A.C语言编译器B.C语言解释器C.操作系统D.程序员(4)下列关于计算思维的说法,正确的是(D)。A.计算思维是只有程序员才需要具备的编程思维B.计算思维是快速口算的一种思维能力C.计算思维只能应用在计算机科学与工程中D.计算思维是使用分解、迭代、抽象等计算机科学的思维模型来解决各种问题的能力模型填空题高级语言编写的源程序,经过编译或者解释,变成计算机硬件可以直接执行的机器码。计算机程序一般包含3部分:输入数据、数据计算与处理、输出数据。相比于汇编语言和机器语言,C语言的可读性更好,可移植性更差。一个完整的C语言程序由若干个函数构成,但是只有一个主函数,主函数也是C语言执行时唯一的入口。简答题C语言70年代就已经在贝尔实验室被发明了,为什么经过这么多年,C语言依然经久不衰?答:因为C语言的高性能和高效率,现在还主流应用在嵌入式软件开发和系统软件开发中。相比于机器语言和汇编语言,C语言是高级语言,可读性和可维护性好,方便程序员使用。但是相对于其它高级语言,如:JAVA、Python、PHP等,C语言又能直接面向硬件,编程效率和性能更好。正是由于C语言的这种两面性,它具有中间语言的特点(被称为高级语言中的低级语言),导致C语言的地位特殊、不能取代。请从可读性、性能、可移植性这3个角度,来比较机器语言、汇编语言和C语言。答:可读性:机器语言的最差(都是0,1构成的机器码),汇编语言的稍好(采用助记符),C语言的最好(高级语言面向用户)性能:机器语言的最好(计算机硬件直接执行机器码),汇编语言其次(需要汇编器将汇编代码变成机器码,但是汇编指令与机器指令一一对应),C语言性能最差(作为高级语言性能比不上机器语言和汇编语言)。但是相对于其它高级语言,C语言是最接近硬件的,性能是最好的。有数据显示,C语言的性能只比机器语言和汇编语言低20%左右。可移植性:作为高级语言,C语言的移植性最好。机器语言和汇编语言都与特定的硬件(CPU型号)相关的,移植性都不好。用C语言编写的代码,从一个硬件平台换到另一个硬件平台,往往只需要进行少量的适配修改。而用汇编和机器语言编写的程序,都是与特定的CPU指令系统强绑定的,移植后就不能在新的硬件平台使用了。嵌入式开发为什么主流采用C语言?答:因为C语言可以直接操作硬件,如位运算、指针等操作可以直接操作硬件,生成的目标代码性能更好。而对于嵌入式开发,其硬件平台如CPU主频、内存等指标往往比不上PC机平台,如智能穿戴设备不可能具有像PC机那样的内存,所以在嵌入式开发中必须精打细算,通过效率更高的代码来提高硬件使用率。而在所有高级语言中,C语言的效率和性能是最高的。虽然机器语言和汇编语言的效率更高,但是可读性太差,很难进行商业级的开发,所以在现在的嵌入式开发中,主流还是C语言。对于一些对性能要求更高的场景,也会采用C语言+汇编语言的混合开发模式。使用C语言编写程序时,在代码书写上有什么要求?为什么代码的书写格式非常重要?答:使用C语言编程程序时,代码书写上要求规范化和标准化,具有好的可读性。具体来说,如:清晰的标识符命名让程序阅读见名知意,一条语句占用一行更加清晰,好的缩进对齐让代码可读性好,函数的使用增强代码的可维护性等。代码的书写格式可以增强代码的可读性和可维护性,因为在实际的企业开发中,用户需求和代码是经常需要修改维护的,如果代码书写格式不遵循规范,就会使得代码的维护变得非常困难。论述题小张是一个C语言的程序员,他平时书写代码比较随意,不注重格式的美观与规范。项目经理老王希望他能够按照公司指定的编程规范进行代码编写,但小张理直气壮地说:“长的好看能当饭吃吗?我只要能实现客户要求的功能,就能帮公司赚钱了。程序员重要的是算法,是创新性,没必要搞那么多条条框框吧?”如果你是老王,你将如何说服小张呢?答:老王可以这样来说服小张:程序不仅仅是实现功能,良好的可读性和可维护性也是软件开发成败的关键。如果代码书写不遵循规范,可能自己编写的程序,1个月后程序员自己都看不懂了,更不提别的程序员来维护了。而在企业的商业级开发中,用户的需求经常发生变化,而代码也会进行新增、修改和维护。如果书写随意,没有良好的标识符命名规则、好的缩进对齐、良好的函数封装等等,就会导致代码很难维护。而随着软件规模变得越来越庞大,这种不规范的代码越来越多,最后代码的维护变得异常困难。所以,很多大公司都有自己的编程规范,如腾讯、阿里、华为、微软等,都会出台公司的C语言、Java语言编程规范。可见代码的规范化书写不仅仅是一个美观的问题,对于代码的可读性、可维护性是非常重要的。甚至对于像Python这样的编程语言,缩进不对齐甚至会影响功能。所以对于一个专业化的程序员,必须培养自己良好的编程风格和规范性。C语言是用来编程程序,让计算机执行特定任务的高级编程语言。请问与人类的自然语言相比,计算机的高级语言有哪些相似点和不同点?答:相同点:不管是人类的自然语言还是作为计算机高级语言的C语言,都是用来交流的,都有一定的语法规则。都有词法、语法、语义等要素。不同点:人类的语言可以比较模糊,但是计算机的高级语言必须遵循严格的语法。人类的自然语言只要方便交流就可以,经常可以用精简、省略的语法。但是C语言编程,必须严格遵循语法标准。如:C语言每条语句必须以分号结束,否则就会编译不通过。而人类语言在使用中,特别是口语中,往往并没有严格遵循语法约束。另外,C语言中的一些语义与人类语言是有区别的,例如=在人类语言中是等号,而在C语言中是赋值运算符,C语言中的等号是==。有人说:C语言改变了世界。如何来理解这句话?答:C语言出自贝尔实验室,最开始就是为了开发UNIX操作系统而发明的,后来的编译器、TCP/IP协议、智能手机操作系统等都是用C语言编写的。没有C语言,就没有后面这些技术的实现。所以说:C语言改变了世界。C语言作为较早出现的商业级成功的编程语言,用来编写了很多基础软件和其它语言的编译器,奠定了计算机技术的基础。在计算机技术发展的每一个重要环节,如:网络协议、数据库、浏览器、智能手机操作系统、人工智能算法,都会用到C语言。特别是基础软件的开发,如:驱动程序、高性能智能算法、编译器都会用C语言开发。当今非常热门的人工智能算法,也会用到C语言。第2章程序设计基础知识课后习题答案一、单选题1.B2.B3.A4.B5.D6.D7.D8.A9.C10.B二、程序填空题1.(num1>num2)?num1:num22.value=ch-'0'3.n%10n/100%10n/1000%104.t%60t/60%60t/60/605.(year%4==0&&year%100!=0)||year%400==0(firstWeekday+365-1)%7三、编程题1.#include<stdio.h>#include<stdlib.h>intmain(){doublea,b,c;scanf("%lf\n%lf",&a,&b);c=a*b*0.01;printf("本金:%11.2f元\n",a);printf("利息:%11.2f元\n",c);printf("合计:%11.2f元",a+c);return0;}2.#include<stdio.h>#include<stdlib.h>intmain(){doubleb,h,a;scanf("%lf%lf",&b,&h);a=(b*h)/2;printf("%.2lf",a);return0;}3.#include<stdio.h>intmain(){floatfahrenheit,celsius;printf("请输入华氏温度值:");scanf("%f",&fahrenheit);//华氏温度转摄氏温度的公式:celsius=(fahrenheit-32)*5/9celsius=(fahrenheit-32)*5/9;printf("%.2f华氏温度等于%.2f摄氏温度\n",fahrenheit,celsius);return0;}4.#include<stdio.h>intmain(){floatradius,height,circumference,area,volume;constdoublepi=3.14;printf("请输入圆柱体的半径和高度:\n");scanf("%f%f",&radius,&height);circumference=2*pi*radius;printf("圆柱体底面的圆周长为:%.2f\n",circumference);area=pi*radius*radius;printf("圆柱体底面的圆面积为:%.2f\n",area);volume=area*height;printf("圆柱体的体积为:%.2f\n",volume);return0;}5.#include<stdio.h>intmain(){doubleL1,L2,time_in_seconds,average_speed;intH,M,S;printf("输入开始里程L1:");scanf("%lf",&L1);printf("输入结束里程L2:");scanf("%lf",&L2);printf("输入时间(小时H、分钟M、秒S):");scanf("%d%d%d",&H,&M,&S);//计算总时间(小时)time_in_seconds=H+M/60+S/3600;//计算平均速度average_speed=(L2-L1)/(double)time_in_seconds;printf("平均速度为:%.2fkm/h\n",average_speed);return0;}6.#include<stdio.h>intmain(){intn,m,p;doubletotal_money=0.0;//剩余钱数//输入红包数量、每个红包的大小、弟弟妹妹的红包大小printf("请输入红包数量:");scanf("%d",&n);printf("请输入每个红包的大小:");scanf("%d",&m);printf("请输入弟弟和妹妹的红包大小:");scanf("%d",&p);//计算剩余钱数total_money=n*m-2*p;//输出剩余钱数printf("小明现在还剩下%.2f元。\n",total_money);return0;}7.#include<stdio.h>intmain(){charQ;printf("请输入一个大写字母:\n");scanf("%c",&Q);intQ_ascii=Q;intn=Q_ascii-64;//64是A的ASCII码值printf("它是字母表中的第%d个字母。\n",n);return0;}8.#include<stdio.h>#include<stdlib.h>intg(intn,inta,intb);intmain(){charnum1,num2,num3;printf("请输入三个数字字符(字符'1'~字符'9'):\n");scanf("%c%c%c",&num1,&num2,&num3);intresult=(num1-'0')*100+(num2-'0')*10+(num3-'0');printf("组成的整数是:%d\n",result);return0;}第3章控制结构习题参考答案单选题ACDBAACCACADCC程序填空题max=a;b>cmax=c;res=0;number<0res*10+digit;0;1;1.0/factort=0;i<=nt=t*10+i;n++i<nn==sum编程题(1)#include<stdio.h>intmain(){intx;scanf("%d",&x);if(x%2==0)printf("%disanevennumber.",x);else printf("%disanoddnumber.",x); return0;}(2)#include<stdio.h>intmain(){intage; floatweight,pay;scanf("%d%f",&age,&weight);if(age<=6) pay=10;elseif(age<=12) pay=78*0.5;else pay=78;pay+=((int)weight)/250*10;printf("Mealspayable:%.2f\n",pay); return0;}(3)#include<stdio.h>intmain(){intmonth,days; scanf("%d",&month);switch(month) { case1:days=31;break; case2:days=28;break; case3:days=31;break; case4:days=30;break; case5:days=31;break; case6:days=30;break; case7:days=31;break; case8:days=31;break; case9:days=30;break; case10:days=31;break; case11:days=30;break; case12:days=31;break; } if(month>=1&&month<=12) printf("days:%d\n",days); else printf("InputError!\n"); return0;}(4)#include<stdio.h>intmain(){inta,b,c,temp;scanf("%d%d%d",&a,&b,&c);if(a<b){temp=a;a=b;b=temp;}if(b<c){temp=b;b=c;c=temp;}if(a<b){temp=a;a=b;b=temp;}printf("%d%d%d",a,b,c); return0;}(5)#include<stdio.h>intmain(){inta,b,sum=0,i;scanf("%d%d",&a,&b);for(i=a;i<b;i++){ if(i%2) sum+=i; }printf("sum=%d\n",sum); return0;}(6)#include<stdio.h>intmain(){intscore,maxscore,i=1;scanf("%d",&score);maxscore=score;while(i<7){ scanf("%d",&score); if(score>maxscore) maxscore=score; i++; }printf("maxscore=%d\n",maxscore); return0;}(7)#include<stdio.h>intmain(){doublen;scanf("%lf",&n);inti,j; doublesum=0.0;for(i=1;i<=n;i++){doublenum1=1.0;for(j=1;j<=i;j++){num1*=j;}sum+=num1;if(sum>=n){break;}}printf("m<=%d",i-1);return0;}(8)#include<stdio.h>intmain(){intx,y,a,b;scanf("%d%d",&x,&y);a=x,b=y; while(b){inttemp=b;b=a%b;a=temp;}printf("%d,%d",a,x*y/a);return0;}(9)#include<stdio.h>intmain(){ intn; intcount=1; printf("请输入一个数字:\n"); scanf("%d",&n); do{ if(n%2) { n=n*3+1; printf("(%d):%d\n",count++,n); } else { n/=2; printf("(%d):%d\n",count++,n); } }while(n!=1); return0;}(10)#include<stdio.h>intmain(){ inti,j,k; for(i=1;i<=19;i++){ for(j=1;j<=31;j++){ k=100-i-j; if(k/3+j*3+5*i==100&&k%3==0){ printf("公鸡、母鸡、小鸡有:%d%d%d\n",i,j,k); } } } return0;}(11)#include<stdio.h>#include<math.h>intisprime(intx){ inti; for(i=2;i<=sqrt(x);i++) { if(x%i==0)return0; } return1;}voidgoldbach(intx){ inti,count=0; for(i=2;i<=x/2;i++) { if(isprime(i)==0) continue; if(isprime(x-i)==1) { printf("%d=%d+%d\n",x,i,x-i); count++; } } printf("count=%d\n",count);}intmain(){ intx; scanf("%d",&x); goldbach(x); return0;}第4章函数课后习题答案一、单选题答案:1.D2.B3.D4.D5.D6.B7.A8.A9.C10.B二、程序填空题1、#include<stdio.h>//填空处(1):声明函数原型intmultiplyByTwo(int);intmain(){intnum=5;//填空处(2):调用函数并打印返回值printf("%d",multiplyByTwo(num));return0;}//填空处(3):定义函数intmultiplyByTwo(intn){//填空处(4):函数实现returnn*2;}2、#include<stdio.h>//填空处(1):声明函数原型intadd(intx,inty);intmain(){intresult;inta=6,b=3;//填空处(2):调用函数并保存返回值至resultresult=add(a,b);printf("Theresultis:%d\n",result);return0;}//填空处(3):定义函数intadd(intx,inty){//填空处(4):函数实现returnx+y;}3、#include<stdio.h>//在这里声明函数原型intmax(int,int);intmain(){intresult;inta=6,b=3;//调用函数max,并将返回值保存在result中result=max(a,b);printf("结果为:%d\n",result);return0;}//定义函数maxintmax(intx,inty){//返回较大的数return(x>y)?x:y;}4、#include<stdio.h>//在此处声明函数原型,函数名为addition,参数为两个整数intaddition(inta,intb);intmain(){intresult;intx=8,y=5;//调用函数并将返回值赋给resultresult=addition(x,y);printf("Thesumis:%d\n",result);return0;}//在此处定义函数addition,接收两个整数参数,返回它们的和intaddition(inta,intb){returna+b;}5、#include<stdio.h>//在此处声明函数原型,函数名为absoluteValue,参数为一个整数intabsoluteValue(int);intmain(){intnum,result;num=-10;//调用函数并将返回值赋给resultresult=absoluteValue(num);printf("Theabsolutevalueis:%d\n",result);return0;}//在此处定义函数absoluteValue,接收一个整数参数,返回其绝对值intabsoluteValue(intx){//在此处补充函数体if(x<0){return-x;}else{returnx;}}三、编程题1、将26个英文字母分别正序和逆序打印输出,正序时小写输出,逆序是大写输出。#include<stdio.h>voidprint_lowercase(){charc;for(c='a';c<='z';++c){printf("%c",c);}printf("\n");}voidprint_uppercase_reverse(){charc;for(c='Z';c>='A';--c){printf("%c",c);}printf("\n");}intmain(){print_lowercase();print_uppercase_reverse();return0;}2、写出一个函数返回输入正整数对应二进制中1的个数。#include<stdio.h>intcount_ones(intn){intcount=0;while(n){count+=n&1;n>>=1;}returncount;}intmain(){intn=9;printf("%d",count_ones(n));return0;}3、检查整数是否为素数#include<stdio.h>#include<stdbool.h>//函数声明boolisPrime(intnum);intmain(){inttestNumber=29;if(isPrime(testNumber)){printf("%disaprimenumber.\n",testNumber);}else{printf("%disnotaprimenumber.\n",testNumber);}return0;}//函数定义boolisPrime(intnum){if(num<=1)returnfalse;for(inti=2;i*i<=num;i++){if(num%i==0)returnfalse;}returntrue;}注释:函数isPrime首先检查num是否小于等于1,因为小于等于1的数不是素数。然后使用一个循环从2到sqrt(num)来检查num是否可以被任何数整除。如果num可以被任何数整除,函数返回false,表示num不是素数。如果num无法被任何数整除,函数返回true,表示num是素数。4、编写一个递归函数,计算斐波那契数列的第n个数。#include<stdio.h>intfibonacci(intn){if(n<=1){returnn;}else{returnfibonacci(n-1)+fibonacci(n-2);}}intmain(){intn=10;//需要计算的斐波那契数列的第n个数printf("斐波那契数列的第%d个数为:%d\n",n,fibonacci(n));return0;}5、写一个判断是否是质数的子函数,在主函数输入一个整数,输出是否为质数的信息。#include<stdio.h>#include<stdbool.h>boolisPrime(intn){if(n<=1){returnfalse;}for(inti=2;i*i<=n;i++){if(n%i==0){returnfalse;}}returntrue;}intmain(){intn=17;//需要判断的整数if(isPrime(n)){printf("%d是素数\n",n);}else{printf("%d不是素数\n",n);}return0;}6、写两个子函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。#include<stdio.h>intgcd(inta,intb){if(b==0)returna;returngcd(b,a%b);}intlcm(inta,intb){returna*b/gcd(a,b);}intmain(){inta=12,b=18;printf("GCD:%d\n",gcd(a,b));printf("LCM:%d\n",lcm(a,b));return0;}7、编写一个函数,计算一个整数n的平方根(保留整数部分)。#include<stdio.h>intsqrtInt(intn){if(n<=1){returnn;}intstart=0,end=n,ans;while(start<=end){intmid=start+(end-start)/2;if(mid<=n/mid){start=mid+1;ans=mid;}else{end=mid-1;}}returnans;}intmain(){intn=16;//需要计算平方根的整数printf("%d的平方根为:%d\n",n,sqrtInt(n));return0;}8、编写一个函数实现n的k次方,使用递归实现。#include<stdio.h>intpower(intn,intk){if(k==0){return1;}else{returnn*power(n,k-1);}}intmain(){intn=2;intk=10;printf("%dtothepowerof%dis%d\n",n,k,power(n,k));return0;}9、编写一个函数,计算n的阶乘的尾部零的个数。#include<stdio.h>inttrailingZeroes(intn){intcount=0;while(n>0){n/=5;count+=n;}returncount;}intmain(){intn=25;//需要计算的数printf("%d的阶乘末尾有%d个零\n",n,trailingZeroes(n));return0;}10、编写一个函数,验证哥德巴赫猜想:任何一个大于2的偶数都可以分解为两个素数的和。#include<stdio.h>#include<stdbool.h>boolisPrime(intn){if(n<=1){returnfalse;}for(inti=2;i*i<=n;i++){if(n%i==0){returnfalse;}}returntrue;}voidgoldbachConjecture(intnum){if(num<=2||num%2!=0){printf("输入有误!请输入大于2的偶数。\n");return;}for(inti=2;i<=num/2;i++){if(isPrime(i)&&isPrime(num-i)){printf("%d=%d+%d\n",num,i,num-i);return;}}}intmain(){intnum=28;//需要验证的偶数goldbachConjecture(num);return0;}第4章数组课后习题答案一、单选题1.A2.C3.D4.D5.A6.C7.B8.C9.B10.C二、程序填空题1. i==j||i+j==M-1 sum=sum+a[i][j];2. &n n-1 &a[i] n-1 i<j3.c14.0&ni<nc[x]c[i]5.array[j][i]=t;三、编程题1.#include<stdio.h>intmain(){ floatv[3]={},w[6]={};//因为一般的平均数都不是整数,所以我们用float类型 inti,j; inta[3][6]={{85,93,84,85,95,86},{79,95,95,80,100,98},{80,91,93,75,97,90}}; for(i=0;i<3;i++)//行 { for(j=0;j<6;j++)//列 { v[i]+=a[i][j]; } v[i]/=6; printf("v[%d]=%.3lf\n",i,v[i]); //%.3lf意思就是取小数点后三位 } for(j=0;j<6;j++)//列 { for(i=0;i<3;i++)//行 { w[j]+=a[i][j]; } w[j]/=3; printf("w[%d]=%.3lf\n",j,w[j]); } return0;}2.#include''stdio.h"main(){charc[]="BASIC\ndBASE";puts(c);}3.#include<stdio.h>#include<windows.h>intmain(){ intarray[10]={1,2,3,4,5,6,7,8,9,0}; intloop; for(loop=9;loop>=0;loop--) printf("%d",array[loop]); printf("\n"); system("pause"); return0;}4.#include<stdio.h>#include<windows.h>intmain(){ intr,c,a[100][100],b[100][100],sum[100][100],i,j; printf("输入行数(1~100):"); scanf("%d",&r); printf("输入列数(1~100):"); scanf("%d",&c); //获取第一个数组元素 printf("\n输入第一维数组的元素:\n"); for(i=0;i<r;++i) { for(j=0;j<c;++j) { printf("输入元素a%d%d:",i+1,j+1); scanf("%d",&a[i][j]); } } //获取第二个数组元素 printf("输入第二维数组的元素:\n"); for(i=0;i<r;++i) { for(j=0;j<c;++j) { printf("输入元素a%d%d:",i+1,j+1); scanf("%d",&b[i][j]); } } //将两个数组相加 for(i=0;i<r;++i) { for(j=0;j<c;++j) { sum[i][j]=a[i][j]+b[i][j]; } } //显示结果 printf("\n二维数组相加结果:\n\n"); for(i=0;i<r;++i) { for(j=0;j<c;++j) { printf("%d",sum[i][j]); if(j==c-1) { printf("\n\n"); } } } system("pause"); return0;}5.#include<stdio.h>#include<windows.h>intmain(){ intarray[10]={0,1,2,3,4,5,6,7,8,9}; inteven[10],odd[10]; intloop,e,d; e=d=0; for(loop=0;loop<10;loop++) { if(array[loop]%2==0) { //偶数 even[e]=array[loop]; e++; } else { //奇数 odd[d]=array[loop]; d++; } } printf("原始数组->"); for(loop=0;loop<10;loop++) printf("%d",array[loop]); printf("\n偶数->"); for(loop=0;loop<e;loop++) printf("%d",even[loop]); printf("\n奇数->"); for(loop=0;loop<d;loop++) printf("%d",odd[loop]); printf("\n"); system("pause"); return0;}6.#include<stdio.h>#include<windows.h>intmain(){ inta[10][10],transpose[10][10],r,c,i,j; printf("输入矩阵的行与列:"); scanf("%d%d",&r,&c); //从键盘获取矩阵元素 printf("\n输入矩阵元素:\n"); for(i=0;i<r;++i) { for(j=0;j<c;++j) { printf("输入元素a%d%d:",i+1,j+1); scanf("%d",&a[i][j]); } } //显示输入的矩阵a[][]*/ printf("\n输入矩阵:\n"); for(i=0;i<r;++i) { for(j=0;j<c;++j) { printf("%d",a[i][j]); //每行输入完成后换行 if(j==c-1) printf("\n\n"); } } //转换数组元素 for(i=0;i<r;++i) { for(j=0;j<c;++j) { //i和j交换位置 transpose[j][i]=a[i][j]; } } //显示转换后的矩阵a printf("\n转换后矩阵:\n"); for(i=0;i<c;++i){ for(j=0;j<r;++j) { printf("%d",transpose[i][j]); if(j==r-1) printf("\n\n"); } } system("pause"); return0;}7.#include<stdio.h>#include<windows.h>intmain(){ inti,n; floatarr[100]; printf("输入元素个数(0~100):"); scanf("%d",&n); printf("\n"); //接收用户输入 for(i=0;i<n;++i) { printf("输入数字%d:",i+1); scanf("%f",&arr[i]); } //循环,并将最大元素存储到arr[0] for(i=1;i<n;++i) { //如果要查找最小值可以将<换成> if(arr[0]<arr[i]) arr[0]=arr[i]; } printf("最大元素为=%.2f\n",arr[0]); system("pause"); return0;}8.#include<stdio.h>#include<windows.h>intmain(){ intoriginal[10]={1,2,3,4,5,6,7,8,9,0}; intcopied[10]; intloop; //拷贝数组 for(loop=0;loop<10;loop++) { copied[loop]=original[loop]; } //输出格式设置 printf("元素数组->拷贝后的数组\n"); //按格式打印在控制台 for(loop=0;loop<10;loop++){ printf("%2d%2d\n",original[loop],copied[loop]); } system("pause"); return0;}第6章
指针
课后习题答案单选题B2.B3.A4.A5.C6.A7.D8.C9.C10.D程序填空题voidRealSwap(double*x,double*y); RealSwap(&a,&b); *x=*y; *y=t;gets(cstr); ls*10+cstr[ii]-'0';strlen(cstr) ch==cstr[ii]; printf("%d",ii)(str1[i]!='\0'); str2[i]=str1[i]; str2[i]='\0';编程题intmain(){intarr[10];inti,max,min,difference;//输入10个整数for(i=0;i<10;i++){scanf("%d",&arr[i]);}//初始化最大值和最小值为第一个输入的整数max=arr[0];min=arr[0];//遍历数组,找到最大值和最小值for(i=1;i<10;i++){if(arr[i]>max){max=arr[i];}if(arr[i]<min){min=arr[i];}}//计算差值difference=max-min;//输出结果printf("differencevalue=%d\n",difference);return0;}#include<stdio.h>#include<string.h>intisPalindrome(charstr[]){intlen=strlen(str);for(inti=0;i<len/2;i++){if(str[i]!=str[len-1-i]){return0;//Notapalindrome}}return1;//Palindrome}intmain(){charstr[80];fgets(str,sizeof(str),stdin);//Removenewlinecharacterfromtheinputstr[strcspn(str,"\n")]='\0';if(isPalindrome(str)){printf("yes\n");}else{printf("no\n");}return0;}#include<stdio.h>intmain(){charstr[81];gets(str);//Findthepositionofthenewlinecharacterintlen=0;while(str[len]!='\n'&&str[len]!='\0'){len++;}str[len]='\0';//Replacenewlinecharacterwithnullterminatorintresult=0;for(inti=0;str[i]!='\0';i++){if(isdigit(str[i])){result=result*10+(str[i]-'0');}}printf("%d\n",result);return0;}第7章字符串课后习题答案一、单选题1.B2.D3.C4.D5.C6.D7.D8.A9.B10.C二、程序填空题1.(str1[i]!='\0')str2[i]=str1[i];str2[i]='\0';2.i=0s1[i]!='\0's1[i]=s2[j]j++s1[i]='\0'3.mystrcmp(str1,str2)(*s1==*s2)return*s1-*s2;4.gets(cstr)ls*10+cstr[ii]-'0'5.p=s;*p!=0;p++*p==a*p=b三、编程题1.#include<stdio.h>voidfind(char*p);intmain(){//数字一个字符串charstr[80];gets_s(str);//调用函数find(str);}voidfind(char*p){inti,num[10]={0},j=0,m=0;intflag=0;for(i=0;*(p+i)!='\0';i++){if(*(p+i)>='0'&&*(p+i)<='9'){m=m*10+(*(p+i)-'0');flag=1;}else{if(flag==1){num[j++]=m;m=0;}flag=0;}}if(flag==1){num[j++]=m;}num[j]='\0';for(i=0;num[i]!='\0';i++){printf("%d\t",num[i]);}}2.#include<stdio.h>intmain(){//1.输入一串字符串charstr[100];inti,count=0,sum=0;gets(str);for(i=0;str[i]!='\0';i++){//2.提取其中数字//2.1组合数字[无法完成]-换个思路,去掉所有的非数字元素//2.1.1一个组合前后都是字母,遇见字母组合停止记录if(str[i]>='0'&&str[i]<='9'){count=count*10+(str[i]-'0');//3.1数字的和是后面数字和10倍相加,相当与记录}else{sum=sum+count;//3.2如果遇见字母就停止记录,做相加count=0;}//3.数字相加}printf("%d\n",sum);return0;}3.#include<stdio.h>chara[101];inti=0;intmain(){gets(a);while(a[i]!=NULL){if((a[i]>=97)&&(a[i]<=122))a[i]=a[i]-32;i++;}puts(a);return0;}4.#include<stdio.h>intMyStrlen(charstr[]);intMyStrlen(charstr[]){ inti;intlen=0;for(i=0;str[i]!='\0';i++){ len++;}return(len);} intmain(){ chara[80];intlen;printf("Pleaseenterastring:");gets(a);len=MyStrlen(a);printf("Thelengthofthestringis:%d\n",len);return0;}5.#include<stdio.h>#include<string.h>intmain(){chara[81];gets(a);intl=strlen(a);charm=a[0];for(inti=0;i<l;i++){if(m<a[i])m=a[i];}printf("%c",m);return0;}6.#include<stdio.h>#include<string.h>#defineN100intmain(){chara[N];intlen,i;printf("请输入一个字符串:");gets(a);len=strlen(a);printf("逆序输出结果为:");for(i=len-1;i>=0;i--)printf("%c",a[i]);printf("\n");return0;}7.#include<stdio.h>#include<math.h>intmain(){charstr[33];inti,t=7,sum=0;intcnt=32;gets(str);//回车键占据一个空格,数组长度应为33,小了会导致数组越界访问for(i=0;i<32;i++){str[i]=str[i]-48;//将字符转为数字sum=sum+str[i]*pow(2,t);if(t==0){printf("%d",sum);t=7;//计算完一组数,将sum清零sum=0;if(i!=31){printf(".");}}elset--;}return0;}第8章结构体与共用体课后习题答案一、单选题1.D2.A3.D4.B5.B6.D7.C8.D9.C10.C二、程序填空题1.sizeof(bt)2.stud[i].name3.ptr=&stu;ptr->name4.ptr<stu+3ptr++5.n[i]=m[i];%s,%d\nn[i].no,n[i].data三、编程题1.#include<stdio.h>#include<stdlib.h>typedefstructstu{charnum[9];charname[15];ints1;ints2;ints3;structstu*next;}stu;stu*Buynode(){stu*node=(stu*)malloc(sizeof(stu));node->next=NULL;returnnode;}intmain(){intn=0;scanf("%d",&n);getchar();stu*cur,*head;cur=head=Buynode();scanf("%s",head->num);scanf("%s",head->name);scanf("%d%d%d",&head->s1,&head->s2,&head->s3);while(--n){getchar();stu*node=Buynode();scanf("%s",node->num);scanf("%s",node->name);scanf("%d%d%d",&node->s1,&node->s2,&node->s3);cur->next=node;cur=cur->next;}cur=head;intmax=cur->s1+cur->s2+cur->s3;while(cur){if((cur->s1+cur->s2+cur->s3)>max)max=cur->s1+cur->s2+cur->s3;cur=cur->next;}cur=head;while((cur->s1+cur->s2+cur->s3)!=max){cur=cur->next;}printf("%s%s%d",cur->name,cur->num,cur->s1+cur->s2+cur->s3);return0;}2.#include<stdio.h>intmain(){typedefstructo{charname[100];floatsalary1;floatsalary2;floatpay;}t;intn;scanf("%d",&n);tpeople[n];doublefee[n];for(inti=0;i<n;i++){scanf("%s%f%f%f",&people[i].name,&people[i].salary1,&people[i].salary2,&people[i].pay);fee[i]=people[i].salary1+people[i].salary2-people[i].pay;}for(inti=0;i<n;i++){printf("%s%.2lf\n",people[i].name,fee[i]);}return0;}3.#include<stdio.h>intcmp(chara[],charb[]){inti;for(i=0;i<8;i++){if(a[i]>b[i])return1;elseif(a[i]<b[i])return0;}}intmain(){intcmp(chara[],charb[]);intn,i,j;scanf("%d",&n);struct{charname[20];charold[9];chartel[50];}s[n],t;for(i=0;i<n;i++){scanf("%s%s%s",s[i].name,s[i].old,s[i].tel);}for(i=0;i<n-1;i++){for(j=0;j<n-1-i;j++){if(cmp(s[j].old,s[j+1].old)){t=s[j];s[j]=s[j+1];s[j+1]=t;}}}for(i=0;i<n;i++){printf("%s%s%s\n",s[i].name,s[i].old,s[i].tel);}}4.#include<stdio.h>typedefstructStudent{//结构体charnumber[6];//记住要设大一点,设5就不能通过charname[11];intgrade;}Student;intmain(){intn,i,j,sum=0;scanf("%d\n",&n);Studentstudent[n];for(i=0;i<n;i++){//输入scanf("%s%s%d",student[i].number,student[i].name,&student[i].grade);sum+=student[i].grade;}doubleaverage=1.0*sum/n;printf("%.2f\n",average);for(i=0;i<n;i++){if(student[i].grade<average){printf("%s%s\n",student[i].name,student[i].number);}}return0;}5.#include<stdio.h>structbook{charname[32];doubleprice;}s[10],high,low;intmain(){intn;scanf("%d",&n);for(inti=0;i<n;i++){scanf("\n");gets(s[i].name);scanf("%lf",&s[i].price);}high=low=s[0];for(inti=1;i<n;i++){if(s[i].price>high.price)high=s[i];if(s[i].price<low.price)low=s[i];}printf("%.2lf,%s\n",high.price,);printf("%.2lf,%s\n",low.price,);return0;}6.#include<stdio.h>#include<string.h>intmain(){intn;scanf("%d",&n);intsex[n];chararr[n][15];inthx[51]={0};//标志匹配时是否已经匹配过的条件,0表非匹配,1表已被匹配,跳过for(inti=0;i<n;i++){scanf("%d%s",&sex[i],arr[i]);}for(inti=0;i<n/2;i++){for(intj=n-1;j>(n-1)/2;j--){if(sex[i]!=sex[j]&&hx[i]==0&&hx[j]==0){printf("%s%s\n",arr[i],arr[j]);hx[i]=hx[j]=1;}}}return0;}7.#include<stdio.h>intmain(){inth,m,s;scanf("%d:%d:%d:",&h,&m,&s);intn;scanf("%d",&n);//输入的秒数inttime;//定义变量表示时间,以秒的形式存储time=3600*h+60*m+s+n;//将相加后的时间表示成秒if(time>=86400)//一天
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年福建幼儿师范高等专科学校单招职业技能考试备考试题附答案详解
- 2026年广西蓝天航空职业学院单招综合素质考试模拟试题附答案详解
- 教育安全培训新闻报道课件
- 四年级数学(四则混合运算)计算题专项练习与答案
- 2026年时事政治题库测试卷附完整答案详解【历年真题】
- 教育培训企业安全承诺书课件
- 2025年南京视觉艺术职业学院马克思主义基本原理概论期末考试笔试题库
- 2025年漯河食品工程职业大学马克思主义基本原理概论期末考试参考题库
- 2025年开封空分设备厂职工大学马克思主义基本原理概论期末考试笔试题库
- 2025年湖北大学马克思主义基本原理概论期末考试笔试真题汇编
- 2025重庆市涪陵区马武镇人民政府选聘本土人才14人参考题库附答案
- 二年级上册语文试题-第六单元测试题-人教部编版(含答案)
- 医院院感考试题库及答案
- 拣货主管年终总结
- 糖尿病重症患者肠内营养血糖调控方案
- 光伏钻孔灌注桩基础施工技术规范
- 安保部月度工作总结
- 防范和抵御宗教向校园渗透
- 【语文】四川省成都市实验小学小学一年级上册期末试卷(含答案)
- 设备点巡检基础知识培训课件
- 【招聘】招聘数据分析报告
评论
0/150
提交评论