2C语言书的参考答案.docx

上传人:b****8 文档编号:28150120 上传时间:2023-07-08 格式:DOCX 页数:44 大小:25.70KB
下载 相关 举报
2C语言书的参考答案.docx_第1页
第1页 / 共44页
2C语言书的参考答案.docx_第2页
第2页 / 共44页
2C语言书的参考答案.docx_第3页
第3页 / 共44页
2C语言书的参考答案.docx_第4页
第4页 / 共44页
2C语言书的参考答案.docx_第5页
第5页 / 共44页
点击查看更多>>
下载资源
资源描述

2C语言书的参考答案.docx

《2C语言书的参考答案.docx》由会员分享,可在线阅读,更多相关《2C语言书的参考答案.docx(44页珍藏版)》请在冰豆网上搜索。

2C语言书的参考答案.docx

2C语言书的参考答案

习题1

1-1填空题

1. 函数

2. 主函数main(),主函数main()

3. 主函数main()

4. 函数首部,函数体

5. {,}

6. 顺序结构,选择结构,循环结构

7. .c,.obj,.exe

1-2思考题

1. 结构化程序设计是指:

为使程序具有一个合理的结构以保证程序正确性而规定的一套如何进行程序设计的原则。

顺序结构,选择结构,循环结构

2. 算法是对具体问题求解步骤的一种描述。

计算机算法的表达工具通常采用以下几种方法:

(1)用自然语言表示算

(2)用流程图表示算法(3)用伪代码表示算法(4)用程序设计语言表示算法

3. 语言简洁、紧凑,使用方便、灵活;支持结构化程序设计;运算符丰富;数据类型丰富;较强的编译预处理功能;C语言的可移植性好;C语言本身既有一般高级语言的优点,又有低级(汇编)语言的特点;语法限制不太严格,程序设计自由度大。

1-3编程题

1.

main()

{floata=10,b=20,h=5,s;或者使用输入函数完成a,b,h值的输入。

s=(a+b)*h/2;

printf(“area=%f”,area);

}

2.

main()

{printf(“******************************”);

printf(“*helloworld*”);

printf(“******************************”);

}

习题2

2-1单选题

1~5DBDCA6~10DCABB11~12CA

2-2填空题

1.2.00000

2.1,0.5

3.9,2

4.6

5.100,d

6.

(1)20

(2)0(3)60

7.

(1)10,6,4

(2)6,9,15(3)3,60,83

8.55或‘7’

习题3

3-1单选题

1-5 BDABC6-10 ADCAC11-12 BB

3-2填空题

1. 3

2. 0261

3. 0x10

4.2,1 互换a,b的值

5. 6.6

6. –03

7. 5.0,4,c=3

8. i=10,j=20

9. 

(1)65

(2)65,A

(3)56.123400,123.456001

(4)3.141600

(5)8765.432

(6)5.86400e+02

(7)3.14160e+00

(8)3.1416

(9)8765

(10)3.1416,8765.43

10. a=2b=5x=8.8y=76.34c1=65c2=97

3-3编程题

1.

main()

{intx,y;

scanf(“%d%d”,&x,&y);

printf(“xy\n”);

printf(“%4d%4d\n”,x,y);

printf(“%4o%4o\n”,x,y);

printf(“%4x%4x\n”,x,y);

}

2.

main()

{charc;

scanf(“%c”,&c);

printf(“%c,%c,%c\n”,c-1,c,c+1);

}

3.

main()

{inta,a1,a2,a3;

scanf(“%d”,&a);

a1=a%10;a=a/10;

a2=a%10;a=a/10;

a3=a%10;

printf(“%d%d%d\n”,a1,a2,a3);

}

4.

main()

{doublea,b,c,ave;

scanf(“%lf%lf%lf”,&a,&b,&c);

ave=(a+b+c)/3;

printf(“%8.2f\n”,ave);

}

5.

main()

{inta,b,c,t;

scanf(“%d%d%d”,&a,&b,&c);

t=a;a=c;c=b;b=t;

printf(“a=%d,b=%d,c=%d\n”,a,b,c);

}

习题4

4-1单选题

1~5BADAD6~10ACBBB11~12BA

4-2填空题

1.1

2.

