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

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

if( &&a!=b)

printf(\ } }

解:a%i==0 c=1; c==a

6.计算2+22+222+2222+?+22+?+2的和。

n #include n

void main()

{ int s=1,t=1,a,n; scanf(\

for(int i=2;i<=n;i++) { t=t*10+1; }

printf(\}

解:a=2; s+=t; s*=a;

四、编程题

1.输入一个实数,输出它的平方根值,如果输入数小于0,则输出“The number is error!”的提示。

解:#include

#include void main() {

double a,x;

printf(“Input data:\\n”); scanf(“%lf”,&a); if(a>=0){

x=sqrt(a);

printf(“%g的平方根值为%g\\n”,a,x); }

else

printf(“The number is error!\\n”); }

2.用if语句编程序,输入x后按下式计算y值,并输出结果。

2

x+2*x +10 0≤x≤8

y= x-3*x3-9 x<0 或 x>8 解:#include

void main() {

double x,y;

15