c语言课后习题

时间:2019-05-12 05:11:33下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《c语言课后习题》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《c语言课后习题》。

第一篇:c语言课后习题

C语言程序设计实验报告

学院

数学与信息技术

班级

学号

11130730

姓名

指导教师

实验1 简单程序设计

1.实验目的

(1)熟悉C语言开发环境并掌握在该环境下如何编辑、编译、连接和运行一个C程序。(2)通过运行一个简单的C程序过程,初步了解C程序的基本结构及特点。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)输入三个整数,请把这三个数由小到大输出。试编写多种方法。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)C程序是由一个个函数构成,当一个函数调用另一个函数时,需要对被调函数作声明。(2)用户自定以的函数最好写在一个头文件中,在需要的地方用文件包含命令即可。

(3)system(“cls”)函数的作用是清屏,它的声明在头文件stdlib.h中。如果是在Linux操作系统的gcc环境下,清屏用system(”clear”)。

4. 常见错误

(1)数据声明或语句后面缺少分号。(2)对被调函数没有声明。

(3)没有main函数或者有多个main函数。

5. 程序代码

#include int main(){ float a,b,c,t;printf(“请输入三个数:”);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(“%5.2f,%5.2f,%5.2fn”,a,b,c);} 6. 实验结果

7. 心得体会

刚开始学习C语言,有一些小问题,数据声明时,分号会忘记,语句后面缺少分号。而且n斜杠会写反,有时会忘记声明函数。

实验2 顺序结构程序设计

1.实验目的

(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量。(2)掌握数据的输入输出的方法,能正确使用各种格式控制符。(3)掌握算术运算符和赋值运算符。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)输入圆半径和圆柱高,求圆周长、圆面积、圆球表面积、圆球体积和圆柱体积。输入输出要有文字说明,输出结果取小数点后2位。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)用scanf和printf对数据进行输入输出时,不同的数据类型用不同的格式控制符。(2)scanf函数中的格式控制后面应当是变量地址,而不是变量名。

4. 常见错误

(1)变量没有定义,直接使用。

(2)企图利用整数除以整数得到精确结果。例如1/4结果不是0.25而是0,1/4.0结果才是0.25。(3)printf和scanf函数中格式控制符的个数与变量或变量地址的个数不一致。(4)scanf函数的地址表列因该是变量地址,而不是变量名。

(5)scanf函数在格式控制字符串中除了格式说明以外还有其他字符时,在输入数据时(6)没有在对应的位置输入与这些字符相同的字符。

5. 程序代码

#include int main(){ float h,r,l,s,sq,vq,vz;float p=3.141526;printf(“请输入圆半径r,圆柱高h”);scanf(“%f,%f”,&r,&h);l=2*p*r;//圆周长

s=r*r*p;//圆面积

sq=4*p*r*r;//圆球表面积

vq=4.0/3.0*p*r*r*r;//圆球体积

vz=p*r*r*h;//圆柱体积

printf(“圆周长为: l=%6.2fn”,l);printf(“圆面积为: s=%6.2fn”,s);printf(“圆球表面积为: sq=%6.2fn”,sq);printf(“圆球体积为: vq=%6.2fn”,vq);printf(“圆柱体积为: vz=%6.2fn”,vz);return 0;} 6. 实验结果

7. 心得体会

这边是基础的用scanf和printf对数据进行输入输出,不同的数据类型用不同的格式控制符。有点小睇混淆。才刚开始,还是觉得挺简单的。

实验3 选择结构程序设计

1.实验目的

(1)了解C语言表示逻辑变量的方法(2)学会正确使用关系运算符和逻辑运算符。(3)熟练掌握if语句和switch语句。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)把百分制成绩转换成5级记分制,要求分别用if else 和switch语句。

90分以上(包括90): A 80至90分(包括80):B 70至80分(包括70):C 60至70分(包括60):D 60分以下:E

(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)注意关系运算符==和复制运算符=的区别。(2)if和else的匹配原则。

(3)在switch语句中正确使用break。

4. 常见错误

(1)赋值运算符=和关系运算符等号=搞混。(2)在if语句为复合语句时,忘记写{}。(3)if语句出现嵌套时,没正确配对。(4)switch语句中,没正确使用break。

5. 程序代码

#include int main(){ float score;char grade;printf(“请输入学生成绩:”);scanf(“%f”,&score);while(score>100 || score<0){

printf(“n输入有误,请重新输入!”);

scanf(“%f”,&score);} switch((int)(score/10)){ case 10: case 9:grade='A';break;case 8:grade='B';break;case 7:grade='C';break;case 6:grade='D';break;case 5: case 4:

} case 3: case 2: case 1: case 0:grade='E';} printf(“成绩是%5.1f,相应的等级是%cn”,score,grade);return 0;6. 实验结果

7. 心得体会

赋值运算符=和关系运算符等号=搞混。在if语句为复合语句时,忘记写{}。if语句出现嵌套时,没正确配对。

实验4 循环结构程序设计

1.实验目的

(1)熟练掌握循环语句中的for语句、while语句和do while语句的使用方法,以及这三种循环语句之间的转换方法。

(2)掌握编写循环结构程序的方法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)通过键盘输入任意两个正整数,求其最大公约数和最小公倍数。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)循环结构程序的设计方法。

(2)while和do while循环之间的转换方法。

(3)getch函数从键盘接收一个字符,该函数被调用后程序会暂停,等待按任意键,再继续执行后续的语句,以便我们观察中间结果。在VC++下需要包含conio.h头文件,在Linux下需要包含头文件curses.h。由于在Linux下getch函数还需要与其它函数配合使用才能达到上面所说的功能并且在编译时还要指定链接所使用的库文件,所以在Linux环境建议使用两次调用getchar函数来替换getch函数。

4. 常见错误

(1)循环体为复合语句时,没用{}括起来。

(2)在while()和for()后面添加分号,使得循环体为空语句。(3)for括号里的分号和逗号用错。

(4)循环嵌套时,内循环的初始条件和循环体没正确设计好。

5. 程序代码

#include int main(){ int r,m,n,p;scanf(“%d,%d”,&m,&n);p=n*m;do{ r=m%n;m=n;n=r;p=p/m;}while(r!=0);printf(“最大公约数:%dn”,m);

printf(“最小公倍数:%dn”,p);return 0;} 6. 实验结果

7. 心得体会

循环体为复合语句时,没用{}括起来。在while()和for()后面添加分号,使得循环体为空语句。for括号里的分号和逗号用错。循环嵌套时,内循环的初始条件和循环体没正确设计好。

实验5 数组的应用

1.实验目的

(1)掌握一维数组和二维数组的定义和引用。(2)掌握字符数组和字符串函数的使用。(3)掌握与数组有关的算法(特别是排序算法)。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)用选择法对10个整数排序。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)在循环中,数组元素的引用。

(2)起泡排序法、选择排序法和插入排序法。

4. 常见错误

(1)数组定义时,没规定数组长度或者长度为一变量。(2)循环中数组元素的下标没正确表示。

(3)起泡排序、选择排序和插入排序算法没理解透。

(4)起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。(5)字符串的复制和比较直接使用赋值运算符和关系运算符。

5. 程序代码

#include int main(){ int i,j,t,a[10];printf(“请输入10个整数:n”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);for(i=0;i<9;i++)

for(j=i+1;j<10;j++)

if(a[i]>a[j])

{

t=a[i];

a[i]=a[j];

a[j]=t;

} printf(“选择排列:n”);for(i=0;i<10;i++)

printf(“%5d”,a[i]);printf(“n”);return 0;} 6. 实验结果

7. 心得体会

数组定义时,没规定数组长度或者长度为一变量。循环中数组元素的下标没正确表示。起泡排序、选择排序和插入排序算法没理解透。起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。字符串的复制和比较直接使用赋值运算符和关系运算符。

实验6 函数的应用

1.实验目的

(1)掌握函数的定义和调用方法。

(1)掌握函数实参与形参的对应关系,以及“值传递”的方式。(1)掌握函数的嵌套调用和递归调用的方法。

(1)掌握全局变量和局部变量,动态变量以及静态变量的概念和使用方法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)写一个函数,用“起泡法”对输入的10个字符按由小到大的顺序排列,主函数通过调用它实现题目要求。

(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)函数的定义和调用方法。

(2)函数的实参数为数组时,形参的形式以及实参和形参之间的数据传递方式。(3)函数的递归调用。

4. 常见错误

(1)函数没定义,就被调用。(2)函数定义了,又没被调用。(3)定义函数时,形参没规定类型。(4)函数调用时,实参前加类型。(5)被调函数没有声明

(6)嵌套调用和递归调用没理解透,使用错误。(7)全局变量和局部变量有效范围没能正确区分。

5. 程序代码

#include #include #define N 10 char str[N];int main(){ void sort(char[]);int i,flag;for(flag=1;flag==1;){ printf(“input string:n”);scanf(“%s”,&str);if(strlen(str)>N)printf(“string is too long,input again!”);else flag=0;} sort(str);printf(“string sorted:n”);for(i=0;istr[i+1]){ t=str[i];str[i]=str[i+1];str[i+1]=t;} } 6. 实验结果

7. 心得体会

有时候函数没定义就使用,有时候会定义函数,然后没有使用,定义函数时,形参没规定类型。函数调用时,实参前加类型。会把形参与实参搞混

实验7 指针的应用

1.实验目的

(1)熟练掌握指针的定义、赋值和使用。

(2)掌握用指针引用数组的元素、熟悉指向数组的指针的使用。(3)熟练掌握字符数组与字符串的使用,掌握指针数组。(4)掌握指针函数与函数指针的用法。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)有一个班4个学生,5门课程。①求第1门课程的平均分;②找出两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;③找出平均成绩在90以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)列指针变量的定义、赋值以及利用它引用数组元素。(2)行指针变量的定义、赋值以及它在二维数组中的使用。(3)函数指针变量的定义、赋值和利用它进行函数调用。

4. 常见错误(1)混淆变量值和变量地址。

(2)指针变量没有初始化,就利用该指针变量引用变量。

(3)利用指针变量引用一维数组元素和二维数组元素或地址时,引用的方法不对。(4)函数指针概念清楚。(5)混淆行指针变量和指针数组。

5. 程序代码

#include int main(){ void avsco(float *,float *);void avcour1(char(*)[10],float *);void fali2(char course[5][10],int num[],float *pscore,float aver[4]);void good(char course[5][10],int num[4],float *pscore,float aver[4]);int i,j,*pnum,num[4];float score[4][5],aver[4],*pscore,*paver;char course[5][10],(*pcourse)[10];printf(“input course:n”);pcourse=course;for(i=0;i<5;i++)scanf(“%s”,course[i]);printf(“input NO.and scores:n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%3s”,course[i]);printf(“n”);pscore=&score[0][0];pnum=&num[0];for(i=0;i<4;i++){

scanf(“%d”,pnum+i);

for(j=0;j<5;j++)