(1)a>0||b>0

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

(3)a==1.5&&b==1.5&&c==1.5(4)p

3.

(1)0

(2)1(3)1(4)0(5)1

4.max=(max=a>b?

a:

b)>c?

max:

c

5.-4

6.1

7.5,0,3

8.

(1)(a==0)

(2)(b==0)(3)(disc<0)

4-3编程题

1.#include“math.h”

main()

{floata,b,c,s,area;

scanf(“%f,%f,%f”,&a,&b,&c);

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

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

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

printf(“%f”,area);

}

}

2.main()

{intx,y;

scanf(“%d,%d”,&x,&y);

if(x*x+y*y>1000)

printf(“%d\n”,(x*x+y*y)/100);

else

printf(“%d\n”,x+y);

}

3.main()

{intx,

scanf(“%d”,&x);

if(x%3==0&&x%5==0&&x%7==0)

printf(“yes\n”);

else

printf(“no\n”);

}

4.#include“math.h”

main()

{floatx,y;

scanf(“%f”,&x);

if(x<-2)y=x*x-sin(x);

elseif(x<=2)y=pow(2,x)+1;

elsey=sqrt(x*x+x+1);

printf(“%f\n”,y);

}

5.程序分析:

main()

{

longge,shi,qian,wan,x;

scanf("%ld",&x);

wan=x/10000;

qian=x%10000/1000;

shi=x%100/10;

ge=x%10;

if(ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/

 printf("thisnumberisahuiwen\n");

else

 printf("thisnumberisnotahuiwen\n");

}

6.main()

{floatp,w,s,d,f;

scanf(“%f,%,%f”,p,s,w);

if(s>3000)d=0.15

elseif(s>=2000)d=0.1;

elseif(s>=1000)d=0.08;

elseif(s>=500)d=0.05;

elseif(s>=250)d=0.02;

elsed=0

f=p*w*s*(1-d);

printf(“%f”,f);

}

习题5

5-1单选题

1~5CDABA6~10AADDB11~14DBCB

5-2填空题

1.20

2.333

3.

(1)i<10

(2)j%3!

=0

4.

(1)flag*(float)k/(k+1)

(2)flag=-flag

5.

(1)max=x

(2)x!

=-1(3)scanf("%d",&x)

5-3编程题

1.

(1)main()

{inti;lonts=0;

for(i=1;i<=100;i++)

s+=i*i;

printf(“%ld”,s);

}

(2)main()

{inti=1;lontp=1;floats=0;

do{

s+=1.0/p;

p*=++i;

}while(1.0/p>1e-6)

printf(“%f”,s);

}

2.main()

{intm,n,t,a,b;

scanf(“%d,%d” ,&m,&n) ;

if(m

a=m;b=n;

t=m%n ;

while(t)

{m=n ;n=t ;t=m%n;}

printf(”%d,%d”,n,a*b/n);

}

3.main()

{intx,y,s=1;

scanf(”%d,%d ”,&x,&y) ;

for( ;y>0 ;y--)s*=x ;

printf(”%d,%d,%d\n ”,s%10,s/10%10,s/100%10);

}

 

4.main()

{intx,y,z;

for(x=1 ;x<20 ;x++)

for(y=1 ;y<33 ;y++)

{z=100-x-y ;

if(z>=0&&(5*x+3*y+z/3)-100<1e-5)

printf(”x=%d,y=%d,z=%d\n”,x,y,z) ;

}

}

5.

(a)main()

{intj,k;

for(j=1;j<=4;j++)

{for(k=1;k<=4-j;k++)printf("");

for(k=1;k<=4;k++)

printf("*");

printf("\n");

}

}

(b)main()

{intj,k ;

for(j=1 ;j<=4 ;j++)

{for(k=1;k<=4-j;k++)printf(””);

for(k=1 ;k<=2*j-1 ;k++)

printf(”*”) ;

printf(”\n”) ;

}

}

 

6.例如:

371是一个“水仙花数”,因为371=3的三次方+7的三次方+1的三次方。

程序分析:

利用for循环控制100-999个数,每个数分解出个位,十位,百位。

main()

{

inti,j,k,n;

printf("'waterflower'numberis:

");

 for(n=100;n<1000;n++)

 {

  i=n/100;/*分解出百位*/

  j=n/10%10;/*分解出十位*/

  k=n%10;/*分解出个位*/

  if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

   {

   printf("%-5d",n);

   }

 }

printf("\n");

}

习题6

6-1单选题

1-5 CBBAD6-10 DBCCD11-15 DCABC

6-2填空题

1. 120

2. x

3. 3,2,2,3

4.fac/i

5. 8,17

6. 9

7. 1.0/(i*i)

8. fun-in:

30,20,10

fun-end:

1015,35,1050

10,20,30

9. 012345

10.93636

6-3编程题

1.

voidzhuan()

{charch;

while((ch=getchar())!

=’\n’)

{if(ch>=’a’&&ch<=’z’)ch=ch-32;

putchar(ch);

}

}

2.

floatexpp(intn)

{intk,fac=1;

floatsum=0;

for(k=1;k<=n;k++)

{fac*=k;

sum+=1.0/fac;

}

return(sum);

}

3.

intxy3(intx,inty)

{intk,num=1;

for(k=1;k<=y;k++)

num*=x;

num=num%1000;

returnnum;

}

4.

intage(intn)

{intc;

if(n==1)c=10;

elsec=age(n-1)+2;

returnc;

}

习题7

7-1单选题

1-5 DBCCB6-8BDC

7-2填空题

1. c

2. 60

3. 1000 10

4. 16

7-3编程题

1.

#defineF(a)a*a+sqrt(3*a*a+2*a+1)

main()

{floatx,f;

scanf(“%f”,&x);

f=4.5/F(exp(x))+F(cos(x))+F(sqrt(x))/F(x*x);

printf(“%f\n”,f);

}

习题8

8-1单选题

1-5CADAC6-10CCDAB

11-15CBBCD

10000

01000

00100

00010

00001

8-2填空题

1

(1)1345

(2)10010(3)QuickC(4)(5)

2.

(1)j+=2

(2)a[i]>a[j]

3.

(1)r+b[k]

(2)*x

8-3编程题

1.#defineN10

main()

{inta[N]={1,2,3,4,5,6,7,8,9,0},osum=0,qsum=0,j;

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

if(j%2)qsum+=a[j];

elseosum+=a[j];

printf(“osum=%d,qsum=%d\n”,osum,qsum);

}

2.#defineN10

main()

{inta[N]={10,20,30,40,50,60,70,80,90},j,k,x;

scanf(“%d”,&x);

for(j=0;j

if(x

for(k=N-1;k>j;k--)

a[k]=a[k-1];

a[j]=x;

for(j=0;j

printf(“%d”,a[j]);

}

 

3.#defineM3

main()

{inta[M][M]={{1,2,3},{4,5,6},{7,8,9}},j,sum1=0,sum2=0;

for(j=0;j

{sum1+=a[j][j];

sum2+=a[j][M-(j+1)];

}

printf(“%d,%d\n”,sum1,sum2);

}

4.#defineM3

main()

{inta[M][M]={{1,2,3},{2,4,5},{3,5,6}},j,k,flag=1;;

for(j=0;j

for(k=0;k

if(a[j][k]!

=a[k][j]){flag=0;break;}

if(flag)printf(“ok”);

elseprintf(”NO”);

}

 

5.#include“string.h”

main()

{charc1[10],c2[10],j;

gets(c1);gets(c2);

for(j=0;(c1[j]==c2[j])&&c1[j]&&c2[j];j++);

printf(“%d\n”,c1[j]-c2[j]);

}

6.#include”string.h”

#defineM3

#defineN80

main()

{chara[M][N],j,k,n[5]={0};

for(j=0;j

gets(a[j]);

for(j=0;j

for(k=0;a[j][k];k++)

if(a[j][k]>=’A’&&a[j][k]<=’Z’)n[1]++;

elseif(a[j][k]>=’a’&&a[j][k]<=’z’)n[2]++;

elseif(a[j][k]>=’0’&&a[j][k]<=’9’)n[3]++;

elseif(a[j][k]=’’)n[4]++;

else

n[5]++;

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

printf(“%4d”,n[j]);

}

习题9

9-1单选题

1-5DDACB6-10ACBAD

11-15CDABC

9-2填空题

1.

(1)2,1

(2)10#30#5#(3)FOUR,P(4)60

2.

(1)49

(2)2(3)2(4)75319(5)15(6)(7)15

 

1,1,1

1,1

3,3,3

3,3

(6)

 

10001

01010

00100

01010

10001

(7)

 

3.

(1)*x

(2)t

4.

(1)'\0'或0

(2)n++或n+=1或n=n+1

5.024

9-3编程题

1.按以下要求编写一个程序。

定义三个变量用于存放输入的三个整数;另定义三个指向整型变量的指针变量,并利用它们实现将输入的三个整数按由小到大的顺序输出。

main()

{

intn1,n2,n3;

int*pointer1,*pointer2,*pointer3;

printf("pleaseinput3number:

n1,n2,n3:

");

scanf("%d,%d,%d",&n1,&n2,&n3);

pointer1=&n1;

pointer2=&n2;

pointer3=&n3;

if(n1>n2)swap(pointer1,pointer2);

if(n1>n3)swap(pointer1,pointer3);

if(n2>n3)swap(pointer2,pointer3);

printf("thesortednumbersare:

%d,%d,%d\n",n1,n2,n3);

}

swap(p1,p2)

int*p1,*p2;

{intp;

p=*p1;*p1=*p2;*p2=p;

}

2.编写函数,得到两个整数相除的商和余数。

要求通过指针在函数间传递商和余数这两个数据。

main()

{inta,b,d ;floatc;

voidfun(inta,intb,float*c,int*d)

scanf(“%d,%d “,&a,&b);

fun(a,b,&c,&d);

printf(“%f%d”,c,d);

}

voidfun(inta,intb,float*c,int*d)

{if(b){*c=(float)a/b;*d=a%b;}}

3.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。

编写三个函数:

①输入10个数;②进行处理;③输出10个数。

main()

{voidinput(int*);voidoutput(int*);voidchuli(int*);

inta[10];

input(a);chuli(a);output(a);

}

voidinput(int*a)

{intj;

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

scanf(”%d”,a+j);

}

voidchuli(int*a)

{intj,minl=0,maxl=0;

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

{if(a[maxl]<*(a+j))maxl=j;

if(a[minl]>*(a+j))minl=j;

}

j=a[0];a[0]=a[minl];a[minl]=j;

j=a[9];a[9]=a[maxl];a[maxl]=j;

}

voidoutput(int*a)

{intj;

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

printf(”%d”,*(a+i));

}

4.按下列要求输入和输出下列数据阵列:

输入阵列如下:

1234

5678

9101112

输出阵列如下:

1211109

8765

4321

#defineM3

#defineN4

main()

{inta[M][N]={1,2,3,4,5,6,7,8,9,10,11,12},k,j,*p=a,t;

for(k=0,j=M*N-1;k

{t=*(p+k);*(p+k)=*(p+j);*(p+j)=t;}

for(k=0 ;k

{for(j=0 ;j

printf("%4d",a[k][j]);

printf(“\n”);

}

}

5.写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。

   

main()

{

intlen;

char*str[20];

printf("pleaseinputastring:

\n");

scanf("%s",str);

len=length(str);

printf("thestringhas%dcharacters.",len);

}

length(p)

char*p;

{

intn;

n=0;

while(*p!

='\0')

{

 n++;

 p++;

}

returnn;

}

6.请编写一个程序,运行时输出命令行参数的个数及参数名。

main(intargc,char*argv[])

{intk;

printf(“argc=%d”,argc);

for(k=1;k

printf(“%s”,argv[k]);

}

7.用指针数组操作将输入的5个字符串按由小到大的顺序。

#include“string.h”

main()

{

char*str1[5],ch[5][20],k;voidsort(char**);

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

{str1[k]=ch[k];

gets(str1[k]);}

sort(str1);

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

puts(str1[k]);

}

voidsort(char**str1)

{intk,j,t;char*c;

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

{t=k;

for(j=k+1;j<5;j++)

if(strcmp(*(str1+t),*(str1+j))>0)t=j;

c=*(str1+t);

*(str1+t)=*(str

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

当前位置:首页 > 自然科学 > 天文地理

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

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