C语言经典习题集.docx
- 文档编号:9286103
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:18
- 大小:29KB
C语言经典习题集.docx
《C语言经典习题集.docx》由会员分享,可在线阅读,更多相关《C语言经典习题集.docx(18页珍藏版)》请在冰豆网上搜索。
C语言经典习题集
第三章习题
3-1(选做)分析下列程序的输出结果
#include<>
intmain(void)
{
charx='a',y='b';
printf(“xy\bmn\r”);/*xy之前四个空格*/
printf("%c\\%c\'\n",x,y);
{
printf("%c\a\n",'\65');
return0;
}
3-2.分析程序运行结果。
#include<>
intmain(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=,y=,z=,u=51274,n=128765,c1=‘a’,c2=‘b’.想得到以下的输出格式和结果,请写出
程序(包括定义变量类型和设计输出,表示空格)
注意:
数值的地方必须利用变量的值,不能像下面这行
printf(“a=3b=4c=5\n”);
a=3b=4c=5
x=,y=,z=
x+y=y+z=z+x=
u=51274n=128765
、
c1=‘a’or97(ASCII)
c2=‘b’or98(ASCII)
3-4写程序输入x和y,求x的y次方(课本附录四,pow函数)
第四章习题
4-1编程求
4-2输出下面的九九乘法表
1*1=1
、
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81
]
¥
4-3证明for、while、do-while三者之间等价,即for可用while表示,反之亦然。
4-4输入三条边,判断一个三角形是锐角、直角、钝角三角形中的哪一者
4-5求最大的“水仙花数”.要求
(1)三重循环
(2)一重循环用break
"
4-6已知
,利用这个公式求的近似值,要求误差小于10-6
4-7(较难)分析如下代码(n>2):
for(i=1;i for(j=1;j for(k=1;k printf(“\n”); | 问printf语句共执行了几次这段代码执行完以后i,j,k值为多少 4-8(较难)有如下代码段(n为正整数): i=1; while(i++ { j=1; while(j++ ~ { k=1; while(k++ printf(“\n”); } } 问printf语句共执行了几次这段代码执行完以后i,j,k值为多少 & 4-9分析程序输出结果(假设输入1234,然后回车) #include<> intmain(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分析程序的输出结果 #include<> intmain(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 则输出是: I am a CMPE 150 student 4-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写出程序运行结果 #include<> intf(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自己写一个函数求 ,n为可正可负的整数,递归或非递归均可,要求不能使用库函数pow。 5-3写函数求两个正整数的最大公约数(分别用普通函数和递归函数) 5-4已知Ackerman函数如下: ! 写递归函数求akm(1,3),尝试akm(3,3),akm(4,3) 5-5写一个函数,判断三个数能否构成三角形的三条边。 写另外一个函数,根据三角形的三条边长求三角形的面积。 写一个程序测试这两个函数。 第六章习题 6-1写出程序运行结果 #include<> intmain(void) { voidf(int); f(4); return0; } voidf(intn) ~ { staticinta=1; intb=1; if(n>0) { 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' function3isover . 4: 0'Z''X''Y' function4isover function2isover 5: 1'Y''X''Z' 6: 0'Y''Z''X' function6isover 7: 0'X''Y''Z' function7isover - function5isover function1isover 输出格式1: 2‘X’‘Y’‘Z’(“: ”前数字表示函数第几次被调用,“: ”后表示函数各参数)。 比如缩进对齐表示被调用关系,比如第2次第5次函数都是被第一次函数调用,所以它们是对齐的,而且相对第一次要缩进若干字符。 第七章指针习题 7-1分析下列程序的输出结果 #include<> … intf1(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分析下列程序的输出结果.一维数组的指针表示法 #include<> … intmain(void) { inta[10],b[10],*pa,*pb,i; pa=a; pb=b; for(i=0;i<5;i++,pa++,pb++) { *pa=i; — *pb=2*i; printf("%d\t%d\n",*pa,*pb); } pa=&a[1]; pb=&b[1]; for(i=0;i<5;i++) { *pa+=i; : *pb+=2*(i+1); printf("%d\t%d\n",*pa++,*pb++); } return0; } 7-3分析下列程序的输出结果,强制指针转换 #include<> … intmain(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原型如下: #include<> doublemodf(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分析下列程序的输出结果 #include<> intmain(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分析下列程序的输出结果,测试指针与数组的关系 #include<> intmain(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利用二维数组按如下格式输出十行杨辉三角形 1 11 ; 121 1 331 14641 9-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(选做)从键盘依次读入“VISUAL C++”,“VISUALBASIC”,“C”,“PASCAL”,“FORTRAN”,“LISP”,用二维数组接收然后将其按降序输出。 9-9“6174”问题,任给一各位不全相等的四位数,各位按递增和递减分别组成两个四位数,大的减去小的得到一个四位数,再进行如上处理,总能得到6174(如果是3,则看成0003)如: 5423 [ 5432-2345=3087 8730-378=8352 8532-2358=6174 试分别用循环和递归函数来验证这个结论. 9-10(较难,选做)将hanoi问题推广,初始状态每个圆盘可能在任何一个柱子上,只要没有大圆盘放在小圆盘的上面即可.编写一个递归函数解决这个问题. ! 第十章结构习题 10-1学习中标准库函数div的用法,写一个测试程序测试它的功能。 然后实现一个函数mydiv,功能和div一样。 10-2改写示例程序getSides函数,使之参数为结构而不是结构指针,有必要的话修改与之有关的部分.体会其中的区别. 10-3(选做)写一个程序,处理有理数的输入、输出、加减乘除运算。 有理数都可以表示为a/b形式,a、b均为整数且互质,必须保证运算后仍满足以上条件 < 10-4处理一个班的同学信息。 每位同学信息包括如下几项: 姓名、学号、生日、高数成绩、外语成绩、计算机成绩。 生日最好声明为一个结构.要求完成总成绩降序输出对应的姓名、学号、总成绩。 10-5分析下列程序的输出结果.测试结构变量和指向结构变量的指针的赋值及成员的表示. #include<> structabc{ inta; floatb; ( char*c; }; intmain(void) { staticstructabcx={23,,"Wang"}; structabc*px=&x; printf("%d%.1f%s\n",,,; printf("%d%.1f%s\n",px->a,(*px).b,px->c); ' printf("%c%s\n",*px->c+2,&px->c[1]); return0; } 10-6分析下列程序的输出结果。 测试指向结构变量的指针和字符指针的赋值.动态分配空间 #include<> #include<> #include<> 》 structstu{ char*name; floatgrad; }*p; intmain(void) { structstua; p=&a; ; p->grad=; p->name=(char*)malloc(20); strcpy(p->name,"LiPing"); printf("%s%.2f\n",p->name,p->grad); return0; } 10-7设计一个日期类型,包含年、月、日的信息。 写一个函数nextday返回某日的下一天信息,原型如下: structdatenext_day(structdatethisday); 10-9(选做,有难度)写一个函数,判断一个点是否在三角形内部,可利用已有的代码 第11章文件习题 11-1将4-100内哥德巴赫猜想验证结果写入一个文件 11-2输出一个文本文件,所有小写字母转换为大写 第12章预处理习题 12-1分析下列程序的输出结果 #include<> #defineAB(a,b)2*(a)+2*(b) intmain(void) { inta=3; floatb=; printf("%.2f\n",1/AB(a,b)); return0; } 12-2分析下列程序的输出结果*/ 文件内容如下: #defineT1 #defineABCmain()\ {printf("hello! %s\n",s);return0;} 文件内容如下 #include<> #include"" #ifT char*s="goodmorning! "; ABC #endif 12-3下面value值为多少 #defineDIV(a,b)a/b intarg1=7,arg2=5; floatvalue; value=(float)(DIV(arg1*arg2,arg1-arg2)/2);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 经典 习题集
![提示](https://static.bdocx.com/images/bang_tan.gif)