C语言程序设计教程第二版李志球课后参考答案_第1页
C语言程序设计教程第二版李志球课后参考答案_第2页
C语言程序设计教程第二版李志球课后参考答案_第3页
C语言程序设计教程第二版李志球课后参考答案_第4页
C语言程序设计教程第二版李志球课后参考答案_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

第1章一、选择题1.B2.D3.B4.C5.A6.C7.D8.C9.A10.C11.B12.B13.C14.B15.D16.B17.B18.B二﹑填空题1.变量2.区分、不同3.退格、换行、横向跳格、双引号4.双精度、长整型、字符、字符串、八进制整型、转义字符5.main6.顺序、选择、循环三、判断题1.错2.对3.对4.错5.错6.错7.错8.对9.对10.对11.对12.对四、问答题1.写出下面表达式的值(1)36(2)5,4(3)9,9,272.下列表达式是否正确?若正确,表达式的值是什么?21/221/2.021.0/221%221.0%221%2.018%1515%183%151010.50000010.5000001错误错误31533.(1)C语言程序是由文件组成(2)每个C程序文件由函数组成(3)C程序从main函数开始执行(4)每个函数由函数说明部分和函数体组成。4.在TC的主菜单中选择Run菜单,选择下拉菜单中的Run命令(或直接按“Ctrl-F9”),就开始进行源程序的编译、连接并运行。如没有严重的语法错误,系统自动生成对应的目标文件和可执行文件,并以扩展名.OBJ和.EXE存盘。5.分别为“.C”、“.OBJ”和“.EXE”。6.(1)程序由三种基本结构组合而成结构化程序设计时,不论程序大小、简单还是复杂,规定程序主要由三种基本结构组成,它们分别是顺序结构、选择结构和循环结构。可以证明,任何一个复杂的问题的程序设计都可以由这三种基本结构组成。而且要求每一个模块有以下特点:只有一个入们;只有一个出口;程序结构中没有死循环。(2)模块化设计较复杂和大型程序应按功能分割成一些功能模块,并将这些模块按层次关系进行组织(3)程序设计采用自顶向下、逐步细化的原则8.有“解释方式”和“编译方式”两种五、编程题编写程序,在屏幕上输出如下信息:

====================Iamastudent.====================main()

{printf("===================\n");

printf("=Iamastudent.=\n");

printf("===================\n");

}