scanf(“%f”,pscore+5*i+j);} paver=&aver[0];printf(“nn”);avsco(pscore,paver);avcour1(pcourse,pscore);printf(“nn”);fali2(pcourse,pnum,pscore,paver);printf(“nn”);good(pcourse,pnum,pscore,paver);return 0;} void avsco(float *pscore,float *paver){ int i,j;float sum,average;for(i=0;i<4;i++){

sum=0.0;

for(j=0;j<5;j++)

sum=sum+(*(pscore+5*i+j));

average=sum/5;

*(paver+i)=average;} } void avcour1(char(*pcourse)[10],float *pscore){ int i;float sum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+(*(pscore+5*i));average1=sum/4;printf(“course1:%s average score:%7.2fn”,*pcourse,average1);}

void fali2(char course[5][10],int num[],float *pscore,float aver[4]){ int i,j,k,labe1;printf(“ ==========Student who is fail in two courses======= n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%11s”,course[i]);printf(“averagen”);for(i=0;i<4;i++){

labe1=0;for(j=0;j<5;j++)if(*(pscore+5*i+j)<60.0)labe1++;if(labe1>=2)

{

printf(“%d”,num[i]);for(k=0;k<5;k++)printf(“%11.2f”,*(pscore+5*i+k));printf(“%11.2fn”,aver[i]);

} } } void good(char course[5][10],int num[4],float *pscore,float aver[4]){ int i,j,k,n;printf(“ ======Students whose score is good======n”);printf(“NO.”);for(i=0;i<5;i++)printf(“%11s”,course[i]);printf(“ averagen”);for(i=0;i<4;i++){

n=0;

for(j=0;j<5;j++)

if(*(pscore+5*i+j)>85.0)n++;

if((n==5)||(aver[i]>=90))

{

printf(“%d”,num[i]);

for(k=0;k<5;k++)

printf(“%11.2f”,*(pscore+5*i+k));

printf(“%11.2fn”,aver[i]);

} } } 6. 实验结果

7. 心得体会

指针这章有点小混乱 混淆变量值和变量地址。会忘记给指针变量没有初始化,就利用该指针变量引用变量。数组元素或地址有些模糊

实验8 结构体的应用

1.实验目的(1)掌握结构体变量、结构体数组以及结构体指针的定义和使用。(2)掌握动态存储分配函数的用法和单向链表的创建、输出等操作。(3)掌握用typedef定义类型。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。

(2)编写建立链表的函数creat,输出链表的函数print,删除链表中节点的函数del,插入节点的函数insert,再编写一个主函数,先后调用这些函数,在主函数中指定需要删除和插入的节点的数据。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)结构成员引用的三种方法。(2)链表节点数据类型的定义。

(3)malloc函数用于动态分配存储空间,它的返回值类型是void *,在实际使用中一般需要强类型转换成多需要的类型。该函数的声明在stdlib.h头文件中。(4)链表操作中,节点指针域的使用。

4. 常见错误

(1)引用结构体成员时,成员运算符.和指向运算符->的使用混淆。(2)链表操作过程中不能正确利用指针域进行操作。(3)不能正确使用typedef声明新类型名。

5. 程序代码

#include #include #define LEN sizeof(struct Student)struct Student { long num;float score;struct Student *next;};int n;int main()//主函数 { struct Student *creat();struct Student *del(struct Student *,long);struct Student *insert(struct Student *,struct Student *);void print(struct Student *);struct Student *head,stu;long del_num;printf(“input records:n”);head=creat();print(head);printf(“input the deleted number:”);scanf(“%ld”,&del_num);head=del(head,del_num);print(head);printf(“input the inserted record:”);scanf(“%ld,%f”,&stu.num,&stu.score);head=insert(head,&stu);print(head);return 0;} struct Student *creat()//创建链表 { struct Student *head;struct Student *p1,*p2;n=0;p1=p2=(struct Student *)malloc(LEN);scanf(“%ld,%f”,&p1->num,&p1->score);head=NULL;while(p1->num!=0){

n=n+1;

if(n==1)head=p1;

else p2->next=p1;

p2=p1;

p1=(struct Student *)malloc(LEN);

scanf(“%ld,%f”,&p1->num,&p1->score);} p2->next=NULL;return(head);} struct Student *del(struct Student *head,long num)//{ struct Student *p1,*p2;if(head==NULL){

printf(“nlist null!n”);

return(head);} p1=head;while(num!=p1->num && p1->next!=NULL){

删除

p2=p1;

p1=p1->next;} if(num==p1->num){

if(p1==head)head=p1->next;

else p2->next=p1->next;

printf(“delete:%ldn”,num);

n=n-1;} else printf(“%ld not been found!n”,num);return(head);} struct Student * insert(struct Student *head,struct Student *stud)//{ struct Student *p0,*p1,*p2;p1=head;p0=stud;if(head==NULL){

head=p0;

p0->next=NULL;} else {

while((p0->num>p1->num)&&(p1->next!=NULL))

{

p2=p1;

p1=p1->next;

}

if(p0->num<=p1->num)

{

if(head==p1)head=p0;

else p2->next=p0;

p0->next=p1;}

else

{p1->next=p0;

p0->next=NULL;

}} n=n+1;return(head);} void print(struct Student *head)//输出链表 { struct Student *p;printf(“nNow,These %d records are:n”,n);p=head;

插入

if(head!=NULL)do {

printf(“%ld %5.1fn”,p->num,p->score);

p=p->next;}while(p!=NULL);} 6. 实验结果

7. 心得体会

结构体可以允许我们自己建立不同类型数据,组成组合型的数据结构。这样可以处理一些复杂的问题。但是,在引用结构体成员时,成员运算符.和指向运算符->的使用时会有点混淆。而且有时会不能正确利用指针域进行操作。

实验9 文件的应用

1.实验目的

(1)掌握文件、缓冲文件系统以及文件指针等概念。

(2)学会使用文件打开、关闭、读、写等函数对文件进行简单的操作。

2. 实验要求

(1)认真阅读和掌握和本实验相关的教材内容。(2)编写函数void fun(int n,int *t),其功能是计算n!,通过指针t返回。编写main函数,通过键盘输入一个不大于100的整数,调用fun函数,将指针t返回的值写入文件myf2.out中。(3)上机运行程序。

(4)保存和打印出程序的运行结果,并结合程序进行分析。

3.实验重点和难点

(1)access函数可以用来判断某一文件是否存在。调用该函数时,在VC++下需包含头文件io.h,在Linux下需包含unistd.h头文件。(2)fopen、fclose函数的使用。(3)fread和fwrite函数的使用。

4. 常见错误

(1)文件打开方式使用错误。(2)文件使用完毕没有关闭。

(3)不能正确使用文件读写函数对文件进行操作。

5. 程序代码

#include #include void fun(int n, int *t){

int result=1;int i;for(i=1;i<=n;i++){ result*=i;} *t=result;}

int main(){ int num;int write;FILE *pFile;scanf(“%d”,&num);while(num>=100){

printf(“输入的数据大于100了n”);

scanf(“%d”,&num);} fun(num,&write);

} if((pFile=fopen(“myf2.out”,“w”))==NULL){

printf(“打开文件失败!n”);

} fprintf(pFile,“%d”,write);fclose(pFile);printf(“%d”,write);return 0;6. 实验结果

7. 心得体会

文件打开方式使用错误。文件使用完毕没有关闭。不能正确使用文件读写函数对文件进行操作。而且对于的各种操作容易混淆。不太清楚什么时候怎样使用。

第二篇:C语言课后习题

习题

第三章

#include #include int main(){

int d,p;

double r,a,m;

scanf(“%d %d %lf”,&d,&p,&r);

a=(p/(p-d*r));

m=log(a)/log(1+r);

if(p>0&&d>0)

{

if(d<=m*p)

printf(“%.1f”,m);

else

printf(“God”);

}

else

printf(“0.0”);

return 0;}

勾股数

#include int main(){

int a,b,c,n;

scanf(“%d”,&n);

for(a=1;a<=n;a++)

{

for(b=1;b<=n;b++)

{

for(c=1;c<=n;c++)

{

if(c*c==a*a+b*b)

{

if(a<=b)

{

printf(“%d %d %dn”,a,b,c);

}

}

}

}

}

return 0;}

第四章

计算分段函数值 #include int main(){

float x,y;

scanf(“%f”,&x);

if(x<1)y=x;

else if(x>=1&&x<10)y=2*x-1;

else if(x>=10)y=3*x-11;

printf(“%.2f”,y);

return 0;}

找出三个数中最大的数 #include int main(){

int a,b,c,max;

scanf(“%d%d%d”,&a,&b,&c);

max=a>b?a:b;

if(c>max)

max=c;

printf(“%d”,max);

return 0;}

10844成绩等级评分 #include int main(){

int x;

scanf(“%d”,&x);

if(x>=0&&x<=100)

{

switch(x/10)

{

case 10:

case 9: printf(“A”);break;

case 8 : printf(“B”);break;

case 7 : printf(“C”);break;

case 6 : printf(“D”);break;

default:

printf(“E”);break;

}

}

else

printf(“error”);

return 0;}

前续和后续字符 #include int main(){

char x;

x=getchar();switch(x){ case'0':printf(“first”);printf(“ %c”,x+1);break;case'9':printf(“%c ”,x-1);printf(“last”);break;case'1': case'2': case'3': case'4': case'5': case'6': case'7': case'8': printf(“%c ”,x-1);printf(“%c”,x+1);break;default: printf(“error”);break;

} return 0;}

20秒后的时间 #include #include int main(){

int h,m,s;

scanf(“%d:%d:%d”, &h,&m,&s);

s=s+20;

if(s>59)

{

s=s%60;

m++;

if(m>59)

{

m=m%60;

h++;

if(h>23)

h=0;

}

}

printf(“%02d:%02d:%02dn”, h, m, s);

return 0;}

分期还款

#include #include int main(){

int d,p;

double r,a,m;

scanf(“%d %d %lf”,&d,&p,&r);

a=(p/(p-d*r));

m=log(a)/log(1+r);

if(p>0&&d>0)

{

if(d<=m*p)

printf(“%.1f”,m);

else

printf(“God”);

}

else

printf(“0.0”);

return 0;}

第五章

字母分类统计 #include #include int main(){

char ch;

int a=0,b=0,c=0,d=0,e=0,f=0,g=0,h=0,i=0;

while((ch=getchar())!='n')

{

if(ch<=127&&ch>=123)

a++;

else if(ch>=97&&ch<=122)

b++;

else if(ch<=96&&ch>=91)

c++;

else if(ch<=90&&ch>=65)

d++;

else if(ch>=58&&ch<=64)

e++;

else if(ch>=48&&ch<=57)

f++;

else if(ch>=33&&ch<=47)

g++;

else if(ch==32)

h++;

else

i++;

}

printf(“%d %d %d %d”,d+b,f,h,a+c+e+g+i);}

水仙花数

#include int main(){

int n,a,b,c;

for(n=100;n<1000;n++)

{

a=n/100;

b=(n%100)/10;

c=n%10;

if(n==a*a*a+b*b*b+c*c*c)

{

printf(“%dn”,n);

}

}

return 0;}

计算数列和

#include int main(){

int a=1,n,i,sum=0;

scanf(“%d”,&n);

for(i=1;i<=n;i++)

{

sum=sum+a;

a=a+2;

}

printf(“%d”,sum);

return 0;}

自由落体

#include int main(){

int i,n;

double h=100.0,s=0.0,c=100.0;

scanf(“%d”,&n);

{

s=s+c;

h=h/2;

c=2*h;

}

