《C语言程序设计(第2版)》课后习题参考答案_第1页
《C语言程序设计(第2版)》课后习题参考答案_第2页
《C语言程序设计(第2版)》课后习题参考答案_第3页
《C语言程序设计(第2版)》课后习题参考答案_第4页
《C语言程序设计(第2版)》课后习题参考答案_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

《C语言程序设计》(邱晓红主编)课后习题参考答案

第1章c语言及程序设计概述

1.单选题

(1)A(2)B(3)A(4)B(5)C

2.填空题

(1)//,/*...*/

(2)scanf()

(3)printf()

3.判断题

(1)对(2)错(3)错(4)对

1.4简答题

①概述C语言和C语言程序的主要特点。

答:

1.C语言是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。

2。C语言是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的

信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

①C语言功能齐全-具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。

②C语言适用范围大。适合于多种操作系统,如Windows、DOS,UNIX、LINUX等等:也适用于多种机型。

②请编程,在计算机屏幕上显示:“您好,欢迎进入C语言世界!”

解:

#include<stdio.h>

voidmain()

(

printf("您好,欢迎进入c预言世界!“);

)

第二章:数据类型运算符与表达式

1.单选题

(DC(2)D(3)C(4)B(5)C(6)A(7)B(8)D(9)A(10)B

(11)C(12)C(13)D(14)A(15)B(16)C(17)A(18)A(19)B(20)C

(21)C(22)D(23)C(24)A(25)D(26)B(27)C(28)B(29)B(30)A

2.填空题

(1)sqrt(pow(y,x)+log10(y))(2)36

(3)6(4)33

(5)6(6)36

(7)intx=8,y=8;(8)1

(9)E(10)7,9,6,8)

(11)6(12)66,96

(13)240(14)1,1,-1,-1

(15)5,2,6(16)1

(17)!(18)2

(19)(a>0&&a<101)&&(a%3==0||a%7==0)

(20)A

3.程序分析题

(1)27(VC++环境下,其它编译环境可能有不一样的结果)

27

49

44

1212

(2)3140

1-6

16

(3)100d68D

97a491

(4)0101

(5)2467

-0.58000007.000000

4

6.580000

7.500000

(6)3

31

21

13130

8

232

(7)6

1830

18

1

(8)1100

4.改错题

(1)①无初始赋值,不能输出

②数据精度丢失

③少号

④单字符变量不能保存字符串常量

⑤不能连续初始化

⑥非法标识符

(2)shorti=38000溢出

PI=3.1416常量不能修改值

Printf(t4%d,\x%y)%必须是整数

a*=(b+c)/=d复合赋值左边不能是表达式

5、

(1)

#include<stdio.h>

intmain()

intH;

floatv,Ll,L2,L,T,sl,M;

prinlf(”请输入开始里程数,单位为千米:\n'');

scanf("%f;&Ll);

printf(”请输入结束里程数,单位为千米:\n*,);

scanf(n%f;&L2);

primf("请输入时间,格式为时,分,秒\n”);

scanf("%d,%f,%F,&H,&M,&s1);

T二H+M/60.0+S1/3600.0,将时间折算成小时;

L=L2-L1;〃计算出这段时间走的路程,以千米计:

v=L/T;

printf("%f\n';v);

return0;

(2)

#include<stdio.h>

#definePI3.14

intmain()

(

doubler=2.5,h=5,V;

V=(PI*r*r*h)/3;

primf("%f\n”,V);

return0;

第三章:算法概念与顺序结构程序设计

1.选择题

(1)D(2)D(3)D(4)B(5)C(6)A(在16位机答案为D)(7)B(8)C

(9)B(10)D

2.填空题.

(1)一条语句;

(2)小于左右

(3)%%

(4)输出项列表输出控制符

(5)取地址取a的地址

(6)从盘获取一个字符

(7)大括号

(8)f=68.000000

(9)nl=%d\nn2=%d

(10)75c=3

3.程序分析题.

(1)i=100,c=a,f=1.234000

(2)i=65535户65536

(10)1234,123.5,12345.5

3.4编程题

©编写一个程序,交换两个数的值.

#include<stdio.h>

intmain()

inta,bftemp;

scanf("%d%d”,&a,&b);

HM

printf(a=%dzb=%d\nza,b);

temp=a;

a=b;

b=temp;

printf("a=gd,b=%d\n",a,b);

return0;

I

输入任意一个4位数整数,将该数反序输出(例如输入1354,输出4531)。

#include<stdio.h>

intmain()

{

inta,ans=0;

scanf("%d",&a);

while(a)

(

ans=ans*10+a%10;

a/=10;

)

printf(n%d\n",ans);

return0;

)

①从键盘输入能够构成三角形的三条边长,编程计算该三角形的面积。

#include<stdio.h>

#include<math.h>

intmain()

(

inta,b,c,p;

doubleans;

printf("请输入a,b,c-);

scanf(n%d%d%d",&a,&b,&c);

if((a+b)>c||(a"b)<c)

{

p=(a+b+c)/2;

ans=sqrt(double(p*(p-a)*(p-b)*(p-c)));

printf("%f\n",ans);

)

else

printf("输入错误\n");

return0;

)

(4)编写程序,用getchar函数读入两个字符给cl和。2,然后分别用putchar函数和printf函

数输出这两个字符。在程序实现时考虑

①变量cl和c2应定义为字符型还是整型?还是两者皆可?

#include<stdio.h>

intmain()

(

intclzc2;

charClzC2;

cl=getchar();getchar();

c2=getchar();getchar();

printfcl);

putchar(c2);putchar(1\n1);

Cl=getchar();getchar();

C2=getchar();

printf(n%c\tn,Cl);

putchar(C2);putchar(1\n1);

return0;

)

②要求输出cl和c2的ASCII码,应如何处理?

#include<stdio.h>

intmain()

{

charcl,c2;

cl=getchar();getchar();

c2=getchar();getchar();

n

printf(%d\t%d\n"zcl,c2);

return0;

}

第四章:选择结构程序设计

1.选择题

(1)C(2)B(3)B(4)B(5)D(6)D(7)D(8)A(9)D(有一语句缺

了;,若补齐则答案为B(10)A(11)B(12)B(13)D(14)A(15)C(16)A(17)

C(18)C(19)B(20)D(21)A(22)C(23)A(24)A

2.填空题.

(1)1(2)588

(3)4599(4)2

(5)10200(6)21

(7)-4(8)3

(9)No(10)25

(11)4545(12)0

(13)5.5(14)13

(15)3

3、

(1)参考代码如下:

#include<stdio.h>

intmain()

(

intx;

printf("请输入一个整数:");

scanf(n%d",&x);

if(x%7==0)printf("Yes");

elseprintf("No");

return0;

1

(2)参考代码如下:

#include<stdio.h>

#include<math.h>

intmain()

(

floata,b,c,s,m;

printf("请输入三个数:\n“);

scanf(M%f%f

if((a+b>c)&&(a+c>b)&&(b+c>a))

(

s=(a+b+c)/2;

m=sqrt(s*(s-a)*(s-b)*(s-c));

printf("Theareais:%lf\n",m);

)

elseprintf("输入的三个数不能构成三角形)

return0;

(

(3)会发现程序1输出“优秀”,程序2输出“优秀”“良好”“中等”“及格”四个,因为程序1使用的是多

分支条件句,运行时只执行其中一个,而程序2是多个条件语句,可以被多次判断并且执行。

(4)参考代码如下:

#include<stdio.h>

intmain()

intm;

scanf("%d",&m);

switch(m)

(

casel:printf("Monday");break;

case2:printf("Tuesday");break;

case3:printf("Wednesday");break;

case4:printf("Thursday");brcak;

case5:prinlf("Friday");break;

case6:printf("Saturday");brcak;

case7:printf("Sunday");break;

default:printf(,'ErrorH);

1

return0;

)

(5)参考代码如下:

#include<stdio.h>

intmain()

(

intm,n;

scanf(n%d",&m);

switch(m/10)

(

case1:case2:n=1;break;

case3:n=2;break;

case4:n=3;break;

case5:n=4;break;

default:n=5;

}

printf("%d\n",n);

return0;

)

(6)参考代码如下:

不嵌套的if语句:

#include<stdio.h>

intmain()

(

intx,y;

printf("请输入x的值:

scanf(M%d",&x);

if(x<0)

(

y=x;

printf("y=%d';y);

)

if(x>=0&&x<10)

(

y=x-10;

printf(,'y=%d",y);

1

if(x>=10)

(

y=x+10;

printf(ny=%d'\y);

)

return0;

)

嵌套的if语句:

#include<stdio.h>

intmain()

(

intx,y;

printf("请输入x的值:”);

scanf("%d”,&x);

if(x>=0)

if(x>=10)

y=x+10;

printf(',y=%d,,,y);

)

else

(

y=x-10;

printf("y=%d'\y);

J

)

else

(

y=x;

printf(”y=%d",y);

)

return0;

I

多分支的if语句:

#include<stdio.h>

intmain()

(

intx,y;

printf("请输入x的值:”);

scanf("%d",&x);

if(x<0)

{

y=x;

printf(ny=%d",y);

)

elseif(x>=0&&x<10)

(

y=x-10;

printf(ny=%d'\y);

)

else

(

y=x+10;

printf(',y=%d",y);

)

return0;

1

(7)参考代码如下:

使用多分支if语句:

#include<stdio.h>

intmain()

{

intx;

printf("请输入x的值:

scanf(n%d",&x);

if(x<60)

printfC'E1');

elseif(x>=60&&x<70)

printf(nDH);

elseif(x>=70&&x<80)

printf(uCn);

elseif(x>=80&&x<90)

printf(nBH);

elseif(x>=90&&x<=100)

printf(HAn);

else

printf("输入有误”);

return0;

)

使用switch语句:

#include<stdio.h>

intmain()

intx;

printf("请输入x的值:”);

scanf(n%d",&x);

switch(x/10)

(

case1:case2:case3:case4:case5:printf(,'E");break;

case6:printf("D");break;

case7:printf(HC");break;

case8:printf("B");break;

case9:case10:printf("A");brcak;

default:printf("输入有误)

)

return0;

)

(8)参考代码如下:

#include<stdio.h>

intmain()

(

intx;

scanf("%d",&x);

printf("请输入x的值:”);

switch(x)

(

case1:case3:printf("高等数学课");break;

case2:case4:printf("程序设计课)break;

case5:printf(n外语课)break;

case6:printf("政治课");break;

caseO:prinlf("无课程安排");break;

default:printf("输入有误");

I

return0;

第五章:循环结构程序设计

1.选择题

(1)C(2)A(3)D(4)C(5)D(6)B(7)A(8)A(输出4444)(9)

B(10)A(11)B(12)C(13)B(缺了循环体,不完整)(14)C

2.填空题.

(1)r=m;m=n;n=r

m%n

(2)3

(3)-5

(4)i%3==2&&i%5==3&&i%7==2

j%5==0

(5)i==j

j!=k

(6)ints=8,j=i+2

k+i+j==8

(7)8

(8)k&&i<=500k/10continue

①编程实现对键盘输入的英文名句子进行加密。用加密方法为,当内容为英文字母时其在26字母中的其后

三个字母代替该字母,若为其它字符时不变。

②#include<stdio.h>

@#include<ctype.h>

©#include<string.h>

@#defineMAX1000

@intmain()

⑧charstr[MAX];

⑨gets(str);

⑩inti,len=strlen(str);

⑪for(i=0;i<len;i++)

⑫{

⑬if(isupper(str[i])||islower(str[i]))

⑭{

⑮if(str[i]>=,x*&&str[i]<=,z,)

⑯str[i]='z1;

@elseif(str[i]>=,X'&&str[i]<='Z*)

⑱str[i]='Z1;

⑲else

@str[i]+=3;

21)

22)

23printf(n%s\nn,str);

24return0;

25}

26编程实现将任意的十进制整数转换成R进制数(R在2-16之间)。

^include<stdio.h>

intmain()

(

intx,r,ans[100],i=0;

printf(〃请?输?入?十?进?制?数筋x,进?制?R:〃);

scanf(,z%d%d/z,&x,&r);

while(x)

(

ans[i++]=x%r;

x/=r;

)

while(i-)

printf(螺d",ans[i]);

printfCXn");

return0;

)

27

28少键盘胞入一呼金额[以元大单位;如吧5.78),然后显示支付该金额的各种面额人民币数量,要求

显示100元、50元、10元、5元、2元、1元、5角、1角、5分、1分各多少张。(输出面额最大值:

比如345・78=100*3+10*4+5*1+0.5*1+0.1*2+0.01*8)

#include<stdio.h>

intmain()

(

longx,y,f;

doublen;

intx_100,x_50,x_10,x_5,x_2,x_l,y_5,y_l,f_5,f_l;

x_100=x_50=x10=x_5=x_2=x_.l=y_5=y_l=f_5=f1=0;

scanf&n);

x=int(n);

x_100=x/100;x%=100;

x_50=x/50;x%=50;

x_10=x/10;x%=10;

x_5=x/5;x%=5;

x_2=x/2;x%=2;

x_l=x/l;

n*=10;y=int(n)%10;

y_5=y/5;y%=5;

y_i=y/i;

n*=10;f=int(n)%10;

f_5=f/5;f%=5;

f_l=f/l;

printf(/z100元a\t:%d\n50元a\t:%d\nlO元a\t:%d\n5元a\t:%d\n2元a\t:%d\nl元a\t:%d\n5

角?\t:%d\nl角?\t:%d\n5分?分?x_100,x50,x10,x5,x2,x1,y_5,y1,f5,f_l);

return0;

}

29

30随机产生20个[10,50]的正整数存放到数组中,并求数组中的所有元素最大值、最小值、平均值及各

元素之和。

#include<stdio.h>

^include<stdlib.h>

^defineINF10000

intmain()

(

inti,arr[20],sum=0,max=-INF,min=INF;

doubleaver;

for(i=0;i<20;i++)

{

arr[i]=rand();

sum+=arr[i];

if(arr[i]>max)max=arr[i];

if(arr[i]<min)min=arr[i];

}

aver=(doub1e)sum/20;

printf(〃max=%d\nmin=%d\nsum=%d\naver=%lf\n”,max,min,sum,aver);

return0;

)

31

32试编程判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes,否则输出no.

#include<stdio.h>

intmainO

(

intx;

scanf&x);

if(!(x%5)&&!(x%7))

printf(〃yes\n〃);

else

printf("no\n〃);

return0;

)

33

34编写程序实现功能:用户从键盘输入•行字符,分别统计出其英文字母和数字字符的个数(不记回车符号)。

#include<stdio.h>

^include<ctype.h>

#include<string.h>

intmainO

(

charstr[100];

gets(str);

inti,len=strlen(str),a=0,x=0;

for(i=0;i<len;i++)

(

if(isalpha(str[i]))

a++;

if(isdigit(str[i]))

x++;

}

printf("alpha:%d\nnumber:%d\n〃,a,x);

return0;

}

35

36编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。

#include<stdio.h>

#include<ctype.h>

^include<string.h>

intmain()

(

charstr[100];

gets(str);

inti,len=strlen(str),a=0,max=0;

for(i=0;i<len;i++)

(

if(isalpha(str[i]))

(

a++;

if(a>max)max=a;

)

if(isspace(str[i]))

a=0;

)

printf(*maxlenghl:%d\n”,max);

return0;

)

37

38模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A、B、C、D表示,当选某候

选人时直接输入其编号(编号由计算机随机产生),若输入的不是A、B、C、D则视为无效票,选举结束后按

得票数从高到低输出候选人编号和所得票数。

#include<stdio.h>

^include<stdlib.h>

^include<ctype.h>

^include<string.h>

intmain()

(

intn,a=0,b=0,c=0,d=0;

charx;

scanf&n);

while(n--)

(

x=rand();

switch(x)

(

case'a':

case'A':a++;break;

case'b':

case'B':b++;break;

case'c:

case'C':c++;break;

case'd':

case'D':d++;break;

default:break;

)

}

for(n=0;n<4;n++)

{

if(a>b&&a>c&&a>d)

(

printf(〃A:%d\n”,a);

a=0;

}

elseif(b>a&&a>c&&a>d)

(

printf(〃B:%d\n',b);

b=0;

}

elseif(c>b&&c>a&&c>d)

(

printf('C:%d\n”,c);

c=0;

)

elseif(d>b&&d>c&&d>a)

(

printf("D:%d\n〃,d);

d=0;

)

}

if(a)

printf("A:%d\n〃,a);

if(b)

printf('B:%d\n",b);

if(c)

printf(〃C:%d\n",c);

if(d)

printf(〃D:%d\n”,d);

return0;

(9)任何一个自然数m的立方均可写成m个连续奇数之和。例如:

17=1

2人3=3+5

3人3=7+9+11

4人3=13+15+17+19

编程实现:输入一自然数n,求组成2的n个连续奇数。

#include<stdio.h>

intmain()

(

inti;

intn;

printf("输?入?一?个?自?然?数篇:");

scanf("%d",&n);

if(n<0)

(

printf("输?入?数露据丫有甑错洙?误6");

)

else

{

printf("%d"3=",n);

for(i=0;i<n;i++)

if(i!=n-l)

printf("%d+”,n*(n-l)+l+2*i);

else

prinlf(〃%d\n〃,n*(nT)+l+2*i);

)

}

return0;

}

(9)分别编写程序,打印以下各图案。

/、(b)

(a)

1

a

234

ab

56789

abc

0123456

…789012345

ab..z

6789012345

(a)#include<stdio.h>

intmain()

(

inti,j;

for(i=l;i<=26;i++)

(

for(j=0;j<i;j++)

printf(z,%c'a+j);

printfC\nO;

}

return0;

}

(b)#include<stdio.h>

intmain()

(

inti,j,x=O;

for(i=l;i<=10;i++)

{

for(j=0;j<i;j++)

(

if(++x>9)x-=10;

printf(/z%d〃,x);

)

printf(〃\n〃);

)

return0;

第六章:数组

1.选择题

(1)B(2)C(3)D(4)D(5)B(6)C(7)B(8)A(9)A(10)D

2.填空题.

(1)按行序优先的原则

(2)09

(3)0

(4)12

(5)6

(6)前者以回车后者以空格或回车作为间隔符

(7)strcpy(gets。函数是键盘输入字符串)

(8)&a|i++]

(9)k)/2+1

(10)98

3.程序分析题.

(1)13715

(2)123

056

009

(3)读取输入字符串中数字字符

(4)©if(strl==str2)(strcmp(strl,str2)==0)

②&cl⑼

6.4编程题

编写程序,查找数组中的最大元素和最小元素。

#include<stdio.h>

#defineMAX1000

voidmain(){

inta[MAX]={100,2,3,4,5,6};//假定数组为整数,

intlenght=6;//用于确定数组的长度;

intmax,min;//用于保存最大值和最小值;

inti;

max=a[0];//开始的参考数

min=a[0]”/同上

for(i=l;i<lenght;i++)//(1)

(

if(max<a[i])

max=a[i];

if(min>a[i])

min=a[i];

)

printf(nthemaxis:%d\n”,max);//输出最大值

printf("theminis:%d\n”,min);//输出最小值

)

//为了寻找最大值和最小值,我对整个数组进行判断(1);当当前数组元素值比max的数值大时,就把

max的值更新为当前数组元素的值,

//

有15个整数按升序提排列,现输入一个数,请写程序,用折半查找法判断该数在序列中是否存在,若存

在则指出是第几个。

#include<stdio.h>

voidmain()

(

inta[15];//用于存15个整数;

inti;

intmid;

intkey;

intok=0;

intnum;

printf(”请输入15个数(数与数用空格隔开)\n”);

for(i=0;i<15;i++)

scanf(n%dH,&a[i]);

printf(”请输入需要判断的数\n");

scanf(*'%d",&key);

mid=a[6];

if(mid<=key)

for(i=6;i<15;i++)

(

if(a[i]==key)

(

ok=l;

num=i+l;

)

)

elsefor(i=0i++)

{

if(a[i]=key)

(

ok=l;

num=i+l;

)

)

if(ok==l)

printf("存在,是第%<1个\n",num);

elseprintf("不存在\n");

)

//因为整个数组是升序数组所以需要判断的数要是比中间的数大,就〃在数组的右边,否则就在数组的左

边,只需循环左边或右边就能判〃断出需要判断数的位置和是否存在整个数组中,

(3)寻找一个整型二维数组的“鞍点”,所谓“鞍点”就是这样一个元素,该元素在所在行中值是最小,

在所在列中值是最大。如果存在,则输出“鞍点”所在的行、列及其“鞍点”得值。

#include<stdio.h>

intmain()

(

inta[3][3]={],3,1,1,1,4,12,7,11};〃用于存二维数组;

intline=3;〃行

intlinel;

intlist=3;//歹l]

intlistl;

int

intok=0;

intokl=0;

intmaxzmin;

for(i=0;i<line;i++)

(

for(p=0;p<list;p++)

(

listl=p;

for(j=0;j++)

if(a[i][p]<=a[i][j])

okl=l;

else

okl=0;

if(okl==l)

(

linel=i;

ok=l;

for(k=0;k<line;k++)

if(a[i][p]<a[k][listl])

ok=0;

if(ok==l)

break;

)

}

)

if(ok=l)

printf("存在“鞍点”,“鞍点”在第%d行第%(1列\11”,11]^1+1,1*七1+1);

elseprintf("不存在\n”);

return0;

)

〃先寻找行中最小值,在这基础上,判断这个最小值是否是列中最小值。

第七章:函数的调用

1.选择题

(1)B(2)C(3)C(4)A(5)A(6)D(7)D(8)D(9)B(10)D(11)A

(12)A(13)B(14)B

2.填空题.

(1)标准库函数自定义函数(若从函数的形式上,有参无参

(2)顺序类型

(3)定义调用

(4)①fmax(a,N)②k=p(注意非s[k]=s[p])

(5)@age(n-1)+2②age(n)

(6)①prt(c,n-l)②prt('\n-i)③prt('*',2*i-l)

3.程序分析题.

(1)h1o

(2)3

(3)26

(4)21

(4)525

7.4编程题

①编写一递归函数求斐波纳契数列的前40项。

解:

1.#include<stdio.h>

intfib(intn)

(

if(n==l||n==2)

return1;

returnfib(n-1)+fib(n-2);

)

intmain()

(

intn;

n

scanf(%d"z&n);

printf("%d\n",fib(n));

return0;

}

①编写程序,输入长方体的长宽高求体积及三个面l*w,l*h,w*h的面积。

#include<stdio.h>

voiduboid(float1,floatw,floath)

(

printf("体积=%.215”,1*亚*11);

printf("l*w=%.2f\n",l*w);

printf(”l*h=%.2f\n”,l*h);

printf(',h*w=%.2f\n",h*w);

)

intmain()

(

floatll,ww,hh;

scanf(,,%f%f%f',&ll,&ww,&hh);

uboid(ll,ww,hh);

return0;

①编写程序,使给定的一个5x5的二维整型数组转置,即行列互换。

#include<stdio.h>

intmain()

(

inta[5][5],b[5][5],i,j;

for(i=0;i<5;i++)

(

for(j=0;j<5;j++)

(

scanf("%d",&a[i][j]);

b[j][i]=a[i][j];

for(i=0;i<5;i++)

(

for(j=0;j<5;j++)

printf(',%d\b[i][j]);

printf(n\n");

}

return0;

①编写程序,输入一个十六进制数,输出相应的十进制数。

#include<stdio.h>

intmain()

{

longintfunc(chars[]);

charstr[100];

charc;

inti=0;

intflag,flagl;

flag=0;

flagl=l;

printf(ninputahexnumber:n);

while((c=getchar())!='\0'&&i<100&&flagl)

(

if((c<='91&&c>='0T)||(c<=1F'&&c>=*A')||(c<='f*&&c>=,a1))

{

flag=l;

str[i++]=c;

)

elseif(flag)

{

str[i]=*\0';

printf("decimalnumber%ld:\n",func(str));//

printf("Continueornot?”);

c=getchar();

if(c=='n,||c=='N1)

flagl=0;

elseif(c==,y'||c==fY')

(

flag=0;

i=0;

printf("\npleaseinputahexnumber:");

}

)

)

)

longintfunc(chars[])

{

longintnum=0;

inti=0;

for(i=0;s[i]!='\0*;i++)

{

if(s[i]>=,0,&&s[i]<=,9,)//字符串!!!!!!

num=num*16+s[i]-101;

elseif(s[i]>=,a,&&s[i]<=,f)

num=num*16+s[i]-*a'+10;

elseif(s[i]>=,A'&&s[i]<=,F,)

num=num*16+s[i]-1A*+10;

}

returnnum;

)

①编写程序,使输入的一个字符串按反序存放。

#include<stdio.h>

#include<string.h>

intmain()

(

chara[100];

gets(a);

intl=strlen(a);

inti;

for(i=l-l;i>=0;i­)

nn

printf(%cza[i]);

return0;

)

习题八

8.1选择题

(1)C(2)B(3)A(4)C(5)A(6)C(7)B(8)D(9)A(10)B(11)C(12)D(13)C(14)A(15)D

8.2填空题

①返回值为指针的函数f指向一个函数的指针

②地址变量

③0

④int*z

⑤*(p+5)

⑥a+i&a[i]*(a+i)

⑦*(a+i)+j&a[i]|j]

指向数组的指针数组开头的集合

@4

⑨指针的数组

(10)指针的数组指向数组4元素的指针

8.3程序设计

①编写一个程序计算一个字符串的长度。

#include<stdio.h>

intcompute(char*p)

(

intsum=0;

while(l)

(

if(*p!='\0')

(

sum++;

p=p+l;

)

elsebreak;

)

returnsum;

)

voidmain()

(

chara[1000];

intlenght;

scanf("%s",&a);

lenght=compule(a);

printf("字符串的长度是:%d\n",lenght);

〃在储存字符数组时,以\0为结尾标志,可以利用这个特点。

②编写一个程序,当键盘输入整数为1到12时,解释显示相应的英文月份名,键入其它整数时显示错误信

息。

#include<stdio.h>

voidmain()

(

intnum;

scanf("%d”,&num);

switch(num)

(

case1:printf("January\nM);break;

case2:printf("Februaiy\n");break;

case3:printf("lMarch\n*');break;

case4:printf("April\n");break;

case5:printf("May\n");break;

case6:printf("June\n");break;

case7:printf("July\n");break;

case8:printf("August\n");break;

case9:printf("September\n',);break;

case10:pnntf("October\n");break;

case11:printf("November\n");break;

case12:printf("December\n");break;

default:printf("ERRO\nn);

}

}

〃简单switch用法

③编一程序,将字符串software赋给一个字符数组,然后从第一个字母开始间隔地输出该串。请用指针完

成。

#include<stdio.h>

voidmain()

(

chara[]="software";

inti;

fbr(i=0;i<8;i=i+2)

printf(n%c",*a+i);

printf("\n^^);

)

④编一程序,将字符串中的第m个字符开始的字符子串复制成另一个字符串。要求在主函数中输入字符串

及m的值并输出复制结果,在被调函数中完成复制。

#include<stdio.h>

#include<string.h>

voidcopy(char*p,intlenghtjntm,char*p2)

inti;

for(i=0;i<=lenght;i++)

*(p2+i)=*(p+i+m-1);

)

voidmain()

(

chara|1000|;

chara2[1000];

char*p3;

intlen;

intm;

inti;

gets(a);

scanf(n%d",&m);

len=strlen(a);

copy(a,len,m,a2);

温馨提示

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

评论

0/150

提交评论