第2章一、选择题1.C2.C3.D4.A5.D6.C7.A8.C9.C10.B11.B12.A13.C14.D15.D二﹑填空题1.分号花括号或{}2.换行3.不做任何操作4.%d%c%s5.16.703887.%09.2f%0.2或%4.2f8.是9。-13110.getchar()函数将用户放入的字符回显屏幕上,放入结束后,按回车键才能响应、getch()函数将用户放入的字符不回显屏幕上,放入结束后,不需按回车键立即响应三、判断题1.错2.对3.对4.对5.对6.对7.错8.对9.错10.错四、问答题3.写出下列程序的运行结果(1)*2000――*\n(2)X=%d,Y=%d(3)X=100,Y=-1004.程序改错把\n去掉(2)把3%d改为%f(3)把x,y,z改为%x,%y,%z(4)s=x*y;v=s*c(5)(s=%f””v=%d\n”,s,v)5.a=3,b=5<cr>c=-3,d=12.102<cr>inpute=Af=8<cr>五、编程题1.编写程序,把560分钟换算成小时和秒。#include<stdio.h>main(){ints;floath;h=560/60.0;s=560*60;printf("560分钟换算成小时是:%f,换算成秒是:%d.\n",h,s);}2.键盘输入一个整数的值,求它的平方、平方根,输出结果时要求有文字提示,并取小数点后二位小数(求平方根函数为sqrt(x),包含在<math.h>中)。#include<math.h>#include<stdio.h>main(){intx,y;floatz;printf("输入一个整数:");scanf("%d",&x);y=x*x;z=sqrt(x);printf("%d的平方是%d,平方根是%.2f.\n",x,y,z);}3.已知一个圆球的半径,求该圆球的体积。#include<stdio.h>#definePI3.14main(){floatr,v;printf("输入圆球的半径:");scanf("%f",&r);v=PI*r*r*r*4/3;printf("圆球的体积:%f.\n",v);}4.键盘输入若干个学生3门课程的成绩,计算每个学生的总分和平均成绩。要求利用goto编写无穷循环程序。#include<stdio.h>main(){floatx1,x2,x3,s,avg;printf("输入学生3门课程的成绩:");scanf("%f,%f,%f",&r1,&x2,&x3);s=x1+x2+x3;avg=s/3;printf("总分:%f,平均成绩:%f.\n",s,avg);}5.编程进行摄氏温度和华氏温度相互转换,摄氏温度和华氏温度之间的转换公式如下:摄氏温度=5/9(华氏温度-32),即C=(F-32)*5/9。#include<stdio.h>main(){floatf,c;printf("输入华氏温度:");scanf("%f",&f);c=(f-32)*5/9;printf("摄氏温度为:%f.\n",c);}6.从键盘输入直角三角形的斜边c与一条直角边a的长,计算并输出另一条直角边b的长。#include<stdio.h>#include<math.h>main(){floata,b,c;printf("输入直角三角形的斜边c与一条直角边a的长:");scanf("%f,%f",&c,&a);b=sqrt(c*c-a*a);printf("另一条直角边b的长:%f.\n",b);}7.编写程序,输出下面图形。*************************#include<stdio.h>main(){printf("*\n");printf("***\n");printf("*****\n");printf("*******\n");printf("*****\n");printf("***\n");printf("*\n");}第3章一、选择题1.A2.B3.B4.B5.C6.D7.B8.B9.C10.D11.A12.C13.D14.B15.A16.D17B18C19A20D21C22D二﹑填空题1.102.X>2&&X<10X<10||X>203.00114.退出SWITCH语句当所有CASE分条件都不满足,则执行其后语句5.前面最近的三、判断题1.错2.错3.错4.对5.错6.对7.对8.对9.对10.对四、问答题写出下面逻辑表达式的值真1(2)真1(3)假0(4)(A)真1(B)真1(C)假0(D)真14、阅读程序,写出程序运行结果ABother五、编程题1.对一批货物征收税金。价格在1万元以上的货物征税5%,在5000元以上,1万元以下的货物征税3%,在1000元以上,5000千元以下的货物征税2%,1000元以下的货物征税1%。编一个程序,输入货物价格,输出相应的税金。#include<stdio.h>intmain(void){intn;floatx,y,p;printf("输入货物价格:");scanf("%f",&x);if(x>=10000)p=0.05;elseif(x>=5000)p=0.03;elseif(x>=1000)p=0.02;elsep=0.01;y=x*p;printf("应缴税金:%f:",y);}2.输入实型变量x和y,若x>y则输出x-y的值,否则输出y-x的值。main(){floatx,y,z;printf("输入两个数x,y:");scanf("%f,%f",&x,&y);if(x>y)z=x-y;elsez=y-x;printf("结果:%f\n",z);}3.用if和switch语句分别编写程序,实现从键盘输入数字1、2、3或4中某个数时,输出excellent、good、pass或fail中的某一个,输入其他字符时输出error。#include<stdio.h>intmain(void){intx;printf("输入1~4整数:");scanf("%d",&x);if(x==1)printf("excellent");elseif(x==2)printf("good");elseif(x==3)printf("pass");elseif(x==4)printf("fail");elseprintf("error");}#include<stdio.h>intmain(void){intx;printf("输入1~4整数:");scanf("%d",&x);switch(x){csae1:printf("excellent");break;csae2:printf("good");break;csae3:printf("pass");break;csae4:printf("fail");break;default:printf("error");}}4.键盘输入一个字符,如果是字母,则将其ASCII值加5,使其在字母字符“a~z”之间变换并输出。例如,字母“a”变成“f",字母“z”变成字母“e”;如果是数字,则将其ASCII值减2,使其在数值字符“0~9”之间变换并输出。例如,字符“9”变成字符“7”,字符“1”变成字符“9”。#include<stdio.h>intmain(void){charc;printf("输入一字符:");scanf("%c",&c);if(c>='A'&&c<='Z'){c=c+5;if(c>'z')c=c-26;}if(c>='a'&&c<='z'){c=c+5;if(c>'z')c=c-26;}if(c>='0'&&c<='9'){c=c-2;if(c<'0')c=c+10}printf("结果:%c\n",c);}5.己知银行整存整取存款不同期限的年息利率分别为:1.98%期限一年2.15%期限二年年息利率2.25%期限三年2.45%期限五年2.65%期限八年编写程序,输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。#include<stdio.h>#include<math.h>intmain(void){intn;floatx,y,p;printf("输入存钱的本金和期限:");scanf("%f,%d",&x,&n);switch(n){case1:p=0.0198;break;case2:p=0.0215;break;case3:p=0.0225;break;case5:p=0.0245;break;case8:p=0.0265;break;}y=x*power((1+p),n);printf("到期利息与本金的和:%f:",y);}第4章一、选择题1.A2.D3.B4.C5.D6.C7.C8.A9.C10.A11.B12.D13.A14.D15.D16.A二﹑填空题1.当型直到型WHILEFORDO_WHILE2.直到先循环后判断3.当先判断后循环4.循环赋初值循环控制条件循环变量埴值6.逗号表达式7.不是8.一个循环中又包含一个完整的循环9.每一层循环次数的乘积10.退出当前循环(跳到当前循环结构的后续语句)结束本次循环(跳过本次循环结束前的语句)三、判断题1.错2.对3.对4.错5.对6.对7.错8.对9.对10.错11.错四、写出下列程序运行结果1.25811142.1371531633.****五、编程题1.编程计算1至50中是7的倍数的数值之和。main(){ints=0,i;for(i=0;i<50;i++);if(i%7==0)s=s+i;printf("1至50中是7的倍数的数值之和是:%d\n",s);}2.从键盘输入的字符中统计数字字符的个数,用换行符结束循环。#include<stdio.h>intmain(void){charc;intn=0;printf("输入正文文本,按回车结束输入:\n");while((c=getchar())!=10)if(c>=48&&c<=57)n++;printf("输入的文本中数字字符的个数:%d\n",n);}3.输入一批正整数,输出其中的最大值和最小值,输入数字“0”结束循环。#include<stdio.h>intmain(void){intx,max,min,i=0;printf("输入正整数,输入“0”束输入:\n");while(1){scanf("%d",&x);if(x==0)break;if(i==0){max=x;min=x;}if(x>max)max=x;if(x<min)min=x;i++;}printf("其中的最大值=%d;最小值=%d\n",max,min);}4.输入一个整数,将其数值按小于10,10-99,100-999,1000以上分类并显示。例如:输入358时,显示358is100to999。#include<stdio.h>intmain(void){intx,;printf("输入一个正整数:");scanf("%d",&x);if(x<10)printf("%dis<10\n",x);elseif(x<100)printf("%dis10to99\n",x);elseif(x<1000)printf("%dis100to999\n",x);elseprintf("%dis>=1000\n",x);}5.编程实现屏幕输出“九九乘法表”,要求以三角形形式输出。(提示:外循环变量i从1开始到9,内循环变量j从1开始到i)。#include<stdio.h>intmain(void){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%1d*%1d=%2d\t",i,j,i*j);printf("\n");}}6.求3到M之间的全部素数,M为任意整数。main(){intm,i;scanf("%d",&m);for(i=3;i<=m;i++);for(j=2;i%j&&j<i;j++);if(j==i)printf("%d",i);}7.用公式e=1+1/1!+1/2!+1/3!+……+1/n!求e的近似值,精度为1/n!<10-6。main(){inti=1;floatp,t,e;t=1,e=0;p=1;while(t>=1e-6){e=e+t;p=p*i;i++;t=1/p;}printf("e=%10.6f\n",e);}8.从键盘输入一位整数,当输入数字0叶程序结束;当输入1~7时,显示下面对应的英文星期名称缩写。1:MON2:TUE3:WED4:THU5:FRI6:SAT7:SUN#include<stdio.h>intmain(void){intx,max,min,i=0;printf("输入1~7整数,输入“0”束:\n");while(1){scanf("%d",&x);if(x==0)break;switch(x){csae1:printf("MON");break;csae2:printf("THU");break;csae3:printf("WED");break;csae4:printf("THU");break;csae5:printf("FRI");break;csae6:printf("SAT");break;csae7:printf("SUN");break;}}}第5章一、选择题1.C2.B3.D4.C5C6.D7.D8.C9.D10.C11.C12.C13.C14.D15.B16.C17.A18.A19.B20.C二﹑填空题1.相同数据类型数据行顺序行顺序2.数据名3.行列4.随机值05.‘|0’6.97.字符和字符串8.要STRING.H9.前地址三、判断题1.错2.错3.对4.对5.对6.对7.错8.对9.对10.错四、问答题1.什么是数组,为什么要引入数组?数组是一种自定义数据类型,它是相同数据类型的数据有序集合,数组中的分量称为数组元素,对数组元素的操作处理通过数组下标进行。正是因为数组元素具有序号这个特性,就可以解决许多基本数据类型无法解决的一些实际问题。2.数组的初始化有哪几种方式?1)定义数组时如果没有进行初始化,则数组元素的值为随机值。但如果在定义数组时规定其存储类别为static或extern,则编译系统自动将没有初始化的数组元素赋默认初值为0。2)在定义数组时对所有数组元素初始化。3)可以只对数组中的部分元素初始化。3.a[3],a[2+3],a[9-9],a[3/1.0],a[3.4]4.1791755.i=10+k;i>=j;i--a[i+1]=a[i]五、编程题1.用冒泡排序法对输入的20个数进行降序排序并存入数组中。然后输入一个数,查找该数是否在数组中存在,若存在,打印出该数在数组中对应的下标值。#defineN20main(){inta[N],i,j,t,x;printf("\n请输入%d个待排序的数据,每个数据都以回车结束:\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N;i++)/*共进行n-1趟排序*/for(j=N-1;j>i;j--)if(a[j-1]<a[j]){t=a[j-1];a[j-1]=a[j];a[j]=t;}printf("\n降序排序后数据:\n");for(i=0;i<N;i++)printf("%d,",a[i]);printf("\n输入要查找的数:");scanf("%d",&x);for(i=0;i<N;i++)if(a[i]==x){printf("\n要查找的数在数组中的下标是:%d\n",i);break;}if(i>=N)printf("\n要查找的数不在数组中\n");}2.求一个3×3矩阵对角线元素之和。#include<stdio.h>main(){intnum[3][3]={{1,2,3},{4,5,6},{7,8,9}};inti,s=0;for(i=O;i<3;i++)s=s+num[i][i];printf("对角线和:%d\n",s);}3.编写程序,打印杨辉三角形(要求打印10行)。11112113311464115101051……#defineN11main(){inta[N][N]={0,0},i,j;for(i=1;i<N;i++){a[i][i]=1;a[i][1]=1;}for(i=3;i<N;i++)for(j=2;j<=i-1;j++)a[i][j]=a[i-1][j-1]+a[i-1][j];for(i=1;i<N;i++){for(j=1;j<=i;j++)printf("%d\t",a[i][j]);printf("\n");}}4.将一个数组中的元素逆序存放,如原来数组的元素是23,59,26,48,14。要求改为:14,48,26,59,23。#defineN5main(){inta[N],i,t;printf("\n请输入%d个数据,每个数据都以回车结束:\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N/2;i++){t=a[i];a[i]=a[N-i];a[N-i]=t;}printf("逆序存放结果:");for(i=0;i<N;i++)printf("%d\t",&a[i]);printf("\n");}5.输入一个字符串,统计数字、空格、字母和其它字符各自出现的次数。#include<string.h>main(){chars[100];intn1=0,n2=0,n3=0,n4=0,i;printf("\n请输入字符串:");scanf("%s",s);for(i=0;i<strlen(s);i++){if(s[i]>='0'&&s[i]<='9')n1++;elseif(s[i]=='')n2++;elseif((s[i]>='A'&&s[i]<='Z')||(s[i]>='a'&&s[i]<='z'))n3++;elsen4++;}printf("字符串中数字%d,空格%d,字母%d,其它字符%d\n",n1,n2,n3,n4);}6.编一3×5矩阵的转置程序,利用新的数组存放转置后的矩阵。#include<stdio.h>main(){intnum[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};inti,j,t;for(i=0;i<3;i++){for(j=0;j<5;j++)printf("%d",num[i][j]);printf("\n");}printf("\n");for(i=0;i<3;i++)/*行、列互换*/for(j=i+1;j<5;j++){t=num[i][j];num[i][j]=num[j][i];num[j][i]=t;}for(i=0;i<3;i++){for(j=0;j<5;j++)printf("%d",num[i][j]);printf("\n");}}7.编写程序求两个3×5矩阵相加,相加的结果放到第三个矩阵中。main(){inta[3][5]={{18,5,34,2,3},{17,19,13,14,36},{1,21,6,49,29}};intb[3][5]={{19,7,5,5,0},{10,1,2,4,10},{12,11,5,6,7}};intc[3][5];inti,j,k;for(i=0;i<3;i++)for(j=0;j<5;j++)c[i][j]=a[i][j]*b[i][j];printf("矩阵c元素的值:\n");for(i=0;i<3;i++){for(j=0;j<5;j++)printf("%6d",c[i][j]);printf("\n");}}第六章一、选择题1.B 2.C 3.C 4.B 5.B6.C 7.A 8.B 9.D 10.B11.D 12.D 13.D 14.A二、填空题1.把实参值转换类型2.值传递3.全局4.voidfun(doubleb[10][20])5.106.–f、fun(10)7.1368.2469.2510.1111.使用尖括号表示在包含文件目录中去查找,而不在源文件目录去查找;使用双引号则表示首先在当前的源文件目录中查找,若未找到才到包含目录中去查找12.printf("%d\n",m)三、判断题1.错 2.对 3.错 4.错 5.错6.对 7.错 8.对 9.错 10.错11.错 12.错四、编程题1.求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于0、等于0和小于0时的根,并输出结果。从主函数输入a、b、c的值。#include<stdio.h>#include<math.h>main(){floata,b,c,d;printf(“请输入方城系数a,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);d=b*b-4*a*c;if(d>1e-6)f1(a,b,c);elseif(fabs(d)<1e-6)f2(a,b,c);elsef3(a,b,c);}voidf1(floata,floatb,floatc){floatx1,x2;x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);printf(“x1=%fx2=%f\n”,x1,x2);}voidf2(floata,floatb,floatc){floatx;x=(-b))/(2*a);printf(“x1=x2=%f\n”,x);}voidf3(floata,floatb,floatc){floatp,q;p=-b/(2*a);q=sqrt(b*b-4*a*c);printf(“x1=%f+%fix2=%f-%fi\n”,p,q,p,q);}2.编写一个判素数的函数,在主函数中输入一个整数,输出是否是素数的信息。#include<stdio.h>intprime(intn){inti,k;k=sqrt(n);for(i=2;i<=k,i++)if(n%i==0)break;if(i>=k+1)return1;elsereturn0;}main(){intn;printf("n=");sacnf("%d",&n);if(prime(n)==1)printf("此数是素数");elseprintf("此数不是素数");}3.用二维数组存储矩阵,编写一个函数实现矩阵的转置(行列互换),在主函数中输入矩阵,调用函数进行转置,然后输出。voidchange(inta[3][],intb[4][]){inti,j;for(i=0;i<3;i++)for(j=0;j<4;j++)b[j][i]=a[i][j];}main(){intx[3][4],y[4][3];inti,j,k;printf("请输入3*4矩阵数据:");for(i=0;i<3;i++)for(j=0;j<4;j++){scanf("%d",&k);x[i][j]=k;}change(x,y);for(i=0;i<4;i++){for(j=0;j<3;j++)printf("%d\t",y[i][j]);printf("\n");}}4.编写一函数,求一数组中的最大元素及其下标。在主函数中输入数组元素。intmax(inta[]){inti,n;n=0;for(i=0;i<10;i++)if(a[n]<a[i])n=i;returnn;}main(){intx[3];inti,m,k;printf("请输入10个整数:");for(i=0;i<10;i++)scanf("%d",&x[i]);m=max(x,&k);printf("max=%di=%d\n",x[m],m);}5.编写一函数,模拟字符串strcpy函数实现字符串的复制功能。ntstrcpy(cahrs1[],chars2[]){inti=0;while(s2[i]!='\0'){s1[i]=s2[i];i++;}s1[i]='\0';returni;}6.用递归法求2n,递归公式如下:2n=12n=1(n=0)2n-1*2(n>0){longf;if(n==0)f=1;elsef=power(n-1)*2;returnf;}main(){intn;longy;printf("请输入一整数:");scanf("%d",&n);y=power(n);printf("2^%d=%ld",n,y);}7.用递归法将一个任意位整数n转换成字符串。例如,若输入1234,应输出字符串“1234”。chars[10];inti=0;str(intn){if(n==0)s[i]='\0';else{str(n/10);s[i]=(n%10)+48;i++;}}main(){intn;printf("请输入一整数:");scanf("%d",&n);str(n);printf("%s\n",s);}8.试定义一个带参数的宏SWAP(x,y),对x,y值进行交换,并写出程序,输入两个数作为使用宏时的实参,输出已交换的两个值。#defineSWAP(a,b)t=b;b=a;a=tmain(){inta,b,t;printf(“请输入两个数a,b:”);scanf(“%d,%d”,&a,&b);SWAP(a,b);printf(“a=%d,b=%d”,a,b);}

第七章习题答案一、选择题1.C 2.C 3.C 4.B 5.B6.A 7.C 8.C 9.B 10.B11.D 12.A 13.C 14.B二、填空题1.floatx,*px=&x;2.a[0]+i、a[i]3.p=(int*)malloc(n*3);、free(p);4.125.2、26.37.ello8.*(p+7)、int*z10.命令行参数的个数三、判断题1.错 2.错 3.错 4.错 5.错6.错 7.对 8.对 9.错 10.错四、编程题1.定义两个整型变量a、b,再定义两个整型指针变量p和q,使指针p和q指向变量a和b,用指针p和q计算a、b的和。main(){inta=10,b=5;int*p,*q;p=&a;q=&b;printf("a+b=%d",*p+*q);}2.用指向数组的指针编写冒泡法排序程序。3.写一函数slength用来求出字符串的长度,并用main函数调用此函数。intstrlen(char*s){inti=0;while(s[i]!='\0')i++;returni;}main(){chars[40];printf("请输入一字符串:");scanf("%s",s);printf("字符串长度=%d\n",strlen(s));}4.编写一个计算两个矩阵和的函数,在main函数中输入两个矩阵数据,调用此函数,然后输出结果。要求用指针作为函数参数。voidadd(inta[3][2],intb[3][2],intc[3][2]){inti,j;for(i=0;i<3)for(j=0;j<2;j++)c[i][j]=a[i][j]+b[i][j];}main(){intx[3][2],y[3][2],z[3][2];inta,b;printf("请输入矩阵1:\n");for(i=0;i<3){scanf("%d,%d",&a,&b);x[i][0]=a;x[i][1]=b;}printf("请输入矩阵2:\n");for(i=0;i<3){scanf("%d,%d",&a,&b);y[i][0]=a;y[i][1]=b;}add(x,y,z);printf("两矩阵和:\n");for(i=0;i<3){for(j=0;j<2;j++)printf("%d\t",z[i][j]);printf("\n");}}5.编写将BASIC赋予*p后逐个取出字符进行纵向显示BASIC的程序。main(){char*p="BASIC";while(*p!='\0'){printf("%c\n",*p);p++;}}6.设二维数组x[4][5],试用数组指针的方法求每行元素的和。main(){intx[4][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20}};int*p[4],i,j,s[4]={0,0,0,0};for(i=0;i<4;i++)p[i]=x[i];for(i=0;i<4;i++)for(j=0;j<5,j++)s[i]=s[i]+*(p[i]+j);for(i=0;i<4;i++)printf("%d\n",s[i]);}7.通过用main函数的参数接收命令行参数,编写两个数的简单计算程序。假设程序文件名为math.c,在命令行下输入“math10*2”,执行结果输出20。#include<stdlib.h>#include<stdio.h>main(intargc,char*argv[]){doublex,y,z;charc;if(argc<3){printf("命令格式错误!使用格式为:add数值1运算符数值2");exit(0);}x=atof(argv[1]);c=argv[2][0];y=atof(argv[3]);switch(c){case'+':z=x+y;break;case'-':z=x-y;break;case'*':z=x*y;break;case'/':z=x/y;break;}printf("%f%c%f=%f\n",x,c,y,z);}

