您好,欢迎访问三七文档
第三章习题3-1(选做)分析下列程序的输出结果#includestdio.hintmain(void){charx='a',y='b';printf(“xy\bmn\r”);/*xy之前四个空格*/printf(%c\\%c\'\n,x,y);printf(%c\a\n,'\65');return0;}3-2.分析程序运行结果。#includestdio.hintmain(void){shorti,j;unsignedshortu1,u2;u1=10000;u2=40000;i=u1;j=u2;printf(u1=%u,u2=%u\ni=%d,j=%d\n,u1,u2,i,j);return0;}3-3若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=‘a’,c2=‘b’.想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出,表示空格)注意:数值的地方必须利用变量的值,不能像下面这行printf(“a=3b=4c=5\n”);a=3b=4c=5x=1.200000,y=2.400000,z=-3.600000x+y=3.60y+z=-1.20z+x=-2.40u=51274n=128765c1=‘a’or97(ASCII)c2=‘b’or98(ASCII)3-4写程序输入x和y,求x的y次方(课本附录四,pow函数)第四章习题4-1编程求25001i2i4-2输出下面的九九乘法表1*1=12*1=22*2=43*1=33*2=63*3=94*1=44*2=84*3=124*4=165*1=55*2=105*3=155*4=205*5=256*1=66*2=126*3=186*4=246*5=306*6=367*1=77*2=147*3=217*4=287*5=357*6=427*7=498*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=649*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=814-3证明for、while、do-while三者之间等价,即for可用while表示,反之亦然。4-4输入三条边,判断一个三角形是锐角、直角、钝角三角形中的哪一者?4-5求最大的“水仙花数”.要求(1)三重循环(2)一重循环用break4-6已知......71513114,利用这个公式求的近似值,要求误差小于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++n){j=1;while(j++i){k=1;while(k++j)printf(“\n”);}}问printf语句共执行了几次?这段代码执行完以后i,j,k值为多少?4-9分析程序输出结果(假设输入1234,然后回车)#includestdio.hintmain(void){intc;while((c=getchar())!=‘\n’)switch(c-‘2’){case0:case1:putchar(c+4);case2:putchar(c+5);break;case3:putchar(c+3);default:putchar(c+2);break;}return0;}4-10分析程序的输出结果#includestdio.hintmain(void){intx=2,y,z;x*=3+2;printf(%d\n,x);x*=y=z=4;printf(%d\n,x);x=y==z;printf(%d\n,x);x==(y=z);printf(%d\n,x);return0;}4-11写一个程序用getchar接收一行字符,然后把这行字符分成各个单词,假定单词之间用一个或多个空格或tab键分开,起始字符也可以是空格或tab键。示例:输入字符串是:IamaCMPE150student则输出是:IamaCMPE150student4-12有两个整数数组inta[5],b[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写出程序运行结果#includestdio.hintf(inta,intb);intmain(void){printf(%d\n,f(3,4));return0;}intf(inta,intb){if(a==1||b==1)return1;returnf(a-1,b)+f(a,b-1);}5-2自己写一个函数求nx,n为可正可负的整数,递归或非递归均可,要求不能使用库函数pow。5-3写函数求两个正整数的最大公约数(分别用普通函数和递归函数)5-4已知Ackerman函数如下:写递归函数求akm(1,3),尝试akm(3,3),akm(4,3)5-5写一个函数,判断三个数能否构成三角形的三条边。写另外一个函数,根据三角形的三条边长求三角形的面积。写一个程序测试这两个函数。第六章习题6-1写出程序运行结果#includestdio.hintmain(void){voidf(int);f(4);return0;}voidf(intn){staticinta=1;intb=1;if(n0){b++;printf(%d%d\n,++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'function3isover4:0'Z''X''Y'function4isoverfunction2isover5:1'Y''X''Z'6:0'Y''Z''X'function6isover7:0'X''Y''Z'function7isoverfunction5isoverfunction1isover输出格式1:2‘X’‘Y’‘Z’(“:”前数字表示函数第几次被调用,“:”后表示函数各参数)。比如缩进对齐表示被调用关系,比如第2次第5次函数都是被第一次函数调用,所以它们是对齐的,0011001101nmnmakmmakmnmmakmmnnmakm,)),(,(,),(),(而且相对第一次要缩进若干字符。第七章指针习题7-1分析下列程序的输出结果#includestdio.hintf1(int*x,int*y,intz);intmain(void){inta=3,b=4,c=5,d;d=f1(&a,&b,c);printf(%d%d%d%d\n,a,b,c,d);return0;}intf1(int*x,int*y,intz){*x=(*y)++;return(--z);}7-2分析下列程序的输出结果.一维数组的指针表示法#includestdio.hintmain(void){inta[10],b[10],*pa,*pb,i;pa=a;pb=b;for(i=0;i5;i++,pa++,pb++){*pa=i;*pb=2*i;printf(%d\t%d\n,*pa,*pb);}pa=&a[1];pb=&b[1];for(i=0;i5;i++){*pa+=i;*pb+=2*(i+1);printf(%d\t%d\n,*pa++,*pb++);}return0;}7-3分析下列程序的输出结果,强制指针转换#includestdio.hintmain(void){charc[3],*pc1,*pc2=c;inti[4],*pi1,*pi2=i;doubled[4],*pd1,*pd2=d;pc1=pc2+1;pi1=pi2+2;pd1=pd2+3;printf(%d%d%d\n,pc1-pc2,pi1-pi2,pd1-pd2);printf(%d%d%d\n,(int)pc1-(int)pc2,(int)pi1-(int)pi2,(int)pd1-(int)pd2);return0;}7-4标准库函数modf原型如下:#includemath.hdoublemodf(doublevalue,double*iptr);学习该函数的功能并回答为什么iptr要是double*类型而不是int*,写一个小程序调用该函数。7-5写一个函数返回double类型数组中最大数的下标,写一个小程序测试该函数。7-6将习题4-12的功能改写成函数。intntersection(intset1[],intsize1,intset2[],intsize2,int*result);该函数求set1(大小size1)、set2(大小size2)两个数组中总共有所有不同元素的数目作为函数的返回值,并将这些元素存入result指向的空间中,result指向的空间应该使用malloc动态分配,动态分配的空间不能浪费(即不多不少)。第八章字符串处理习题8-1分析下列程序的输出结果#includestdio.hintmain(void){inta[]={0,1,2};int*p=a,b;char*q=abcde;b=*++p;printf(%d%d%d%d%d\n,a,*a,*(a+2),*(p+1),p[1]);printf(%d%d%c%s%s\n,q,*q,q[3],q+3,q);return0;}8-2写一个函数,该函数的功能是将一个字符串中的小写字母转换成大写字母。8-3分析下列程序的输出结果,测试指针与数组的关系#includestdio.hintmain(void){staticchargood[]=“goodmorning!”;/*一个空格*/char*ch=&good[13];while(--ch=&good[0])putchar(*ch);putchar('\n');return0;}8-4写一个验证密码(假定密码为abcde)的程序,由用户输入密码,可以有三次输入机会,只要输入正确,则程序结束,否则继续下一次尝试;如果满了三次,则输出”youarefailure!”,程序结束。下面是一个演示步骤:enterpassword:12回车enterpassword:34回车enterpassword:ac回车youarefailure!第九章数组及应用9-1假定数组为inta[3][5];请问如下两条条语句将产生什么后果?a[4][2]=8;a[1][7]=9;9-2实现冒泡排序,从第一个元素开始,降序排列。9-3约瑟夫斯问题.有n个人手牵手排成一圈,顺时针从1到n编号后,从1号开始按顺时针报数,每到m时相应的人就出局,剩下的人从那个人的下一个开始重新开始报数,依此下去,问最后剩下的人是第几号?用一维数组解决这个问题9-4利用二维数组按如下格式输出十行杨辉三角形1111211331146419-5假定sizeof(float)为4,则数组floata[6][5][3](1)数组第77个元素是哪一个?(2)若&a[0][0][0]为0x451A,问&a[3][2][1]是多少?9-6编程对二维数组各元素求和,要求用函数实现9-7用二维数组编程求两个矩阵相乘9-8(选做)从键盘依次读入“VISUALC++”,“VISUALBASIC”,“C”,“PASCAL”,“FORTRAN”,“LISP”,用二维数组接收然后将其按降序输出。9-9“6174”问题,任给一各位不全相等的四位数,各位按递增和递减分别组成两个四位数,大的减去小
本文标题:C语言经典习题集
链接地址:https://www.777doc.com/doc-6663425 .html