printf(“%.3lf”,s);

printf(“%.3lf”,h);

return 0;}

迭代法求平方根 #include #include int main(){

float x1,x2,a;

x2=1;

scanf(“%f”,&a);

x1=a/x2;

while(fabs(x1-x2)>=1e-5)

{

x1=x2;

x2=0.5*(x1+a/x1);

}

printf(“%.4fn”,x2);

return 0;}

打印三角形

#include #include #include int main(){

int n,k,i,j;

scanf(“%d”,&n);

for(i=0;i<2*n-1;i++)

{

k=abs(n-1-i);

for(j=0;j

{

printf(“");

}

for(j=0;j

{

printf(”*“);

}

printf(”n“);

}

return 0;}

勾股数

#include int main(){

int a,b,c,n;

scanf(”%d“,&n);

for(a=1;a<=n;a++)

{

for(b=1;b<=n;b++)

{

for(c=1;c<=n;c++)

{

if(c*c==a*a+b*b)

{

if(a<=b)

{

printf(”%d %d %dn“,a,b,c);

}

}

}

}

}

return 0;}

第六章

18052插入数据 int x,i,t;

scanf(”%d“,&x);

a[15]=x;

for(i=15;i>0;i--){

if(a[i]

{

t=a[i];

a[i]=a[i-1];

a[i-1]=t;

} }

大于平均分

#include int main(){

int a[10];

int i,sum=0,average,count;

for(i=0;i<10;i++)

{

scanf(”%d“,&a[i]);

}

for(i=0;i<10;i++)

{

sum=sum+a[i];

}

average=sum/10;

count=0;

for(i=0;i<10;i++)

{

if(a[i]>average)

count++;

}

printf(”%d“,count);

return 0;}

输出不同的数据 #include int main(){

int a[20];

int i,t,p=0;

for(i=0;i<10;i++)

{

scanf(”%d“,&a[i]);

}

for(i=0;i<10;i++)

{

for(t=0;t

if(a[t]==a[i])break;

if(t==i)printf(”%dn“,a[i]);

} }

主对角线上的元素之和 #include int main(){

int a[3][4],i,j,sum=0;

for(i=0;i<3;++i)

{

for(j=0;j<4;++j)

{

scanf(”%d“,&a[i][j]);

}

}

for(i=0;i<3;++i)

{

sum+=a[i][i];

}

printf(”%dn“,sum);

return 0;}

1051 鞍点

#include int main(){ int i,j,k,t=0,flag=0,m=0,n=0,a[3][4],max,min;for(i=0;i<3;i++){

for(j=0;j<4;j++)

{

scanf(”%d“,&a[i][j]);

} }

for(i=0;i<3;i++){

max=a[i][0];

for(j=0;j<4;j++)

{

if(max

{

max=a[i][j];m=i;n=j;

}

}

for(k=0;k<3;k++)

{

min=a[m][n];

if(min>a[k][n])

flag=1;

}

if(flag==0)

{

t=1;

printf(”%dn“,a[m][n]);}

flag=0;}

if(t==0)

printf(”NO“);

return 0;}

ASCII码值之和的差 #include #include int main(){

char s1[80];

char s2[80];

int i,sum1=0,sum2=0;

gets(s1);

gets(s2);

for(i=0;i

{

sum1+=s1[i];

}

for(i=0;i

{

sum2+=s2[i];

}

printf(”%d“,sum1-sum2);

return 0;}

第七章

所有数字之和 #include int sum(int n){

if(n<10)

return n;

int res=0;

res=(n%10)+sum(n/10);

return res;} main(){

int n;

scanf(”%d“,&n);

printf(”%d“,sum(n));}

元音字母

#include #include void yuan(char*s,char*s2){

int i,k=0;

char c;

for(i=0;*(s+i)!='';i++)

{

c=*(s+i);

switch(c)

{

case'a':

case'e':

case'i':

case'o':

case'u':

case'A':

case'E':

case'I':

case'O':

case'U':*(s2+k)=c;k++;break;

default:break;

}

}

*(s2+k)='';} int main(){

char str[81],str2[81];

gets(str);

yuan(str,str2);

printf(”%s“,str2);}

字符统计

#include #include #include int nL=0,nN=0;int statistics(char*s){

int nS=0,a;

while(*s!='')

{

a=*s;

if(a==' ')

nS++;

else

{

if(a>='1'&&a<='9')

nN++;

else if((a>='a'&&a<='z')||a>='A'&&a<='Z')

nL++;

}

s++;

}

return nS;} int main(){

char s[81];

int nS;

gets(s);

nS=statistics(s);

printf(”%d%d%dn“,nL,nN,nS);

return 0;}

选择排序

#include int sort(int a[],int n){

int i,j,k,tmp;

for(i=0;i

{

k=i;

for(j=i+1;j

if(a[j]

tmp=a[k];a[k]=a[j];a[i]=tmp;

} } int main(){

int a[10];

int i;

for(i=0;i<10;i++)scanf(”%d“,&a[i]);

sort(a,10);

for(i=0;i<10;i++)printf(”%dn“,a[i]);

return 0;}

X的N次方

#include int F(int x,int n){

if(n==0)return 1;

else return x*F(x,(n-1));} int main(){

int x,n;

scanf(”%d%d“,&x,&n);

printf(”%d“,F(x,n));

return 0;}

行列互换

#include void swap(int*a,int*b){

int temp;

temp=*a;*a=*b;*b=temp;} void col(int a[][4],int i,int j){

int k;

for(k=0;k<4;k++)

swap((*(a+k)+i),(*(a+k)+j));} void row(int a[][4],int i,int j){

int k;

for(k=0;k<4;k++)

swap((*(a+i)+k),(*(a+j)+k));} int main(){

int a[4][4];

int i,j;

for(i=0;i<4;i++)

for(j=0;j<4;j++)

scanf(”%d“,&a[i][j]);

col(a,0,2);

row(a,0,2);

col(a,1,3);

row(a,1,3);

col(a,0,3);

row(a,0,3);

for(i=0;i<4;i++)

{

for(j=0;j<4;j++)

printf(”%d“,a[i][j]);

printf(”n“);

}

return 0;}

学生信息统计 #include void average(double a[][5],int n){

int i,j;

for(i=0;i

{

double sum=0,av;

for(j=0;j<5;j++)

sum=sum+a[i][j];

av=sum/5.0;

printf(”%.2f “,av);

}

printf(”n“);} void average2(double a[][5],int n){

int i,j;

for(j=0;j<5;j++)

{

double sum=0,av;

for(i=0;i

sum=sum+a[i][j];

av=sum/n;

printf(”%.2f “,av);

}

printf(”n“);} void top(double a[][5],int n){

int i,j;

double max;

for(j=0;j<5;j++)

{

max=a[0][j];

for(i=0;i

{

if(a[i][j]>max)max=a[i][j];

}

printf(”%.2f “,max);

} } int main(){

double a[10][5];

int i,j;

for(i=0;i<10;i++)

for(j=0;j<5;j++)

scanf(”%lf",&a[i][j]);

average(a,10);

average(a,10);

top(a,10);

return 0;}

第三篇:C语言课后习题解答

第七章 函数调用 7-1 写两个函数,分别求两个整数的最大公约数和最小公倍数,#include

void main(){ int hcf(int,int);int lcd(int,int,int);

int u,v,h,l;scanf(“%d,%d”,&u,&v);

h=hcf(u,v);printf(“H.C.F=%dn”,h);

l=lcd(u,v,h);printf(“L.C.D=%dn”,l);}

int hcf(int u,int v){ int t,r;if(v>u){

t=u;

u=v;

v=t;} while((r=u%v)!=0){

u=v;

v=r;} return(v);}

int lcd(int u,int v,int h){ return(u*v/h);} 7-2 求方程ax*x+bx+c=0的根,用3个函数分别求当b*b-4ac大于0,等于0、小于0时的根并输出结果。从主函数输入abc的值。

#include #include float x1,x2,disc,p,q;

void main(){ void greater_than_zero(float,float);void equal_to_zero(float,float);void smaller_than_zero(float,float);float a,b,c;printf(“input a,b,c:”);scanf(“%f,%f,%f”,&a,&b,&c);

printf(“equation: %5.2f*x*x+%5.2f*x+%5.2f=0n”,a,b,c);disc=b*b-4*a*c;printf(“root:n”);if(disc>0){

greater_than_zero(a,b);

printf(“x1=%fttx2=%fn”,x1,x2);} else if(disc==0){

equal_to_zero(a,b);

printf(“x1=%fttx2=%fn”,x1,x2);} else {

smaller_than_zero(a,b);

printf(“x1=%f+%fitx2=%f-%fin”,p,q,p,q);} }

void greater_than_zero(float a,float b){ x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);} void equal_to_zero(float a,float b){ x1=x2=(-b)/(2*a);}

void smaller_than_zero(float a,float b){ p=-b/(2*a);q=sqrt(-disc)/(2*a);}

7-3 写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。

#include

void main(){ int prime(int);int n;printf(“ninput an integer:”);scanf(“%d”,&n);

if(prime(n))

printf(“n %d is a prime.n”,n);else

printf(“n %d is not a prime.n”,n);}

int prime(int n){ int flag=1,i;for(i=2;i

if(n%i==0)

flag=0;return(flag);}

7-4 写一个函数,使给定的一个3x3的二维整形数组转置,即行列转换。#include #define N 3 int array[N][N];

void main(){

void convert(int array[][3]);int i,j;printf(“input array:n”);for(i=0;i

for(j=0;j

scanf(“%d”,&array[i][j]);

printf(“noriginal array :n”);for(i=0;i

for(j=0;j

printf(“%5d”,array[i][j]);

printf(“n”);}

printf(“convert array:n”);for(i=0;i

for(j=0;j

printf(“%5d”,array[i][j]);

printf(“n”);} }

void convert(int array[][3]){ int i,j,t;for(i=0;i

for(j=i+1;j

{

t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

} }

7-5 写一个函数,是输入的字符串按反序存放,在主函数中输入和输出字符窜。#include #include char str[100];void main(){ void inverse(char str[]);

printf(“input string:”);scanf(“%s”,str);

inverse(str);

printf(“inverse string:%sn”,str);}

void inverse(char str[]){ char t;int i,j;for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--){

t=str[i];

str[i]=str[j-1];

str[j-1]=t;} }

7-6 写一个函数,将两个字符窜连接。

#include void main(){ void concatenate(char string1[],char string2[],char string[]);char s1[100],s2[100],s[100];printf(“input string1:”);scanf(“%s”,s1);printf(“input string2:”);scanf(“%s”,s2);

concatenate(s1,s2,s);printf(“nThe new string is %sn”,s);}

void concatenate(char string1[],char string2[],char string[]){ int i,j;for(i=0;string1[i]!='';i++)

string[i]=string1[i];for(j=0;string2[j]!='';j++)

string[i+j]=string2[j];string[i+j]='';}

7-7 写一个函数,将字符窜中元音字母复制到另一个字符窜,然后输出。#include

void main(){ void cpy(char [],char []);char str[80],c[80];printf(“input string:”);gets(str);

cpy(str,c);

printf(“The vowel letters are:%sn”,c);}

void cpy(char s[],char c[]){

int i,j;for(i=0,j=0;s[i]!='';i++)

if(s[i]=='a'||s[i]=='A'||s[i]=='e'||s[i]=='E'||s[i]=='i'||

s[i]=='I'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U')

{

c[j]=s[i];

j++;

} c[j]='';}

7-13 输入10个学生5门课的成绩,分别用函数实现下列功能。1 计算每个学生平均分。2 计算每门课的平均分。找出所有50个分数中最高的分数所对应的学生和课程。4 计算平均方差。

#include #define N 10 #define M 5 float score[N][M];float a_stu[N],a_cour[M];int r,c;

void main(){

int i,j;float h;float s_var(void);float highest();void input_stu(void);void aver_stu(void);void aver_cour(void);

input_stu();aver_stu();aver_cour();

printf(“n NO.cour1 avern”);for(i=0;i

printf(“n NO %2d ”,i+1);

for(j=0;j

printf(“%8.2f”,score[i][j]);

printf(“%8.2fn”,a_stu[i]);}

printf(“naverage:”);for(j=0;j

printf(“%8.2f”,a_cour[j]);printf(“n”);

h=highest();

cour2

cour3 cour4

cour5

printf(“highest:%7.2f

NO.%2d

course %2dn”,h,r,c);printf(“variance %8.2fn”,s_var());}

void input_stu(void){ int i,j;for(i=0;i

printf(“ninput score of student%2d:n”,i+1);

for(j=0;j

scanf(“%f”,&score[i][j]);} }

void aver_stu(void){ int i,j;float s;for(i=0;i

for(j=0,s=0;j

s+=score[i][j];

a_stu[i]=s/5.0;} }

void aver_cour(void){ int i,j;float s;for(j=0;j

s=0;

for(i=0;i

s+=score[i][j];

a_cour[j]=s/(float)N;} }

float highest(){ float high;int i,j;high=score[0][0];for(i=0;i

for(j=0;j

if(score[i][j]>high)

{

high=score[i][j];

r=i+1;

c=j+1;

} return(high);}

float s_var(void){ int i;float sumx,sumxn;sumx=0.0;sumxn=0.0;for(i=0;i

sumx+=a_stu[i]*a_stu[i];

sumxn+=a_stu[i];} return(sumx/N-(sumxn/N)*(sumxn/N));}

7-14 写几个函数: 输入10个职工的姓名和职工号 按职工号由小到大的顺序排序,姓名顺序也随之调整。要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工姓名。

#include #include #define N 10

void main(){ void input(int [],char name[][8]);void sort(int [],char name[][8]);void search(int ,int [],char name[][8]);int num[N],number,flag=1,c;char name[N][8];

input(num,name);sort(num,name);while(flag==1){

printf(“ninput number to look for:”);

scanf(“%d”,&number);

search(number,num,name);

printf(“continue ot not(Y/N)?”);

getchar();

c=getchar();

if(c=='N'||c=='n')

flag=0;} }

void input(int num[],char name[N][8]){ int i;for(i=0;i

printf(“input NO.: ”);

scanf(“%d”,&num[i]);

printf(“input name: ”);

getchar();

gets(name[i]);} }

void sort(int num[],char name[N][8]){

int i,j,min,templ;char temp2[8];for(i=0;i

min=i;

for(j=i;j

if(num[min]>num[j])

min=j;

templ=num[i];

strcpy(temp2,name[i]);

num[i]=num[min];

strcpy(name[i],name[min]);

num[min]=templ;

strcpy(name[min],temp2);}

printf(“n result:n”);for(i=0;i

printf(“n %5d%10s”,num[i],name[i]);}

void search(int n,int num[],char name[N][8]){ int top,bott,mid,loca,sign;top=0;bott=N-1;loca=0;sign=1;

if((nnum[N-1]))

loca=-1;while((sign==1)&&(top<=bott)){

mid=(bott+top)/2;

if(n==num[mid])

{

loca=mid;

printf(“NO.%d , his name is %s.n”,n,name[loca]);

sign=-1;

}

else if(n

bott=mid-1;

else

top=mid+1;} if(sign==1 || loca==-1)

printf(“%d not been found.n”,n);}

第八章 指针

8-1 1 输入3个整数,按由小到大的顺序输出 #include void main(){ void swap(int*,int*);int a,b,c;

int *p1,*p2,*p3;p1=&a;p2=&b;p3=&c;scanf(“%d,%d,%d”,p1,p2,p3);if(*p1>*p2)swap(p1,p2);if(*p1>*p3)swap(p1,p3);if(*p2>*p3)swap(p2,p3);printf(“%d,%d,%dn”,a,b,c);} void swap(int*p1,int*p2){ int p;p=*p1;*p1=*p2;*p2=p;} 8-2

输入3个整数按有小到大的顺序输出。#include #include

void main(){ void swap(char *,char *);char str1[20],str2[20],str3[20];printf(“input three line:n”);gets(str1);gets(str2);gets(str3);

if(strcmp(str1,str2)>0)

swap(str1,str2);if(strcmp(str1,str3)>0)

swap(str1,str3);if(strcmp(str2,str3)>0)

swap(str2,str3);printf(“Now,the order is:n”);printf(“%sn%sn%sn”,str1,str2,str3);}

void swap(char *p1,char *p2){ char p[20];strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p);}

8-3 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:1输入10个数;2 进行处理;3 输出10个数 #include

void main(){

void input(int *);

void max_min_value(int *);

void output(int *);int number[10];

input(number);

max_min_value(number);

output(number);

}

void input(int *number)

{ int i;printf(“input 10 numbers:”);for(i=0;i<10;i++)

scanf(“%d”,&number[i]);}

void max_min_value(int *number)

{

int *max,*min,*p,temp;max=min=number;for(p=number+1;p

if(*p>*max)

max=p;

else if(*p<*min)

min=p;

temp=number[0];number[0]=*min;*min=temp;

if(max==number)

max=min;temp=number[9];number[9]=*max;*max=temp;}

void output(int *number)

{ int *p;printf(“Now,they are:

”);for(p=number;p

printf(“%d ”,*p);printf(“n”);}

8-7 有一个字符窜,包含n个字符。写一个函数,将此字符窜中从m个字符开始的全部字符复制成为另一个字符窜。

#include #include

void main(){ void copystr(char *,char *,int);

int m;char str1[20],str2[20];

printf(“input string:”);gets(str1);

printf(“which character that begin to copy?”);scanf(“%d”,&m);

if(strlen(str1)

printf(“input error!”);else {

copystr(str1,str2,m);

printf(“result:%sn”,str2);} }

void copystr(char *p1,char *p2,int m)

{ int n;n=0;while(n

n++;

p1++;} while(*p1!=''){

*p2=*p1;

p1++;

p2++;} *p2='';}

8-9 写一个函数,使给定的一个3x3的二维整形数组转置,即行列转换。

#include

void main(){ void move(int *pointer);int a[3][3],*p,i;printf(“input matrix:n”);

for(i=0;i<3;i++)

scanf(“%d %d %d”,&a[i][0],&a[i][1],&a[i][2]);

p=&a[0][0];move(p);

printf(“Now,matrix:n”);for(i=0;i<3;i++)

printf(“%d %d %dn”,a[i][0],a[i][1],a[i][2]);}

void move(int *pointer){ int i,j,t;for(i=0;i<3;i++)

for(j=i;j<3;j++)

{

t=*(pointer+3*i+j);

*(pointer+3*i+j)=*(pointer+3*j+i);

*(pointer+3*j+i)=t;

} }

8-13 将n个数按输入顺序的逆序排列,用函数实现。

#include

void main(){ void sort(char *p,int m);int i,n;char *p,num[20];

printf(“input n:”);scanf(“%d”,&n);

printf(“please input these numbers:n”);for(i=0;i

scanf(“%d”,&num[i]);

p=&num[0];sort(p,n);

printf(“Now,the sequence is:n”);for(i=0;i

printf(“%d ”,num[i]);printf(“n”);}

void sort(char *p,int m){ int i;char temp, *p1,*p2;for(i=0;i

p1=p+i;

p2=p+(m-1-i);

temp=*p1;

*p1=*p2;

*p2=temp;} } 第九章 用户建立的数据类型

9-1 定义一个结构体变量(包扩年、月、日)。计算该日在本年中的第几天,注意闰年问题。

#include

struct {

int year;int month;int day;}date;

void main(){ int days;printf(“input year,month,day:”);scanf(“%d,%d,%d”,&date.year,&date.month,&date.day);

switch(date.month){

case 1: days=date.day;

break;case 2: days=date.day+31;break;case 3: days=date.day+59;break;case 4: days=date.day+90;break;case 5: days=date.day+120;break;case 6: days=date.day+151;break;case 7: days=date.day+181;break;case 8: days=date.day+212;break;case 9: days=date.day+243;break;case 10: days=date.day+273;break;case 11: days=date.day+304;break;case 12: days=date.day+334;break;}

if((date.year %4== 0 && date.year % 100!= 0 ||date.year % 400 == 0)&& date.month >=3)

days+=1;

printf(“%d/%d is the in %d.n”,date.month,date.day,days,date.year);}

%dth day 9-2 写一个函数days,实现第一题的计算,由主函数将年、月、日传递给days函数,计算后将日子数传回主函数输出。

clude

struct {

int year;int month;int day;}date;

void main(){ int i,days;int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};printf(“input year,month,day:”);scanf(“%d,%d,%d”,&date.year,&date.month,&date.day);

days=0;for(i=1;i

days=days+day_tab[i];days=days+date.day;if((date.year%4==0 && date.year%100!=0 || date.year%400==0)&& date.month>=3)

days=days+1;

printf(“%d/%d is the in %d.n”,date.month,date.day,days,date.year);}

%dth day 9-3 编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num.name,score[3],用主函数输入这些记录,用print函数输出这些记录。

#include #define N 5

struct student {

char num[6];char name[8];int score[4];}stu[N];

void main(){ void print(struct student stu[6]);int i,j;for(i=0;i

printf(“ninput score of student %d:n”,i+1);

printf(“NO.: ”);

scanf(“%s”,stu[i].num);

printf(“name: ”);

scanf(“%s”,stu[i].name);

for(j=0;j<3;j++)

{

printf(“score %d:”,j+1);

scanf(“%d”,&stu[i].score[j]);

}

printf(“n”);} print(stu);}

void print(struct student stu[6]){ int i,j;printf(“n

NO.name

score1

score2

score3n”);for(i=0;i

printf(“%5s%10s”,stu[i].num,stu[i].name);

for(j=0;j<3;j++)

printf(“%9d”,stu[i].score[j]);

printf(“n”);} }

9-4 在第3题的基础上,编写一个函数input,用来输入5个学生的数据记录。

#include #define N 5

struct student { char num[6];char name[8];int score[4];} stu[N];

void main(){ void input(struct student stu[]);void print(struct student stu[]);input(stu);print(stu);}

void input(struct student stu[]){ int i,j;for(i=0;i

printf(“input scores of student %d:n”,i+1);

printf(“NO.: ”);

scanf(“%s”,stu[i].num);

printf(“name:

”);

scanf(“%s”,stu[i].name);

for(j=0;j<3;j++)

{

printf(“score %d:”,j+1);

scanf(“%d”,&stu[i].score[j]);

}

printf(“n”);} }

void print(struct student stu[6]){ int i,j;printf(“n

NO.name

score1

score2

score3n”);for(i=0;i

printf(“%5s%10s”,stu[i].num,stu[i].name);

for(j=0;j<3;j++)

printf(“%9d”,stu[i].score[j]);

printf(“n”);} }

9-5 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总成绩,以及最高分的学生数据(包括学号、姓名、3门课程成绩、平均分数)

#include #define N 10

struct student {

char num[6];char name[8];float score[3];float avr;} stu[N];

void main(){

int i,j,maxi;float sum,max,average;for(i=0;i

printf(“input scores of student %d:n”,i+1);

printf(“NO.:”);

scanf(“%s”,stu[i].num);

printf(“name:”);

scanf(“%s”,stu[i].name);

for(j=0;j<3;j++)

{

printf(“score %d:”,j+1);

scanf(“%f”,&stu[i].score[j]);

} }

average=0;max=0;maxi=0;for(i=0;i

sum=0;

for(j=0;j<3;j++)

sum+=stu[i].score[j];

stu[i].avr=sum/3.0;

average+=stu[i].avr;

if(sum>max)

{

max=sum;

maxi=i;

} } average/=N;

printf(“

NO.name

score1

score2 for(i=0;i

printf(”%5s%10s“,stu[i].num,stu[i].name);

for(j=0;j<3;j++)

printf(”%9.2f“,stu[i].score[j]);

printf(”

%8.2fn“,stu[i].avr);} printf(”average=%5.2fn“,average);printf(”The highest score score3

averagen“);is :

student %s,%sn”,stu[maxi].num,stu[maxi].name);printf(“his scores are:%6.2f,%6.2f,%6.2f,average:%5.2f.n”, stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr);}

第四篇:《C语言程序设计》课后习题参考答案

高等院校计算机基础教育规划教材《C++程序设计》课后习题参考答案

――武汉大学出版社

习题1参考答案

一、选择题 1.A 2.D

二、填空题

1.BASIC、FORTRAN、AL_GOL60和COBOL 2.8 3.关键字

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语言的基本类型包括整型、实型(浮点型)、字符型和枚举型。

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.20 3.6

4.26

5.256

三、简答题

1.C语言的基本类型包括整型、实型(浮点型)、字符型和枚举型。

2.定义符号常量和定义变量都要指定数据类型,系统将为其分配一定的存储空间。其不同之处在于:定义符号常量必须给出常量值,且以后不能修改本常量的值;而变量可以在定义变量的同时赋初值,以后可以修改该变量。

3.常量就是在程序的运行过程中该量是不可修改的量;变量在程序的运行过程中允许对该变量的值进行修改。

四、程序题

1.程序运行结果为: 10 10 11-10-11 2.程序运行结果为:

3,12,4,4

习题4参考答案

一、选择题

1.C 2.D 3.C 4.C 5.B 6.D 7.B 8.C 9.B

二、填空题

1.!&&

||

2.0 1 3.1 4.4 5.-1

三、编程题

1.给出等级成绩′A′、′B′、′C′、′D′、′E′,假设,90分以上为′A′,80~89分为′B′,70~79分为′C′,60~69分为′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.编程序打印出以下图形: 1 121 12321 „

***21 参考代码如下: #include 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 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参考答案

一、选择题

1.B 2.A 3.A 4.D 5.C 6.B 7.A 8.A

二、填空题

1.按行的顺序依次存放的 2.0 3.4 4.6

三、编程题

1.有一个多项式:Pn(x)=a0xn+a1xn-1+„+an

它们的系数a0,a1,„,an存放在一个一维数组中。编制程序,输入系数和x的值,计算并输出Pn(x)。参考代码如下: #define N 4 main(){ int a[N+1],p,x,i;

printf(“Please enter a[%d],...,a[0]:n”,N);

for(i=N;i>=0;i--)

scanf(“%d”,&a[i]);

printf(“Please enter x=n”);

scanf(“%d”,&x);

p=a[N];

for(i=N;i>0;i--)

{

p=p*x+a[i-1];

}

printf(“Pn(x)=%dn”,p);} 2.打印以下的杨辉三角形(要求打印6行)。1 11 121 1331 14641 15101051 参考代码如下: #include #include #define N 6 main(){

int i,j,max[N][N];

for(i=0;i

{

for(j=0;j

{ max[i][0]=1;

max[i][i]=1;

}

}

for(i=2;i

{

for(j=1;j

{ max[i][j]=max[i-1][j-1]+max[i-1][j];}

}

for(i=0;i

{

for(j=0;j<=i;j++)

{ printf(“%d”,max[i][j]);}

printf(“n”);

} } 3.编写程序,将一个数插入到有序的数列中去,插入后的数列仍然有序。参考代码如下:/*假设原有5个数*/ #include

main()

{ int a[6]={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>a[i])

continue;

else

break;

for(j=4;j>=i;j--)

a[j+1]=a[j];

a[i]=n;

for(i=0;i<6;i++)

printf(“%d,”,a[i]);

printf(“n”);

}

4.编写程序,在有序的数列中查找某数,若该数在此数列中,则输出它所在的位置,否则输出no found。参考代码如下: #include

main()

{ int a[10]={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==a[i]){k=1;j=i;break;}

}

if(k==1)

printf(“a[%d]n”,j);

else

printf(“no found.n”);} 5.编程将下列矩阵中的元素向右移动一列,最右一列移至第一列。

10 12 [提示:用二维数组v存放矩阵中元素,数组v可在定义时初始化;有两种方法实现这种移动:一种方法是将移动后的元素放在另一个二维数组中;另一种方法是利用一个中间变量仍将移动后的元素放在数组v中。] #include void main(){ int i,j;

int a[2][3]={1,4,6,8,10,12};

int b[2][3];

b[0][0]=a[0][2];

b[0][1]=a[0][0];

b[0][2]=a[0][1];

b[1][0]=a[1][2];

b[1][1]=a[1][0];

b[1][2]=a[1][1];

printf(“a[2][3]:”);

for(i=0;i<2;i++)

{ printf(“n”);

for(j=0;j<3;j++)

printf(“%5d”,a[i][j]);

}

printf(“nresult:n”);

for(i=0;i<2;i++)

{ printf(“n”);

for(j=0;j<3;j++)

printf(“%5d”,b[i][j]);

}

printf(“n”);

getch();} 6.利用公式c(i,j)a(i,j)b(i,j)计算m×n的矩阵A和m×n的矩阵B之和,已知a(i,j)为矩阵A的元素,b(i,j)为矩阵B的元素,c(i,j)为矩阵C的元素,i1,2,...,m,j1,2,...,n。[提示:用二维数组元素做函数参数编程实现矩阵相加。] #include #include #define M 2 #define N 2 int a[M][N];int b[M][N];int c[M][N];void matrix(int a[][M],int b[][N]);main(){

int i,j,t;

clrscr();

printf(“Please input a[%d][%d]n”,M,N);

for(i=0;i

for(j=0;j

{ scanf(“%d”,&t);

a[i][j]=t;

}

printf(“Please input b[%d][%d]n”,M,N);

for(i=0;i

for(j=0;j

{ scanf(“%d”,&t);

b[i][j]=t;

}

matrix(b,c);

printf(“a[%d][%d]”,M,N);

for(i=0;i

{ printf(“n”);

for(j=0;j

printf(“%5d”,a[i][j]);

}

printf(“n”);

printf(“b[%d][%d]”,M,N);

for(i=0;i

{ printf(“n”);

for(j=0;j

printf(“%5d”,b[i][j]);

}

printf(“n”);

printf(“c[%d][%d]=A+B:”,M,N);

for(i=0;i

{ printf(“n”);

for(j=0;j

printf(“%5d”,c[i][j]);

} } void matrix(int a[][M],int b[][N]){ int i,j,k,t;

for(i=0;i

for(j=0;j

c[i][j]=a[i][j]+b[i][j];}

习题6参考答案

一、选择题

1.A 2.D 3.D

二、填空题

1.指针

取地址 2.3 3.9876

876 4.24

三、编程题

1.输入3个整数,按从大到小的次序输出。参考代码如下: main(){

int a[3],i,j,t;

printf(“Please enter three number:n”)

for(i=0;i<3;i++)

scanf(“%d”,&a[i]);

for(i=0;i<2;i++)

for(j=0;j<2;j++)

if(a[j]

{ t=a[j];a[j]=a[j+1];a[j+1]=t;}

for(i=0;i<3;i++)

printf(“%dn”,a[i]);} 2.编写将n阶正方矩阵进行转置的函数。在主函数中对一个4行4列的矩阵调用此函数。参考代码如下: int array[4][4];convert(int array[4][4]){

int i,j,t;

for(i=0;i<4;i++)

for(j=i+1;j<4;j++)

{

t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

} } main(){ int i,j;printf(“Input array:n”);for(i=0;i<4;i++)

for(j=0;j<4;j++)

scanf(“%d”,&array[i][j]);printf(“noriginal array :n”);for(i=0;i<4;i++)

{ for(j=0;j<4;j++)

printf(“%5d”,array[i][j]);

printf(“n”);} convert(array);printf(“convert array:n”);for(i=0;i<4;i++)

{ for(j=0;j<4;j++)

printf(“%5d”,array[i][j]);

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 #include char *s=“1a2b3c4d”;void main(){

int i,j;

char t;

for(i=0,j=strlen(s)-1;i

{

t=s[i];

s[i]=s[j];

s[j]=t;

}

printf(“%sn”,s);}

习题7参考答案

一、选择题 1.C 2.B 3.C

二、填空题 1.float 2.自动(auto)3.12 4.9.000000

二、编程题

1.编写函数,已知三角形的三个边长,求三角形的面积。参考代码如下: #include #include 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 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 3 int array[N][N];convert(int array[N][N]){

int i,j,t;

for(i=0;i

for(j=i+1;j

{

t=array[i][j];

array[i][j]=array[j][i];

array[j][i]=t;

} } main(){ int i,j;printf(“Input array(3*3):n”);for(i=0;i

for(j=0;j

scanf(“%d”,&array[i][j]);printf(“noriginal array:n”);for(i=0;i

{ for(j=0;j

printf(“%5d”,array[i][j]);

printf(“n”);} convert(array);printf(“convert array:n”);for(i=0;i

{ for(j=0;j

printf(“%5d”,array[i][j]);

printf(“n”);

} }

4.设计一个函数,用以计算下面数列前n项之和(以n为形参变量)。2/

1、3/

2、5/

3、8/

5、13/

8、21/

13、„。参考代码如下: #define N 6 main(){

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 k[100];

int i,j,n,s;

for(j=2;j<1000;j++)

{

n=-1;

s=j;

for(i=1;i

{

if((j%i)==0)

{

n++;

s=s-i;

k[n]=i;

}

}

if(s==0)

{

printf(“%d is a wanshu”,j);

for(i=0;i

printf(“%d,”,k[i]);

printf(“%dn”,k[n]);

}

} }

一、选择题

1.C 2.A 3.A 4.B

二、填空题

8参考答案

习题1.pt=s1;pt->student.no=1001;2.0,1,2,100,101,102 3.结构体变量

4.Four, Three,Four

三、编程题

1.有10个学生,每个学生的数据包括学号(num)、姓名(name[9])、性别(sex)、年龄(age)、三门课成绩(score[3]),要求在main()函数中输入这10个学生的数据,并对每个学生调用函数count()计算总分。参考代码如下: #include #include #define N 2 struct student { int num;char name[9];char sex;int age;int score[3];}stu[N];main(){ int count(int s[]);

int i,j;

for(i=1;i<=N;i++)

{

printf(“num:”);

scanf(“%d”,&stu[i].num);

printf(“name:”);

scanf(“%s”,&stu[i].name);

printf(“sex:”);

scanf(“%s”,&stu[i].sex);

printf(“age:”);

scanf(“%d”,&stu[i].age);

for(j=0;j<3;j++)

{ printf(“score[%d]:”,j+1);scanf(“%d”,&stu[i].score[j]);

}

}

for(i=1;i<=N;i++)

printf(“stu[%d] sum=%dn”,i,count(stu[i].score));} int count(int s[])

{

int i,sum=0;

for(i=0;i<3;i++)

sum=sum+s[i];

return sum;

}

2.口袋中有若干红、黄、蓝、白、黑5种颜色的球,每次从口袋中取出3个球,编程打印出得到3种不同颜色的球的所有可能取法。参考代码如下: main(){ enum color{red,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 main(){ int *a;

int i,j,position=1,total=0,chage;

a=(int *)malloc(25*sizeof(int));

for(i=0;i<25;i++)

a[i]=i+1;

while(1)

{ position+=2;

while(position>25-total)

position=position-25+total;

chage=a[position-1];

for(j=position;j<25-total;j++)

a[j-1]=a[j];

a[25-total-1]=chage;

total++;

if(total==25)

{ for(i=0;i<25-1;i++)printf(“%d->”,a[25-i-1]);printf(“%dn”,a[0]);printf(“the last one is %dn”,a[0]);return 0;

}

} }

4.建立一个链表,每个结点包括:学号、姓名、成绩。(1)输入一个学号,检索该学生的有关信息;(2)从链表中删去成绩低于40分的学生。参考代码如下: #include #include struct stu {

int no;

char name[9];

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参考答案

一、选择题

1.D 2.C 3.A

二、填空题 1.L=18.849558

S=28.274337

三、解答题

预处理命令的功能是什么?包括哪几部分?#include预处理命令的两种格式分别为什么? 答:预处理命令的功能是告诉编译系统在对源程序进行编译之前应该做些什么。预处理命令主要包括文件包含、宏定义和条件编译三个部分。#include预处理命令

格式一:#include<包含文件名> 格式二:#include”包含文件名”

习题10参考答案

一、选择题

1.C 2.B 3.A

二、填空题 1.二进制文件 2.顺序 随机 3.hello, 4.picursound

三、编程题

1.从键盘输入学生姓名,寻找学生记录是否存在,并输出相应信息。参考代码如下: #include #include #define N 10 struct student {

char name[9];

int num;

int age;

char sex;}stu[N];void main(){ int i;

char s[10];

FILE *fp;

if((fp=fopen(“stu”,“rb”))==NULL)

{ printf(“Can not open file!n”);

exit(0);

}

gets(s);

for(i=0;i

{ fseek(fp,i*sizeof(struct student),0);

fread(&stu[i],sizeof(struct student),1,fp);

while(s==stu[i].name)

printf(“%s,%d,%d,%dn”,stu[i].name,stu[i].num,stu[i].age,stu[i].sex);

}

fclose(fp);} 2.有两个磁盘文件a和b,各存放一行字母。要求将两个文件的内容读到内存中,并将其合并到一起(按字母顺序排列),然后输出到一个新文件。参考代码如下: #include “stdio.h” main(){ FILE *fp;

int i,j,n;

char c[160],t,ch;

if((fp=fopen(“A”,“r”))==NULL)

{ printf(“file A cannot be openedn”);

exit(0);

}

printf(“n A contents are :n”);

for(i=0;(ch=fgetc(fp))!=EOF;i++)

{ c[i]=ch;putchar(c[i]);

}

fclose(fp);

if((fp=fopen(“B”,“r”))==NULL)

{ printf(“file B cannot be openedn”);

exit(0);

}

printf(“n B contents are :n”);

for(i=0;(ch=fgetc(fp))!=EOF;i++)

{ c[i]=ch;

putchar(c[i]);

}

fclose(fp);

n=i;

for(i=0;i

for(j=i+1;j

if(c[i]>c[j])

{ t=c[i];c[i]=c[j];c[j]=t;}

printf(“n C file is:n”);

fp=fopen(“C”,“w”);

for(i=0;i

{ putc(c[i],fp);

putchar(c[i]);

}

fclose(fp);}

3.编写将字符串“Turbo C”、“BASIC”、“FORTRAN”、“COBOL”以及“PL_1”写入文件中去的程序。参考代码如下: #include #include #define N 30 void main(){ FILE *fp;

char c,file[N];

scanf(“%s”,file);

if((fp=fopen(file,“w”))==NULL)

{ printf(“Can not open filen”);

exit(0);

}

c=getchar();

c=getchar();

while(c!='n')

{ fputc(c,fp);putchar(c);

c=getchar();

}

putchar(N);

fclose(fp);}

4.设文件student.dat中存放着学生的基本情况,这些情况由以下结构体描述: struct student { long int num;/*学号*/ char name[10];/*姓名*/ int age;/*年龄*/ char speciality[20];/*专业*/ };

请编写程序,输出学号在97010~97020之间的学生学号、姓名、年龄和专业。参考代码如下: #include “stdio.h” struct student

{ long int num;

char name[10];

int age;

char speciality[20];

};

FILE *fp;

main()

{ struct student st;

fp=fopen(“student.dat”,“rb”);

if(fp==NULL)

printf(“file not foundn”);

else

{ while(!feof(fp))

{ fread(&st,sizeof(struct student),1,fp);

if(st.num>=970101&&st.num<=970135)

printf(“%ld,%s,%d,%sn”,st.num,st.name,st.age,st.speciality);

}

} }

第五篇:C语言课后习题答案

C语言课后习题答案-第四版-第一章

5、请参照本章例题,编写一个C语言程序,输出以下信息: **************************** V e r y G o o d!**************************** #include int main(){

printf(“**************************nn”);printf(“

Very Good!nn”);printf(“**************************n”);return 0;}

6、编写一个C语言程序,输入a,b,c三个值,输出其中最大值。#include int main(){ int a,b,c,max;printf(“please input a,b,c:n”);scanf(“%d%d%d”,&a,&b,&c);max=a;if(max int main(){ int a,b,c,max;printf(“please input a,b,c:n”);scanf(“%d%d%d”,&a,&b,&c);max=a>b?a:b;max=max>c?max:c;printf(“The largest number is %dn”,max);return 0;}

第3章

1、假如我国国民生产总值的年增长率为9%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为

P=(1+r)^n r 为年增长率,n 为年数,p为与现在相比的倍数。#include #include int main(){ float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf(“p=%fn”,p);return 0;}

2、存款利息计算。有1000元,想存5年,可按以下5种办法存:(1)一次存5年期。

(2)先存2年期,到期后将本息在存3年期。(3)先存3年期,到期后将本息在存2年期。

(4)先存1年期,到期后将本息在存1年期,连续存5次。(5)存活期存款。活期利息每一季度结算一次。2007年12月的银行存款利息如下: 1年定期存款利息为4.14%; 2年定期存款利息为4.68%; 3年定期存款利息为5.4%; 5年定期存款利息为5.85%;

活期存款利息为0.27%(活期利息每一季度结算一次。)如果r 为年利率,n 为存款年数,则计算本息和的公式为 1年期本息和:P=1000*(1+r);n年期本息和:P=1000*(1+n*r);存n次1年期的本息和:P=1000*(1+ r)^n;存活期本息和:P=1000*(1+r/4)^4n。

说明:P=1000*(1+r/4)^4n。是一个季度的本息和。#include #include int main(){ float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5;r5=0.0585;r3=0.054;r2=0.0468;r1=0.0414;r0=0.0072;p=1000;p1=p*((1+r5)*5);

// 一次存5年期

p2=p*(1+2*r2)*(1+3*r3);

// 先存2年期,到期后将本息再存3年期

p3=p*(1+3*r3)*(1+2*r2);

// 先存3年期,到期后将本息再存2年期

p4=p*pow(1+r1,5);

// 存1年期,到期后将本息存再存1年期,连续存5次

p5=p*pow(1+r0/4,4*5);

// 存活期存款。活期利息每一季度结算一次

printf(“p1=%fn”,p1);

// 输出按第1方案得到的本息和

printf(“p2=%fn”,p2);

// 输出按第2方案得到的本息和

printf(“p3=%fn”,p3);

// 输出按第3方案得到的本息和

printf(“p4=%fn”,p4);

// 输出按第4方案得到的本息和

printf(“p5=%fn”,p5);

// 输出按第5方案得到的本息和

return 0;}

3、购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。提示:计算还请月数m 的公式如下: m =[ log p –log(p-d*r)] / log(1+r)可以讲公式该写为

m ={ log [p /(p – d*r)] }/ log(1+r)C的库函数中有求对数的函数log10,是求以10为底的对数,log(p)表示log p。#include #include int main(){ float d=300000,p=6000,r=0.01,m;m=log10(p/(p-d*r))/log10(1+r);printf(“m=%6.2fn”,m);return 0;}

6、请编将“China”,编译成密码,密码规律是:用原有的字母后面第4个字母代替原来的字母。#include int main(){ char c1='C',c2='h',c3='i',c4='n',c5='a';c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;printf(“passwor is %c%c%c%c%cn”,c1,c2,c3,c4,c5);return 0;}

7、设圆半径r =1.5,圆柱高h=3,求圆周长、圆面积、圆柱表面积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。请编程序。#include int main(){ float h,r,l,s,sq,vq,vz;float pi=3.141526;printf(“请输入圆半径r,圆柱高h∶”);scanf(“%f,%f”,&r,&h);

//要求输入圆半径r和圆柱高h

l=2*pi*r;

//计算圆周长l s=r*r*pi;

//计算圆面积s sq=4*pi*r*r;

//计算圆球表面积sq vq=3.0/4.0*pi*r*r*r;

//计算圆球体积vq vz=pi*r*r*h;

//计算圆柱体积vz printf(“圆周长为:

l=%6.2fn”,l);printf(“圆面积为:

s=%6.2fn”,s);

printf(“圆球表面积为:

sq=%6.2fn”,sq);printf(“圆球体积为:

v=%6.2fn”,vq);printf(“圆柱体积为:

vz=%6.2fn”,vz);return 0;}

第四章

4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。#include int main(){ int a,b,c;printf(“请输入三个整数:”);scanf(“%d,%d,%d”,&a,&b,&c);if(a

if(b

printf(“max=%dn”,c);

else

printf(“max=%dn”,b);

else if(a

printf(“max=%dn”,c);else

} printf(“max=%dn”,a);return 0;

4、有3个正整数a,b,c,有键盘输入,输出其中最大的数。#include int main(){

int a,b,c,temp,max;printf(“请输入三个整数:”);scanf(“%d,%d,%d”,&a,&b,&c);temp=(a>b)?a:b;

/*将a和b中的大者存入temp中*/ max=(temp>c)?temp:c;

/*将a和b中的大者与c比较,取最大者*/ printf(“三个整数的最大数是%dn”,max);return 0;}

5、从键盘输入一个小于1000的正整数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其检查是否为小于1000的正数。若不是,则要求从新输入。#include #include #define M 1000 int main(){ int i,k;

printf(“请输入一个小于%d的整数i:”,M);scanf(“%d”,&i);while(i>M)

{ printf(“输入的数不符合要求,请重新输入一个小于%d的整数i:”,M);

} k=sqrt(i);printf(“%d的平方根的整数部分是:%dn”,i,k);return 0;} 6、有一个函数: scanf(“%d”,&i);

x

(x<1)

y(1<=x<10)

3*x – 11

(x>=10)=

2*x1

(x<0)

Y =

0

(x=0)

(x>0)

写程序,输入x 的值,输出y 相应的值。#include int main(){

int x,y;

printf(“please enter x:”);

scanf(“%d”,&x);

y=0;

if(x>=0)

if(x>0)y=1;

else y=-1;

printf(“x=%d,y=%dn”,x,y);return 0;{ }

8、给出一百分制成绩,要求输出成绩等级‘A’,’B’,’C’,’D’,’E’。90分以上为‘A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。#include int main(){ float score;

char grade;

printf(“请输入学生成绩:”);

scanf(“%f”,&score);

while(score>100||score<0){

}

switch((int)(score/10)){ case 10: case 9: grade='A';break;case 8: grade='B';break;case 7: grade='C';break;printf(“n 输入有误,请重输”);scanf(“%f”,&score);case 6: grade='D';break;case 5: case 4: case 3: case 2: case 1: case 0: grade='E';}

printf(“成绩是 %5.1f,相应的等级是%cn ”,score,grade);return 0;}

9、给出一个不多于5位数的正整数;(1)求出它是几位数;(2)分别输出每一位数字;

(3)按逆顺序输出各位数,例如原有数为123,应输出321.#include #include int main(){ int num,indiv,ten,hundred,thousand,ten_thousand,place;//分别代表个位,十位,百位,千位,万位和位数

printf(“请输入一个整数(0-99999):”);scanf(“%d”,&num);if(num>9999)

place=5;else if(num>999)place=4;else if(num>99)place=3;else if(num>9)place=2;else place=1;printf(“位数:%dn”,place);printf(“每位数字为:”);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);printf(“n反序数字为:”);switch(place){ case 5: printf(“%d%d%d%d%dn”,indiv,ten,hundred,thousand,ten_thousand);break;case break;case 3:printf(“%d%d%dn”,indiv,ten,hundred);break;case 2: printf(“%d%dn”,indiv,ten);break;case 1: printf(“%dn”,indiv);break;} return 0;}

11、输入4个整数,要求按由小到大的顺序输出。#include int main(){ int t,a,b,c,d;printf(“请输入四个数:”);scanf(“%d%d%d%d”,&a,&b,&c,&d);printf(“a=%d,b=%d,c=%d,d=%dn”,a,b,c,d);if(a>b)

{ t=a;a=b;b=t;} if(a>c)4: printf(“%d%d%d%dn”,indiv,ten,hundred,thousand);

{ 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(“排序结果如下: n”);printf(“%d %d %d %d n” ,a,b,c,d);return 0;}

12、有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为 1,这4个圆塔高位10cm, 塔以外无建筑物。求该点的建筑物高度(塔外的高度为零)。#include int main(){ int h=10;float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;printf(“请输入一个点(x,y):”);scanf(“%f,%f”,&x,&y);d1=(x-x4)*(x-x4)+(y-y4)*(y-y4);

/*求该点到各中心点距离*/ d2=(x-x1)*(x-x1)+(y-y1)*(y-y1);d3=(x-x2)*(x-x2)+(y-y2)*(y-y2);d4=(x-x3)*(x-x3)+(y-y3)*(y-y3);if(d1>1 && d2>1 && d3>1 && d4>1)

h=0;/*判断该点是否在塔外*/ printf(“该点高度为 %dn”,h);return 0;} 第五章

例5.7

用pi/4=1-1/3+1/5-1/7+„„公式求pi近似值,直到发现某一项的绝对值小于10^6为止。

#include #include

// 程序中用到数学函数fabs,应包含头文件math.n int main(){ int sign=1,count=0;

// sign用来表示数值的符号,count用来统计循环次数 double pi=0.0,n=1.0,term=1.0;// pi开始代表多项式的值,最后代表π的值,n

母,term代表当前项的值

while(fabs(term)>=1e-8)

// 检查当前项term的绝对值是否大于或等于10的(-6)次方

{

pi=pi+term;

// 把当前项term累加到pi中 n=n+2;

// n+2是下一项的分母

sign=-sign;

// sign代表符号,下一项的符号与上一项符号相反

} pi=pi*4;

// 多项式的和pi乘以4,才是π的近似值

printf(“pi=%10.8fn”,pi);

// 输出π的近似值

printf(“count=%dn”,count);

// 输出循环次数

return 0;}

3、输入两个正整数m和n,求其最大公约数和最小公倍数。#include int main()term=sign/n;

// 求出下一项的值term count++;

// count累加1 { int p,r,n,m,temp;printf(“请输入两个正整数n,m:”);scanf(“%d,%d,”,&n,&m);if(n

temp=n;

n=m;

m=temp;} p=n*m;while(m!=0){

r=n%m;

n=m;

m=r;} printf(“它们的最大公约数为:%dn”,n);printf(“它们的最小公约数为:%dn”,p/n);return 0;}

4、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。#include int main(){

char c;

int letters=0,space=0,digit=0,other=0;

printf(“请输入一行字符:n”);

while((c=getchar())!='n')

{

if(c>='a' && c<='z' || c>='A' && c<='Z')

letters++;

else if(c==' ')

space++;

else if(c>='0' && c<='9')

digit++;

else

other++;

}

printf(“字母数:%dn空格数:%dn数字数:%dn其它字符数:%dn”,letters,space,digit,other);

return 0;

}

5、求Sn=a+aa+aaa+„„+aa„„a之值,其中a是一个数字,n 表示a 的位数。n 由键盘输入。#include int main(){ int a,n,i=1,sn=0,tn=0;printf(“a,n=:”);scanf(“%d,%d”,&a,&n);while(i<=n){

} printf(“a+aa+aaa+...=%dn”,sn);return 0;}

6、求和:1!+2!+3!+„„+20!。#include int main(){ tn=tn+a;/*赋值后的tn为i个 a组成数的值*/ sn=sn+tn;/*赋值后的sn为多项式前i项之和*/ a=a*10;++i;double s=0,t=1;int n;for(n=1;n<=20;n++){

t=t*n;

s=s+t;} printf(“1!+2!+...+20!=%22.15en”,s);return 0;}

7、求1+2+3+„„+100+1+2^2+3^2+4^2++50^2+1+1/2+1/3+1/4+„„+1/10。#include int main(){ int n1=100,n2=50,n3=10;double k,s1=0,s2=0,s3=0;for(k=1;k<=n1;k++)/*计算1到100的和*/

{s1=s1+k;} for(k=1;k<=n2;k++)/*计算1到50各数的平方和*/

{s2=s2+k*k;} for(k=1;k<=n3;k++)/*计算1到10的各倒数和*/

{s3=s3+1/k;} printf(“sum=%15.6fn”,s1+s2+s3);return 0;}

8、输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如153是一位水仙花数,因为153=13+53+33。#include int main(){ int i,j,k,n;printf(“parcissus numbers are ”);for(n=100;n<1000;n++){

} printf(“n”);return 0;i=n/100;j=n/10-i*10;k=n%10;if(n==i*i*i + j*j*j + k*k*k)printf(“%d ”,n);}

9、编程求1000之内的完数,并按下面格式输出其因子:its factors are 1,2,3 #include int main(){ int m,s,i;for(m=2;m<1000;m++){

s=0;for(i=1;i

if((m%i)==0)s=s+i;if(s==m){

} printf(“%d,its factors are ”,m);for(i=1;i

} return 0;}

10、有一个分数序列:

2/1,3/2,5/3,8/5,13/8,21/13,„„ 求出这个数列前20项之和。#include int main(){ int i,n=20;double a=2,b=1,s=0,t;for(i=1;i<=n;i++){

} printf(“sum=%16.10fn”,s);return 0;}

11、一个球从100米敢赌下落,每次反弹高度为原来的一半,在下落,在反弹。求第10次落地时共经过多少米?第10次反弹多高?

#include s=s+a/b;t=a, a=a+b, b=t;int main(){ double sn=100,hn=sn/2;int n;for(n=2;n<=10;n++){

} printf(“第10次落地时共经过%f米n”,sn);printf(“第10次反弹%f米n”,hn);return 0;}

12、猴子吃桃问题。猴子第1天摘了若干个桃子,当即吃了一半零一个;第2剩下的吃了一半零一个,一次循环。到第十天时想吃就剩下一个桃子。求第一天摘了几个桃子? #include int main(){ int day,x1,x2;day=9;x2=1;sn=sn+2*hn;

/*第n次落地时共经过的米数*/ hn=hn/2;

/*第n次反跳高度*/ while(day>0){ x1=(x2+1)*2;

/*第1天的桃子数是第2天桃子数加1后的2倍.*/

} printf(“total=%dn”,x1);return 0;}

16、输出以下图案:

*

*** ***** ******* ***** *** * #include int main(){ int i,j,k;for(i=0;i<=3;i++)x2=x1;day--;{

for(j=0;j<=2-i;j++)

printf(“ ”);

for(k=0;k<=2*i;k++)

printf(“*”);

printf(“n”);} for(i=0;i<=2;i++){

for(j=0;j<=i;j++)

printf(“ ”);

for(k=0;k<=4-2*i;k++)

printf(“*”);

printf(“n”);} return 0;}

17、甲队A,B,C 3 人,乙队 X,Y,Z 3人。A不和X比;X,Z比,请编程找出3 对赛手的名单。#include

int main(){

C不和 char i,j,k;

/*是a的对手;j是b的对手;k是c的对手*/ for(i='x';i<='z';i++)

} 第六章

1、用筛选法求100之内的素数。#include #include int main(){ int i,j,n,a[101];

for(i=1;i<=100;i++)

a[i]=i;

a[1]=0;

for(i=2;i

if(i!=j)

for(k='x';k<='z';k++)

if(i!=k && j!=k)

if(i!='x' && k!='x' && k!='z')

printf(“A--%cnB--%cnC--%cn”,i,j,k);

return 0;

for(j=i+1;j<=100;j++)

{ if(a[i]!=0 && a[j]!=0)

if(a[j]%a[i]==0)

a[j]=0;

}

printf(“n”);

for(i=2,n=0;i<=100;i++){ if(a[i]!=0)

{ printf(“%5d”,a[i]);

n++;

}

if(n==10)

{ printf(“n”);

n=0;

}

}

printf(“n”);

return 0;}

2、用选择法对10个整数排序。#include int main(){ int i,j,min,temp,a[11];

printf(“enter data:n”);

for(i=1;i<=10;i++)

{ printf(“a[%d]=”,i);

scanf(“%d”,&a[i]);

}

printf(“n”);

printf(“The orginal numbers:n”);

for(i=1;i<=10;i++)

printf(“%5d”,a[i]);

printf(“n”);

for(i=1;i<=9;i++){ min=i;

for(j=i+1;j<=10;j++)

if(a[min]>a[j])min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

printf(“nThe sorted numbers:n”);

for(i=1;i<=10;i++)

printf(“%5d”,a[i]);

printf(“n”);

return 0;}

3、求一个3 x 3 的整型矩阵对角线元素之和。#include int main(){ int a[3][3],sum=0;int i,j;

printf(“enter data:n”);

for(i=0;i<3;i++)

for(j=0;j<3;j++)

scanf(“%3d”,&a[i][j]);

for(i=0;i<3;i++)

sum=sum+a[i][i];

printf(“sum=%6dn”,sum);

return 0;}

4、有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。#include int main(){ int a[11]={1,4,6,9,13,16,19,28,40,100};

int temp1,temp2,number,end,i,j;

printf(“array a:n”);

for(i=0;i<10;i++)

printf(“%5d”,a[i]);

printf(“n”);

printf(“insert data:”);

scanf(“%d”,&number);

end=a[9];

if(number>end)

a[10]=number;

else

{ for(i=0;i<10;i++){ if(a[i]>number)

{ temp1=a[i];

a[i]=number;

for(j=i+1;j<11;j++)

{ temp2=a[j];

a[j]=temp1;

temp1=temp2;

}

break;

}

}

}

printf(“Now array a:n”);

for(i=0;i<11;i++)

printf(“%5d”,a[i]);

printf(“n”);

return 0;}

5、将一个数组中的值按逆顺序重新存放。例如:8,6,5,4,1。要求改为:1,4,5,6,8.。#include #define N 5 int main(){ int a[N],i,temp;

printf(“enter array a:n”);

for(i=0;i

scanf(“%d”,&a[i]);

printf(“array a:n”);

for(i=0;i

printf(“%4d”,a[i]);

for(i=0;i

素的值互换 { temp=a[i];

a[i]=a[N-i-1];

a[N-i-1]=temp;

} printf(“nNow,array a:n”);for(i=0;i

printf(“%4d”,a[i]);

//循环的作用是将对称的元

printf(“n”);

return 0;}

6、输出以下杨辉三角形(要求输出10行)。1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 „„„„„„„„„„„„ #include #define N 10 int main(){ int i,j,a[N][N];

for(i=0;i

{ a[i][i]=1;

a[i][0]=1;

}

for(i=2;i

for(j=1;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j];

for(i=0;i

printf(“%6d”,a[i][j]);

printf(“n”);

}

printf(“n”);

return 0;}

7、输出“魔方阵”。所谓魔方阵就是每行每列和对角线之和相等。例如: 1 6 3 5 7 4 9 2 要求输出1~n^2的自然数构成的魔方阵。#include int main(){ int a[15][15],i,j,k,p,n;

p=1;

while(p==1){ printf(“enter n(n=1--15):”);

scanf(“%d”,&n);

if((n!=0)&&(n<=15)&&(n%2!=0))

p=0;

}

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

a[i][j]=0;

j=n/2+1;

a[1][j]=1;

for(k=2;k<=n*n;k++){ i=i-1;

j=j+1;

if((i<1)&&(j>n))

{ i=i+2;

j=j-1;

}

else

{ if(i<1)i=n;

if(j>n)j=1;

}

if(a[i][j]==0)

a[i][j]=k;

else

{ i=i+2;

j=j-1;

a[i][j]=k;

}

}

for(i=1;i<=n;i++)

{for(j=1;j<=n;j++)

printf(“%5d”,a[i][j]);

printf(“n”);

}

return 0;}

9、有15个数按由大到小顺序存放在一个数组中,输入一个数,要求折半查找法找出该数是数组中第几个元素值。如果不在数组中则输出“无此数”。#include #define N 15 int main(){

int i,number,top,bott,mid,loca,a[N],flag=1,sign;

char c;

printf(“enter data:n”);

scanf(“%d”,&a[0]);

i=1;

while(i

{ scanf(“%d”,&a[i]);

if(a[i]>=a[i-1])

i++;

else

printf(“enter this data again:n”);

}

printf(“n”);

for(i=0;i

printf(“%5d”,a[i]);

printf(“n”);

while(flag){ printf(“input number to look for:”);

scanf(“%d”,&number);

sign=0;

top=0;

//top是查找区间的起始位置

bott=N-1;

//bott是查找区间的最末位置

if((numbera[N-1]))//要查的数不在查找区间内

loca=-1;

// 表示找不到

while((!sign)&&(top<=bott))

{mid=(bott+top)/2;

if(number==a[mid])

{ loca=mid;

printf(“Has is %dn”,number,loca+1);

sign=1;

}

else if(number

bott=mid-1;

else

found

%d,its

position

top=mid+1;

}

if(!sign||loca==-1)

printf(“cannot find %d.n”,number);;

printf(“continu or not(Y/N)?”);

scanf(“ %c”,&c);

if(c=='N'||c=='n')

flag=0;

}

return 0;

}

10、有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符个数。

#include int main(){ int i,j,upp,low,dig,spa,oth;

char text[3][80];

upp=low=dig=spa=oth=0;

for(i=0;i<3;i++)

{ printf(“please input line %d:n”,i+1);

gets(text[i]);

for(j=0;j<80 && text[i][j]!='';j++)

{ if(text[i][j]>='A'&& text[i][j]<='Z')

upp++;

else if(text[i][j]>='a' && text[i][j]<='z')

low++;

else if(text[i][j]>='0' && text[i][j]<='9')

dig++;

else if(text[i][j]==' ')

spa++;

else

oth++;

}

}

printf(“nupper case: %dn”,upp);

printf(“lower case: %dn”,low);

printf(“digit

: %dn”,dig);

printf(“space

: %dn”,spa);

printf(“other

: %dn”,oth);return 0;}

11、输出以下图案:* * * * *

* * * * * * * * * * * * * * * * * * * * #include int main(){ char a[5]={'*','*','*','*','*'};

int i,j,k;

char space=' ';

for(i=0;i<5;i++)

{ printf(“n”);

printf(“

”);

for(j=1;j<=i;j++)

printf(“%c”,space);

for(k=0;k<5;k++)

printf(“%c”,a[k]);

}

printf(“n”);

return 0;}

12、有一行电文,已按下面规律译成密码:A>Z,B>Y,C>X„„a>z,b>y,c>x„„

编程译回原文并输出密码和原文。#include int main(){ int j,n;

char ch[80],tran[80];

printf(“input cipher code:”);

gets(ch);

printf(“ncipher code :%s”,ch);

j=0;

while(ch[j]!='')

{ if((ch[j]>='A')&&(ch[j]<='Z'))

tran[j]=155-ch[j];

else if((ch[j]>='a')&&(ch[j]<='z'))

tran[j]=219-ch[j];

else

tran[j]=ch[j];

j++;

}

n=j;

printf(“noriginal text:”);

for(j=0;j

putchar(tran[j]);

printf(“n”);

return 0;}

12、有一行电文,已按下面规律译成密码:a>z,b>y,c>x„„

编程译回原文并输出密码和原文。#include int main(){ int j,n;

char ch[80];

printf(“input cipher code:n”);

gets(ch);

printf(“ncipher code:%sn”,ch);

j=0;

while(ch[j]!='')

A>Z,B>Y,C>X„„

{ if((ch[j]>='A')&&(ch[j]<='Z'))

ch[j]=155-ch[j];

else if((ch[j]>='a')&&(ch[j]<='z'))

ch[j]=219-ch[j];

else

ch[j]=ch[j];

j++;

}

n=j;

printf(“original text:”);

for(j=0;j

putchar(ch[j]);

printf(“n”);

return 0;}

15、编写一个程序,将S2中的全部字符复制到字符数组S1中。不用strcpy函数。复制时‘’ 也要复制过去。‘’后面的字符不复制。#include int main(){ char s1[80],s2[40];

int i=0,j=0;

printf(“input string1:”);

scanf(“%s”,s1);

printf(“input string2:”);

scanf(“%s”,s2);

while(s1[i]!='')

i++;

while(s2[j]!='')

s1[i++]=s2[j++];

s1[i]='';

printf(“nThe new string is:%sn”,s1);

return 0;}

15、编写一个程序,将S2中的全部字符复制到字符数组S1中。不用strcpy函数。复制时‘’ 也要复制过去。‘’后面的字符不复制。#include #include int main(){ char s1[80],s2[80];

int i;

printf(“input s2:”);

scanf(“%s”,s2);

for(i=0;i<=strlen(s2);i++)

s1[i]=s2[i];

printf(“s1:%sn”,s1);

return 0;} 第七章

1、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。程序有误

#include int main(){ int hcf(int,int);

int lcd(int,int,int);

int u,v,h,l;

scanf(“%d,%d”,&u,&v);

h=hcf(u,v);

printf(“H.C.F=%dn”,h);

l=lcd(u,v,h);

下载c语言课后习题word格式文档
下载c语言课后习题.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    课后习题

    课后习题 第一课 背诵第1、2自然段 1、 体会句子的含义: A:那些小丘的线条是那么柔美,就像只用绿色渲染,不用墨线勾勒的中国画那样,到处翠色欲流,轻轻流入云际。 答:老舍将草原拟为......

    课后习题

    课后习题 第一章 •如何理解中国蒙古人种在形成发展过程中存在的多态性? •请列举中国早期农业阶段具代表性的考古学文化遗存。 •考古学家是怎样归纳中国新石器文化时期的考......

    课后习题

    第一章 1.如何正确认识提出马克思主义中国化的重要意义? 第一,马克思主义中国化的理论成果指引着党和人民的伟大事业不断取得胜利。 第二,马克思主义中国化的理论成果提供了凝......

    C语言程序设计教程课后习题答案

    C语言程序设计教程课后习题答案第一章 C语言程序设计概述 -习题答案 1 算法的描述有哪些基本方法?答 1、自然语言 2、专用工具2 C语言程序的基本结构是怎样的?举一个例子说明。......

    C语言程序设计教程 课后习题参考答案

    《C语言程序设计教程》 课后习题参考答案 习题1 1. (1)编译、链接.exe (2)函数主函数(或main函数) (3)编辑编译链接 2. (1)-(5):DDBBC (6)-(10):ABBBC 3. (1)答:C语言简洁、紧凑,使用方便、灵......

    影视动画试听语言课本课后习题答案整理

    一、 名词解释 1、视听语言: 就是利用视觉和听觉的双重刺激向受众传播某种信息的一种感性语言,是电影的艺术手段,是利用镜头与镜头之间的组合来表达特殊意义,讲述故事,表达内容与......

    审计课后习题

    第一章 (一)判断题 1.财产所有权和经营权的分离是注册会计师审计产生的直接原因。 2.资产负债表审计阶段,审计报告的使用者是社会公众。 3.注册会计师审计是经济发展......

    第一节 课后习题(合集)

    第一单元走进化学世界课题1 物质的变化和性质 课后作业1、化学变化的特征是 A、有发光、发热现象B、物质的状态或颜色发生变化 C、有气体放出或沉淀生成D、有其它物质生成 2......