C语言经典习题集.docx

上传人:b****8 文档编号:9286103 上传时间:2023-02-04 格式:DOCX 页数:18 大小:29KB
下载 相关 举报
C语言经典习题集.docx_第1页
第1页 / 共18页
C语言经典习题集.docx_第2页
第2页 / 共18页
C语言经典习题集.docx_第3页
第3页 / 共18页
C语言经典习题集.docx_第4页
第4页 / 共18页
C语言经典习题集.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

C语言经典习题集.docx

《C语言经典习题集.docx》由会员分享,可在线阅读,更多相关《C语言经典习题集.docx(18页珍藏版)》请在冰豆网上搜索。

C语言经典习题集.docx

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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1