C语言程序设计(第二版)习题参考答案1

内容发布更新时间 : 2024/5/8 17:28:12星期一 下面是文章的全部内容请认真阅读。

printf(“请输入一个实数\\n”); scanf(“%lf”,&x); y=x>=0?x:-x;

printf(“|%g|=%g\\n”,x,y); }

6.输入梯形的上底、下底和高,求梯形面积。

解:#include void main() {

double a,b,h,s;

printf(“请输入梯形的上底,下底,高\\n”); scanf(“%lf,%lf,%lf”,&a,&b,&h); s=(a+b)*h/2;

printf(“ 梯形面积=%f\\n”,s); }

7. 输入矩形的边长,求矩形面积。

解:#include void main() {

double a,b,s;

printf(“请输入矩形的长,宽\\n”); scanf(“%lf,%lf”,&a,&b); s=a*b;

printf(“ 矩形面积=%f\\n”,s); }

8. 已知等差数列的第一项为a,公差为d,求前n项之和,a、d、n由键盘输入。

解:#include void main() {

int a,d,n,sum;

printf(“请输入等差数列的首项 公差 项数\\n”); scanf(“%d%d%d”,&a,&d,&n); sum=a*n+n*(n-1)*d/2;

printf(“ sum=%d\\n”,sum); }

9. 编写程序,将d天h小时m分钟换算成分钟,输入d、h、m,输出换算结果。

解:#include void main() {

int d,h,m,t;

printf(“请输入天 小时 分钟\\n”); scanf(“%d%d%d”,&d,&h,&m); t=d*24*60+h*60+m;

printf(“%d天%d小时%d分钟=%d分钟\\n”,d,h,m,t); }

10

10. 编写程序,求出给定半径r的圆以及内接正n边形的面积,输出计算结果。r和n的值由键盘输入。

解:#include #include #define PI 3.14159 void main() {

double r,s1,s2; int n;

printf(“Input r n\\n”); scanf(“%lf%d”,&r,&n); s1=PI*r*r;

s2=n/2.0*r*r*sin(2*PI/n);

printf(“圆面积=%f,正内接%d边形面积=%f\\n”,s1,s2); }

习 题 4

一、单项选择题

1.下列语句将小写字母转换为大写字母,其中正确的是( )。

A.if(ch>='a'&ch<='z')ch=ch-32; B.if(ch>='a'&&ch<='z')ch=ch-32; C.ch=(ch>='a'&&ch<='z')?ch-32:' '; D.ch=(ch>'a'&&ch<'z')?ch-32:ch;

2.下列各语句中,能够将变量u、s中最大值赋给变量t的是( )。

A.if(u>s)t=u;t=s; B.t=s;if(u>s)t=u; C.if(u>s)t=s;else t=u D.t=u;if(u>s)t=s;

3.假设变量x、k都已定义,下列语句片段中,无语法错误的是( )。

A. switch(x){

case x>=90: putchar('A'); case x<60: putchar('E'); }

B. switch(x) {

case 1+2: k='A'; defualt: k='E'; case 2*4: k='B'; }

C. switch(x){

case 2+x: k=x-2; case 3*x: k=x+3; default: k=0; }

D. switch(x){

case 3.5: k=0.5*x; case 7.8: k=8*x; default: k=0; }

*4.与语句while(!s )中的条件等价的是( )。

11

A.s==0 B.s!=0 C.s==1

D.s=0

5.下列语句中,哪一个可以输出26个大写英文字母( )。

A.for(a='A';a<='Z';printf(\,++a)); B.for(a='A';a<'Z';a++)printf(\,a); C.for(a='A';a<='Z';printf(\,a++)); D.for(a='A';a<'Z';printf(\,++a));

6.判断下面的while循环体的执行次数( )。

i=0; k=10;

while( i=8 ) i=k––;

A.8次 B.10次 C.2次 D.无数次

解:(1) B (2) B (3) B (4) A (5) C (6) D 二、写出下列程序的输出结果 1.#include

void main() {

char x;

int n=0,k=0;

while((x=getchar())!='#'){ //运行时输入:a the ftheth e

there#

switch(x){

case 't': k++; break;

case 'h': if(k==1) k++; break; case 'e': if(k==2) k++; break; default: k=0; }

if(k==3) n++; } printf(\} 解:3

*2.

#include

void main( ) {

int k=0; char c='A';

do {

switch (c++) {

case 'A': k++; break; case 'B': k--;

case 'C': k+=2; break; case 'D': k=k%2; break; case 'E': k=k*10; break; default: k=k/3;

12

} k++;

}while(c<'G');

printf(\}

解:k=8

*3.

#include #include void main() {

char a,b,x; int i; do

x=getchar(); //运行时输入:2abcD while (isupper(x)==0);

for(a='A'; a<=x; a++){ for(b='A'; b<'A'+x-a; b++) putchar(' '); for(i=1;i<=2*(a-'A')+1;i++) putchar(a);

putchar('\\n'); } }

注:isupper(x)是判断x是否大写字母的函数,如果x是大写字母函数值为1

否则为0。

解: A BBB CCCCC

DDDDDDD 4.

#include void main() {

int i,n;

scanf(\输入2520 i=2;

while(n>1) if(n%i==0){

printf(\ n/=i; }

else i++; printf(\}

13

解: 2 2 2 3 3 5 7

三、填空题

1.求1~10的乘积,写作:

for( , i=1; i<=10; ++i) s*=i;

解: s=1

2.下面程序段执行后,x、y的值分别为 。

y=1; x=5;

while(x) { x--; y++; }

解: x、y分别为0和6

*3.输入若干个以问号结束的字符,同时输出这串字符(不包括问号);

while( !='?') putchar(ch);

解: (ch=getchar()) //注意外面的这对括号不能少

*4.有以下程序片段:

s=1.0;

for(k=1;k<=n; k++) s+=1.0/(k*(k+1)); printf(\填空,使下程序段与上程序段功能完全相同。

s=0.0;

; k=0; do

{ s+=d;

; d=1.0/(k*(k+1)); }

while( ); printf(\

解: d=1 k++ k<=n

5.下列程序输出6~10000之间的亲密数对,填空将程序补充完整。若a、b是亲密数对,则a的因子和等于b,b的因子和等于a,且a不等于b。

#include void main()

{ int a,b,c,i;

for(a=6;a<=10000;a++) { b=1;

for(i=2;i<=a/2;i++)

if( ) b+=i;

for(i=2;i<=b/2;i++) if(b%i==0) c+=i;

14

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi