《浙工大C语言课本习题答案》.docx

上传人:b****6 文档编号:6951499 上传时间:2023-01-13 格式:DOCX 页数:22 大小:28.32KB
下载 相关 举报
《浙工大C语言课本习题答案》.docx_第1页
第1页 / 共22页
《浙工大C语言课本习题答案》.docx_第2页
第2页 / 共22页
《浙工大C语言课本习题答案》.docx_第3页
第3页 / 共22页
《浙工大C语言课本习题答案》.docx_第4页
第4页 / 共22页
《浙工大C语言课本习题答案》.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

《浙工大C语言课本习题答案》.docx

《《浙工大C语言课本习题答案》.docx》由会员分享,可在线阅读,更多相关《《浙工大C语言课本习题答案》.docx(22页珍藏版)》请在冰豆网上搜索。

《浙工大C语言课本习题答案》.docx

《浙工大C语言课本习题答案》

《浙工大C语言课本习题答案》

C程序设计习题参考答案

习题一.................................................................................................2习题二.................................................................................................3习题三.................................................................................................5习题四.................................................................................................8习题五...............................................................................................14习题六...............................................................................................17习题七...............................................................................................20习题八...............................................................................................26习题九...............................................................................................33习题十...............................................................................................35习题十一..........................................................................................36

1

习题一

1.填空题

⑴计算机程序设计语言按其发展可分为三类,即机器语言、汇编语言和高级语言。

⑵C程序是函数构成的,一个C程序中至少包含1个main函数。

因此,函数是C程序的基本单位。

⑶C程序注释是/*和*/所界定的文字信息组成的。

⑷函数体一般包括函数首行和函数体。

⑸在任何C程序中都必须且只能有一个主函数,主函数名必须为main。

2.判断下列各个叙述的正确与否

⑴C程序的执行总是从该程序的main函数开始,在main函数最后结束【√】⑵C程序的注释部分可以出现在程序中任何位置,它对程序的编译和运行不起任何作用,但可以增加程序的可读性【√】

⑶“/*”与“*/”界定的注释必须在同一行【╳】⑷通过了编译、连接的程序就是正确的程序【╳】⑸有计算结果输出的程序一定是正确的程序【╳】⑹编译错误是语法错误,运行结果错误是逻辑错误【√】

⑺编译时在信息窗口出现包含“error”的信息,说明程序存在警告性错误【╳】⑻源程序每次修改后,都必须重新编译、连接【√】3.简答题

⑴算法的含义、特点是什么?

解答:

算法是解题方法的精确描述。

有穷性、确定性、有多或零个输入、有1或多个输出、有效性。

⑵写出一个C程序的基本结构。

编译预处理命令、注释、1个main和若干个自定义函数构成,函数格式如下:

  函数类型函数名(类型标识符形参,类型标识符形参,...)  {类型声明语句;执行语句部分;}

⑶写出在你使用的计算机系统上,进入C环境以及运行、调试程序的简要步骤。

⑷输入x后计算其正弦值的源程序如下。

编译信息是否表示有致命性错误?

应如何修改?

解答:

致命性错误为第6行函数sin未声明,应加入编译预处理命令#include4.编程题

⑴请上机调试、运行本章课本上C语言程序例题4~6

2

⑵仿照例6编程,输入两个变量后,输出其中较大的值。

  #include  voidmain()  {inta,b;

