欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《C语言程序设计》课后习题参考答案.doc

    • 资源ID:33459647       资源大小:103.50KB        全文页数:20页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《C语言程序设计》课后习题参考答案.doc

    如有侵权,请联系网站删除,仅供学习与交流C语言程序设计课后习题参考答案【精品文档】第 20 页高等院校计算机基础教育规划教材C+程序设计课后习题参考答案 武汉大学出版社习题1参考答案一、 选择题1. A 2. D 二、 填空题1. BASIC、FORTRAN、AL_GOL60和COBOL2. 83. 关键字4. 编辑、编译、链接和运行三、 简答题1.答:(1)C语言具有结构化的控制语句。C语言提供了结构化程序所必需的基本控制语句,实现了对逻辑流的有效控制。(2)C语言具有丰富的数据结构类型。C语言除提供整型、实型、字符型等基本数据类型外,还提供了用基本数据类型构造出的各种复杂的数据结构,如数组、结构、联合等。C语言还提供了与地址密切相关的指针类型。此外,用户还可以根据需要自定义数据类型。(3)C语言具有丰富的运算符。C语言提供了多达34种运算符,丰富的数据类型与丰富的运算符相结合,使C语言的表达力更具灵活性,同时也提高了执行效率。(4)C语言简洁、紧凑,使用方便、灵活,程序书写自由,有9种控制语句。(5)C语言既具有高级语言的功能,又具有低级语言的许多功能,通常被称为中级计算机语言。它既是成功的系统描述语言,又是通用的程序设计语言。(6)C语言与汇编语言相比,可移植性好。(7)功能强大。C语言具有低级语言的一些功能,所以,生成目标代码质量高,程序执行效率高。现在许多系统软件都用C语言来描述,可以大大提高了编程效率。2.答:运行一个C语言程序,一般需要经过如下几个步骤:上机输入并编辑源程序;编译源程序;与库函数连接;生成可执行目标程序;运行目标程序。3.答:(1)操作系统的设计与实现。C语言是一种应用非常广泛的结构化高级程序设计语言,既适合编写应用软件,又适合编写系统软件。(2)工业控制。由于C语言具有简洁、灵活、代码效率高、能进行位操作等优点,C语言大量应用在单板机、单片机上,以及嵌入式领域等。(3)图形图像处理。C语言在内存管理和进程控制方面有丰富的指令,而且它能提供快速运行的代码,因而C语言适合进行图形程序设计。(4)教学领域。C语言是理想的结构化程序设计语言,其描述能力强,应用十分广泛,因此广泛应用于教学领域。许多计算机相关课程,如数据结构及算法大多是用C语言进行描述的。习题2参考答案一、 选择题1. A 2.A 3.C二、 填空题1. 基本数据类型、构造数据类型、指针类型、空类型2. 反斜线“”3. 枚举数据类型(Enumerated Data Type)三、 简答题1.答:在语言中,数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类。基本类型是数据类型的基础,由它可以构造出其他复杂的数据类型。基本类型的值不可以再分解为其他类型。C语言的基本类型包括整型、实型(浮点型)、字符型和枚举型。C语言的构造类型包括数组类型、结构类型和联合类型。构造类型是根据已定义的一种或多种数据类型用构造的方法定义的。也就是说,一个构造类型的值可以分解成若干个"成员"或"元素"。每个"成员"或"元素"都是一个基本数据类型,或又是一个构造类型。指针是一种特殊而又具重要作用的数据类型,其值表示某个量在内存中的地址。虽然指针变量的取值类似于整型量,但这是两种完全不同类型的量,一个是变量的数值,一个是变量在内存中存放的地址。在调用函数时,被调用函数通常应向调用函数返回一个函数值。返回的函数值具有一定的数据类型,应在函数定义的函数说明中给以说明。例如,在例1-1中给出的max函数定义中,函数头为"int max(int a,int b,int c)",其中写在函数名max之前的类型说明符"int"表示该函数的返回值为整型量。但是,也有一类函数,被调用后并不向调用函数返回函数值,这种函数可以定义为"空类型"(也称"无值型"),其类型说明符为void。习题3参考答案一、 选择题1.C 2.B 3.B 4.D二、 填空题1. 4字节,1字节,4字节,8字节2. 203. 6 604. 26 255. 256 22三、 简答题1. C语言的基本类型包括整型、实型(浮点型)、字符型和枚举型。2. 定义符号常量和定义变量都要指定数据类型,系统将为其分配一定的存储空间。其不同之处在于:定义符号常量必须给出常量值,且以后不能修改本常量的值;而变量可以在定义变量的同时赋初值,以后可以修改该变量。3. 常量就是在程序的运行过程中该量是不可修改的量;变量在程序的运行过程中允许对该变量的值进行修改。四、程序题1程序运行结果为:11101011-10-112程序运行结果为:3,12,4,4习题4参考答案一、 选择题1C 2D 3C 4C 5B 6D 7B 8C 9B二、 填空题1! && | 20 131445-1三、编程题1给出等级成绩A、B、C、D、E,假设,90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E,输入一个等级成绩,问属于哪一个分数段。参考代码如下:main() int score,m,n; char grade; n=1; while(n) printf("Please enter the score:"); scanf("%d",&score); if(score>100)|(score<0)printf("n Wrong! n"); else n=0; if(score=100) m=9; else m=(score-score%10)/10; switch(m) case 0:case 1:case 2:case 3:case 4:case 5:grade='E'break; case 6:grade='D'break; case 7:grade='C'break; case 8:grade='B'break; case 9:grade='A' printf("score=%d,grade=%cn",score,grade);2编程序打印出以下图形:11211232112345678987654321参考代码如下:#include<stdio.h>main() int i,j; for(i=1;i<=9;i+) for(j=1;j<=i;j+) printf("%d",j); for(j=i-1;j>0;j-) printf("%d",j); printf("n");3用1元5角钱人民币兑换5分、2分和1分的硬币(每一种都要有)共100枚,问共有几种兑换方案?每种方案各换多少枚?提示:设5分、2分和1分的硬币各换x,y,z枚,依题意有x+y+z=100,5x+2y+z=150,由于每一种硬币都要有,故5分硬币最多可换28枚,2分硬币最多可换73枚,1分硬币可换100-x-y枚,x,y,z只需满足第2个方程即可打印,对每一组满足条件的x,y,z值,用计数器计数即可得到兑换方案的数目。参考代码如下:main() int x,y,z,s=0; for(x=1;x<=28;x+) for(y=1;y<=73;y+) for(z=1;z<=148;z+) if(150=5*x+2*y+z) if(100=x+y+z) printf("x=%d y=%d z=%dn",x,y,z); s+; printf("s=%dn",s);4编程:从键盘输入正整数n,输出1+(1+2)+(1+2+3)+(1+2+3+n)。参考代码如下:#include <stdio.h>main() int n,i,s=0,t=0; printf("Please enter n="); scanf("%d",&n); for(i=1;i<=n;i+) t=t+i; s=s+t; printf("s=%dn",s);习题5参考答案一、 选择题1B 2A 3A 4D 5C 6B 7A 8A二、 填空题1按行的顺序依次存放的203446三、编程题1有一个多项式:Pn(x)=a0xn+a1xn-1+an它们的系数a0,a1,an存放在一个一维数组中。编制程序,输入系数和x的值,计算并输出Pn(x)。参考代码如下:#define N 4main() int aN+1,p,x,i; printf("Please enter a%d,.,a0:n",N); for(i=N;i>=0;i-) scanf("%d",&ai); printf("Please enter x=n"); scanf("%d",&x); p=aN; for(i=N;i>0;i-) p=p*x+ai-1; printf("Pn(x)=%dn",p);2打印以下的杨辉三角形(要求打印6行)。11112113311464115101051参考代码如下:#include<stdio.h>#include<conio.h>#define N 6main() int i,j,maxNN; for(i=0;i<N;i+) for(j=0;j<N;j+) maxi0=1; maxii=1; for(i=2;i<N;i+) for(j=1;j<i;j+) maxij=maxi-1j-1+maxi-1j; for(i=0;i<N;i+) for(j=0;j<=i;j+) printf("%d",maxij); printf("n");3编写程序,将一个数插入到有序的数列中去,插入后的数列仍然有序。参考代码如下:/*假设原有5个数*/#include <stdio.h> main() int a6=1,2,6,10,15; int n,i,j; printf("Please enter the insert number:"); scanf("%d",&n); for(i=0;i<5;i+) if(n>ai) continue; else break; for(j=4;j>=i;j-) aj+1=aj; ai=n; for(i=0;i<6;i+) printf("%d,",ai); printf("n");4编写程序,在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found。参考代码如下:#include <stdio.h> main() int a10=1,2,3,4,5,6,7,8,9,10; int n,i,j,k=0; printf("Please enter the number:"); scanf("%d",&n); for(i=0;i<10;i+) while(n=ai)k=1;j=i;break; if(k=1) printf("a%dn",j); else printf("no found.n");5编程将下列矩阵中的元素向右移动一列,最右一列移至第一列。1 4 6 8 10 12提示:用二维数组v存放矩阵中元素,数组v可在定义时初始化;有两种方法实现这种移动:一种方法是将移动后的元素放在另一个二维数组中;另一种方法是利用一个中间变量仍将移动后的元素放在数组v中。#include<stdio.h>void main() int i,j; int a23=1,4,6,8,10,12; int b23; b00=a02; b01=a00; b02=a01; b10=a12; b11=a10; b12=a11; printf("a23:"); for(i=0;i<2;i+) printf("n"); for(j=0;j<3;j+) printf("%5d",aij); printf("nresult:n"); for(i=0;i<2;i+) printf("n"); for(j=0;j<3;j+) printf("%5d",bij); printf("n"); getch();6利用公式计算m×n的矩阵A和m×n的矩阵B之和,已知为矩阵A的元素,为矩阵B的元素,为矩阵C的元素,。提示:用二维数组元素做函数参数编程实现矩阵相加。#include<stdio.h>#include<conio.h>#define M 2#define N 2int aMN;int bMN;int cMN;void matrix(int aM,int bN);main() int i,j,t; clrscr(); printf("Please input a%d%dn",M,N); for(i=0;i<N;i+) for(j=0;j<N;j+) scanf("%d",&t); aij=t; printf("Please input b%d%dn",M,N); for(i=0;i<M;i+) for(j=0;j<N;j+) scanf("%d",&t); bij=t; matrix(b,c); printf("a%d%d",M,N); for(i=0;i<M;i+) printf("n"); for(j=0;j<N;j+) printf("%5d",aij); printf("n"); printf("b%d%d",M,N); for(i=0;i<M;i+) printf("n"); for(j=0;j<N;j+) printf("%5d",bij); printf("n"); printf("c%d%d=A+B:",M,N); for(i=0;i<M;i+) printf("n"); for(j=0;j<N;j+) printf("%5d",cij);void matrix(int aM,int bN) int i,j,k,t; for(i=0;i<M;i+) for(j=0;j<N;j+) cij=aij+bij;习题6参考答案一、 选择题1A 2D 3D 二、 填空题1指针 取地址2339876 876424三、编程题1输入3个整数,按从大到小的次序输出。参考代码如下:main() int a3,i,j,t; printf("Please enter three number:n") for(i=0;i<3;i+) scanf("%d",&ai); for(i=0;i<2;i+) for(j=0;j<2;j+) if(aj<aj+1) t=aj;aj=aj+1;aj+1=t; for(i=0;i<3;i+) printf("%dn",ai);2编写将n阶正方矩阵进行转置的函数。在主函数中对一个4行4列的矩阵调用此函数。参考代码如下:int array44;convert(int array44) int i,j,t; for (i=0;i<4;i+) for (j=i+1;j<4;j+) t=arrayij; arrayij=arrayji; arrayji=t;main( )int i,j;printf("Input array:n");for (i=0;i<4;i+) for(j=0;j<4;j+) scanf("%d",&arrayij);printf("noriginal array :n");for (i=0;i<4;i+) for (j=0;j<4;j+) printf("%5d",arrayij); printf("n");convert(array);printf("convert array:n");for (i=0;i<4;i+) for(j=0;j<4;j+) printf("%5d",arrayij); printf("n");3有三个整型变量i,j, k,请编写程序,设置三个指针变量p1,p2,p3,分别指向i, j,k。然后通过指针变量使i,j,k三个变量的值顺序交换,即把i的原值赋给j,把j的原值赋给k,把k的原值赋给i。要求输出i,j, k的原值和新值。参考代码如下:main() int i, j , k, temper; int *p1, *p2, *p3; printf("Please input 3 integers:n"); scanf("%d%d%d",&i, &j, &k); p1=&i; p2=&j; p3=&k; printf("before changed ,the 3 numbers are:n"); printf("i=%d, j=%d,k=%dn",i, j, k); temper=*p1;*p1=*p3;*p3=*p2; *p2=temper; printf("after changed ,the 3 numbers are:n"); printf("i=%d, j=%d,k=%dn",i, j, k);4用指针编写程序,把输入的字符串按逆顺序输出。参考代码如下:#include<stdio.h>#include<string.h>char *s="1a2b3c4d"void main() int i,j; char t; for(i=0,j=strlen(s)-1;i<j;+i,-j) t=si; si=sj; sj=t; printf("%sn",s);习题7参考答案一、 选择题1C 2B 3C二、填空题1float2自动(auto)31249.000000二、 编程题1.编写函数,已知三角形的三个边长,求三角形的面积。参考代码如下:#include<stdio.h>#include<math.h>main() float a,b,c,s,area; printf("Please enter three sides:n"); scanf("%f,%f,%f",&a,&b,&c); if(a+b>c&&b+c>a&&a+c>b) s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c); printf("area=%.2fn",area); else printf("It is not a triangle !n");2.编程计算p=k! (m-k)!的值。参考代码如下:#include<stdio.h>void main() int k,m; long p; printf("Please enter k,m:"); scanf("%d,%d",&k,&m); p=f(k)*f(m-k); printf("%dn",p);int f(int n) if(n>1) return n*f(n-1); else return 1;3.写一函数,使给定的一个二维数组(3×3)转置,即行列互换。并在主函数中调用该函数时,使用数组作为实际参数。参考代码如下:#define N 3int arrayNN;convert(int arrayNN) int i,j,t; for (i=0;i<N;i+) for (j=i+1;j<N;j+) t=arrayij; arrayij=arrayji; arrayji=t;main()int i,j;printf("Input array(3*3):n");for (i=0;i<N;i+) for(j=0;j<N;j+) scanf("%d",&arrayij);printf("noriginal array:n");for (i=0;i<N;i+) for (j=0;j<N;j+) printf("%5d",arrayij); printf("n");convert(array);printf("convert array:n");for (i=0;i<N;i+) for(j=0;j<N;j+) printf("%5d",arrayij); printf("n");4.设计一个函数,用以计算下面数列前n项之和(以n为形参变量)。21、32、53、85、138、2113、。参考代码如下:#define N 6main() int n=N,i=1; float s=0; while (i<=n) s=s+(i+1.0)/i; i+; printf("s(%d)=%.5fn",n,s);5.如果一个数恰好等于它的因子之和,则该数称为“完数”。例如:6的因子是1、2、3,而6=1+2+3。编程序输出1000之内的所有完数。输出形式是:“6它的因子是1,2,3”。参考代码如下:main() static int k100; int i,j,n,s; for(j=2;j<1000;j+) n=-1; s=j; for(i=1;i<j;i+) if(j%i)=0) n+; s=s-i; kn=i; if(s=0) printf("%d is a wanshu",j); for(i=0;i<n;i+) printf("%d,",ki); printf("%dn",kn);习题8参考答案一、 选择题1C 2A 3A 4B二、 填空题1pt=s1;pt->student.no=1001;20,1,2,100,101,1023结构体变量4Four, Three,Four三、编程题1.有10个学生,每个学生的数据包括学号(num)、姓名(name9)、性别(sex)、年龄(age)、三门课成绩(score3),要求在main()函数中输入这10个学生的数据,并对每个学生调用函数count()计算总分。参考代码如下:#include<stdio.h>#include<string.h>#define N 2struct student int num;char name9;char sex;int age;int score3;stuN;main() int count(int s); int i,j; for(i=1;i<=N;i+) printf("num:"); scanf("%d",&stui.num); printf("name:"); scanf("%s",&stui.name); printf("sex:"); scanf("%s",&stui.sex); printf("age:"); scanf("%d",&stui.age); for(j=0;j<3;j+)printf("score%d:",j+1);scanf("%d",&stui.scorej); for(i=1;i<=N;i+) printf("stu%d sum=%dn",i,count(stui.score); int count(int s) int i,sum=0; for(i=0;i<3;i+) sum=sum+si; return sum;2.口袋中有若干红、黄、蓝、白、黑5种颜色的球,每次从口袋中取出3个球,编程打印出得到3种不同颜色的球的所有可能取法。参考代码如下:main() enum colorred,yellow,blue,white,black; enum color i,j,k,pri; int n=0,loop; for(i=red;i<=black;i+) for(j=red;j<=black;j+) if(i!=j) for(k=red;k<=black;k+)if(k!=i) && (k!=j) n=n+1; printf("%-4d",n); for (loop=1;loop<=3;loop+) switch (loop) case 1:pri=i;break; case 2:pri=j;break; case 3:pri=k;break; default:break; switch (pri) case red: printf("%-10s","red");break; case yellow: printf("%-10s","yellow");break; case blue: printf("%-10s","blue");break; case white: printf("%-10s","white");break; case black: printf("%-10s","black");break; default:break; printf("n"); printf("ntotal:%5dn",n);3.25个人围成一个圈,从第1个人开始顺序报号,凡报号为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。参考代码如下:#include<stdio.h>main() int *a; int i,j,position=1,total=0,chage; a=(int *)malloc(25*sizeof(int); for (i=0;i<25;i+) ai=i+1; while(1) position+=2; while (position>25-total) position=position-25+total; chage=aposition-1; for (j=position;j<25-total;j+) aj-1=aj; a25-total-1=chage; total+; if (total=25)for (i=0;i<25-1;i+)printf("%d->",a25-i-1);printf("%dn",a0);printf("the last one is %dn",a0);return 0;4.建立一个链表,每个结点包括:学号、姓名、成绩。(1)输入一个学号,检索该学生的有关信息;(2)从链表中删去成绩低于40分的学生。参考代码如下:#include<stdio.h>#include<malloc.h>struct stu int no; char name9; int score; struct stu *next;struct stu *create() struct stu *head,*p,*q; int n,s; head->next=NULL; p=head; while(1) printf("no,name,score:"); scanf("%d,%s,%d",&n,&s); if(n=0&&s=0) break; else q=(struct stu *)malloc(sizeof(struct stu); q->no=n;q->score=s;q->next=NULL; p->next=q;p=q; return head;struct stu *search(struct stu *h,int n) struct stu *p=h->next; while(p!=NULL&&P->NO!=n) p=p->next; return p;struct stu *delete(struct stu *head,char *s) struct stu *p1,*p2; if(head=NULL)printf("nempty list!n");goto end;p1=head;while (pi->score>40 && p1->next!=NULL) p2=p1;p1=p1->next; free(p1); return head;main() int n; struct stu *q; printf("enter number:"); scanf("%d",&n); q=create(n); printf("list:n"); while(q!=NULL) printf("%sn",q->name); q=q->next;习题9参考答案一、 选择题1D 2C 3A二、 填空题1L=18.849558 S=28.274337三、解答题预处理命令的功能是什么?包括哪几部分?#include预处理命令的两种格式分别为什么?答:预处理命令的功能是告诉编译系统在对源程序进行编译之前应该做些什么。预处理命令主要包括文件包含、宏定义和条件编译三个部分。#include预处理命令格式一:#include<包含文件名>格式二:#include”包含文件名”习题10参考答案一、 选择题1C 2B 3A 二、 填空题1二进制文件2顺序 随机3hello,4picursound三、编程题1.从键盘输入学生姓名,寻找学生记录是否存在,并输出相应信息。参考代码如下:#include<stdlib.h>#include<stdio.h>#define N 10struct student char name9; int num; int age; char sex;stuN;void main() int i; char s10; FILE *fp; if(fp=fopen("stu","rb")=NULL) printf("Can not open file!n"); exit(0); gets(s); for(i=0;i<N;i+) fseek(fp,i*sizeof(struct student),0); fread(&stui,sizeof(struct student),1,fp); while(s=stui.name) printf("%s,%d,%d,%dn",stui.nam

    注意事项

    本文(《C语言程序设计》课后习题参考答案.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开