1、C语言经典习题集第三章习题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); ret
2、urn 0; .3-3 若a=3,b=4,c=5,x=,y=,z= ,u=51274,n=128765, c1=a,c2=b.想得到以下的输出格式和结果,请写出 程序(包括定义变量类型和设计输出,表示空格 ) 注意: 数值的地方必须利用变量的值,不能像下面这行 printf(“ a=3b=4c=5n”); a=3b=4c=5 x=,y=,z= x+y= y+z=z+x= u=51274n=128765、 c1=a or 97(ASCII) c2=b or 98(ASCII) 3-4 写程序输入x和y, 求x的y次方(课本附录四,pow函数)第四章 习题4-1 编程求 4-2 输出下面的九九乘法
3、表1*1=1、2*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=81¥4-3
4、证明for、while、do-while三者之间等价,即for可用while表示,反之亦然。4-4 输入三条边, 判断一个三角形是锐角、直角、钝角三角形中的哪一者4-5 求最大的“水仙花数”.要求(1)三重循环 (2)一重循环用break4-6 已知 ,利用这个公式求 的近似值,要求误差小于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(i+
5、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
7、a5, b7; 数组元素从键盘输入,写一个程序累计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+
9、; printf(%d %dn, +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分析下列程序的输出结
11、果.一维数组的指针表示法#include 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,
12、*pc2 = c; int i4, *pi1, *pi2 = 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)
13、;学习该函数的功能并回答为什么iptr要是double *类型而不是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动态分配,动态分配的空间不能浪费(
14、即不多不少)。 第八章 字符串处理习题8-1 分析下列程序的输出结果#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
15、good=“good morning!”; /*一个空格*/ char *ch=&good13; while(-ch=&good0) putchar(*ch); putchar(n); return 0; 8-4 写一个验证密码(假定密码为abcde)的程序,由用户输入密码,可以有三次输入机会,只要输入正确,则程序结束,否则继续下一次尝试;如果满了三次,则输出”you are failure!”,程序结束。下面是一个演示步骤:enter password:12enter password:34)enter password:acyou are failure! 第九章 数组及应用9-1假定数组
16、为int a35; 请问如下两条条语句将产生什么后果a42 = 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为0x4
17、51A,问&a321是多少 ;9-6 编程对二维数组各元素求和,要求用函数实现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 试分别用循
18、环和递归函数来验证这个结论.9-10 (较难,选做) 将hanoi问题推广,初始状态每个圆盘可能在任何一个柱子上,只要没有大圆盘放在小圆盘的上面即可.编写一个递归函数解决这个问题.!第十章 结构习题10-1 学习中标准库函数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,Wang; struct abc *px=&x; printf(%d %.1f %sn, , , ; printf(%d %.1f %sn,px-a, (*px).b, px
20、-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=; p-name=(char *)malloc(20); strcpy(p-name,LiPing); printf(%s %.2fn,p-name,p-grad); return 0; 10-7 设计
21、一个日期类型,包含年、月、日的信息。写一个函数nextday返回某日的下一天信息,原型如下: struct date next_day(struct date thisday);10-9(选做,有难度)写一个函数,判断一个点是否在三角形内部,可利用已有的代码第11章 文件习题11-1 将4-100内哥德巴赫猜想验证结果写入一个文件11-2 输出一个文本文件,所有小写字母转换为大写第12章 预处理习题12-1 分析下列程序的输出结果#include #define AB(a,b) 2*(a)+2*(b)int main(void) int a=3; float b=; printf(%.2fn,1/AB(a,b); return 0;12-2 分析下列程序的输出结果*/ 文件内容如下: #define T 1 #define ABC main() printf(hello!%sn,s); return 0; 文件内容如下#include #include #if T char *s=good morning!; ABC #endif12-3 下面value值为多少#define DIV(a,b) a/b int arg1 = 7, arg2 = 5; float value; value = (float)(DIV(arg1*arg2,arg1-arg2)/2);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1