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

内容发布更新时间 : 2024/5/3 14:48:45星期一 下面是文章的全部内容请认真阅读。

for(i=1;i<=4;i++){ a++;

printf(\ fun(); } }

void fun() {

int a=0;

a++;

printf(\}

解:In main: a= 1In fun:a=1

In main: a= 2In fun:a=1 In main: a= 3In fun:a=1 In main: a= 4In fun:a=1 6.

#include void main() {

int x=2,i; int f(int x);

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

printf(\}

int f(int x) {

int y=0; static z=0;

y++; z++;

return(x+y+z); }

解: 4 5 6

三、程序填空题

1.输入若干个正整数,判断每个数从高位到低位各位数字是否按值从小到大排列。其中input()返回输入的数据,且保证输入的数据是一个正整数。fun1()函数是判断正整数n是否按数字从小到大排列。

#include int input();

int fun1(int m); void main() {

int n;

if(fun1(n)==1)

printf(\中各位数字按是从小到大排列\\n\}

int input()

30

{

int n;

printf(\请输入n:\\n\ scanf(\ if (n>0) ; do{

printf(\必须正整数,请重新输入 n:\\n\ scanf(\ }while(n<0); return n; }

int fun1( ) {

int k;

k=m;

while(m!=0)

if( m/10>k) return 0; else { k=m;

}

return 1; }

解:n=input(); return n int m m=m/10

2.输入一个末尾数非0的正整数,输出它的逆序数。其中,input是数据输入函数,reverse是数据逆序函数。

#include long input();

long reverse(long n); void main() {

int n;

n=input();

printf(\逆序数是:%d\\n\}

long input() {

long n;

printf(\请输入n:\\n\ scanf(\

if ( ) return n ; do{

printf(\必须正整数,且末尾数非0,请重新输入 n:\\n\

}while(n<0||n==0); return n; }

long reverse(long n) {

long k=0; while(n){ n/=10; }

31

return k; }

解:reverse(n) n>0&&n!=0 scanf(“%d”,&n) k=k*10+n 五、编程题

1.输入一个x,输出下面分段函数f(x)的值。要求将分段函数的计算定义成函数。

?1? f(x)??0??1?x?0x?0 x?0解:#include

int f(double x) // 函数定义 {

int y=0;

if(x>0) y=1;

else if(x==0) y=0; else

y=-1; return y; }

void main() {

double x; int y;

scanf(“%lf”,&x); y=f(x); // 函数调用

printf(\}

2.输入一个正整数,输出该数的各个数字之和。要求编写函数,计算整数的各个数字之和。

解:#include

int sum(int a) {

int s=0;

while(a!=0){ s+=a; a=a/10; }

return s; }

void main() {

int x;

scanf(“%d”,&x);

printf(\}

3.编写函数,判断一个正整数a是否为完数,如果是完数,函数返回值为1;否则为0。(完数:一个数的所有因子之和等于该本身,如6、28都是完数;6=1+2+3;28=1+2+4+7+14。)

32

解:#include

int wanshu(int n) {

int i,a=0;

for(i=1;i<=n/2;i++) if(n%i==0) a+=i;

if(a==n) return 1; else return 0; }

void main() {

int n;

scanf(“%d”,&n); if(wanshu(n)==1)

printf(\是完数\\n\ else

printf(\不是完数\\n\}

4.输入三个数,输出它们的最小值。要求定义一个函数,返回两个数的最小值。

解:#include

double min(double x,double y) { if(x

void main()

{ double a,b,c,m;

printf(\

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

printf(“最小数:%f\\n\}

5.在主函数中输入字符c和m,调用函数prn,连续将字符c输出m次。定义函数prn,完成连续将某个字符c输出m次后换行。

解:#include

void prn(char,int); // 函数声明 void main() {

char c; int m;

printf(“Input c m:\\n”);

scanf(“%c%d”,&c,&m); prn(c,m); }

void prn(char c,int m) {

int i;

for(i=1;i<=m;i++) putchar(c); printf(“\\n”);

33

}

6.输入一个年、月、日输出它是这年的第几天。要求定义函数,根据年月日计算是第几天的函数。

解:#include

int days(int year,int month,int date) { int d=date;

switch(month-1) { case 11: d+=30; case 10: d+=31;

case 9: d+=30; case 8: d+=31; case 7: d+=31; case 6: d+=30; case 5: d+=31; case 4: d+=30; case 3: d+=31; case 2:

if((year%4==0&&year0!=0)||(year@0==0)) d+=29;

else d+=28; case 1: d+=31; }

return d;

}

void main()

{ int year,month,date; int d;

printf(“请输入 年 月 日:\\n”);

scanf(\

d=days(year,month,date);

printf(\月%d日是%d年的第%d天!\month,date,year,d); }

7.定义一个函数将正整数n转换成文字形式输出星期几(n值0~6分别转换成星期天,星期一,?,星期六)。

解:#include void week(int n) { switch(n)

{ case 0: printf(“星期天”); break; case 1: printf(“星期一”); break; case 2: printf(“星期二”); break; case 3: printf(“星期三”); break; case 4: printf(“星期四”); break; case 5: printf(“星期五”); break; case 6: printf(“星期六”); break; } }

void main() { int num;

printf(“请输入一个整数0~6:\\n”);

scanf(\

week(num); }

7.输入一个整数n,计算3.2n的值。要求定义函数计算xn 值。

解:#include

34