C语言教材后习题及答案_第1页
C语言教材后习题及答案_第2页
C语言教材后习题及答案_第3页
C语言教材后习题及答案_第4页
C语言教材后习题及答案_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言教材习题及答案 25 / 25p第一章1.什么是程序?什么是程序设计语言?2.C语言有什么特点?3.什么是算法?算法的描述有哪些基本方法?第一章主要关注两个概念:一是程序的三种结构(顺序、分支或叫选择、循环);二是函数,主函数main()第二章1.指出下列哪些是C语言合法的用户识别符。void a3_b3 For 2a define _123 _abc DO2.指出下列哪些是C语言合法的常量。"3'4" 0x1g 33 a" E20 '18' 0xa' 1.E-5 3.F '0' .12 'a'

2、"3'4" 双引号内表示字符串,但要在一个串内含有单引号、双引号要用转义字符正确的是:"34""0x是十六进制的表示形式之一,但十六进制里没有g这个数值0xa' 带一个单引号、0开头,无意义.这里要注意ddd,1-3位八进制数,xhh,1-2位十进制数,他们都表示对应的ASCII值E20,E表示指数形式,但两边必须都有数字。将此题全部弄懂,所有关于常量的分基本跑不掉了。3.指出下列定义变量语句中的错误。int a;b=5; /同类型的两个变量,中间不能用分号。doubel h; /doubleint x,float y; /中间

3、要用分号float f(x); /非法符号定义变量要注意,数据类型的关键字,还有就是变量名称必须是合法标识符。4.写出能表示数学式子1(2a12a)的C语言表达式。1.0/(2*a+1/(2*a)5.#include<stdio.h>int main() double x=1,y; y=x+3/2; printf("y=%fn",y); return 0;结果是:2.000000,注意3/2=1(2)#include<stdio.h>int main() float x=2.9,y=3.2,z; int a=8; z=x+a%3*(int)(x+y)

4、/2; printf("z=%fn",z); return 0;结果是:8.900000,注意(int)(x+y)=6。(3)#include<stdio.h>int main()int a=65,b=-20;char ch='A'float x=12.345678f;printf("abcn101tx41101n");printf("a=%d,%c,%o,%xn",a,a,a,a);printf("b=%d,%o,%x,%un",b,b,b,b);printf("ch=%d,

5、%cn",ch,ch);printf("x=%f,%.2f,%10.2f,%-10.fn",x,x,x,x);return 0;此题包含的内容较多,都是细节,希望对照教材仔细分析结果。6程序设计。(1)输出如下的图形。 * * * * *此题答案参考实验指导书。这题在这章出现,主要是练习printf(),(2)已知铁的比重是7.86,计算并输出直径为100毫米的铁球重量#include<stdio.h>#define PI 3.1415926void main() double w,r=100.0/20,p=7.86; w=p*4.0*PI*r*r*r

6、/3.0; printf("%.2fn",w); 第三章1.写出表示变量x的值在0,100范围内的逻辑表达式。x>=0 && x<=1002.写出表示整型变量x的值能被5或7整除的逻辑表达式。x%5=0|x%7=03.已知变量a、b、c的值分别是3、2、1,逻辑表达式a>b>c的值是多少?04.已知变量x,y的值分别为5,9,逻辑表达式x&&y-9)*6-!x的值是多少? 05.已知变量m,n的值都为1,逻辑表达式m-&&n+执行后,m,n的值是多少? m=0,n=2,逻辑表达式的值是真。6(1): #

7、include <stdio.h>int main( ) int x=2,y; if(x) y=x; else y=3*x-1; printf("y=%dn",y); return 0; 运行结果是:y=2(2) #include <stdio.h>int main( )int a=2,b=2,c=3;if (a=b) if(b=c) printf("a=b=cn"); else printf("a!=bn");return 0; 运行结果是:a!=b(3)#include <stdio.h>int

8、 main( ) int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+; b+; break; case 3: a+; b+; printf("a=%d,b=%dn ",a,b); return 0; 运行结果是:a=2,b=1(4)#include <stdio.h>int main( ) int n=5; while(n>2) n-; printf("%dn",n); return 0; 运行

9、结果是:4 3 2(5): #include <stdio.h>int main( ) int a,b; for(a=1,b=1;a<=100;a+) if(b>=20) break; if (b%3=1) b+=3;continue; b-=5; printf("%dn",a); return 0; 运行结果是:8 7.程序设计(1)从键盘输入一个字符。若该字符是小写,输出相应的大写字母;若该字符是大写字母,输出对应的小写字母;若是其他字符,则原样输出。#include <stdio.h>int main()char s;scanf(&

10、quot;%c",&s);if (s>='A'&&s <='Z')s=s + 32;else if (s>='a'&&s<='z') s=s-32;printf("%cn" , s);return 0;(2)从键盘输入3个整数,输出其中的最大值。#include <stdio.h> void main() int a,b,c;int m;printf("Please input a b cn");scanf

11、("%d,%d,%d",&a,&b,&c);m=a>b?a:b;m=m>c?m:c;printf("Max is %dn",m);本题解法比较多。注意此题的逻辑关系。(3)从键盘输入一个整数,输出分段函数f(x)的值。 1-x2 (x<2) f(x)= 1+2x-x2 (2<=x<10) 1-x+x2 (x>=10)#include <stdio.h>int main( ) float x,y; scanf("%f",&x); if(x<2) y=1

12、-x*x; else if(x<10) y=1+2*x-x*x; else y=1-x+x*x; printf("a=%fn ",y); return 0; 此类题,注意数轴方向。从一边为起点。(4)从键盘上输入一个整数,求其中每个数位的数字之和。#include<stdio.h>int main()int sum=0,a;scanf("%d",&a);if(a<10)sum=a;elsedosum=sum+a%10;a=a/10;while(a>0);printf("%dn",sum);retu

13、rn 0;此题答案只考虑输入的是正整数,如果输入的是小于0的整数,加个判读,用绝对值函数处理下即可。(5)将100元换成1元,5元,10元的零钱有多少种换法?#include<stdio.h>int main()int x,y,z,i=0;for(x=0;x<=10;x+)for(y=0;y<=20;y+)for(z=0;z<=100;z+)if(x*10+5*y+z=100)printf("%5d,%5d,%5dn",x,y,z);i+;printf("There are %d ways.n",i);return 0;(6

14、)计算方程X2+Y2=1989的所有整数解。#include<stdio.h>#include<math.h>void main()int v,i,j;v=(int)sqrt(1989); for (i=0; i<=v; i+) for (j=0;j<=v;j+) if(i*i+j*j=1989) printf("%5d,%5dn",i*i,j*j); (7)输出所有的3位水仙花数。3位水仙花数是指一个整数的每个数位上的数字的3次方之和等于它本身,例如:13+53+33=153.#include<stdio.h>void ma

15、in()int a,b,c,d;for(a=100;a<=999;a+)b=a/100;c=a%10;d=(a/10)%10;if(b*b*b+c*c*c+d*d*d=a) printf("%5dn",a);(8)在印度有一个古老的传说:舍罕王打算奖赏国际象棋的发明人宰相西萨 班 达依尔。国王问他想要什么,他对国王说:“陛下,请你在这张棋盘的第1个小格里,赏给我一粒麦子,在第二个格子里给2粒,第三格给4粒,以后每一小格都比前一小格加一一倍。陛下啊,把这样摆满棋盘上所有64个小方格的麦粒,都赏赐给你的仆人吧!”。请帮国王计算一下,放完整个棋盘要多少颗小麦。#includ

16、e<conio.h>void main() int i;double n,s;i=1; n=1.0; s=1.0; for(i=2;i<=64;i+) n=n*2;s=s+n;printf("%lfn",n); printf("s=%lfn",s); getch(); (9)验证哥德巴赫猜想:任何充分大(>=4)的偶数都可以用2个素数之和表示,将4100所有偶数分别用两个素数之和的形式输出。(例如:4=2+2,100=3+97)#include<stdio.h>#include<math.h>int ss(

17、int n) /*检查n是否为素数,如果是则返回1,否则返回0*/ int i; for (i=2; i<=(int)sqrt(n); i+) if (n%i=0) return 0; return 1;int main(void) int i,j,k=0; /*k用来控制打印换行*/for (i=4;i<=100; i+=2) for(j=2; j<i; j+) if (ss(j)&&ss(i-j) printf("%d=%d+%d ",i,j,i-j); k+; if (k%5=0) putchar('n'); brea

18、k; return 0;注意判断素数的3种方法。n-1,n/2,(int)sqrt(n)(10)一球从100米高度自由落下,每次漏地后反跳回原高度的一半,求在第10次落地时,共经过多少米?第10次反弹多高?#include<stdio.h>int main() float sn=100.0,hn=sn/2; int n; for(n=2;n<=10;n+) sn=sn+2*hn; /*第n次落地时共经过的米数*/ hn=hn/2; /*第n次反跳高度*/ printf("the total of road is %fn",sn); printf("

19、;the tenth is %f metern",hn); return 0;第4章1.程序填空。(1)请在横线上填空,使程序输出数组s中最大元素的下标。#include<stdio.h>int main()int k,p,s=1,-9,7,2,-10,3;for(p=0,k=0;p<6;p+)if(sp>sk) k=p;printf("%dn",k);return 0; 注意:红色部分为原题填空部分,下同。(2)请在横线上填空,使程序输出以下形式的图标。1 2 3 46 7 811 1216#include <stdio.h>

20、int main( ) int num44=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,i,j; for(i=0;i<4;i+) for(j=i;j<4;j+) printf("%-5d",numij);printf("n");return 0;2.阅读下列程序,写出程序运行结果。(1)#include <stdio.h>int main( )int i,k,a10,p3;k=5;for(i=0;i<10;i+) ai=i;for(i=0;i<3;i+) pi=ai*(i+1);for

21、(i=0;i<3;i+) k+=pi*2;printf("%dn",k);return 0; 运行结果:21(2) #include <stdio.h>int main( )int p7=11,13,14,15,16,17,18,i=0,k=0;while(i<7&&pi%2)k=k+pi; i+;printf("%dn",k);return 0; 运行结果:24(3) #include <stdio.h>int main( )int i;int a33=1,2,3,4,5,6,7,8,9; for(i

22、=0;i<3;i+)printf("%d ",a2-ii); return 0; 运行结果:7 5 33.程序设计。(1)从键盘输入10个成绩,输出最高分和最低分。(2)在一次评奖中有10个评委对5个参赛选手打分,选手的最终得分为:去掉一个最高分、一个最低分后剩余8个分数的平均值。从键盘输入每个选手的得分,输出每个选手最终得分。(3)从键盘输入5门课程6个同学的成绩,。输出每门课程的最高分。(4)从键盘上输入一个4x5的矩阵,输出矩阵个周边元素的和。例如输入以下矩阵,输出:32。10 2 0 30 4 8 9 17 0 9 7 08 0 4 5 1第五章1、程序填空。

23、(1)请在横线上填空,使fun()函数实现a+b2的功能。int fun(int a,int b) int mul; mul=(a+b)*(a+b); return mul;注意:红色部分就是原来需要填空的地方,下同(2)请在横线上填空,使fun()函数返回参数s所表示的数组中各元素的和,其中参数len表示数组s的长度。double fun(double s ,int n) int i; double y=0; for(i=0;i<n;i+) y+=si;return y;2、阅读下列程序,写出程序运行结果。 #include <stdio.h> #define LEN 10

24、 void reverse(int a ,int n) int i,t; for(i=0;i<n;i+) t=ai; ai=an-1-i;an-1-i=t;return ; int main( ) int bLEN=1,2,3,4,5,6,7,8,9,10,i,s=0; reverse(b,8); for(i=6;i<10;i+) s+=bi; printf("s=%dn",s); return 0; 运行结果:s=34(2) #include <stdio.h> int d=1;void fun (int p) int d=5; d+=p+; pr

25、intf("%d",d); return;int main( ) int a=3; fun(a); d+=a+;printf("%dn",d);return 0; 运行结果:84(3) #include <stdio.h> void fun(int x,int y,int z) z=x*x+y*y; return ; int main( ) int a=31; fun(5,2,a); printf("%d",a); return 0; 运行结果:31(4) #include <stdio.h> #define

26、MAX(x,y) (x)>(y)?(x):(y) int main( ) int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf("%dn",t); return 0; 运行结果:73、程序设计。(1)编写函数sum,计算m到n的累加和(m小于n),在主函数中调用sum()函数,计算并输出k=110k+k=2550k+k=530k的值。(2)编写函数item,计算1到n的累加和的倒数,在主函数中调用item()函数,计算并输出11+11+2+11+2+3+11+2+3+n的值。(3)一个正整数如果等于它的因子(包括1,但不包括

27、自身)之和,则称为“完数”(例如6是一个“完数”,6=1+2+3)。编写函数fun,计算n的因子之和(不包括n),在主函数中调用fun()函数,输出1000以内的所有完数。(4)已知数列的递归关系如下,编写函数fun,计算数列的第n项,在主函数中调用fun()函数,输出该数列的前20项。 f(n)=10 (n=1)fn-1+2 (n2)第六章1. 程序填空。(1)请在横线上填空,使程序完成计算数组a中元素的平均值并输出。 float average(int *pa,int n)int i,avg;avg=0;for(i=0;i<n;i+)avg+=pai;return (float)av

28、g/n; int main( ) int a5=2,4,6,8,10;float mean;mean=average(a,5); printf("mean=%.2fn",mean);注意:红色部分即为原题填空部分,下同。2.请在横线上填空,使函数实现计算指针p所指向的字符串的长度。 int myStrlen(char *p) int len=0;for(;*p!='0'p+) len+;return len;阅读下列程序,写出程序运行结果。(1) #include<stdio.h> int main() int a=1,b=3,c=5; int

29、*p1=&a,*p2=&b,*p=&c; *p=(*p1)*(*p2); printf("%dn",c); return 0; 运行结果:3(2) #include<stdio.h> int main() int a33,*p,i; p=&a00; for(i=0;i<9;i+) pi=i+1; printf("%dn",a12); return 0; 运行结果:6(3) #include<stdio.h> int main() int a =2,4,6,8,10,y=1,i,*p; p=&a

30、mp;a1; for(i=0;i<3;i+)y+=*(p+1); printf("%dn",y); return 0; 运行结果:19(4)#include<stdio.h>#include<string .h>int main()char p1="abcd",p2="efgh",str50="ABCDEFG"strcat(str,p1);strcat(str,p2);printf("%cn",str);return 0;运行结果:ABCDEFGabcdefgh(5

31、)#include<stdio.h>int main()char str="1a2b3c"int i;for(i=0;stri!='0'i+)if(stri<'0'|stri>'9') printf("%c",stri);printf("n");return 0; 运行结果:abc3.程序设计(1) 编写函数Mystrcmp(char*str1,char*str2),该函数的功能是比较字符串str1和str2,如果相同返回0,否则返回两个字符串中第1个不相同的AS

32、CII码值之差作为函数值返回,要求不采用库函数strcmp()实现。(2) 编函数fun(int*a,int n,int*odd,int*even),函数的功能是分别求出形参a所指向的数组中所有奇数、偶数之和,并分别保存在Odd、even所指向的变量中形参n表示形参a所指向的数组的长度。(3) 从键盘输入英文的星期几,输出对应的中文星期几。(4) 从键盘输入一个字符串,然后将字符串按照如下规则重新排列:字母排在前面,数字排在后面,并不改变原来字母之间以及数字之间的字符顺序。例如输入字符串“a12bcd45”,则排列后的字符串为”abcd1234”.(5) 从键盘输入一个字符串,按照相反的顺序输

33、出。(6) 从键盘输入一个英文句子,统计其中单词的个数(单词之间使用空格隔开,除子母和空格外不会出现其他符号)。第7章1. 程序填空。(1)请在横线上填空,使程序能从键盘上输入一个日期中的年、月、日,并输出。#include <stdio.h>struct date int month;int year;int day;int main( ) struct date d;printf("请输入年、月、日");scanf("%d%d%d",&d.year,&d.month,&d.day);printf("年:%

34、d月:%d日:%dn",d.year,d.month,d.day);return 0; (2)请在横线上填空,使程序实现从键盘输入5个工人的工资信息,输出平均工资的功能。#include <stdio.h>struct workchar name10;int wage;int main( )struct work ws5;int i,sum;for(i=0;i<5;i+)scanf("%s%d",,&(wsi.wage);for(i=0,sum=0;i<5;i+)sum+=wsi.wage;printf("

35、平均工资=%f",sum/5.0);return 0; (3)在横线上填空,使insert( )函数实现在以head为头结点的链表后面,插入一个结点,并使链表中最后一个结点的next是NULL。此题不作要求.#include <stdio.h>#include <stdlib.h>struct node int data; struct node *next;void insert(struct node *head) struct node *p; p=(struct node *)malloc(sizeof(struct node); printf(“请输

36、入:”);scanf(“%d”,&p->data);while (head->next!=NULL) head=head->next;-head->next=p;p->next=NULL;return;2. 阅读下列程序,写出程序运行结果。(1)#include <stdio.h> struct cmplx int x,y;int main( )struct cmplx cnum2=1,3,2,7;printf(“%dn”,cnum0.y/cnum0.x*cnum1.x);return 0; 运行结果:6(2) #include <std

37、io.h> struct abc data4=1,2,3,5,6,7,8,9,10,11; int I,j,t=0; for(i=0;i<4;i+) for(j=1;j<3;j+) t+=datai,aj; printf(“%dn”,t); return0; (3) #include <stdio.h> struct country int num; char name10; x5=1,”China”,2,”USA”,3,”France”,4,”England”,5,”Spanish”;int main()struct country *p;p=x+2;print

38、f(“%d,%cn”,p->num,(*p).name2);return 0;(4)#include <stdio.h> struct STU char name10; int num; ; void f1(struct STU c) struct STU b=“LiSiGuo”,2042; c=b; void f2 (struct STU*c) struct STU b=“SunDan”,2044; *c=b; int main() struct STU a=“YangSan”,2041,b=“WangYin”,2043;f1(a); fa(%b); printf(“%d

39、%dn”,a.num,b.num); return 0;(5)#include <stdio.h> int main() int x=12,y,z;y=x|0x8;z=y<<3;x=xx;printf(“%d%d%dn”,x,y,z);return 0;3.程序设计。(1)从键盘输入坐标系中两个点的坐标,计算并输出他们的距离,要求使用结构图表示坐标点的坐标。(2)已知有一张班级成绩单,包括学生的学号、姓名、三门课程的成绩等信息,该班有10个同学。编写程序,使之实现下列功能:输入每个学生的各项信息。输出每个学生的各项信息。统计并输出每个同学的平均成绩(保留2位小数)。(3

40、)已知一个通讯录包含:姓名、地址和电话号码信息,编写程序,从键盘出入10个通讯率的信息。在输入完毕后,从键盘输入姓名,并输出该姓名及对应的电话号码和地址。(4)某城市进行人口普查,需登记如下信息:姓名、性别、出生日期、职业。如果是学生,则要另外填写就读入学校和年级两项内容;如果是在职人员,则要填写工作单位和工作时间两项内容。要求输入数据并在屏幕上显示输出。第8章1. 程序填空(1) 请在横线上填空,使程序完成以下功能:从键盘输入一个文件名,然后把从键盘上输入的字符依次存放到该文件中,用#作为输入结束的标志。#include <stdio.h>#include <stdlib.h>int main( )FILE *fp;char ch,fname10;printf (input the name of file:n);gets (f

温馨提示

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

评论

0/150

提交评论