printf(\请输入A,B的值:

\\n\  scanf(\

if(a>b)printf(\  }

⑶仿照例题编程,输入圆柱体的半径和高,计算并输出圆柱体的体积。

  #include  voidmain()

{floatr,h,v;

printf(\请输入半径、高的值:

\\n\  scanf(\  v=r*r**h;  printf(\  }

习题二

1.将下列程序上机运行,写出你所使用的C语言处理系统中short、int以及long类型数据的字长和数值范围。

#include  voidmain()

{printf(\类型数据的字长为:

%d\\n\  printf(\类型数据的字长为:

%d\\n\  printf(\类型数据的字长为:

%d\\n\  }

解答:

VC++环境下,分别为2、4、4

2.仿照题1编程,测试float、double类型数据的字长。

  #include  voidmain()

{printf(\类型数据的字长为:

%d\\n\  printf(\类型数据的字长为:

%d\\n\  }

3.判断下列各个叙述的正确与否。

⑴C的long类型数据可以表示任何整数【╳】⑵任何变量都必须要声明其类型【√】

⑶C的任何类型数据在计算机内都是以二进制形式存储的【√】⑷scanf函数中的格式符“%d”不能用于输入实型数据【√】

⑸格式符中指定宽度时,从缓冲区中读入的字符数完全取决于所指定的宽度【√】⑹按格式符“%d”输出float类型变量时,截断小数位取整后输出【╳】⑺按格式符“%”输出i时,输出结果为【╳】

3

⑻scanf函数中的格式符“%f”能用于输入double类型数据【╳】4.指出下列各项中那些是C的常量,对合法的C常量请同时指出其类型。

10,150  007  -0x3d  π  1e0  e1  o7o8'x'  'xo'  sin(3)  0xf16  \+2  '\\\\'  'a'

解:

007整型,-0x3d整型,1e0实型,'x'字符型,0xf16整型,\字符串  '\\007'字符型,+2实型,实型,'\\\\'字符型,'a'字符型5.指出下列各项中那些是C的标识符。

x_1  X_2  High  printf  β  3DS  i/je2  -e2  count  Int  number$23  next_解:

x_1、X_2、High、e2、count、Int、number、next_6.根据条件,写出下列各题的输出结果。

⑴inti=234,j=567;函数printf(\的输出结果是234567。

⑵inti=234;floatx=-;

函数printf(\的输出结果是i=234x=-。

float

alfa=60,pi=;

printf(\

的输出结果是sin(60*/180)。

⑷charch='$',floatx=;

函数printf(\的输出结果是$\\n。

⑸intd=27;函数27,34,1b。

float

x1=,x2=-;

printf(\

x(%d)=%.2f\\n\

的输出结果是x

(1)=x

(2)=-

7.根据下列条件写出变量i1、c1、f1、d1的当前值。

⑴执行scanf(\时输入52$后。

  i1为52,c1为'$',f1为,d1为

⑵执行scanf(\时输入52$后。

  i1为52,c1为'9',f1为,d1为

8.下列源程序输入x、y后,输出x的y次方。

运行时无编译、连接错误,但输入不同格式的两组数据输出结果却不同,哪一组是对的?

请说明原因。

解答:

第1组输入数据错误,因为格式串中有“,”所以键盘输入数据x、y之间也一定以逗号为间隔符。

printf(\的输出结果是

4

9.写出下列程序运行时输入345的输出结果。

  #include  #include  输出结果:

边长为,,的三角形面积为  voidmain()

{floata1,a2,a3,s,d;

scanf(\  s=(a1+a2+a3)/2;

s=sqrt(s*(s-a1)*(s-a2)*(s-a3));

printf(\边长为%.2f,%.2f,%.2f的三角形面积为:

%-\\n\}10.编程题

⑴编程,用getchar函数接收2个字符,用putchar函数输出这2个字符。

解答:

#include  voidmain()  {charx;

x=getchar();putchar(x);  x=getchar();putchar(x);  }

⑵编程,用scanf函数输入1个10进制整数、1个单精度浮点数、1个双精度浮点数,并通过printf函数把输入的3个数分别输出。

解答:

#include  voidmain()

{intk;floatx;doubled;  scanf(\  printf(\  }

⑶编程,输入1个整数,然后分别以8进制、10进制、16进制形式输出该数。

解答:

#include  voidmain()

{intx;scanf(\

printf(\  }

习题三

1.根据下列数学式,写出C的算术表达式。

?

(a2?

b)?

y342?

10tan?

125?

ba?

6b?

5?

c?

d5

x?

?

⑵函数f10_2可以显示形参变量所对应的二进制形式。

下列程序的两行显示结果分别为“1011”、“100011”。

#include  voidf10_2(intn)

{if(n==0)return;else{

f10_2(n/2);  printf(\}  }

voidmain()

{f10_2(11);putchar('\\n');  f10_2(35);putchar('\\n');  }

4.根据下列各小题题意编程。

⑴编制函数,返回三个变量中的最大值。

解答:

floatf(floata,floatb,floatc)  {floatmax;

max=(max=a>b?

a:

b)>c?

max:

c;  returnmax;  }

⑵编制函数,判断一个整数a是否是区间[1,b]之间的素数。

解答:

intf(inta,intb)  {inti;

if(a>b||afor(i=2;i⑶编写函数,其返回值为整数n从右边开始的第k位数字的值。

如digit(231456,3)返回4,digit(1456,5)返回0。

解答:

intf(intn,intk)  {inti;

for(i=1;i⑷输出1~1000之间的所有完数。

要求自定义一个函数,功能是判断某个正整数是否为完数,如果是完数,函数返回值为1,否则为0。

解答:

#include  intf(intn)  {inti,y=1;

for(i=2;i16

voidmain(}  {inti;

for(i=1;i⑸定义函数,形参为两个int类型变量,功能是显示这两个数的最大公约数和最小公倍数。

解答:

voidf(intx,inty)  {inta=x;

while(a%y!

=0)a+=x;

printf(\最小公倍数%d,最大公约数%d\\n\  }

⑹多项式p(n,x)定义如下,编写递归函数求该多项式的值。

解答:

doublep(intn,doublex)  {if(n==0)return1;

elseif(n==1)returnx;

elsereturn((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;  }

习题六

1.单项选择题

⑴程序中调用了库函数exit,必须包含头文件【D】

A、  B、  C、  D、⑵程序中调用了库函数strcmp,必须包含头文件【B】

A、  B、  C、  D、⑶下列宏定义命令中,哪一个格式是正确的【C】

A、#definepi=;  B、definepi=C、#definepi  D、#definepi();⑷定义带参数的宏计算两个表达式的乘积,下列定义中正确的是【C】A、#definemuit(u,v)u*v  B、#definemuit(u,v)u*v;C、#definemuit(u,v)(u)*(v)  D、#definemuit(u,v)=(u)*(v)⑸宏定义为“#definediv(a,b)a/b”,对语句

“printf(\”作宏替换后为【A】A、printf(\、printf(\C

printf(\

D

printf(\

2.填空题

⑴定义一个带参数的宏,若变量中的字符为大写字母则转换成小写字母  #defineutol(ch)ch=ch>='A'&&ch、

17

⑵定义一个带参数的宏,将两个参数的值交换  #defineswap(a,b){doublet;t=a;a=b;b=t;}

⑶函数f定义如下,执行语句“m=f(5);”后,m的值应为8。

  intf(intk)

{if(k==0||k==1)return1;  elsereturnf(k-1)+f(k-2);  }

⑷函数f定义如下,执行语句“sum=f(3)+f(3);”后,sum的值应为6。

  intf(intm)

{staticinti=0;  ints=0;

for(;i⑸对下列函数f,f(f(4))的值是5。

  intf(intx)

{staticintk=0;  x+=k++;returnx;  }

3.写出下列程序的输出结果

程序⑴#include  #defineSx=y=z

#defineP3(x,y,z)printf(\  voidmain()  {intx,y,z;

S=1;++x||++y||++z;P3(x,y,z);  S=1;++x&&++y||++z;P3(x,y,z);  S=-1;++x||++y&&++z;P3(x,y,z);  S=-1;++x&&++y&&++z;P3(x,y,z);  }

输出结果为x=2y=1z=1   x=2y=2z=1

x=0y=0z=-1  x=0y=-1z=-1

程序⑵#include

intfunc1()

{staticints=1;  s+=2;returns;  }

intfunc2()

{ints=1;s+=2;returns;}  voidmain()  {inti;

for(i=0;i18

printf(\  }

输出结果为func1=3  func1=5   func2=3  func2=3

程序⑶#include

inti=1,reset(),next(int),last(int),New(int);  voidmain()  {inti,j;  i=reset();

for(j=1;j printf(\

 printf(\  printf(\

 printf(\  }  }

intreset()   输出结果为i=1,j=1  {returni;}    next

(1)=1  intnext(intj)    last

(1)=10  {returnj=i++;}    new(1+1)=12  intlast(intj)    i=1,j=3  {staticinti=10;   next

(1)=2  returnj=i--;    last

(1)=9  }      new(1+2)=13  intNew(inti)    i=1,j=3  {intj=10;    next

(1)=3  returni=j+=i;    last

(1)=8  }      new(1+3)=14

4.根据下列各小题题意编程。

⑴编程,输入3个数后输出其中绝对值最小的数。

要求定义带参数的宏,计算两个数中绝对值最小的数。

解答:

#include  #include

#definemin(a,b)fabs(a){floata1,a2,a3,x;

scanf(\

x=min(a1,a2);x=min(x,a3);printf(\  }

⑵编程,用梯形公式求函数f(x)=x-sinx在[0,1]区间的定积分,要求用带参数的宏定义函数f(x)的计算公式。

解答:

#include  #include

#definef(x)(x)*(x)-asin(x)

2

-1

19

voidmain()

{doublex=0,y=0;

for(inti=1;i习题七

1.单项选择题

⑴下列数组声明语句中,正确的是【C】

A、inta={1,2,,4,5};  B、chara[5]={A,B,C,D,E};C、inta[5]={1,2};  D、chara[5]=\

⑵数组声明语句为“inta[6];”,输入数组所有元素的语句应为【B】A、scanf(\

B、for(inti=0;i⑶数组声明语句为“floata[3][4];”,引用第3行第1列的元素写作【A】A、**(a+2)  B、*(*a+2)  C、a[3][1]  D、*(a[3]+1)⑷初始化多维数组的语句中,可以缺省的是【B】

A、最后1个下标界B、第1个下标界C、第2个下标界D、以上都不对⑸数组声明为“inty[4][3];”,表达式“*(y+2)+2-*y”的值为【D】A、10  B、20  C、16  D、8⑹数组声明为“charstr1[20]=\”,  调用函数“strcpy(str1,str2);”后,字符串str1的串长是【C】A、13  B、15  C、6  D、7⑺数组声明为“charstr1[20]=\”,  调用函数“strcat(str1,str2);”后,字符串str1的串长是【A】A、13  B、15  C、6  D、7⑻表达式“strcmp(\”的值为【C】A、0  B、3  C、1  D、-3

2.填空题。

⑴未初始化的int类型数组,其各元素的值是0。

⑵初始化时没有被赋值的字符类型数组元素,它们的值为'\\0'。

⑶数组声明为“inta[6];”,数组元素a[1]是否又可以写作“*(a++)”?

  原因是不可以,数组名不可改变。

⑷引用二维数组a第i行、j列的元素,可以写  作*(*(a+i-1)+j-1)或a[i-1][j-1]。

⑸数组声明为“inta[6][6];”,表达式“*a+i”是指第1行第i+1个元素的地址、“*(a+i)”是指第i+1行第1个元素的地址、“**a”又是指a[0][0]。

⑹数组声明为“floatx[7][5];”,若x[6][4]是内存中从x[0][0]数起的第35个  元素,则x[4][4]是第25个元素。

20

⑺声明“charstr1[20]=\后,使字符串str1为\的赋  值表达式,应为str1[7]='\\0'。

⑻将包括空格在内的6个字符串输入到字符数组a[6][20]中,输入语句可以写作  for(i=0;i3.按照下列各题题意编程。

⑴输入平面上凸10边形各点x、y坐标,计算并输出各点之间距离之和。

解答:

#include  #include  voidmain()

{floatx[10],y[10],s=0;inti;

for(i=0;ifor(j=i+1;j s+=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));  printf(\  }

⑵编程,计算多项式a0+a1x+a2x+a3x+...+an-1x的和。

解答:

#include  voidmain()

{floata[30],x,y;inti,n,t;  scanf(\

for(i=0;ifor(i=1;i⑶输入n个数,按绝对值从小到大排序后输出。

解答:

#include  #include  voidmain()

{floata[20],temp;inti,j,k;

for(i=0;ik=i;for(j=i+1;jfor(i=0;i⑷输入一个5行、6列的数组,先以5行6列的格式输出该数组,然后找出该数组中值最小的元素、输出该元素及其两个下标值。

解答:

#include  voidmain()

{floata[5][6],min;inti,j,k,l;

2

3

n-1

21

for(i=0;ifor(j=0;jmin=a[0][0];k=0;l=0;

for(i=0;iif(a[i][j]⑸输入一个5行、6列的数组,将每1行的所有元素都除以该行上绝对值最大的元素,然后输出该数组。

解答:

#include  #include  voidmain()

{floata[5][6],max;inti,j;

for(i=0;ifor(j=1;jfabs(max))max=a[i][j

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

当前位置:首页 > 解决方案 > 解决方案

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

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