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

if (n==0) return ; else{ print(n/10); printf(\ return ;

} }

A.5 3 7 8 B.8 7 3 5 C.3 5 7 8 D.8 7 5 3

*6.根据下面函数f,选出f(f(3))的值是( )。

int f(int x)

{

static int k=0; x=x+k;

k--;

return x; }

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

#include

int f1(int,int),f11(int); void f2(int); void main() {

int i,j;

for(i=0;i<5;i++) { f2((5-i)*3);

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

printf(\ putchar('\\n'); } }

int f1(int m,int n) {

return f11(m)/f11(n)/f11(m-n); }

int f11(int k) {

if(k<=1)

return 1;

return k*f11(k-1); }

void f2(int n) {

for(int i=1;i<=n;i++) putchar(' ');

}

解: 1 1 1 1 2 1

28

D.4

(6)C 1 3 3 1 1 4 6 4 1 *2.

#include int f(int m,int n) {

if(m%n==0) return n;

else return f(n,m%n); }

void main() {

printf(\

}

解:24 3.

#include

void fun(int a,int b,int c,int add,int mult) {

add=a+b+c; mult=a*b*c;

printf(\}

void main() {

int x,y; x=y=0;

fun(9,12,-4,x,y);

printf(\ }

解:add=17 mult=-432

add=0 mult=0 4.

#include int add, mult;

void fun(int a,int b,int c,) {

add=a+b+c; mult=a*b*c;

printf(\}

void main() {

fun(9,12,-4);

printf(\ }

解:add=17 mult=-432

add=17 mult=-432 5.

#include int a;

void main() {

int i;

void fun();

29

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