第八章习题答案一、选择题1.A 2.B 3.A 4.85 5.A6.A 7.D 8.B 9.A10.C 11.D二、填空题1.结构体类变量名.成员2.各成员所需内存数之和、成员中占内存最大所需内存数3.最后一次被赋值的成员4.65.de6.267.28.不需占用连续的存储单元、插入和删除结点不需移动结点10.1、7、111.1、0、56三、判断题1.错 2.对 3.错 4.错 5.错6.对 7.对 8.对 9.错 10.错11.错 12.对四、编程题1.定义一个表示复数的数据结构,然后编写两个负数的加法程序。#include<stdio.h>structxs{floatp,q;};main(){structxsx1,x2,x3;printf("请输入一个虚数:");scanf("%f%f",&x1.p,&x1.q);printf("请输入一个虚数:");scanf("%f%f",&x2.p,&x2.q);x3.p=x1.p+x2.p;x3.q=x1.q+x2.q;printf("%f%fi",x3.p,x3.q);}2.定义一个描述日期的结构体,输入两个日期计算两日期之间的天数。structdate{intmonth;intday;intyear;};main(){structdatedate1,date2;intn;printf("日期1(yyyy-mm-dd):");scanf("%d-%d-%d",&date1.year,&date1.month,&date1.day);printf("日期2(yyyy-mm-dd):");scanf("%d-%d-%d",&date2.year,&date2.month,&date2.day);n=(date2.year-date1.year)*365;n=n+(date2.month-date1.month)*30;n=n+(date2.day-date1.day);printf("n=%d\n",n);}说明:为了简化程序,程序中没有考虑闰年和月份天数的差异。3.建立一个职工档案,它包括职工的工作证号、姓名、性别、出生时间、参加工作时间、文化程度、工资等内容,最后输出:1)职工的平均年龄和平均工资;2)各文化程度职工人数的分布情况。#include<string.h>#include<dos.h>structperson{charbh[11];charxm[10];charxb[3];structdatebirthday,joindate;chardegree[10];floatpay;}per;main(){inti,j,count[]={0,0,0,0},age_avg=0;structdatenow;floatpay_avg=0;chardegree[4][10]={"小学","初中","高中","大学"};getdate(&now);for(i=0;i<10;i++){printf("工作证号:");scanf("%s",per.bh);printf("姓名:");scanf("%s",per.xm);printf("性别:");scanf("%s",.xm);printf("参加工作时间");scanf("%d-%d-%d",&per.joindate.da_year,&per.joindate.da_mon,&per.joindate.da_day);printf("出生时间");scanf("%d-%d-%d",&per.birthday.da_year,&per.birthday.da_mon,&per.birthday.da_day);printf("文化程度:");scanf("%s",per.degree);printf("工资");scanf("%f",&per.pay);pay_avg=pay_avg+per.pay;age_avg=age_avg+age(now,per.birthday);for(j=0;j<4;j++)if(strcmp(per..degree,degree[j])count[j]++;}printf("平均年龄:%d平均工资%f\n",age_avg,pay_avg);for(i=0;i<4;i++)printf("%s:%d\n",degree[i],count[i]);}intage(structdatedate1,structdatedate2){intn;n=date2.da_year-date1.da_year;if(date2.da_mon<date1.da_mon&&(date2.da_mon=date1.da_mon&&date2.da_day<date1.da_day))n=n-1;returnn;}4.使用结构体编写班级同学通讯录,包括同学的姓名、家庭住址、联系电话、邮政编码。structperson{charxm[10];charaddress[20];chartel[15];charpost[7];}stu[50];intsn=0;voidinput(){printf("姓名:");scanf("%s",stu[sn].xm);printf("家庭住址:");scanf("%s",stu[sn].address);printf("联系电话:");scanf("%s",stu[sn].tel);printf("邮政编码:");scanf("%s",stu[sn].post);sn++;}voidview(){inti;for(i=0;i<sn;i++){printf("姓名:%s\n",stu[sn].xm);printf("家庭住址:%s\n",stu[sn].address);printf("联系电话:%s\n",stu[sn].tel);printf("邮政编码:%s\n",stu[sn].post);getch();}}main(){charcho;while(1){printf("1.输入\n");printf("2.浏览\n");printf("3.退出\n");printf("请选择(1-3):");cho=getch();switch(cho){case'1':input();case'2':view();case'3':exit(0);}}}5.编写一个对候选人得票的统计程序。候选人姓名和得票数定义成结构体。#include<string.h>structeperson{charname[10];intcount;}leader[3]={"Li",0,"Zhang",0,"Wang",0};main(){intI,j;charleader_name[10];for(i=1;i<=10;i++){scanf("%s",leader_name);for(j=0;j<3;j++)if(strcmp(leader_name,leader[j].name)==0)leader[j].count++;}for(i=0;i<3;i++)printf("%s\t%d\n",leader[i].name,leader[i].count);}6.一个口袋有红、黄、绿、白、蓝五种颜色的球若干,每次从口袋中取出三个球,问得到三种不同颜色球的可能取法,并输出每种组合的三种颜色名称(用枚举类型表示颜色)。main(){enumball{read,yellow,green,white,blue}b1,b2,b3;charcolor[5][7]={"read","yellow","green","white","blue"};intn=0;for(b1=read;b1<=blue;b1++)for(b2=b1+1;b2<=blue;b2++)for(b3=b2+1;b3<=blue;b3++){printf("%s\t%s\t%s\n",color[b1],color[b2],color[b3]);n++;}printf("n=%d",n);}7.在链表中查找数据域的值为整数a的结点,并在该结点前插入一个新结点,新结点的值为b,若为空链,则建立链表,若未找到值为a的结点,则将新结点插在链尾。structstudent_node_type{intnum;intscore;structstudent_node_type*next;};structstudent_node_type*head;insert(){intnum;structstudent_node_type*p1,*p2,*q;q=(structstudent_node_type*)malloc(sizeof(structstudent_node_type));printf("请输入查找的学号:");scanf("%d",&num);printf("请输入新学生数据:");printf("学号成绩\n");scanf("%d%d",&q->num,&q->score);q->xh=xs.xh;q->score=xs.score;p1=head;if(p1==NULL){q->next=NULL;head=q;}else{while(p1!=NULL){if(p1->num==num)break;p2=p1;p1=p1->next;}if(p1!=NULL){q->next=p2->next;p2->next=q;}else{p2->next=q;q->next=NULL;}}}create_link_table(){inti,n;structstudent_node_type*head,*p,*q;printf("请输入学生记录数:");scanf("%d",&n);printf("学号成绩\n");for(i=0;i<n;i++){p=(structstudent_node_type*)malloc(sizeof(structstudent_node_type));p->next=NULL;if(head==NULL)head=p;if(q==NULL)q=p;else{q->next=p;q=p;}scanf("%d%%d",&p->num,&p->score);}return(head);/*返回头指针*/}print_link_table(){structstudent_node_type*p;p=head;printf("学号成绩\n");while(p!=NULL){printf("%d%7d\n",p->num,p->score);p=p->next;}}main(){create_link_table();insert();print_link_table();}

第九章习题答案一、选择题1.C 2.C 3.B 4.A 5.D6.D 7.D 8.A 9.C 10.A二、填空题1.ASCII码、二进制2.键盘3.文件结构体数据在内存中的首地址4.文件头5.文件尾6.07.使fp指向文件中的位置指针指向文件开头,并清除文件结束标志和错误标志8.fseek(fp,25,1)9.110.fopen11.!feof(fp)三、判断题1.对 2.错 3.错 4.错 5.对6.对 7.错 8.错四、编程题1.从键盘读入文本(用$作为输入结束标志),写入到out.txt文件中。#include<stdio.h>main(){FILE*fp;charch;if((fp=fopen("out.txt","w"))==NULL){prin

温馨提示

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

评论

0/150

提交评论