当前位置:文档之家› c语言课后习题第7章函数

c语言课后习题第7章函数

c语言课后习题第7章函数
c语言课后习题第7章函数

习 题 7

7.1 已有变量定义和函数调用语句:int a=1,b=–5,c ;c=fun(a,b);fun 函数的作用是计算

两个数之差的绝对值,并将差值返回调用函数,请编写fun 函数。

Fun(int x,int y)

{ }

7.1 求两数之差绝对值

#include

fun(int x,int y)

{ return abs(x-y); }

main()

{ int a=1,b=-5,c;

c=fun(a,b);

printf("|%d-%d|=%d\n",a,b,c);

}

7.2 已有变量定义和函数调用语句:int x=57;isprime(x);函数isprime( );用来判断

一个整型数a 是否为素数,若是素数,函数返回1,否则返回0。请编写isprime 函数。 isprime(int a)

{ }

7.3 已有变量定义和函数调用语句int a ,b ;b=sum(a);函数sum()用以求∑=n

k k 1,和数作为

函数值返回。若a 的值为10,经函数sum 的计算后,b 的值是55。请编写sum 函数。 Sum(int n)

{ }

7.3 求∑k

#include

sum(int n)

{ int k,s=0;

for(k=1;k<=n;k++)

s=s+k;

return s;

}

main()

{ int a,b;

printf("Input a: "); scanf("%d",&a);

b=sum(a);

printf("%c(1,%d)=%d\n",228,a,b);

}

7.4 一函数,输入一行字符,将此字符串中最长的单词输出。

7.4 输出最长的单词,假设只包含字母和空格,单词间以空格分隔,空格个数不限#include

void fun(char a[])

{ int n,i,j,k=0,len[80],p;

char c[80][80],max[80];

n=strlen(a);

for(i=0;i

if(a[i]!=32) /*a[i]不为空格,说明单词开始了*/

{ j=0;

while(a[i]!=32) /*没有遇到下一个空格,说明单词没有结束*/

{ c[k][j]=a[i]; j++; i++; } /*将单词放入字符串c[k]*/

c[k][j]='\0'; /*人为加串尾标志*/

k++; /*k为下一个单词存入c的行号*/

}

for(i=0;i

len[i]=strlen(c[i]); /*求每行字符串的长度*/

p=0;

if(len[p]

/*找最长字符串的行号*/

printf("The word is : %s\n",c[p]);

}

main()

{ char a[80];

printf("Input a line string: "); gets(a);

fun(a);

}

7.5 一函数,输入一个十六进制数,输出相应的十进制数。

7.5 十六进制数转换成十进制数

#include

#include

int fun(char a[])

{ int i,n=0,m;

for(i=0;a[i];i++)

{ if(isalpha(a[i]))

/*如果a[i]是字母,求出相应的十进制数*/

switch(a[i])

{ case 'a':

case 'A': m=10; break;

case 'b':

case 'B': m=11; break;

case 'c':

case 'C': m=12; break;

case 'd':

case 'D': m=13; break;

case 'e':

case 'E': m=14; break;

case 'f':

case 'F': m=15; break;

default: printf("Input error!\n"); exit(0);

/*如果输入了不合法的字母,输出相应的信息*/ }

else if(isdigit(a[i])) /*如果a[i]是数字*/

m=a[i]-'0';

else { printf("Input error!\n"); exit(0); }

/*如果输入了不合法的字符,输出相应的信息*/ n=n*16+m; /*将十六进制数转换成十进制数*/ }

return n;

}

main()

{ char a[80]; int n;

printf("input: "); scanf("%s",a);

n=fun(a);

printf("output: %d\n",n);

}

7.6 给出年、月、日,计算该日是该年的第几天。#include

int fun(year,month,day)

{ int n=0,i;

n=n+day; /*累加当月的天数*/

for(i=month-1;i>0;i--) /*累加前面月份的天数*/

switch(i)

{ case 12: n=n+31;

case 11: n=n+30;

case 10: n=n+31;

case 9: n=n+30;

case 8: n=n+31;

case 7: n=n+31;

case 6: n=n+30;

case 5: n=n+31;

case 4: n=n+30;

case 3: n=n+31;

case 2: if(year%4==0&&year%100!=0||year%400==0)

n=n+28;

else n=n+29; /*根据year判断闰年或平年,进行累加*/

case 1: n=n+31;

}

return n; /*返回天数*/

}

main()

{ int year,month,day;

printf("Input year,month,day: "); scanf("%d%d%d",&year,&month,&day);

printf("%d.%d.%d is No.%d of a year.\n",year,month,day,fun(year,month,day));

}

7.7 定义一个函数digit(n,k),它回送整数n的从右边开始数第k个数字的值。例如:

digit(15327,4)=5

digit(289,5)=0

7.7 回送第k个数字

#include

int fun(long n,int k)

{ int i,m ;

for(i=1;i<=k;i++)

{ m=n%10; /*从右边分离出第i个数字*/

n=n/10; /*为下一次分离作准备*/

}

return m; /*返回第k次分离出的数字*/

}

main()

{ long int n; int k;

printf("Input n: "); scanf("%ld",&n);

printf("Input k: "); scanf("%d",&k);

printf("The No.%d number is %d.\n",k,fun(n,k));

}

7.8 计算s。已知

s=10!+7!*8!

将n!定义成函数。

#include

double fun(int n)

{ double f=1.0; int i;

for(i=1;i<=n;i++)

f=f*i; /*求n!*/

return f; /*返回阶乘值*/

}

main()

{ printf("10!+7!*8!=%g\n",fun(10)+fun(7)*fun(8)); }

7.9 定义一个函数,使给定的二维数组(3×3)转置,即行列转换,并输出。

7.9 矩阵转置

#include

void convert(int a[][3])

{ int i,j,t;

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

for(j=0;j

{ t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; }

} /*矩阵转置*/

main()

{ int a[3][3],i,j;

printf("Input 3*3 array: \n");

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

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

scanf("%d",&a[i][j]); /*读入数据*/

printf("before converted, output: \n");

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

{ for(j=0;j<3;j++)

printf("%4d",a[i][j]);

printf("\n");

} /*输出原始数据*/

convert(a); /*调用函数进行处理*/

printf("after converted, output: \n");

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

{ for(j=0;j<3;j++)

printf("%4d",a[i][j]);

printf("\n");

} /*输出转置后的数据*/

}

7.10 写几个函数:①输入10个职工的性名和职工号;②按职工号由小到大的顺序排序,

姓名顺序也随之调整;③要求输入一个职工号,用折半查找法找出该职工的姓名,从主函数输入要查找的职工号,输出该职工的姓名。

7.10 编写几个函数,分别实现输入、排序、查找

#include

#include

#define N 10

void input(char name[N][8],char no[N][8])

{ int i;

printf("Input %d name and No.\n",N);

for(i=0;i

scanf("%s%s",name[i],no[i]);

} /*输入每个人的姓名和学号*/

void sort(char name[N][8],char no[N][8])

{ char t[8]; int i,j,p;

for(i=0;i

{ p=i;

for(j=p;j

if(strcmp(name[p],name[j])>0) p=j;

if(p!=i)

{ strcpy(t,name[p]); strcpy(name[p],name[i]); strcpy(name[i],t);

strcpy(t,no[p]); strcpy(no[p],no[i]); strcpy(no[i],t);

}

}

} /*按姓名进行从小到大的排序,姓名进行交换的时候,

职工号也进行交换,以保证职工号跟着姓名走,以免打乱

对应的关系*/

void find(char name[N][8],char no[N][8],char No[8],char messge[8])

{ int low=0,high=N-1,mid;

while(low<=high)

{ mid=(low+high)/2;

if(strcmp(No,no[mid])>0) low=mid+1; /*向下找*/

else if(strcmp(No,no[mid])<0) high=mid-1; /*向上找*/

else { strcpy(message,name[mid]); return; } /*找到了,

就将对应的姓名存入find字符串*/

}

strcpy(message,"no find"); /*找不到,find字符串存入"no find"*/

}

main()

{ char name1[N][8],no1[N][8],No1[8],message1[8]; int i;

clrscr();

input(name1,no1); /*调用输入函数*/

printf("%d alerks are: \n",N);

printf("%10s%20s\n","name","No.");

for(i=0;i

printf("%10s%20s\n",name1[i],no1[i]); /*输出每个人的姓名和职工号*/ sort(name1,no1); /*调用排序函数*/

printf("after sorted: \n");

printf("%10s%20s\n","name","No.");

for(i=0;i

printf("%10s%20s\n",name1[i],no1[i]); /*输出排序后的姓名和职工号*/

printf("Input finded No. : "); scanf("%s",No1); /*输入要查找的职工号*/

find(name1,no1,No1,message1); /*调用查找函数,将找到的姓名放入find字符串*/ if(strcmp(message1,"no find")==0)

printf("No find.\n");

else

printf("The finded alerk is: %s\n",message1);

/*根据find的内容输出相应的信息*/

}

7.11 定义一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。

7.11 反序存放字符串

#include

void fun(char s[80])

{ int i,j,n; char c;

n=strlen(s); /求字符串长度,n也对应串尾标志*/

for(i=0,j=n-1;i

/*i表示前面的下标,j表示后面的下标*/

{ c=s[i]; s[i]=s[j]; s[j]=c; } /*首尾交换*/

}

main()

{ char s[80];

printf("Input a string: "); gets(s);

fun(s);

printf("converted, output: "); puts(s);

}

7.11 fun函数方法二

void fun(char s[])

{ int i,n=0; char c;

while(s[n]) n++; /*n对应串尾标志,同时也代表长度*/

for(i=0;i<=n/2;i++)

{ c=s[i]; s[i]=s[n-1-i]; s[n-1-i]=c; }

/*首尾交换,注意i的上界*/

}

7.11 fun函数方法三

void fun(char s[])

{ int i,n=0; char c;

while(s[n++]) ; /*n是串尾后一个字符的下标*/

n--; /*n为串尾下标,同时也代表长度*/

7.12 用递归法将一个整数N转换成字符串。例如,输入483,应输出“483”。N的位数不

确定,可以是任意位数的整数。

7.12 递归法将整数转换成字符串

main函数输入整数n。

fun(int n)函数完成:

如果n!=0,

i=n/10; 作为下一步递归调用的实参。

递归调用fun(i)。

以字符形式输出n%10

程序如下:

# include

void conver(int n)

{ int i;

if (( i=n/10 )!=0)

conver(i);

putchar( n%10+’0’);

}

main()

{ int num;

printf("Input num: "); scanf(“%d”,&num);

printf(“ Output: ” );

conver(num);

}

7.13 已有变量定义语句double a=5.0;int n=5;和函数调用语句mypow(a,n);用以求a 的

n 次方。请编写double mypow(double x,int y)函数。

double mypow(double x,int y)

{ }

7.13 求an

在被调函数中输出结果,调用函数作为独立的语句。

#include

void mypow(double x,int y)

{ int i; double z=1.0;

for(i=1;i<=y;i++)

z=z*x;

printf("Output : %g\n",z);

}

main()

{ double a=5.0; int n=5;

mypow(a,n);

} 运行结果:Output: 3125

7.14 以下程序的功能是用牛顿法求解方程f(x)=cosx-x=0。已有初始值x0=3.1415/4,要求绝

对误差不超过0.001,函数f用来计算迭代公式中xn的值,请编写子函数。牛顿迭代公式是:

x n+1=x n-f(x n)

即:

x n+1=x n-(cosx n-x n)/(sinx n-1)

#include

#include

#define PI 3.1415

float f(float x0)

{ }

main()

{int t=0,k=100,n=0;float x0=PI/4,x1;

while(n

{x1=f(x0);

if(fabs(x0-x1)<0.001){t=1;break;}

else{x0=x1;n=n+1;}

}

if(t==1)printf(“\nfangcheng gen g is %10.5f”,x1);

else printf(“\nSorry,not found!”);

}

方法二:在main函数输出结果,被调函数返回值

#include

double mypow(double x,int y)

{ int i; double z=1.0;

for(i=1;i<=y;i++)

z=z*x;

return z;

}

main()

{ double a=5.0; int n=5;

printf("Output: %g\n",mypow(a,n));

} 运行结果:Output: 3125

方法三:递归调用

#include

double mypow(double x,int y)

{ double z;

if(y==0) z=1.0;

else z=mypow(x,y-1)*x;

return z;

}

main()

{ double a=5.0; int n=5;

printf("Output : %g\n",mypow(a,n));

} 运行结果:Output: 3125

7.15 已有函数调用语句c=add(a,b);请编写add函数,计算两个实数a和b的和,并返

回和值。

Double add(double x,double y)

{ }

7.15 求和

#include

double add(double x,double y)

{ double z;

z=x+y;

return z;

}

main()

{ double a,b,c;

printf("Input a,b: ");

scanf("%lf%lf",&a,&b); /*注意:必须用%lf*/

c=add(a,b);

pirntf("%f+%f=%f\n",a,b,c);

}

7.16 以下程序的功能是应用弦截法求方程x3-5x2+16x-80=0的根,其中f函数可根据指定 x 的值求出方程的值;函数xpoint可根据x1和x2求出f(x1)和f(x2)的连线与x轴的交点;函数root用来求区间(x1,x2)的实根,请编写root函数。

7.17 以下函数p的功能是用递归方法计算x的阶勒让德多项式的值。已有调用语句p(n,x);

请编写p函数。递归公式如下:

1 (n=0)

Px(x)= x (n=1)

((2n-1)*x*Pn-1(x)-(n-1)*Pn-z(x))/n (n>1)

float p(int n,int x)

{ }

7.17 递归法求勒让德多项式

#include

float p(int n,int x)

{ if(n==0) return 1.0;

else if(n==1) return x;

else return ((2*n-1)*x*p(n-1,x)-(n-1)*p(n-2,x))/n;

}

main()

{ int n,x;

printf("Input n,x: "); scanf("%d%d",&n,&x);

printf("Output : %g\n",p(n,x));

}

7.18 程序的功能是应用下面的近似公式计算e 的n 次方。函数f1用来计算每项分子的值,

函数f2用来计算每项分母的值。请编写f1和f2函数。

e x =1+x+ !22x +!33x +……(前20项的和)

float f2(int n)

{ }

float f1(int x,int n)

{ }

main()

{float exp=1.0;int n,x;

printf(“Input a number:”);

scanf(“% d”,&x);printf(“%d \n”,x);

exp=exp+x;

for(n=2;n<=19;n++) exp=exp+f1(x,n)/f2(n);

printf(“\nThe is exp(%d)=%8.4f\n”,x,exp);

}

运行结果:Input a number:3

The is exp(3)=20.0855

7.18 求en

#include

float f2(int n)

{ int i; float z=1.0;

for(i=1;i<=n;i++)

z=z*i;

return z;

}

float f1(int x,int n)

{ int i; float z=1.0;

for(i=1;i<=n;i++)

z=z*x;

return z; }

main()

{ float exp=1.0; int n,x;

printf("Input a number: "); scanf("%d",&x);

exp=exp+x;

for(n=2;n<=19;n++)

exp=exp+f1(x,n)/f2(n);

printf("\n The result is exp(%d)=%g\n",exp);

} /*修改%8.4f为%g,以免数值太小,输出0*/

7.19 是一个2*4的整形数组,且各元素均已赋值。函数max_value可求出其中的最大元素

值max,并将此值返回主调函数。今有函数调用语句max=max_value(a);请编写max_value函数。

max_value(int arr[][4])

{ }

7.19 求二维数组的最大值

#include

max_value(int arr[][4])

{ int i,j,max;

max=arr[0][0];

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

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

if(max

return max;

}

main()

{ int a[2][4],i,j,max;

printf("Input 2*4 array: \n");

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

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

scanf("%d",&a[i][j]);

max=max_value(a);

printf("Output max=%d\n",max);

}

7.20 输入若干整数,其值均在1至4的范围内,用-1作为输入结束标志,请编写函数f

用于统计每个整数的个数。

例如:若输入的整数为 1 2 3 4 1 2,则统计的结果为:

1: 2

2: 2

3: 1

4: 1

#define M 50

main()

int a[M],c[5]={0},i,n,x;

n=0;

printf(“Enter 1 or 2 or 3 or 4,to end wit h-1\n”);

scanf(“%d”,&x);

while(x!=-1)

{if(x>=1&&x<=4){a[n]=x;n++};???

Scanf(“%d”,&x);

}???

f(a,c,n);

printf(“Output the result:\n”);

for(i=1;i<=4;i++) printf(“%d:%d\n”,I,c[i]);

printf(“\n”);

}

f(int a[],int c[],int n)

{ }

7.20 统计1~4的个数

#define M 50

main()

{ int a[M],c[5]={0},i,n,x;

n=0;

printf("Enter 1 or 2 or 3 or 4, to end with -1\n");

scanf("%d",&x);

while(x!=-1)

{ if(x>=1&&x<=4) { a[n]=x; n++; }

scanf("%d",&x);

} /*读入n个数*/

f(a,c,n);

printf("Output the result: \n");

for(i=1;i<=4;i++) printf("%d: %d\n",i,c[i]);

printf("\n");

}

f(int a[],int c[],int n)

{ int i;

for(i=1;i<=n;i++)

c[a[i]]++; /*a[i]作为计数数组的下标*/

}

7.21 用递归方法计算下列函数的值:

fx (x,n)=x-x2+x3-x4+…(-)n-1x n n>0

8.22 下面是5×5的螺旋方阵,编程生成n×n的螺旋方阵。

1 2 3 4 5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

8.23 回文是从前向后和从后向前读起来都一样的句子。写一个函数,判断一个字符串是否为回文,注意处理字符串中有中文也有西文的情况。

8.24 编写程序,将字符串str中的所有字符’k’删除。

C语言 第七章 函数

第七章函数 一、选择题 1.【B】 分析:函数返回值的隐含类型是整型。 2.【B】 分析:main函数可以在任何地方出现。它是程序的入口。 3.【D】 分析:函数的调用有一个返回值或者实现一定的功能,因此可以作为独立的语句存在,也可以出现在表达式中,可以作为一个函数的实参(返回值是一个实际的值)。4.【B】 分析:实参与形参之间的数据传递,只能是实参传给形参,单向传递。 5.【B】 分析:任何函数(除了main函数)的使用通过调用实现。普能的函数都能被单独编译(一定要能过调用才能运行),不能在一个函数中嵌套定义另一个函数。 6.【CD】 分析:C选项程序就是由若干个函数组成,无论是否有其他函数,主函数一定得存在。每个程序都必须有且仅有一个主函数,但不是每个程序文件都必须有main()函数。因为一个程序可能包含多个程序文件。函数不能嵌套定义。 7.【D】 分析:函数调用时实参必须与形参在个数,类型,顺序上相同。A选项中的"abc"是字符串,所以错误。C选项中'65'本身就是错误的。函数的返回值为空,不能用于赋值运算,所以B选项错误。D选项的第二个32在传给形参时可以转换为实型,正确。8.【A】 分析:实参都是用逗号隔开,第二个实参是个加法表达式,第三个实参是个逗号表达式。9.【C】 分析:fl函数功能返回较大的值,f2函数的功能返回较小的值。f1(a,b)返回为4,f2(a,b)返回为3。 10.【C】 分析:void *fun();的含义是fun函数的返回值是无值型的指针类型。 11.【C】 分析:函数在调用时不会出现类型说明符,所以A,D错误。函数的返回值为空,不能用于赋值运算,所以B选项错误。 12.【D】 分析:fun函数的功能选择两个数中较大的一个作为返回值。x为3,y为8,z为6以实参传到形参中,所以fun(fun(x,y), 2*z)等价于fun(fun(3,8), 2*6)等价于fun(8, 12),最后r被赋12。答案选D。 13.【B】 分析:fun函数功能返回两个数之和。此题就是函数调用作为函数实参。a为2,b为5,c 为8传到fun((int)fun(a+c,b),a-c))中那么它等价于fun(15,-6)。所以答案选B。14.【C】 分析:此题关键的一点就是实参与形参数据是单向传递的,a为31以实参传到函数中或者说传到形参z中,而函数体z=x*x+y*y会使z发生改变,形参改变了,但是实参是不

C语言程序设计第四版第七章答案-谭浩强

第七章函数 7.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。 maxyueshu(m,n) int m,n; { int i=1,t; for(;i<=m&&i<=n;i++) {if(m%i==0&&n%i==0) t=i; } return(t); } minbeishu(m,n) int m,n; {int j; if(m>=n) j=m; else j=n; for(;!(j%m==0&&j%n==0);j++); return j; } main() {int a,b,max,min; printf("enter two number is: "); scanf("%d,%d",&a,&b); max=maxyueshu(a,b); min=minbeishu(a,b); printf("max=%d,min=%d\n",max,min); } 7.2求方程的根,用三个函数分别求当b2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。 #include"math.h" float yishigen(m,n,k) float m,n,k; {float x1,x2; x1=(-n+sqrt(k))/(2*m); x2=(-n-sqrt(k))/(2*m); printf("two shigen is x1=%.3f and x2=%.3f\n",x1,x2); } float denggen(m,n) float m,n; {float x; x=-n/(2*m); printf("denggen is x=%.3f\n",x); }

c语言课后习题第7章函数

习 题 7 7.1 已有变量定义和函数调用语句:int a=1,b=–5,c ;c=fun(a,b);fun 函数的作用是计算 两个数之差的绝对值,并将差值返回调用函数,请编写fun 函数。 Fun(int x,int y) { } 7.1 求两数之差绝对值 #include fun(int x,int y) { return abs(x-y); } main() { int a=1,b=-5,c; c=fun(a,b); printf("|%d-%d|=%d\n",a,b,c); } 7.2 已有变量定义和函数调用语句:int x=57;isprime(x);函数isprime( );用来判断 一个整型数a 是否为素数,若是素数,函数返回1,否则返回0。请编写isprime 函数。 isprime(int a) { } 7.3 已有变量定义和函数调用语句int a ,b ;b=sum(a);函数sum()用以求∑=n k k 1,和数作为 函数值返回。若a 的值为10,经函数sum 的计算后,b 的值是55。请编写sum 函数。 Sum(int n) { } 7.3 求∑k #include sum(int n) { int k,s=0; for(k=1;k<=n;k++) s=s+k; return s; } main() { int a,b; printf("Input a: "); scanf("%d",&a); b=sum(a);

printf("%c(1,%d)=%d\n",228,a,b); } 7.4 一函数,输入一行字符,将此字符串中最长的单词输出。 7.4 输出最长的单词,假设只包含字母和空格,单词间以空格分隔,空格个数不限#include void fun(char a[]) { int n,i,j,k=0,len[80],p; char c[80][80],max[80]; n=strlen(a); for(i=0;i #include int fun(char a[]) { int i,n=0,m; for(i=0;a[i];i++) { if(isalpha(a[i])) /*如果a[i]是字母,求出相应的十进制数*/ switch(a[i]) { case 'a': case 'A': m=10; break;

C语言第7章函数

第七章函数 一、选择题 1.如果在一个函数的复合语句中定义了一个变量,则该变量()。 A)只在该复合语句中有效,在该复合语句外无效 B)在该函数中任何位置都有效 C)在本程序的源文件范围内均有效 D)此定义方法错误,其变量为非法变量 2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是:。A)地址传递;B)单向值传递; C)双向值传递;D)由用户指定传递方式 3.以下关于C语言程序中函数的说法正确的是:。 A)函数的定义可以嵌套,但函数的调用不可以嵌套; B)函数的定义不可以嵌套,但函数的调用可以嵌套; C)函数的定义和调用均不可以嵌套; D)函数的定义和调用都可以嵌套。 4.以下正确的函数形式是:。 A)double fun(int x,int y)B)fun(int x,y) {z=x+y;return z;}{int z;return z;} C)fun(x,y)D)double fun(int x,int y) {int x,y;double z;{double z; z=x+y;return z;}z=x+y;return z;} 5.以下说法不正确的是:。 C语言规定 A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以是任意类型 D)形参应与其对应的实参类型一致或赋值兼容 6.在下面的函数声明中,存在着语法错误的是。 A)BC(int a,int);B)BC(int,int); C)BC(int,int=5);D)BC(int x,int y); 7.以下错误的描述是。 函数调用可以 A)出现在执行语句中B)出现在一个表达式中 C)做为一个函数的实参D)做为一个函数的形参 8.下面叙述中正确的是。 A)对于用户自己定义的函数,在使用前必须加以说明 B)函数可以返回一个值,也可以什么值也不返回 C)说明函数时必须明确其参数类型和返回类型 D)空函数不完成任何操作,所以在程序设计中没有用处 9.下面叙述中错误的是。 A)主函数中定义的变量在整个程序中都是有效的

C语言基础题第七章:函数

第七章:函数 一、单选题 1、若已用k=fun( fun (a,b,&c ) , 5, &a ); 形式正确调用fun函数,则该函数的形参个数为 B A、2 B、3 C、4 D、5 2、以下叙述中正确的是。 D A、形参和实参均属于局部变量 B、形参和实参必须是变量 C、形参的默认类型是register D、形参的默认类型是auto 3、假设x为局部变量,而且在整个程序运行期间始终占据固定的存储单元,则它的存储类应是。B A、auto B、static C、extern D、register 4、int fun( int x , int y ) C { return x+y ; } main( ) { printf(“%d \n”, fun(fun(1,2), fun ( 3,4 ) ) ) ; } 程序运行后的输出结果是。 A、3 B、7 C、10 D、编译错误 5、void fun ( char *s ) B { s=s+2; *s = *s +2 ; } main () { char *a="12345 " ; fun ( a ) ; printf ( " % s \n ", a ); } 程序运行后的输出结果是。 A、12345 B、12545 C、345 D、545 6、void fun ( int *a, int * b) { int *t ; t=a ; a = b ; b = t ; ( *a )++ ; (* b) +=2 ; } main ( ) { int a=1, b=10 ; fun ( &a, & b) ; printf ( " %d, %d \n ",a , b ); } 程序运行后的输出结果是。 D A、1,10 B、10,1 C、12,2 D、3,11 7、void fun ( char *p ) B { p++ ; *p=' a ' ; } main ( ) { char a[20]= " 13579 " ; fun ( a +1 ) ; fun( a + 3) ; printf ( " %s\n ", a ); } 程序运行后的输出结果是。 A、1a5a B、13a7a C、1a5a9 D、a3a79

C语言 第七章 函数

C语言函数实验 【试验目的】 1、掌握C语言中函数定义、调用函数的方法。 2、掌握函数形参与实际参数的参数传递关系。 【试验内容】 1、以下程序的输出结果是()。 #include double f(int n) { int i; double s=1.0; for(i=1;i<=n;i++) s+=1.0/i; return s; } int main() { int i; double a=0.0; double f(int n); for(i=0;i<3;i++) a+=f(i); printf("a=%f\n",a); return 0; } 2、以下程序输出结果是()。 #include int fun(int b) { int d=5; d+=b++; printf("d1=%d\n",d); } int main() {

int a=2,d=3; int fun(int b); fun(a); d+=a++; printf("d2=%d\n",d); return 0; } 3、以下程序输出结果是()。#include int f(int g) { switch(g) { case 0: return 0; case 1: case 2: return 1; } return (f(g-1)+f(g-2)); } int main() { int k; int f(int g); k=f(5); printf("k=%d\n",k); } 4、以下程序的输出结果是()。#include int fun(int n) { int s; if(n==0) s=7; else s=n+fun(n-1); return s; } int main() { printf("%d\n",fun(3)); return 0; }

小甲鱼C语言第七章 函数

第七章函数 如果有人问你,这个地球上什么动物最聪明?我想不会有其他答案,这个地球上人类是最聪明的。我们去百度一下“人类”,会发现百度百科中是这样描述人类的:人的总称,是地球上一中相比较来说比较高智慧的生物,可以说是地球至今的统治者。《现代汉语词典》对人的解释是:能制造工具、并且能够熟练使用工具进行劳动的高等动物。 《现代汉语词典》中对人类的解释离不开“工具”这个词。我们人类的祖先在使用天然工具的过程中,逐渐学会了如何制造工具。工具是什么呢?工具往往具有某些特定的作用、可以实现某种功能。比如打火机,可以用于打火,当我们想抽烟的时候,只需要轻轻的按一下打火机就可以了,而不需要钻木取火,如果现在还有人钻木取火的话,除非那个人是想实验一下钻木取火的真实性,否则为了帮助这个社会,我们就可以打电话通知精神病院了。 工具简化了我们的生活,也丰富了我们的生活。当我们需要实现某种功能的时候,只需要把对应的工具拿过来使用就好了。C语言中也提供了这种使用某种“工具”来处理特定问题的方法,称之为函数。 7.1 函数概述 有些人在看到本章的标题的时候可能就会惊呼:我函数学的最差了!!我最讨厌函数了!!。没错,数学中的函数的确很讨厌(针对我个人来说),我也很不喜欢它。但是不要担心,这里不会讲数学中的函数,更不会告诉你一次函数和二次函数的差别。我们这里讲的是计算机语言中的函数。 函数,在有些语言当中也称为方法。要说计算机语言中的函数和数学中的函数完全不一样吗?其实也不然,在计算机语言当中,函数就是具有特定功能的“工具”。像我们目前使用过的printf函数和scanf函数,前者用于输出,后者用于输入。还有我们每次编写代码都会使用的main函数。只不过printf和scanf函数是C语言提供的,我们只需要会用就行了,而main函数的功能是我们自己编写的。 为了更好的理解函数的概念,我举个例子来说。日常生活中我们经常会用到ATM自动取款机,这是一个非常方便的工具,我们平常只需要把钱存在卡里,需要的时候可以24小时去取款机中取钱,我想大家都应该有过去取款机取钱的经历,回想一下这个过程:走到取款机面前,我们要把卡放进去,然后取款机会提示输入密码,密码正确之后,选择取款,然后输入取款金额,取款机会把相应的钱吐出来,随后将会提示你是否打印凭条,打印完之后点击取款机屏幕上的退出,便可以取回自己的银行卡。 取款机实现了“自动取款”这个功能,在使用这个功能的时候,我们首先需要把卡放进取款机里,而且还要输入正确的密码,当密码正确之后,我们使用取款这个功能取得相应的钱。最后这个功能完成了,打印一张凭条,打印了此次取款的记录,最后把卡退还给用户。 那么自动取款机就可以说是一个函数,它具有取钱、存钱、转账等等功能,而且我们不需要知道这种功能是如何实现的,我们只需要会使用就可以了。 我们在C语言中也使用函数来实现某种特定的功能。C语言中函数分为两类,一类是库函数,一类是自定义函数。C语言有着丰富的库函数,这个库函数又是个啥子东西?C语言的语句十分简单,如果要使用C语言的语句来完成printf()和scanf()的功能,就需要编写颇为复杂的程序,因为C语言的语句中没有提供可以用于输出或输入的语句。又如为了显示一段文字,或者输入一段文字,我们可以直接使用printf和scanf函数,可以直接用于输出和输入,我们不必去关心这两个函数是如何实现输出和输入功能的。但是,C语言是不可

相关主题
文本预览
相关文档 最新文档