第5章C语言程序设计(张曙光)教材各章习题解答
- 格式:doc
- 大小:50.00 KB
- 文档页数:4
习题解析与答案第1章C语言概述一.简答题1.概述C语言的主要特点。
【解答】(1)语言简洁、紧凑,使用方便、灵活。
(2)数据类型丰富,表达能力强。
(3)运算符多样。
C语言中的运算符包含的范围非常广泛。
(4)具有结构化的控制语句。
如if…else语句、while语句、do while语句、switch 语句、for语句。
(5)允许直接访问物理地址。
C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。
(6)所生成的目标代码质量高,可移植性好。
2.构成C语言程序的基本单位是什么?它由哪几部分组成?【解答】函数是构成C语言程序的基本单位。
一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。
3.C语言程序的运行一般要经过哪几个步骤?【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。
二.运行程序写结果1.输入下面程序并运行。
main(){int a1,a2,x;a1=100;a2=50;x=a1-a2;printf(″x=%d\n″,x);}【解答】运行结果为:x=502.输入下面程序并运行。
main(){int a1,a2,x;a1=10;a2=20;x=a1*a2;printf(″a1=%d,a2=%d\n″,a1,a2);printf(″x=%d\n″,x);}【解答】运行结果为:a1=10,a2=20x=2003.输入下面程序并运行。
#include <stdio.h>main(){printf("******\n");printf(" *****\n");printf(" ****\n");printf(" ***\n");printf(" **\n");printf(" *\n");}【解答】运行结果为:*********************思考:可以修改程序,使之输出平行四边形,等腰三角形等图形。
习题解析与答案第1章C语言概述一.简答题1.概述C语言的主要特点。
【解答】(1)语言简洁、紧凑,使用方便、灵活。
(2)数据类型丰富,表达能力强。
(3)运算符多样。
C语言中的运算符包含的范围非常广泛。
(4)具有结构化的控制语句。
如if…else语句、while语句、do while语句、switch 语句、for语句。
(5)允许直接访问物理地址。
C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。
(6)所生成的目标代码质量高,可移植性好。
2.构成C语言程序的基本单位是什么?它由哪几部分组成?【解答】函数是构成C语言程序的基本单位。
一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。
3.C语言程序的运行一般要经过哪几个步骤?【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。
二.运行程序写结果1.输入下面程序并运行。
main(){int a1,a2,x;a1=100;a2=50;x=a1-a2;printf(″x=%d\n″,x);}【解答】运行结果为:x=502.输入下面程序并运行。
main(){int a1,a2,x;a1=10;a2=20;x=a1*a2;printf(″a1=%d,a2=%d\n″,a1,a2);printf(″x=%d\n″,x);}【解答】运行结果为:a1=10,a2=20x=2003.输入下面程序并运行。
#include <stdio.h>main(){printf("******\n");printf(" *****\n");printf(" ****\n");printf(" ***\n");printf(" **\n");printf(" *\n");}【解答】运行结果为:*********************思考:可以修改程序,使之输出平行四边形,等腰三角形等图形。
c语言程序设计课后习题及答案C语言程序设计是计算机科学与技术专业的核心课程之一,它不仅教授了编程语言的基本知识,还培养了学生的逻辑思维能力和问题解决能力。
课后习题是巩固课堂学习内容的重要手段,以下是一些C语言程序设计的典型课后习题及答案。
习题1:基本数据类型编写一个程序,输入一个整数和一个浮点数,然后输出它们的和。
```c#include <stdio.h>int main() {int a;float b, sum;printf("请输入一个整数:");scanf("%d", &a);printf("请输入一个浮点数:");scanf("%f", &b);sum = a + b;printf("它们的和是:%f\n", sum);return 0;}```习题2:条件语句编写一个程序,根据输入的成绩判断学生的等级。
```c#include <stdio.h>int main() {float score;printf("请输入学生的成绩:");scanf("%f", &score);if (score >= 90) {printf("等级:A\n");} else if (score >= 80) {printf("等级:B\n");} else if (score >= 70) {printf("等级:C\n");} else if (score >= 60) {printf("等级:D\n");} else {printf("等级:F\n");}return 0;}```习题3:循环结构编写一个程序,计算1到100的整数之和。
第一章概述一、选择题1. A2. A3. D4. A (选项中逗号不会输出)5. C6. B7.A(逗号需要原样输入)二、填空题1. .C.CPP.OBJ .EXE2. 主函数或main函数3. #include <iostream>#include <stdio.h>4. 顺序、选择、循环5. {}函数声明函数执行不能void三、分析理解题1. 答:C语言程序主要由函数组成,一般包括预处理命令、函数、全局变量声明等等。
2. 答:函数由函数首部和函数体组成。
函数首部规定函数的返回值类型、函数名、函数的形参及类型;函数体包括用于实现功能的可执行语句,由{}括起。
3. 答:基本的C语言语句由简单语句、复合语句、赋值语句、流程控制语句、非限定性转向语句等。
4. 答:合法的一般标识符有:name,Int,File_name, DATA5. 答:源程序需要经过编译程序编译转换成二进制程序,即:目标代码文件,再通过连接程序将目标文件盒其他目标文件及系统所提供的库函数等进行连接生成可执行程序。
6. 答:两种:单行注释用//. 多行注释采用/* 和*/。
7. 答:(此题注释和程序效果不一致需修改)。
源程序如图1-1所示:图1-1 ex1-7源程序运行结果如下图1-2所示:图1-2 ex1-7 运行结果分析:setprecison单独使用时用来输出实数的有效数字,若和fixed联用,则用来输出实数小数点后的数字位数。
(2)-33.7801 //setprecision(0)表示根据当前默认输出精度输出实数。
默认精度:实数输出6位有效数字。
(4) 122.1 //为num1输出4位有效数字(当实际数据位数大于所设置精度,则四舍五入)8. 答:源程序如下图1-3所示:图1-3 ex1-8源程序运行结果如下图所示:图1-4 ex1-8 运行结果第二章基本数据类型及运算符一、选择题1、B2、B3、A4、B5、C6、A7、B8、C9、D 10、D二、填空题1、 x>20 && x<30 ||x<-1002、 x>y 或者a>b3、 14、 auto、extern、static、register5、函数内部6、 int、float、double7、 2,18、为最右边表达式的值9、 710、前缀:先自增(自减)后使用;后缀:先使用后自增(自减)11、右结合性(自右向左)12、变量的数据类型、存储类型、变量名称13、是否整除14、全局变量,静态局部变量,静态局部变量15、 const,初始值和数据类型三、阅读程序题1、答:输出结果是2,12、答:输出结果是6,8,6,73、答:输出结果是n=14、答:输出结果是x=7,a=3,b=75、答:输出结果是n=-46、答:输出结果是07、答:输出结果是2147483647,-21474836488、答:输出结果是 2 3 1 2 (各数据均占8列)四、编程题1、“china”译成密码问题。
(1)int(2)fun(n,x)(3)函数类型(4)3(5)3(6)单向值传递(7)double fun(double x);void two_beeps();(8)1+2+…+n 递归算法(9)auto register static extern(10)编译2.(1)函数定义和函数原型不一致。
函数定义的头部改为:double f1(float num)(2)num为形参。
删除float num;(3)缺少函数原型的声明。
在#include <stdio.h>命令行下增加函数原型声明float ftoc(float temperature);3.(1)C)(2)C)(3)A)(4)B)(5)D)(6)D)(7)D)(8)C)4.(1)①float fs( float x, float y) ②float z ③z;(2)④double max(3)⑤k+1;i++ ⑥n%10(4)⑦3+DIF(n-1)(5)⑧i<=y⑨s=s*x5.(1)6(2)3.00(3)7(4)12624120(5)The number of taozi is 316.#include <stdio.h>int fun(int m){int i=1,s=0;while(i<=1000){if(i%m==0)s+=i;i++;}return(s);}int main(void){int m,sum=0;scanf("%d",&m);sum=fun(m);printf("%d",sum);return 0;}7.#include <stdio.h>double fun(int n){int i=1;double s=0;while(i<=n){if(i%3==0|| i%5==0)s+=1.0/i;i++;}return(s);}int main(void){int n;double sum=0;scanf("%d",&n);sum=fun(n);printf("%f",sum);return 0;}8.#include <stdio.h>int hef(int u,int v){int t,r,m=u,n=v;if (v>u){t=u;u=v;v=t;}while((r=u%v)!=0){u=v;v=r;}return(m*n/v);}int main(void){int b[5],i,f[5];for(i=0;i<5;i++)scanf("%d",&b[i]);f[4]=b[4];for(i=4;i>=0;i--)f[i-1]=hef(f[i],b[i-1]);printf("%d",f[0]);return 0;}9.#include <stdio.h>#include <math.h>int num_of_primes(int x, int y){int n,i,num=0,flag;for (n=x;n<=y;n++){ flag=0;for (i=2;i<=sqrt((double)n);i++)if (n%i==0){flag=1;break;}if (!flag)num++;}return(num);}int main(void){int a,b,t;int countnum;scanf("%d%d",&a,&b);if(a>b){t=a; a=b;b=t;}countnum=num_of_primes(a,b);printf("%d",countnum);return 0;}。
C语言程序设计(张淑华、朱丽莉主编)课后习题解答(仅供参考)习题一一、选择题1.B 2.D 3.B 4.A 5.B6.C 7.C二、填空题1..obj 2.函数3./* */ 4.#include <stdio.h> int a,b; a,b三、简答题(略)习题二一、选择题1.B 2.B 3.A 4.D 5.A6.C 7.C 8.A 9.C 10.B11.A 12.A 13.C 14.A 15.C二、填空题1.变量2.存储数据的单元3.非0、0 4.(1)a>=0 (2)0 5.1 6.1 7.-30 8.38 9.4 , 7 10.-6 177772 11.9.9 12.7三、写出下列程序的运行结果1.0,0,5 2.18 3.64 512 8 4.55.d4,c四、编程题1.#include <stdio.h>#define PI 3.1415926void main(){ float r,s;printf(“Please input circinal radii\n”);scanf(“%f”,&r);s=PI*r*r;printf(“r=%.2f,s=%.2f\n”,r,s);}2.#include <stdio.h>void main(){ char c1,c2;printf(“Please input a majuscule\n”);scanf(“%c”,&c1);c2=c1>’A’&&c1<’Z’?c1+32:c1;printf(“%c\n”,c2);}3.#include <stdio.h>void main(){ int a=0,b;scanf(“%c”,&b);b=b&a;printf(“b=%d\n”,b);}习题三一、选择题1.C 2.C 3.A 4.C 5.D6.原题第2行应为c=(c-=a-5),(a=b,b+3); 答案为B 否则输出结果为5,0,57.D 8.C 9.A 10.B二、填空题1.-50 300、a=-50,b=300a=-50 b=3002.10 20 30、10,20,30、a=10,b=20,c=303.15、0、0三、写出下列程序的运行结果1.a=789.654321,a= 789.65,a= 789.65432100,a=789.6543212.b=15,b=17,b=f 3.c=1,x=0,y=0,z=1 4.2120,205.在TC环境下为216,125 在VC环境下为216,1806.a=A,b=d,c=F7.9,4,12,12 8.x=4.500000,y=4,x+y=8.500000四、编程题1.#include <stdio.h>void main(){ printf("**********************************\n");printf(" HAPPY NEW YEAR! \n");printf("**********************************\n");}2.(1) #include <stdio.h>void main(){ int a=5,b=8,c=10,m,max;m= a>b?a:b;max=c>m?c:m;printf(“max=%d\n”,max);}(2)#include <stdio.h>void main(){ int a,b,c,m,max;scanf("%d,%d,%d",&a,&b,&c);max=a>b?a:(b>c?b:c);printf(“max=%d\n”,max);}习题四一、选择题1.D 2.D 3.C 4.A 5.D 6.A 7.C 8.C 9.D 10.B二、填空题1.6、5、5 2.(a%3==0||a%7==0) 3.(1) a>b (2) a=c; (3) a,b,c三、写出下列程序的运行结果1.4 2.64 3.a=7,b=4 4.46 46 5.*#46四、编程题1.另见填空题3#include <stdio.h>void main(){ float a,b,c,t;scanf("%f,%f,%f",&a,&b,&c);if (a>b){ t=a;a=b;b=t;}if (a>c){t=a;a=c;c=t;}if (b>c){t=b;b=c;c=t;}printf(“%.2f,%.2f,%.2f\n”,a,b,c);}2.#include <stdio.h>void main(){ int a,b;scanf("%d,%d",&a,&b);if(a%b==0)printf(“%d is divisible by %d\n”,a,b);elseprintf(“%d is not divisible by %d\n”,a,b);}3.(1) #include <stdio.h>void main(){ int x,y;scanf(“%d”,&x);if (x>-5&&x<0)y=x;printf("y=%d\n",y);else if (x==0)y=x-1;printf("y=%d\n",y);else if(x>0&&x<10)y=x+1;printf("y=%d\n",y);elseprintf("Data out of range\n");}(2) #include <stdio.h>void main(){ int x,y;scanf(“%d”,&x);switch(x){ case -1:case -2:case -3:case -4:y=x; printf("y=%d\n",y);break;case 0:y=x-1; printf("y=%d\n",y);break;case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:y=x+1; printf("y=%d\n",y);break;default: printf("Data out of range\n");}4.#include <stdio.h>void main(){long num;int indiv,ten,hundred,thousand,tenthousand,place; /*分别代表个位、十位、百位、千位、万位和位数*/printf(“Please Input a integer(0~99999):”);scanf(“%ld”,&num);if (num>9999)place=5;else if (num>999)place=4;else if (num>99)place=3;else if (num>9)place=2;elseplace=1;printf(“place=%d\n”,place);printf(“For each digit:”);tenthousand=num/10000;thousand=(int)(num-tenthousand*10000)/1000;hundred=(int)(num-tenthousand*10000-thousand*1000)/100;ten=(int)(num-tenthousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-tenthousand*10000-thousand*1000-hundred*100-ten*10);switch(place){case 1:printf(“%d”,indiv);break;case 2:printf(“%d,%d”,ten,indiv);break;case 3:printf(“%d,%d,%d”,hundred,ten,indiv);break;case 4:printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv);break;case 5:printf(“%d,%d,%d,%d,%d”,tenthousand,thousand,hundred,ten,indiv);}}习题五一、选择题1.D 2.C 3.D 4.B 5.C6.B 7.C 8.B 9.B 10.B二、填空题1.(1) x>=0 或!(x<0) (2) x<amin2.(1) i<10 或i<=9 (2)j%3 或j%3!=03.(1) pi (2) fabs(t) (3)4三、写出下列程序的运行结果1.1 2.y=-1 3.4 4.a=2,b=8 5.*7 6.45 7.1 8.s=03423四、编程题1.#include <stdio.h>void main(){int i,j,k;for (i=1;i<=4;i++) /*输出上面4行*号*/{ for (j=1;j<=5-i;j++)printf(““); /*输出*号前面的空格*/for (k=1;k<=2*i-1;k++)printf(“*”); /*输出*号*/printf(“\n”); /*输出完一行*号后换行*/}}2.#include "stdio.h"void main(){ int num,n1,n2,p=1;scanf("%d",&num);while (num){ n1=num/10;n2=num%10;p*=n2;num=n1;}printf("num=%d,p=%d\n",num,p);}3.#include "stdio.h"void main(){ int i;float s1,s2,s3,s4,s5,sum,avg;for(i=1;i<=6;i++){ printf("Please enter a five subjects score\n");scanf("%f,%f,%f,%f,%f",&s1,&s2,&s3,&s4,&s5);sum=0;sum+=s1+s2+s3+s4+s5;avg=sum/5;printf("%d individuals,the average score is %.2f\n",i,avg);}}习题六一、选择题1.D 2.C 3.D 4.D 5.B6.A 7.C 8.D 9.A二、填空题1.地址常量2.非0 3.3.(1) j=9 (2) j>=0 4.(1) 0 (2) 6 5.(1) gets(temp); (2) strcpy(temp,str); 6.(1) i<3 (2) a[i][i] 7.(1) &a[i] (2) i%4==0 (3)printf("\n:\");8.(1) s[i]>=48 && s[i]<=57 或s[i]>='0' && s[i]<='9' (2) d[j]=0; 或d[j]='\0';三、写出下列程序的运行结果1.13715 2.s=15 3.58 4.11 5.7 0 6.how 7.max=9,row=1,col=0 8.6,4,3,2, are you? I am fine四、编程题1.#include <stdio.h>#define N 10void main(){ int a[32],x,k,r,i;printf(“Please input an integer:\");k=-1;do{ r=x%2;a[++k]=r;x/=2;}while(x>=1);for(i=k;i>=0;i--)printf(“%1d”,a[i]);printf(“\n”);}2.#include <stdio.h>#define N 10void main(){ int a[N+1]={10,20,30,40,50,60,70,80,90,100};int t1,t2,num,i,j;printf(“array a:\n”);for (i=0;i<N;i++)printf(“%d”,a[i]);printf(“\n”);printf(“Insert data:”);scanf(“%d”,&num);if (num>a[N-1])a[N]=num;else{ for (i=0;i<N;i++){ if (a[i]>num){ t1=a[i];a[i]=num;for (j=i+1;j<N+1;j++){ t2=a[j];a[j]=t1;t1=t2;}break;}}}printf("Current array a:\n”);for (i=0;i<N+1;i++)printf(“%5d\n”,a[i]);}3.#include <stdio.h>#define N 6void main(){ int i,j,a[N][N];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(“%5d ”,a[i][j]);printf(”\n”);}}4.#include "stdio.h"void main(){ char s[80],t[80],d;int i,j;printf("Please enter a string:\n");gets(s);printf("delete?\n");d=getchar();for(i=j=0;s[i]!='\0';i++)if(s[i]!=d){ t[j]=s[i];j++;}t[j]='\0';printf("%s\n",t);}5.#include "stdio.h"#define N 8void main(){ int s[N][3],i,j,k,m,t1;float a[N],sum,t2;for(i=0;i<N;i++){ printf("Please enter the %d-th three subjects score\n",i);sum=0;for(j=0;j<3;j++){ scanf("%d",&s[i][j]);sum+=s[i][j];}a[i]=sum/3;}for(i=0;i<N-1;i++){ k=i;for(j=i+1;j<N;j++)if(a[k]<a[j]) k=j;if(k!=i){ for(m=0;m<3;m++){ t1=s[i][m];s[i][m]=s[k][m];s[k][m]=t1;} /*交换整行的值*/t2=a[i];a[i]=a[k];a[k]=t2;}}for(i=0;i<N;i++){ printf("%d-th ",i);for(j=0;j<N;j++)printf("%d ",s[i][j]);printf("%.2f\n",a[i]);}}习题七一、选择题1.C 2.A 3.B 4.B 5.A 6.D 7.C 8.D 9.C 10.C二、填空题1.struct STRU t[20]; 2.x.x、x.y、x.z.y、x.z.z3.4,8 三、写出下列程序的运行结果1.6 2.0 3.4E5S 4.21 5.Zhao,m,85,90 四、编程题1.#include "stdio.h"#define N 45struct student{ char name[20];char sex[7];int age;int score;}std[N];void main(){ int i,max=0,rowi;for(i=0;i<N;i++){ printf("Please enter the data of the %d-th student:\n",i);printf("name:");scanf("%s",std[i].name);printf("sex:");scanf("%s",std[i].sex);printf("age:");scanf("%d",&std[i].age);printf("score:");scanf("%d",&std[i].score);if(max<std[i].score){ max=std[i].score;rowi=i;}}printf("name:%s ",std[rowi].name);printf("sex:%s ",std[rowi].sex);printf("age:%d ",std[rowi].age);printf("score:%d\n",std[rowi].score);}2.#include "stdio.h"#define N 5struct student{ char name[20];char sex[7];int score;}std[N];void main(){ int i,ml=0,fml=0;float sum=0,avg;for(i=0;i<N;i++){ printf("Please enter the data of the %d-th student:\n",i);printf("name:");scanf("%s",std[i].name);printf("sex:");scanf("%s",std[i].sex);if(std[i].sex[0]=='m'||std[i].sex[0]=='M')ml+=1;elsefml+=1;printf("score:");scanf("%d",&std[i].score);sum+=std[i].score;}avg=sum/N;printf("The number of male students:%d\n",ml);printf("The number of female students are:%d\n",fml);printf("The average scores are:%.2f\n",avg);}习题八一、选择题1.A 2.C 3.D 4.A 5.C6.A 7.D二、填空题1.(1) high=mid-1 (2) low=mid+1 2.(1) int m (2) m%i==0 (3) return s 3.(1) max=x[i][j] (2) max三、写出下列程序的运行结果1.625 2.Qian,p,95,92 3.2 4.12 5.h=8四、编程题1.#include "stdio.h"void main(){ int prime(int);int x;printf("\nPlease input an integer:");scanf("%d",&x);if(prime(x))printf("\n%d is prime.\n",x);elseprintf("\n%d is not prime.\n",x);}int prime(int n){ int flag=1,i;for(i=2;i<=n-1 && flag==1;i++)if(n%i==0)flag=0;return(flag);}2.#include "stdio.h"void delask(char a[]){ int i,j;char b[80];for(i=j=0;a[i]!='\0';i++)if(a[i]!='*'){ while(a[i]!='\0'){ b[j]=a[i];j++;i++;}break;}b[j]='\0';for(i=0;b[i]!='\0';i++)a[i]=b[i];a[i]='\0';}void main(){ char s[80];printf("Please enter a string:\n");scanf("%s",s);delask(s);printf("%s\n",s);}3.#include "stdio.h"struct date{ int day;int month;int year;};int days(struct date dt){ int y,m,d,ds[12]={31,28,31,30,31,30,31,31,30,31,30,31},i,s=0;y=dt.year;d=dt.day;if(y%4==0 && y%100!=0||y%400==0) ds[1]=29;/* 计算每月的天数是本年第几天*/ switch(m){ case 1:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;case 2:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;case 3:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;case 4:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;case 5:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;case 6:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;case 7:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;case 8:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;case 9:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;case 10:for(i=0;i<m-1;i++)s+=ds[i];break;case 11:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;case 12:for(i=0;i<m-1;i++)s+=ds[i];s+=d;break;}return (s);}void main(){ struct date ymd;int dys;printf("Input year month and day\n");scanf("%d,%d,%d",&ymd.year,&ymd.month,&ymd.day);dys=days(ymd);printf("Today is the first %d days in the middle of this year.\n",dys);}习题九一、选择题1.A 2.D 3.A 4.D 5.B 6.A 二、写出下列程序的运行结果1.10 2.9 11 11 3.*** 4.12 5.8 6.1 11 21 3三、编程题1.#include "stdio.h"#define N 10float fmax=0,fmin=0;float average(float fscore[],int n){ int i;float faver,fsum=fscore[0];fmax=fmin=fscore[0];for(i=1;i<n;i++){if(fscore[i]>fmax)fmax=fscore[i];else if(fscore[i]<fmin)fmin=fscore[i];fsum+=fscore[i];}faver=fsum/n;return (faver);}void main(){ float fave,fnumb[N];int i;for(i=0;i<N;i++)scanf("%f",&fnumb[i]);fave=average(fnumb,N);printf("max=%.2f min=%.2f average=%.2f\n",fmax,fmin, fave);}2.此题有误,用宏定义较难实现。
《C语言程序设计》课后习题答案高等教育出版社《C语言程序设计》课后习题答案高等教育出版社第一章:C语言概述1. C语言的特点C语言是一种以处理底层任务和系统编程为目标的高级编程语言。
其特点包括语法简洁、执行效率高、可移植性强等。
第二章:C语言基本数据类型1. C语言中的基本数据类型C语言中的基本数据类型包括整型、字符型、浮点型等。
整型可以进一步细分为有符号整型和无符号整型。
第三章:C语言运算符1. C语言中的运算符C语言中常见的运算符包括算术运算符、赋值运算符、关系运算符、逻辑运算符等。
这些运算符用于执行各种数学和逻辑操作。
第四章:C语言控制语句1. C语言中的条件语句C语言提供了if语句和switch语句来实现条件判断。
if语句用于执行基于布尔表达式的条件分支,而switch语句用于根据不同的值执行不同的代码块。
第五章:C语言函数1. C语言中的函数定义和调用函数是C语言中的基本模块,用于封装可重用的代码。
函数定义包括函数返回类型、函数名、参数列表和函数体等部分。
第六章:C语言数组1. C语言中的数组定义和使用数组是一组相同类型的数据元素的集合。
C语言中可以使用数组来存储和操作大量数据。
第七章:C语言指针1. C语言中的指针概念指针是一种变量,它存储了内存地址。
通过指针,可以直接访问和修改对应内存地址中的数据。
第八章:C语言字符串1. C语言中的字符串操作字符串是由一系列字符组成的数据类型。
C语言通过字符数组来表示和操作字符串。
第九章:C语言结构体1. C语言中的结构体定义和使用结构体是一种自定义的复合数据类型,它可以包含多个不同类型的成员变量。
第十章:C语言文件操作1. C语言中的文件读写操作文件操作是一种重要的数据输入和输出方式。
C语言提供了一系列函数来实现文件的读写操作。
总结:通过解答以上习题,我们可以更好地掌握C语言的各个方面,提升我们的编程能力和解决问题的能力。
希望本文对读者有所帮助。
c语言程序设计第五版习题答案解析首先,值得指出的是,《C语言程序设计》是一本经典的编程教材,它通过系统性的介绍和练习,帮助读者掌握C语言编程的基本原理和技巧。
而针对这本书中的习题,我们将逐一进行解答和解析,以便读者更好地理解和掌握其中的知识。
1. 第一章:C语言概述在第一章中,主要介绍了C语言的历史背景、特点和发展。
对于习题的解答,我们可以通过提问的方式帮助读者思考和回顾所学内容,例如:“C语言为什么被广泛应用于系统软件开发?”、“C语言的起源是什么?”2. 第二章:数据类型、运算符和表达式在第二章中,主要介绍C语言中的数据类型、运算符和表达式。
习题部分则涵盖了类型转换、算术运算、逻辑运算等内容。
针对这些习题,我们可以给出详细的解答步骤和原理解析,让读者了解C语言中各种运算符的优先级和使用规则。
3. 第三章:控制结构第三章主要介绍了C语言中的分支结构和循环结构。
针对习题部分,我们可以详细解答条件语句、循环语句的使用和注意事项,同时提供一些实际例子和应用场景,让读者更好地理解和掌握这些知识点。
4. 第四章:函数与程序结构在第四章中,重点介绍了函数的定义、调用和参数传递等。
针对习题,我们可以通过编写代码的方式,给出函数的实际应用案例,并解释其中的关键代码部分,帮助读者理解函数的作用和使用方法。
5. 第五章:指针与数组第五章主要介绍了C语言中指针和数组的概念和用法。
对于习题解答,我们可以给出指针和数组的定义、操作方法,并通过实例演示指针和数组在实际编程中的应用。
6. 第六章:字符输入输出第六章主要讲解了C语言中字符输入输出的函数和特点。
在解答习题时,我们可以提供一些常见的字符输入输出问题,并给出详细的解决思路和代码示例。
7. 第七章:类型第七章主要介绍了C语言中的类型定义和使用。
对于习题解答,我们可以通过解析代码和理论知识的结合,帮助读者理解类型的定义和使用场景。
8. 第八章:运算符和表达式在第八章中,主要介绍了C语言中的运算符和表达式。
《C语言程序设计》习题解答沈国荣隋雪莉闵芳目录第1章C语言程序设计概述 1第2章数据类型及其运算 2第3章语句与输入输出3第4章选择结构程序设计 4第5章循环结构程序设计7第6章数组9第7章函数12第8章编译预处理14第9章指针15第10章结构体与共用体18第11章位运算21 第12章文件操作22第1章C语言程序设计概述ACBBDCBAC、填空题1.函数、main()函数2./* 、*/3..C、.OBJ、.EXE4•顺序结构、选择结构、循环结构三、编程题1.【参考代码】#i nclude<stdio.h>int main(){抽湩晴?(学校名称)\n );27/ 1抽湩晴?(姓名)\n );return 0 ;}2.【参考代码】#i nclude<stdio.h>int main(){抽湩晴?(学校名称)\n (姓名)\n );return 0 ;}第2章数据类型及其运算、选择题B B A CDC 、C CD A B 20 19 12 16 13 15 18 14 11 17 ADCDCDC 注:第5 题B 选项为:’\'' '\017' '\t'二、填空题1.字母、数字、下划线2.1、4、4、83.-164. 3.55.06.97. 68.-609.y%2==110.1、0、1三、程序阅读题1. b2.03.04.10,25.9,10,9,106.3,1,0,07.3,20,30,127/ 2第3章语句与输入输出ACBBDCBCC二、填空题1.123.472. D3.回车4.10,2三、程序阅读题1.2612.203.201,104.y=4630 y=46305.*3.140000,3.142*6.c:dec=120,oct=170,hex=78,ASCII=x7.x=1 y=2 *sum*=310 squared is : 1008. 2 48 20.2 20.29.x+y+z=4810.55, ,A四、编程题1.【参考代码】#include<stdio.h> int main( ) { char ch;牰湩晴尨请输入一个字符:\n); scanf(%c,&ch);printf(%c 的ASCII 码为:%d\n, ch,ch); return 0 ;}2.【参考代码】#include<stdio.h>#define PI 3.1416int main( ){ double r, h; double cl,cs,cv;牰湩晴尨请输入圆的半径:); 27/ 3 scanf(%lf, &r); 牰湩晴尨请输入圆柱高:); scanf(%lf, &h);cl=2*PI*r; cs=PI*r*r;cv=PI*r*r*h;牰湩晴尨圆的周长为:%.4lf\n, cl); 牰湩晴尨圆的面积为:%.4lf\n, cs); 牰湩晴尨圆柱的体积为:%.4lf\n, cv); return 0 ;}3.【参考代码】#i nclude<stdio.h>int main(){int splitl nt, on e,te n,hu ndred;抽湩晴尨输入要处理的整数:);sca nf(%d, &splitl nt);hundred = splitI nt/100;ten = split In t_xOO1O_O/1O;one = split In t_x0010_;抽湩晴尨个位:%d,十位:%d,百位:%d\n,one,ten,hundred); return 0 ;}第4章选择结构程序设计BBCC二、程序阅读题10 1.2,2,2 2.6 3.97,b 4.c=-1 5.8888 6.20,0 7.2,1 8.1.19.2.22,127/ 4-2,210. a=1,b=3三、程序完善题1.a>b、c>x四、编程题1.【参考代码】#include<stdio.h> int main( ) {int a, b, c,d,min; 牰湩晴尨输入4 个整数:); scanf(%d%d%d%d,&a,&b,&c,&d); if(a < b) min = a; else min = b; if(c < min) min=c; if(d<min) min=d; printf(%d\n,min);return 0 ;}2.【参考代码】#include<stdio.h> int main( ){int num,a,b,c,d; 牰湩晴尨请输入一个四位整数:); scanf(%d,&num);a=num/1000; b=num_x0010_00/100; c=num_x0010_0/10;d=num_x0010_; 牰湩晴尨各位数字之和为:%d\n,a+b+c+d); return 0 ;}3.【参考代码】#include<stdio.h> int main( ){int x; 牰湩晴尨请输入x:); scanf(%d,&x); printf(y 的值为:); if(x<0) printf(%d\n,x);else if(x<50)27 / 5else if(x<100)printf(%d\n,4*x+1);elseprintf(%d\n,5*x);return 0 ;}4.【参考代码】#include<stdio.h>int main( ){int dj;float zl,je,yfk;牰湩晴尨请输入等级( 1~4): ); scanf(%d,&dj);if (dj>4||dj<1){牰湩晴尨无此等级的苹果!\n); return 0;}牰湩晴尨请输入重量(公斤) : ); scanf(%f,&zl););switch (dj){case 1 : je=5.5*zl; break;case 2 : je=4.3*zl; break;case 3 : je=3.0*zl; break;case 4 : je=2.5*zl; break;}牰湩晴尨您选择苹果级别: %d 级\n,dj); 牰湩晴尨您购买苹果重量: %.2f 公斤\n,zl); 牰湩晴尨您应付金额为: %.2f 元\n,je););牰湩晴尨顾客所付金额: ); scanf(%f,&yfk);if (yfk<je){printf(Data Error!\n);return 0;}牰湩晴尨应找您: %.2f 元\n,yfk -je);return 0 ;}27/ 6第5章循环结构程序设计一、选择题.1 2 3 4 5 6 7 8(1) 8(2) 9 10 11BBCBCCBBBDBA二、程序阅读题1.1,2,02. m=4, n=23.A2C4E64.1325. 46.k=0,m=57.x=88. 1.69.998988三、程序完善题1.( ch > 'Z' && ch <= 'Z' + 4 ) ||(ch > 'z' )ch-262.k k/10 continue3.i + t * 10s = s + t4.fabs( t ) >= 1e -6 f = -f5.i<10 j%3 !=0printf( Output : \n );四、编程题1.【参考代码】#i nclude<stdio.h> int main(){intn , i , j , k ; printf( Output : \n );for(n = 100 ; n<1000 ; n++ ){i= n % 10 ;/* 个位*/j = ( n / 10 ) % 10 ;/* 十位*/k = n / 100 ;/* 百位*/if ( n == i * i * i + j * j * j + k * k * k )printf( %d\n , n ) ;}return 0 ;}2.【参考代码】#include<stdio.h> int main ( )27 / 7 {int i , m , n , t , p , k ; printf( Please input: ) ; scanf ( %d,%d , &m , &n ) ; if( m < n ){ t = n ; n = m ; m = t ;}p = m * n ;while ( n != 0 )/* 余数不为0 ,继续相除,直到余数为0 */{i = m % n ; m = n ; n = i ;} k = p / m ;printf( %d,%d\n , m , k );return 0 ;}3.【参考代码】#include<stdio.h> int main( ) {int i , n , t , sum ;t = 1 ;sum = 0 ;printf( Please input: n = ) ;sea nf( %d , &n );for( i = 1 ; i <= n ; i++ ){t = t * i ;sum = sum + t ;}printf( !+2!+ …+%d!= %d\n , n , sum ); return 0 ;}4.【参考代码】#i nclude<stdio.h>int main(){int i , m ;double sum = 0 , k = 1 ;27/ 8printf( Please in put : m=);sea nf( %d , &m );for( i = 1 ; i <= m ; i++ ){sum = sum + k / i ;k = -k ;}printf( sum=%4.2f\n , sum );return 0 ;}数组章第6 一、选择题1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16BDDDBDCDCBDCDD二、程序阅读题1 82430,24125t*M6mo7 fwo三、程序完善题1 k = i j = i a[k] = max a[j] = max2sum += score[i] score[i]<avg) ;4j = strle n( str ) —1str[j] = k5( c = getchar( ) ) != '#' num[c-'A'] += 1 四、编程题1.【参考代码】#include<stdio.h> #define N 5int main( ){int a[N] , i , j , r , temp ;printf( Please input %d numbers\n , N ) ; for( i = 0 ; i < N ; i++ ) scanf( %d , &a[i] ) ;for( i = 0 ; i < N - 1 ; i++ ){27/ 9r = i ;for( j = i + 1 ; j < N ; j++ )if( a[j] < a[r] )r = j ;if( r != i ){temp = a[r] ;a[r] = a[i] ;a[i] = temp ;}printf( The array after sort:\n ) ;for( i = 0 ; i < N ; i++ )printf( ] , a[i] ) ;) ;return 0 ;}2.【参考代码】#include<stdio.h>int main( ){int a[10] = { 1 , 2 , 3 , 6 , 7 , 8 , 9 , 10 } ;int x , j , k = 0 ;printf( Please input :x= ) ; scanf( %d , &x) ;if( x > a[7] )a[8] = x ;else{for( j = 0 ; j < 8 ; j++ )if( x < a[j] )break ;for(k = 8 ; k > j ; k -- )a[k] = a[k - 1] ;a[j] = x ;for( j = 0 ; j < 9 ; j++ )printf( ] , a[j] ) ;) ;return 0 ;}3.【参考代码】#include<stdio.h>int main( )27/ 10{int a[5][5] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, 22,23,24} ; int i , j ,sum = 0 ;for ( i = 0 ; i < 5 ; i++ ){for ( j = 0 ; j < 5 ; j++)printf( M , a[i][j] ) ;) ;}for( i =0 ;i < 5 ; i++ )sum += a[i][i] ;printf( sum=M\n , sum ) ;return 0 ;}4.【参考代码】#include<stdio.h>int main( ){char s1[100] , s2[30] ;int i , j ;printf( Please input s1: ) ;gets( s1 ) ;printf( Please input s2: ) ;gets( s2 ) ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;for( j = 0 ; s2[j] != '\0' ; j++ , i++ ) s1[i] = s2[j] ;s1[i] = '\0' ;printf( Output\ns1: ) ;puts( s1 ) ;return 0 ;5.【参考代码】#include<stdio.h>int main( ){char s1[100] ;int i ;printf( Please input s1: ) ;gets( s1 ) ;for( i = 0 ; s1[i] != '\0' ; i++ ) ;printf( The length of s1 is %d\n ,i ) ; return 0 ; }27第7章函数、选择题二、程序阅读题1max is 22a=1,b=23 1 114a=11,b=12,c=25 667 8 978 1780 1 2 0 1 2三、程序完善题1 float area ( float r ) retur n s2z = fun( x , y ) z = z * x3cou nt =fun( score ) cou nt++四、编程题1.【参考代码】#i nclude<stdio.h>int main(){void f(i nt n);int n ;printf( Please in put: n= ); sca nf( %d , &n );if( n <= 0)pr intf( Wrong n umber!\n ); elsef( n );return 0 ;}void f(i nt n){if( n % 2 == 1 )pr in tf( %d is a odd n umber.\ n , n );elseprintf( %d is a even number.\n , n );}2.【参考代码】#i nclude < stdio.h >#include < math.h > 27/ 12int main( ){void f( int m ) ;int m ;printf( Please input: m= ) ;scanf( %d , &m ) ;f( m ) ;return 0 ;}void f( int m ){int i , k ;k = sqrt( m );for(i = 2 ; i <= k ; i++ )if( m % i == 0 ) break; if (i >= k + 1 )printf( %d is a Prime Number.\n , m ) ; elseprintf( %d is not a Prime Number.\n , m ) ; } 3.【参考代码】#include<stdio.h>int gys( int m , int n ){int r ;r = m % n ;while( r != 0 ){m = n ;n = r ;r = m % n ;}return n ;}int gbs( int m , int n , int r ){return m * n / r ;}int main( ){int m , n , t;printf( Please input(m,n):);sea nf( %d%d , &m , &n );27/ 13if( m < n ){t = m ;m = n ;n = t ;}t = gys( m , n );printf( gys=%d\n , t );t = gbs( m , n , t );printf( gbs=%d\n , t );return 0 ;}4.【参考代码】#i nclude<stdio.h>int main(){void mystrcat( char s1[100] , char s2[30]); char s1[100] , s2[30];printf( Please in put s1:);gets( si );printf( Please in put s2:);gets( s2 );mystrcat( si , s2 );printf( Output\ns1:);puts( si );return 0 ;}void mystrcat( char s1[100] , char s2[30]) {int i , j ;for( i = 0 ; s1[i] != '\0' ; i++ );for( j = 0 ; s2[j] != '\0' ; j++ , i++ )s1[i] = s2[j];s1[i] = '\0';}编译预处理章第8 一、选择题1 2 3 4 5 6BADD二、程序阅读题16,1827/ 1421535第9章指针一、选择题二、填空题1.地址,NULL (或0)2 . char a, *p; ,sea nf(%c, &a); ,p=&a;3.*m4.for( k=0; k<10; k++ )5.*(p+i) ,p[i],*(x+i)6.str[i]或*( str + i ) ,i三、程序阅读题1.gae2.bcdABCD3.7, 8, 84.8 45. 3 14 26.efgh7.w,o ne8.7四、程序完善题*( a + i )1. a[i]2.*p!='\0' *p -'0'3.p1 p2-x4.max(int a , int b );p = max四、编程题1.【参考代码】#include<stdio.h> void sort( int *a , int *b , int *c );int main(){int m , n , t ; printf( Please input(m n t): ) ; scanf( %d%d%d , &m , &n , &t ) ; sort( &m , &n , &t ) ;27 / 15 printf( The result is :%d\t%d\t%d\n , m , n , t ) ; return 0 ;}void sort( int *a , int *b , int *c ){int temp ;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 ; }}2.【参考代码】程序1:#include <stdio.h>int strcompare( char *str1 , char *str2 );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ; printf( Please input(string1): ) ;scanf( %s , s1 ) ;printf( Please input(string2): ) ; scanf( %s , s2 ) ;m = strcompare ( s1 , s2 ) ;printf( The result of strcompare is: %d\n , m ) ; return 0 ;}int strcompare( char *str1 , char *str2 ) {int i = 0 ;while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\0' ) ) i++ ;return( *( str1 + i ) - *( str2 + i ) ) ;}程序2:#include <stdio.h>int strcompare( char *str1 , char *str2 );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( Please input(string1): ) ;scanf( %s , s1 ) ;printf( Please input(string2): ) ;27 / 16scanf( %s , s2 ) ;p1 = s1 ;p2 = s2 ;m = strcompare ( p1 , p2 ) ;printf( The result of strcompare is: %d\n , m ) ; return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( *( str1 + i ) == *( str2 + i ) ) &&( *( str1 + i ) != '\0' ) ) i++ ;return( *( str1 + i ) - *( str2 + i ) ) ;}程序3:#include <stdio.h>int strcompare( char str1[] , char str2[] );int main( ){int m ;char s1[20] , s2[20] , *p1 , *p2 ;printf( Please input(string1): ) ;scanf( %s , s1 ) ;printf( Please input(string2): ) ;scanf( %s , s2 ) ;p1 = s1 ;p2 = s2 ;m = strcompare ( pl , p2 );printf( The result of strcompare is: %d\n , m ); return 0 ;}int strcompare( char *str1 , char *str2 ){int i = 0 ;while( ( str1[i] == str2[i] ) &&( str1[i] != '\0')) i++ ;return( str1[i] - str2[i]);}27/ 17第10章结构体与共用体一、选择题.12 3 4 5 6 7 8 9 10 11DCCDCBBDACD二、填空题1.162. p->n ext=head - >n ext head->n ext=p3.p->n ext三、程序阅读题1.51,60,212.163.1001,Cha ngRo ng,1098.0四、程序完善题1.sizeof( struct ps ) 或sizeof( bt )2.p=p- >n ext3.pers on [i].sex五、编程题1.【参考代码】#define N 3#include <stdio.h> struct student {char num[6] ;char name[8] ;int score[2] ; float ave ;} ;void input( struct student stu[N] ) ; void average( struct student stu[N] ) ; int max( struct student stu[N] ) ; int main( ) {int i , j ;struct student stu[N] ;input( stu ) ; average( stu ) ;printf( No\tName\tScore1\tScore2\tAverage\n ) ; for( i = 0 ; i < N ; i++ ){printf( %s\t%s\t , stu[i].num , stu[i].name ) ; for( j = 0 ; j < 2 ; j++ )printf( %d\t , stu[i].score[j] ) ;27 / 18printf( %8.2f\n , stu[i].ave ) ;}i = max( stu ) ;The max is:\n ) ;printf( No\tName\tScore1\tScore2\tAverage\n ) ; printf( %s\t%s\t , stu[i].num , stu[i].name ) ; for( j = 0 ; j < 2 ; j++ ) printf( %d\t , stu[i].score[j] ) ;printf( %5.2f\n , stu[i].ave ) ; return 0;}void input( struct student stu[N]) {int i , j ; for(i=0;i<N;i++){Please input No%d student:\n,i+1); printf(No:);scanf(%s,stu[i].num); printf(Name:);scanf(%s,stu[i].name);for(j=0;j<2;j++){printf(score %d:,j+1); scanf(%d,&stu[i].score[j]);}}}void average( struct student stu[N]){int i , j , sum ;for(i=0;i<N;i++){for(j=0 , stu[i].ave = 0 ;j<2;j++)stu[i].ave += stu[i].score[j];stu[i].ave = stu[i].ave / 2 ;}}int max( struct student stu[N]){int i , max , index;max = stu[0].ave ;index = 0 ;for( i = 1 ; i < N ; i++ )27/ 19{if( max < stu[i].ave ){max = stu[i].ave ;index = i ;}}return index;}2.【参考代码】#include<stdio.h>#include<stdlib.h> struct nodeshort int data ;struct node *next ;} ;typedef struct node NODE ;struct node *CreatLink( ) ;void PrintLink( NODE *head ) ;int max( NODE *head );int main( ){NODE *head ;int max_value ;head = CreatLink( ) ;PrintLink( head ) ;max_value = max( head ) ;printf( The max is:%d\n , max_value ) ; return 0 ;}struct node *CreatLink( ){NODE *head , *p , *q ;short int num ;head = ( NODE * )malloc( sizeof( NODE ) ) ; head->next = NULL ; p = head ;printf( Please input( end of -1)!:\n ) ; scanf( %d , &num ) ;while( num != -1 ){q = ( NODE *)malloc( sizeof( NODE ) ) ;27/ 20q->data = num ;p->next = q ;p = q ;scanf( %d , &num ) ;}p->next = NULL ;return head ;}void PrintLink( NODE *head ){NODE *p;p = head->next ;printf( The data is:\n );while( p != NULL ){printf( M , p ->data ); p = p_>n ext ;});}int max( NODE *head ){NODE *p;short int max = -32768; p = head- >n ext ; while( p != NULL ){if( max < p ->data )max = p->data ; p = p_>n ext ;}return max ;}第11章位运算一、选择题.12 3 4DBCA二、填空题1.0000 11112. x | ff0027/ 213. 4 3三、程序阅读题1.02.11 223.0四、编程题1.【参考代码】#i nclude<stdio.h>int mai n(){short int data , low ,high ;prin tf( Please in put( short in t):);sca nf( %d , & data );low = data & OxOOff ; /* OxOOff 表示低字节全1 */high = data & OxffOO ; /* OxffOO 表示高字节全1 */printf( data:Ox%x,the value of low byte is:0x%x\n , data , high );printf( data:0x%x,the value of high byte is:0x%x\n , data , low ); return 0 ;}2.【参考代码】#in elude <stdio.h> int main(){short int data , result ;prin tf( Please in tput(short in t):);sca nf( %d , & data );result = data A OxOOOf ;/* OxOOOf 表示低4 位全1,高12 位全0 */ printf( The data is 0x%x \nThe result is :0x%x\n , data,result );return 0 ;}第12章文件操作二、填空题1.二进制ASCII(文本)2 . FILE *fp# in elude <stdio.h>27/ 22buf的首地址4. 15.用以获得文件读写位置标记指针的位置, 件开头的字节数、选择题3. n - 1函数返回值为当前文件读写位置标记指针相对于文6.使文件读写位置标记指针重新返回文件的开头三、程序阅读题1. 1 22.end3. 34.hello,四、程序完善题1. ! feof (fp) fgetc (fp)2.fopen (“ num.dat”,”r”) fp, ” %d” ,&temp ( ch=getchar() )ch , fp3.z++ 五、编程题【参考代码】1.#include<stdio.h> #include<stdlib.h>#include<string.h> int main( ){FILE *fp ; char str[100] , [10] ;int i = 0 ;if( ( fp = fopen( %upper.txt , w+ ) ) == NULL ){printf( Cannot open file!\n ) ; exit( 0 ) ;}printf( Please input(string):\n ) ; gets( str ) ;while( str[i] != '!' ){if( str[i] >= 'a' && str[i] <= 'z' ) str[i] = str[i] - 32 ; fputc( str[i] , fp ) ;i++ ;} rewind( fp ) ;fgets( str , strlen( str ) + 1 , fp ) ;The result is :\n ) ; printf( %s\n , str ) ; fclose( fp ) ; return 0 ;27 / 23 }2.【参考代码】#include<stdio.h>#include<stdlib.h>#define N 5 struct student{char num[10] ; char name[8] ;int score[3] ; float ave ;} stu[N] ;int main( ){int i , j , sum ;FILE *fp ;for( i = 0 ; i < N ; i++ ){Please input student information: \n , i + 1 ) ; printf( No: ) ;scanf( %s , stu[i].num ) ; printf( Name: ) ;scanf( %s , stu[i].name ) ; sum = 0 ;for( j = 0 ; j < 3 ; j++ ){printf( Score%d: , j + 1 ) ; scanf( %d , &stu[i].score[j] ) ; sum += stu[i].score[j] ;}stu[i].ave = sum / 3.0 ;}if( ( fp = fopen( stud.dat , w ) ) == NULL ){printf( cannot open stud for write!\n ) ; exit( 0 ) ;}for( i = 0 ; i < N ; i++ ){fwrite( &stu[i] , sizeof( struct student ) , 1 , fp ) ; }fclose( fp ) ;if( ( fp = fopen( stud.dat ,) ) == NULL )27/ 24printf( cannot open stud for read!\n ) ;exit( 0 ) ;}No\tName\tScore1\tScore2\tAverage\n ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof( struct student ) , 1 , fp ) ;%s\t%s\t%d\t%d\t%5.2f\n , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] , stu[i].score[2] ,stu[i].ave ) ;}fclose( fp ) ;return 0 ;}3.【参考代码】#include<stdio.h> #include<stdlib.h>#define N 5struct student{char num[10] ;char name[8] ;int score[3] ;float ave ;} stu[N] ;int main( ){int i , j , min , index ;FILE *fp ;struct student temp ;/* 从stud.dat 文件中读入数据,存放在stu 数组中*/if( ( fp = fopen( stud.dat ,) ) == NULL ){printf( cannot open stud for read!\n ) ;exit( 0 ) ;}The data is : ) ;No\tName\tScore1\tScore2\tAverage\n ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof(struct student ) , 1 , fp ) ;%s\t%s\t%d\t%d\t%5.2f\n , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] , stu[i].score[2] ,stu[i].ave ) ;}27/ 25{fclose( fp ) ;/* 对stu 数组中数组元素按其平均值数据域排序*/for( i = 0 ; i < N -1 ; i++ ){min = stu[i].ave ;index = i ;for( j = i + 1 ; j < N ; j++ ){if( min > stu[j].ave )index = j ;}if( index != i ){temp = stu[i] ;stu[i] = stu[index] ;stu[index] = temp ;}}/* 将排序之后的stu 数组存放在stu_sort 文件中*/if( ( fp = fopen( stu_sort.dat , w ) ) == NULL ){printf( cannot open stud for write!\n ) ;exit( 0 ) ;}for( i = 0 ; i < N ; i++ ){fwrite( &stu[i] , sizeof(struct student) , 1 , fp ) ;}fclose( fp ) ;/*将stu_sort 文件中的数据,读出存放在stu 数组中*/ if( ( fp = fopen( stu_sort.dat ,) ) == NULL )27 / 27printf( cannot open stud for read!\n ) ;exit( 0 ) ;}The result is :) ;/* 将stu 数组中的数据输出*/No\tName\tScore1\tScore2\tAverage\n ) ;for( i = 0 ; i < N ; i++ ){fread( &stu[i] , sizeof(struct student) , 1 , fp ) ;%s\t%s\t%d\t%d\t%5.2f\n , stu[i].num , stu[i].name , stu[i].score[0] , stu[i].score[1] ,stu[i].score[2] , stu[i].ave ) ;27/ 26}fclose( fp ) ;return 0 ;}。
《C语言程序设计教程》习题参考答案C语言程序设计教程习题参考答案1. 基本概念与数据类型1.1 什么是C语言程序设计?C语言程序设计是一种计算机编程语言,它是一种结构化,通用的程序设计语言。
1.2 C语言的主要特点有哪些?C语言具有代码简洁、执行速度快、可移植性好等特点。
1.3 C语言的数据类型有哪些?请简要介绍。
C语言的数据类型包括基本数据类型和派生数据类型。
基本数据类型包括整型、浮点型、字符型和布尔型;派生数据类型包括数组、结构体、枚举和指针等。
2. 变量与运算符2.1 什么是变量?怎样定义和使用变量?变量是计算机内存中的一块存储空间,用于存储数据。
在C语言中,变量需要先定义后使用。
定义变量使用关键字"int"、"float"等,然后指定变量名,并可选地赋初值。
2.2 C语言中的运算符有哪些?请简要介绍。
C语言中的运算符包括算术运算符、关系运算符、逻辑运算符、赋值运算符、位运算符等。
算术运算符用于基本的数学运算;关系运算符用于比较两个变量的关系;逻辑运算符用于逻辑判断;赋值运算符用于将一个值赋给一个变量;位运算符用于对二进制数进行逐位操作。
3. 控制语句3.1 C语言中的条件语句有哪些?请简要介绍。
C语言中的条件语句包括if语句、switch语句等。
if语句用于根据条件执行不同的代码块;switch语句用于根据不同的表达式值选择不同的分支。
3.2 C语言中的循环语句有哪些?请简要介绍。
C语言中的循环语句包括while循环、do-while循环和for循环等。
while循环用于根据条件重复执行一段代码;do-while循环和while循环类似,但它会首先执行一次代码;for循环用于固定次数的循环。
4. 函数与数组4.1 什么是函数?怎样定义和调用函数?函数是一段完成特定任务的代码块,它可以接收输入参数,并返回一个值。
在C语言中,可以使用关键字"void"定义无返回值的函数,使用其他数据类型定义有返回值的函数。
《C语⾔程序设计(第五版)》习题答案各章习题参考答案第1章习题参考答案1. 简述C程序的结构特点。
答:(1) ⼀个C语⾔源程序由⼀个或多个源⽂件组成。
每个源⽂件由⼀个或多个函数构成,其中有且仅有⼀个主函数(main函数)。
(2) ⼀个函数由函数⾸部(即函数的第⼀⾏)和函数体(即函数⾸部下⾯的⼤括号内的部分)组成。
函数⾸部包括函数类型、函数名和放在圆括号内的若⼲个参数。
函数体由声明部分和执⾏部分组成。
(3) C程序书写格式⾃由,⼀⾏内可以写多条语句,⼀个语句也可以分写在多⾏中,每个语句必须以分号结尾。
(4)程序的注释内容放在“/*”和“*/之”间,在‘/’和‘*’之间不允许有空格;注释部分允许出现在程序中的任何位置处。
2. 分析例1.3程序的结构。
答:下⾯是例1.3的程序,它的结构是:有且只有⼀个主函数main以及若⼲个其它函数,还有⼀个被主函数调⽤的sumab函数。
函数有⾸部,包括类型和名称,⾸部下的⼤括号中有变量定义、输⼊、计算和输出等语句。
#includeint sumab (int x, int y); /*函数声明*/int main () /*主函数*/{ int a,b,sum; /*定义变量*/printf("请输⼊变量a与b的值:"); /*提⽰信息*/scanf ("%d %d", &a, &b); /*输⼊变量a和b的值*/sum=sumab(a,b); /*调⽤sumab函数*/printf("a与b的和等于%d", sum);/*输出sum的值*/return 0;}int sumab (int x, int y) /*定义sumab函数,并定义形参x、y */{ int z;z=x+y;return z;}3. 分别编写完成如下任务的程序,然后上机编译、连接并运⾏。
(1) 输出两⾏字符,第1⾏是“The computer is our good friends!”,第2⾏是“We learnC language.”。
1.填空题。
(1)UNIX
(2)编译程序
(3)结构化面向对象
(4)函数
(5)主函数(main函数)
(6)c obj exe
2.选择题。
(1)B(2)A(3)B(4)C(5)B
3.问答题。
(1)
采用与硬件无关的计算机语言来编写程序便于程序的移植。
与机器相关的语言一般是低级语言。
低级语言需要编程人员对操作系统和硬件有一定的了解。
(2)
一个C语言程序由若干个函数组成,有且仅有一个main函数(主函数),它是程序执行的入口。
函数是C语言程序的基本单位,C语言中的函数可分为系统库函数和用户自定义函数。
每个函数完成整个程序功能中的一个独立的子功能。
C语言程序中可以包含预处理命令(如:#include命令)。
预处理命令通常放在程序的开始位置,它不是C语言程序中的语句。
程序中一行可以写一条语句,也可以写多条语句。
当一条语句一行写不下时,可以分成多行写。
每一条语句必须以分号结尾。
为了增强程序的可读性,可以在程序的中增加注释。
注释以“/*”开头,以“*/”结束,在程序中出现的操作对象(如变量、数组、函数等)都必须在使用前进行声明或定义。
(3)
编辑源程序,编译程序生成目标代码,连接目标文件模块和系统提供的标准库函数生成可执行文件,运行程序。
【教材】《C语言程序设计(第2版)》清华大学出版社,黄保和,江弋编著。
2011年10月第二版。
ISBN:978-7-302-26972-4。
售价:35元。
【答案版本】本习题答案为2012年2月修订版本。
一、选择题1. 设有程序段”int k=10; while(k=0) k=k-1;”,则下面叙述正确的是D)循环体语句一次也不执行。
A. while循环执行10次B. 循环是无限循环C. 循环体语句执行一次D. 循环体语句一次也不执行2. 设有程序段”int x=0,s=0;while(!x!=0) s+=++x; printf(“%d”,s);”则A)运行程序段后输出1。
A. 运行程序段后输出1B. 程序段执行无限次C. 运行程序段后输出0D. 程序段中的控制表达式是非法的3. 下面循环语句中,错误的是D) int a=1,b=2;do b-- while(b= =0);。
A. int a=1,b=2; while(b--);B. int a=1,b=2; do a++; while(a==b);C. int a=1,b=2; while(a=3);D. int a=1,b=2; do b-- while(b==0);4. 已知”int i=5;”,下列do…while循环语句的循环次数为C) 5。
do{ printf(“%d\n”,i--); } while(i!=0);A. 0B. 1C. 5D. 无限5. 循环语句”for(int i=0,j=10; i==j; i++,j--)”的循环次数是A) 0。
A. 0B. 5C. 10D. 无限6. 下述有关break语句的描述中,不正确的是C) break语句用于if语句的内嵌语句内,它结束该if语句。
A. break语句用于循环体内,它将结束该循环B. break语句用于开关语句,它结束该开关语句C. break语句用于if语句的内嵌语句内,它结束该if语句D. break语句在一个循环体内可使用多次7. 下面关于循环语句的描述中,错误的是B)循环体内必须同时出现break语句和continue 语句。
第1 章习题答案二、单项选择题1.A2.A3. C4.B5.A6.B7.B8. A三、填空题1. .C .CPP .OBJ .EXE2. 主3. #include<iostream >, using namespace std, #include<stdio.h>4. 顺序结构,选择结构,循环结构5.{, }, 函数说明, 函数执行,不能省略,void第2章习题答案一、单项选择题1.B2.B3.A4.C5. C6. A7.B8.C9. D 10. D11. B 12.A 13. B 14.C 15. D二、填空题1. x>20&&X<30||X<-1002. x>y或a>b3. 14. auto 、register 、static 与extern5. 函数体内.6. int float double7. 2 18. . 是最右边表达式的值9. 710. 先使用后自增,先自增后使用11.右结合12.变量的数据类型、变量的存储类型、变量名13.是否整除14.此之外全局变量,静态局部变量15.count三、写出程序运行结果1、2,12、6,8,6,73、n=14、15、n=-46、x=3,a=2,b=37、08、i=6,d=129、2147483647,-2147364810、x=3,y=5第3章习题答案一、单项选择题1.D2.B3.B4.C5.D6.D7.B8.B9.C 10.A二、写出程序运行结果1. 1202. s=633. 01234the loop break out.4. freight= 58800005. sum=1sum=3sum=9sum=33三、程序填空1. i++ i<=102. i<100 i%3!=03. x!=-1 x<min4. i++,2*i-1 \n5. i=1 j<=i i*j四、编程题1.void main(){char ch1;ch1=getchar();if(ch1>'0'&&ch1<'9')printf("这是一个阿拉伯数字,朋友再见!\n"); elseprintf("这不是一个阿拉伯数字,朋友再见!\n");2.main(){int x,y;scanf("%d",&x);if(x<0)y=x;elseif(x>=10)y=3*x-11;elsey=2*x-1;printf("\nx=%d,y=%d\n",x,y);3.main( ) {char grade;grade=getchar();switch(grade){ case 'A': printf(">=90"); break;case 'B': printf("80~89"); break;case 'C': printf("70~79");break;case 'D': printf("60~69"); break;case 'E': printf("0~59");4.void main(){char ch1;ch1=getchar();if(ch1>'a'&&ch1<'z')printf("这是一个英文大写字符,朋友再见!\n"); else if(ch1>'A'&&ch1<'Z')printf("这是一个英文小写字符,朋友再见!\n");5.void main(){int n,a,b,c;for(n=100;n<=999;n++){a=n/100;b=(n-a*100)/10;c=n%10;if(n==a*a*a+b*b*b+c*c*c)printf("%d,",n);6. main()int a,b,c,d,t;scanf("%d,%d,%d,%d",&a,&b,&c,&d);printf("\na=%d,b=%d,c=%d,d=%d\n",a,b,c,d); if(a>b){t=a;a=b;b=t;}if(a>c){t=a;a=c;c=t;}if(a>d){t=a;a=d;d=t;}if(b>c){t=b;b=c;c=t;}if(b>d){t=b;b=d;d=t;}if(c>d){t=c;c=d;d=t;}printf("%d,%d,%d,%d",a,b,c,d);7. #include <math.h>main(){float e=1.0,t=1,n=1;while(fabs(1/t)>1e-6) {e=e+1/t; n=n+1; t=t*n; }printf("e=%f\n",e);8. main(){int i,j;for(i=1;i<=4;i++) {for(j=1;j<=i+30;j++) printf(" "); //定打印*的位置,打在屏幕中央,从第31列开始printf("*");for(j=1;j<=2*(4-i);j++)printf(" "); //两个*间的空位数printf("*");printf("\n");9. main(){ int i,a,b,c,n=0;for(i=100;i<=999;i++){a=i%100;c=i%10;b=i-a*100-c;if(i%11==0&&(a==b||b==c||c==a)){ printf("%d ",i); n+=1;10. main(){int d=0,a=2;float m,s=0;do{a=2*a;m=0.8*a;s=s+m;d++;}while(a<=100);printf("%f\n",s/d);第4习题答案一、A.D.A.B.A.D.B.B.B。
(1)int
(2)fun(n,x)
(3)函数类型
(4)3
(5)3
(6)单向值传递
(7)
double fun(double x);
void two_beeps();
(8)1+2+…+n 递归算法
(9)auto register static extern
(10)编译
2.
(1)函数定义和函数原型不一致。
函数定义的头部改为:double f1(float num)
(2)num为形参。
删除float num;
(3)缺少函数原型的声明。
在#include <stdio.h>命令行下增加函数原型声明float ftoc(float temperature);
3.
(1)C)
(2)C)
(3)A)
(4)B)
(5)D)
(6)D)
(7)D)
(8)C)
4.
(1)①float fs( float x, float y) ②float z ③z;
(2)④double max
(3)⑤k+1;i++ ⑥n%10
(4)⑦3+DIF(n-1)
(5)⑧i<=y
⑨s=s*x
5.
(1)6
(2)3.00
(3)7
(4)1
2
6
24
120
(5)The number of taozi is 31
6.
#include <stdio.h>
int fun(int m)
{
int i=1,s=0;
while(i<=1000)
{
if(i%m==0)
s+=i;
i++;
}
return(s);
}
int main(void)
{
int m,sum=0;
scanf("%d",&m);
sum=fun(m);
printf("%d",sum);
return 0;
}
7.
#include <stdio.h>
double fun(int n)
{
int i=1;
double s=0;
while(i<=n)
{
if(i%3==0|| i%5==0)
s+=1.0/i;
i++;
}
return(s);
}
int main(void)
{
int n;
double sum=0;
scanf("%d",&n);
sum=fun(n);
printf("%f",sum);
return 0;
}
8.
#include <stdio.h>
int hef(int u,int v)
{
int t,r,m=u,n=v;
if (v>u)
{
t=u;
u=v;
v=t;
}
while((r=u%v)!=0)
{
u=v;
v=r;
}
return(m*n/v);
}
int main(void)
{
int b[5],i,f[5];
for(i=0;i<5;i++)
scanf("%d",&b[i]);
f[4]=b[4];
for(i=4;i>=0;i--)
f[i-1]=hef(f[i],b[i-1]);
printf("%d",f[0]);
return 0;
}
9.
#include <stdio.h>
#include <math.h>
int num_of_primes(int x, int y)
{
int n,i,num=0,flag;
for (n=x;n<=y;n++)
{ flag=0;
for (i=2;i<=sqrt((double)n);i++)
if (n%i==0)
{
flag=1;
break;
}
if (!flag)
num++;
}
return(num);
}
int main(void)
{
int a,b,t;
int countnum;
scanf("%d%d",&a,&b);
if(a>b)
{
t=a; a=b;b=t;
}
countnum=num_of_primes(a,b);
printf("%d",countnum);
return 0;
}。