C语言程序设计第六章 函 数(2)

2019-03-04 13:01

24.若给fun函数的形参s传递字符串:“∪∪6354abc”(其中“∪”表示空格字符),则函数的返回值是 6354 。 #include long fun(char s[ ]) { long n; int sign; for(; isspace(*s); s++); sign=(*s==?-‘)?-1:1; if(*s==?+‘||*s==?-‘) s++;

for(n=0;isdigit(*s);s++) n=10*n+(*s-?0‘); return(sign *n); }

fun函数中,先由for(; isspace(*s); s++);转过字符串中的先导空格字符,系统函数isspace(*s)是判断空格字符的。若有字符‘-’,sign放-1,否则放1,移过字符‘-’或‘+’。从此取出字符串中的数字字符(系统函数isdigit(*s)是判断数字字符的)其它字符不要,变成整数后,按位乘10相加(n=n*10+(*s-?0‘)),最后返回数sign *n值。 25.下面函数要求计算两个整数x、y之和,并通过形参z传回该和值,请填空。

void add (int x, int y, int *z ) { *z =x+y; return; } 由于不用return返回值,因此z必须为指针 int *z ,调用时用add(a,b,&c)使z指向实参c,相加结果放 *z =x+y,即放实参c。

26.以下函数用来在w数组中插入x。n所指向的存储单位中存放w数组中字符个数。 数组w中的字符已按从小到大的顺序排列,插入后数组w中的字符仍有序。请填空。 Void fun (char *w, char x, int *n) { int i,p=0; w[*n]=x;

while(x>w[p]) p++;

for(i=*n;i>p;i--) w[i]= w[i-1] ; w[p]=x; ++*n; }

w中从0算起有n指向数个字符,则w[*n]是空的,先把x中的字符放w[*n]。找出按序x中字符应放的位置p。(while (x[p]) p++),从最后一个字符w[i=*n](即要插入的字符)开始向前移位(w[I]= w[i-1] )直到位p,则就把最后一个字符(即要插入的字符)插入到了p位。

27.函数my_cmp( )的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即当s>t时返回正值,当s

my_cmp (char *s, char *t) { while (*s==*t)

{ if (*s==?\\0‘) return (0); ++s, ++t; } return ( *s-*t ); }

54

28.以下程序是把字符串中的内容按逆序输出,但不要改变串中的内容,请填空。

void inverp (char *a) { if(!*a) return; inverp (a+1); printf(―%c‖,*a); }

该递归函数的出口是if,因此,在此要填入遇到字符串结束标志时返回。字符串结束标志的方式有四种:*a==?\\0‘,*a==0或!*a。由于if中已有求反运算符!,故可填入:*a或填(*a!=?\\0‘),(*a!=NULL),(*a!=0)。显然%c*后要填入 a 。

三、程序分析题

1.阅读程序,写出函数的主要功能。 void ch (int *p1, int *p2) { int p;

if (*p1>*p2) (p=*p1; *p1=*p2; *p2=p;) }

函数的功能是能把p1和p2所指的实参数据交换。 2.阅读函数,写出函数的主要功能。 float av (float a[ ], int n) { int i; float s;

for (i=0,s=0;i

函数的功能:求出n个实数的平均值。 3.阅读下面程序,写出运算结果。 unsigned fun6 (unsigned num) { unsigned k=1;

do { k*=nuum; num/=10; } while (num); return k; }

void main ( ) { unsigned n=26; printf(―%d\\n‖,fun6(n)); }

运算结果:把一个无符号整数一位一位取出相乘。结果为12。 4.阅读下面程序,写出运算结果,并说明原因。 #include void main ( )

{ int a[ ]={3,8,4,2},i,x=0; for(i=0;i<4;i++)

{ sub(a,x); printf(―=‖,x); } }

55

sub (int *s, int y) { static int t=0; y=s[t]; t++; }

程序运算结果:0 0 0 0,这是因为sub(a,x)的调用x对应y,是值调用,y的值并不返回给x,四次调用x都是0。

5.阅读下面程序,写出运算结果,并说明函数的功能。 #include void main ( ) { int m,row,col; int a[3][3]={50,-30,90,

35,45,-85, -17,57,97};

func (a,&m,&row,&col,3,3); printf (―%d,%d,%d\\n‖,m,row,col); }

func (int a[ ][ ], int *x, int *y, int *z, int m, int n) { int i,j,*x=a[0][0]; for(i=0;i

{ *x=a[i][j]; *y=i; *z=j; }

}

程序运算结果:-85,1,2。

该函数的功能是求二维数组中最小元素值及它的行列下标。由于有三个数据要返回,因此用三个整数指针,而调用这个函数时,用了三个整数的地址。 6.阅读下面程序,写出运算结果。 #include void main ( )

{ printf(―]\\n‖,fun(4)); } fun (int n) { int t;

if((n==0)||(n==1)) t=3; else t=n*fun (n-1) return t; }

求fun (4),可用推展和回溯法读递归函数计算结果为:72。 7.阅读下面程序,写出运算结果。 #include

void main ( ) 运行时输入:5 –7 3 输出结果:3 { int a,b,c; }; 5 3 –7 find (int, int, int);

56

scanf (―%d%d%d‖,&a,&b,&c);

printf (―%d\\n%d,%d,%d\\n‖,find (a,b,c),a,b,c); }

int find (int a, int b,int c) { int u,s,t;

u=((u=(a>b)?a:b)>c)?u:c; t=((t=(a

8.阅读下面程序,写出运算结果。

#include

void fun1(int n, int a[ ][3]) 输出结果: 1 4 2 { for(int i=0;i

for(int j=0;j

void main ( )

{ int a[3][3]={{6,4,2},{8,6,4},{9,6,3}}; fun1(3,a);

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

for(int j=0;j<3;j++) printf(―%d‖,a[i][j]); printf(―\\n‖); } }

9.阅读下面程序,写出运算结果。

#include int fun3(int m) { int i;

if(m==2||m==3) return 1; 输出结果: 2,3,5,7 if(m<2||m%2==0) return 0;

for(i=3;i

void main ( ) { int n;

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

if(fun3(n)==1) printf(―%d ‖,n); }

10.阅读下面程序,写出运算结果。

#include

void sub(int *a, int *b, int *c,m,n)

{ int i,j; 输出结果: 1 5 3 8 4 9 –4 6 for(i=0;i

57

1 1 1 3 2 1

for(j=0;j

void main ( )

{ int i,x[5]={1,5,3,8,4},y[3]={9,-4,6},z[8]; sub(x,y,z,5,3);

for(i=0;i<8;i++) printf(―%d ‖,z[i]); printf(―\\n‖); }

11.阅读下面程序,写出运算结果。

#include

void sort(char *a[ ], int n) 输出结果: afternoon { int i,j,k; char *temp; evening for(i=0;i

if(strcmp(a[j],a[k])<0) k=j; if(k!=i){

temp=a[i]; a[i]=a[k]; a[k]=temp; } }

}

void main ( ) { char *name[4];

ch[4][15]={―morning‖,―afternoon‖,―night‖,―evening‖}; int k;

for(k=0;k<4;k++) name[k]=ch[k]; sort(name,4); for(k=0;k<4;k++)

printf(―%s\\n‖,name[k]); }

12.阅读下面程序,写出运算结果。

#include ―stdio.h‖

void pline (char *a, char c, int l, int n) { int i;

for(i=1;i

int i; void (*pf)(char*, char, int, int); pf=pline;

for(i=1;i<5;i++){

(*pf)(a,?$‘,5-i,2*i-1); puts(a); } }

58


C语言程序设计第六章 函 数(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:最新-机关单位2019年植树节活动策划书 精品

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: