C语言经典习题集_第1页
C语言经典习题集_第2页
C语言经典习题集_第3页
C语言经典习题集_第4页
C语言经典习题集_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章习题3-1(选做)分析下列程序的输出结果 #include int main(void) char x =a,y =b; printf(“ xybmnr”); /*xy之前四个空格*/ printf(%c%cn,x,y); printf(%can,65); return 0; 3-2. 分析程序运行结果。 #include int main(void ) short i,j;unsigned short u1,u2;u1=10000;u2=40000;i=u1;j=u2;printf(u1=%u,u2=%uni=%d,j=%dn,u1,u2,i,j); return 0; 3-3 若a=

2、3,b=4,c=5,x=1.2,y=2.4,z= -3.6,u=51274,n=, c1=a,c2=b.想得到以下的输出格式和结果,请写出 程序(包括定义变量类型和设计输出,表示空格 ) 注意: 数值的地方必须利用变量的值,不能像下面这行printf(“ a=3b=4c=5n”); a=3b=4c=5 x=1.,y=2.,z=-3. x+y=3.60 y+z=-1.20z+x=-2.40 u=51274n= c1=a or 97(ASCII) c2=b or 98(ASCII) 3-4 写程序输入x和y, 求x的y次方(课本附录四,pow函数)第四章 习题4-1 编程求 4-2 输出下面的九九

3、乘法表1*1=12*1=2 2*2=43*1=3 3*2=6 3*3=94*1=4 4*2=8 4*3=12 4*4=165*1=5 5*2=10 5*3=15 5*4=20 5*5=256*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=367*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=498*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=649*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=814-3

4、证明for、while、do-while三者之间等价,即for可用while表示,反之亦然。4-4 输入三条边, 判断一个三角形是锐角、直角、钝角三角形中的哪一者?4-5 求最大的“水仙花数”.要求(1)三重循环 (2)一重循环用break4-6 已知 ,利用这个公式求p的近似值,要求误差小于10-64-7(较难) 分析如下代码(n2): for(i=1;in;i+) for(j=1;ji;j+) for(k=1;kj;k+) printf(“n”); 问printf语句共执行了几次?这段代码执行完以后i,j,k值为多少? 4-8 (较难) 有如下代码段(n为正整数): i=1; while(

5、i+n) j=1; while(j+i) k=1; while(k+j) printf(“n”); 问printf语句共执行了几次?这段代码执行完以后i,j,k值为多少?4-9 分析程序输出结果(假设输入 1234 ,然后回车)#includeint main(void)int c; while(c=getchar()!=n) switch(c-2) case 0: case 1:putchar(c+4); case 2:putchar(c+5);break; case 3:putchar(c+3); default: putchar(c+2);break; return 0;4-10分析程序

6、的输出结果 #include int main(void) int x=2,y,z;x*=3+2;printf(%dn,x);x*=y=z=4;printf(%dn,x);x=y=z;printf(%dn,x);x=(y=z);printf(%dn,x);return 0; 4-11 写一个程序用getchar接收一行字符,然后把这行字符分成各个单词,假定单词之间用一个或多个空格或tab键分开,起始字符也可以是空格或tab键。示例:输入字符串是: I am a CMPE 150 student则输出是:IamaCMPE150student4-12 有两个整数数组 int a5, b7; 数组元

7、素从键盘输入,写一个程序累计a、b数组中总共有多个不同元素并输出。 例如 :a数组元素是1, 1, 2, 3, 4 b数组元素是1, 1, 5, 3, 4,则结果是a、b数组中总共有5个不同元素,分别是1,2,3,4,5第五章 函数5-1 写出程序运行结果#include int f(int a,int b);int main(void)printf(%dn, f(3,4) );return 0; int f(int a,int b) if(a=1|b=1) return 1;return f(a-1,b)+f(a,b-1); 5-2 自己写一个函数求,n为可正可负的整数,递归或非递归均可,要

8、求不能使用库函数pow。5-3 写函数求两个正整数的最大公约数(分别用普通函数和递归函数)5-4 已知Ackerman函数如下:写递归函数求akm(1,3),尝试akm(3,3),akm(4,3)5-5 写一个函数,判断三个数能否构成三角形的三条边。写另外一个函数,根据三角形的三条边长求三角形的面积。写一个程序测试这两个函数。第六章 习题6-1 写出程序运行结果#include int main(void) void f(int); f(4); return 0;void f(int n) static int a=1; int b=1; if(n0) b+; printf(%d %dn, +

9、a,b); f(n-1); 6-2 写程序输出第五章例题hanoi塔的分析过程/*示例输出过程见下(以n=2为例)*/1:2 X Y Z 2:1 X Z Y 3:0 X Y Z function 3 is over 4:0 Z X Y function 4 is over function 2 is over 5:1 Y X Z 6:0 Y Z X function 6 is over 7:0 X Y Z function 7 is over function 5 is overfunction 1 is over输出格式 1: 2 X Y Z( “:”前数字表示函数第几次被调用, “:”后表

10、示函数各参数) 。比如缩进对齐表示被调用关系,比如第2次第5次函数都是被第一次函数调用,所以它们是对齐的,而且相对第一次要缩进若干字符。第七章 指针习题7-1 分析下列程序的输出结果#include int f1(int *x,int *y,int z);int main(void ) int a=3,b=4,c=5,d; d=f1(&a,&b,c); printf(%d %d %d %dn,a,b,c,d); return 0;int f1(int *x,int *y,int z) *x=(*y)+; return(-z);7-2分析下列程序的输出结果.一维数组的指针表示法#include

11、int main(void ) int a10,b10, *pa, *pb,i; pa=a; pb=b; for(i = 0; i 5; i+, pa+, pb+) *pa=i;*pb=2*i;printf(%dt%dn,*pa,*pb); pa=&a1; pb=&b1;for(i = 0; i 5; i+) *pa+=i;*pb+=2*(i+1);printf(%dt%dn,*pa+,*pb+); return 0; 7-3 分析下列程序的输出结果,强制指针转换 #include int main(void) char c3, *pc1, *pc2 = c; int i4, *pi1, *p

12、i2 = i; double d4, *pd1,*pd2 = d; pc1= pc2 + 1; pi1 = pi2 + 2; pd1 = pd2 + 3; printf(%d %d %dn,pc1-pc2,pi1-pi2,pd1-pd2); printf(%d %d %dn,(int)pc1-(int)pc2, (int)pi1- (int)pi2 , (int)pd1-(int)pd2); return 0;7-4 标准库函数modf原型如下:#include double modf(double value, double *iptr);学习该函数的功能并回答为什么iptr要是double

13、 *类型而不是int *,写一个小程序调用该函数。7-5 写一个函数返回double类型数组中最大数的下标,写一个小程序测试该函数。7-6 将习题4-12的功能改写成函数。int ntersection(int set1, int size1, int set2, int size2, int *result); 该函数求set1(大小size1)、set2(大小size2)两个数组中总共有所有不同元素的数目作为函数的返回值,并将这些元素存入result指向的空间中,result指向的空间应该使用malloc动态分配,动态分配的空间不能浪费(即不多不少)。 第八章 字符串处理习题8-1 分析下

14、列程序的输出结果#include int main(void) int a=0,1,2; int *p=a,b; char *q=abcde; b=*+p; printf(%d %d %d %d %dn,a,*a,*(a+2),*(p+1),p1); printf(%d %d %c %s %sn,q,*q,q3,q+3,q); return 0;8-2 写一个函数,该函数的功能是将一个字符串中的小写字母转换成大写字母。8-3分析下列程序的输出结果,测试指针与数组的关系 #include int main(void) static char good=“good morning!”; /*一个空

15、格*/ char *ch=&good13; while(-ch=&good0)putchar(*ch);putchar(n); return 0; 8-4 写一个验证密码(假定密码为abcde)的程序,由用户输入密码,可以有三次输入机会,只要输入正确,则程序结束,否则继续下一次尝试;如果满了三次,则输出”you are failure!”,程序结束。下面是一个演示步骤:enter password:12enter password:34enter password:acyou are failure! 第九章 数组及应用9-1假定数组为int a35; 请问如下两条条语句将产生什么后果?a42

16、 = 8;a17 = 9;9-2 实现冒泡排序,从第一个元素开始,降序排列。9-3 约瑟夫斯问题. 有 n个人手牵手排成一圈,顺时针从1到n编号后,从1号开始按顺时针报数,每到m时相应的人就出局,剩下的人从那个人的下一个开始重新开始报数,依此下去,问最后剩下的人是第几号?用一维数组解决这个问题9-4 利用二维数组按如下格式输出十行杨辉三角形 1 1 1 1 2 1 1 3 3 1 1 4 6 4 19-5 假定sizeof(float)为4, 则数组 float a653 (1) 数组第77个元素是哪一个? (2) 若&a000为0x451A,问&a321是多少? 9-6 编程对二维数组各元素

17、求和,要求用函数实现9-7 用二维数组编程求两个矩阵相乘 9-8 (选做) 从键盘依次读入“VISUALC+”,“VISUAL BASIC”, “C” , “PASCAL”, “FORTRAN”, “LISP”, 用二维数组接收然后将其按降序输出。9-9 “6174”问题,任给一各位不全相等的四位数,各位按递增和递减分别组成两个四位数,大的减去小的得到一个四位数,再进行如上处理,总能得到6174(如果是3,则 看成0003)如:5423 5432-2345=3087 8730-378 =8352 8532-2358=6174 试分别用循环和递归函数来验证这个结论.9-10 (较难,选做) 将h

18、anoi问题推广,初始状态每个圆盘可能在任何一个柱子上,只要没有大圆盘放在小圆盘的上面即可.编写一个递归函数解决这个问题.第十章 结构习题10-1 学习math.h中标准库函数div的用法,写一个测试程序测试它的功能。然后实现一个函数mydiv,功能和div一样。 10-2 改写示例程序getSides函数,使之参数为结构而不是结构指针,有必要的话修改与之有关的部分. 体会其中的区别.10-3 (选做) 写一个程序,处理有理数的输入、输出、加减乘除运算。有理数都可以表示为a/b形式,a、b均为整数且互质,必须保证运算后仍满足以上条件10-4 处理一个班的同学信息。每位同学信息包括如下几项:姓名

19、、学号、生日、高数成绩、外语成绩、计算机成绩。生日最好声明为一个结构.要求完成总成绩降序输出对应的姓名、学号、总成绩。10-5分析下列程序的输出结果.测试结构变量和指向结构变量的指针的赋值及成员的表示.#include struct abc int a; float b; char * c; ; int main(void ) static struct abc x=23,98.5,Wang; struct abc *px=&x; printf(%d %.1f %sn, x.a, x.b, x.c); printf(%d %.1f %sn,px-a, (*px).b, px-c); printf(%c %sn,*px-c+2,&px-c1); return 0; 10-6分析下列程序的输出结果。测试指向结构变量的指针和字符指针的赋值.动态分配空间#include #include #include struct stu char * name;float grad; *p;int main(void) struct stu a; p=&a;p-grad=95.5;p-name=(char *)malloc(20);strcpy(p-name,LiPing

温馨提示

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

最新文档

评论

0/150

提交评论