11、给定程序MODI1.CJ是建立一个带头结点的单向链表,并用随机函数为各结点赋值。给定程序中fun函数的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并作为函数值返回。
#include <stdio.h>
#include <stdlib.h>
typedef struct aa
{ int data; struct aa *next; }NODE;
int fun(NODE *h)
{ int sum = 0 ;
NODE *p;
/***********found**********/
p=h; 改为:p=h->next;
/***********found**********/
while(p->next) 改为:while(p)
{ if(p->data%2==0) sum =p->data;
/***********found**********/
p=h->next; 改为:p=p->next;
}
return sum;
}
NODE *creatlink(int n)
{ NODE *h, *p, *s, *q;
int i, x;
h=p=(NODE *)malloc(sizeof(NODE));
for(i=1; i<=n; i )
{ s=(NODE *)malloc(sizeof(NODE));
s->data=rand()%16; s->next=p->next;
p->next=s; p=p->next; }
p->next=NULL;
return h;
}
outlink(NODE *h, FILE *pf)
{ NODE *p;
p = h->next;
fprintf(pf ,"\n\nTHE LIST :\n\n HEAD " );
while(p)
{ fprintf(pf ,"->%d ",p->data ); p=p->next; }
fprintf (pf,"\n");
}
outresult(int s, FILE *pf)
{ fprintf(pf,"\nThe sum of even numbers : %d\n",s);}
main( )
{ NODE *head; int even;
head=creatlink(12);
head->data=9000;
outlink(head , stdout);
even=fun(head);
printf("\nThe result :\n"); outresult(even, stdout);
}
12、给定程序中fun函数的功能是:求三个数的最小公倍数。例如,给主函数中的变量x1,x2,x3分别输入15 11 2,则输出结果应当是:330。
#include <stdio.h>
/************found************/
fun(int x, y, z ) 改为:fun(int x, int y, int z )
{ int j,t ,n ,m;
/************found************/
j = 1 ; 改为:j = x;
t=j%x; m=j%y ; n=j%z;
/************found************/
while(t!=0&&m!=0&&n!=0) 改为:while(t!=0||m!=0||n!=0)
{ j = j 1; t=j%x; m=j%y; n=j%z; }
/************found************/
return i; 改为:return j;
}
main( )
{ int x1,x2,x3,j ;
printf("Input x1 x2 x3: "); scanf("%d%d%d",&x1,&x2,&x3);
printf("x1=%d, x2=%d, x3=%d \n",x1,x2,x3);
j=fun(x1,x2,x3);
printf("The minimal common multiple is : %d\n",j); }
13、给定程序中fun函数的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。例如:当s听字符串为“ABCDE”时,则t中的字符串应为“ABCDEEDCBA”。
#include <stdio.h>
#include <string.h>
void fun (char *s, char *t)
{ int i, sl;
sl = strlen(s);
/************found************/
for( i=0; i<=s1; i ) 改为:for( i=0; i< sl; i )
t[i] = s[i];
for (i=0; i<sl; i )
t[sl i] = s[sl-i-1];
/************found************/
t[sl] = '\0'; 改为:t[2*sl] = '\0';
}
main()
{ char s[100], t[100];
printf("\nPlease enter string s:"); scanf("%s", s);
fun(s, t);
printf("The result is: %s\n", t);
}
14、给定程序中fun函数的功能是:从s所指字符串中删除所有小写字母c。
#include <stdio.h>
void fun( char *s )
{ int i,j;
for(i=j=0; s[i]!='\0'; i )
if(s[i]!='c')
/************found************/
s[j]=s[i]; 改为:s[j ]=s[i];
/************found************/
s[i]='\0'; 改为:s[j]='\0';
}
main()
{ char s[80];
printf("Enter a string: "); gets(s);
printf("The original string: "); puts(s);
fun(s);
printf("The string after deleted : "); puts(s);printf("\n\n");
}
15、给定程序中fun函数的功能是:从整数1到55之间,选出能被3整除、且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定,函数中a1放个位数,a2放十位数。
#include <stdio.h>
/************found************/
fun( int *b ) 改为:int fun( int *b )
{ int k,a1,a2,i=0;
/************found************/
for(k=10; k<=55; k ) { 改为:for(k=10; k<55; k ) {
/************found************/
a2=k/1O; 改为:a2=k/10;
a1=k-a2*10;
if((k%3==0 && a2==5)||(k%3==0 && a1==5))
{ b[i]=k; i ; }
}
/************found************/
return k; 改为:return i;
}
main( )
{ int a[100],k,m;
m=fun( a );
printf("The result is :\n");
for(k=0; k<m; k ) printf("%4d",a[k]); printf("\n");
}
16、给定程序中fun函数的功能是:求S的值。
例如,当k为10时,函数值应为:1.533852。
#include <stdio.h>
#include <math.h>
/************found************/
void fun( int k ) 改为:float fun( int k )
{ int n; float s, w, p, q;
n = 1;
s = 1.0;
while ( n <= k )
{ w = 2.0 * n;
p = w - 1.0;
q = w 1.0;
s = s * w *w/p/q;
n ;
}
/************found************/
return s 改为:return s;
}
main ( )
{ printf("%f\n", fun (10)); }
17、给定程序中fun函数的功能是:将十进制正整数m转换成k(2<=k<=9)进制数,并按高位到低位顺序输出。
例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。
#include <conio.h>
#include <stdio.h>
/**********found**********/
fun( int m, int k ) 改为:void fun( int m, int k )
{ int aa[20], i;
for( i = 0; m; i )
{
/**********found**********/
aa[i] = m/k; 改为:aa[i] = m% k;
m /= k;
}
for( ; i; i-- )
/**********found**********/
printf( "%d", aa[ i ] ); 改为:printf( "%d", aa[ i-1] );
}
main( )
{ int b, n;
printf( "\nPlease enter a number and a base:\n" ); scanf( "%d %d", &n, &b );
fun( n, b ); printf("\n"); }
18、给定程序中fun函数的功能是:根据整型形参n,计算如下公式的值。
例如:若n=10,则应输出0.617977.
#include <stdio.h>
/************found************/
int fun ( int n ) 改为:float fun ( int n )
{ float A=1; int i;
/************found************/
for (i=2; i<n; i ) 改为:for (i=2; i<=n; i )
A = 1.0/(1 A);
return A ; }
main( )
{ int n ;
printf("\nPlease enter n: ") ;
scanf("%d", &n ) ; printf("A%d=%f\n", n, fun(n) ) ; }
19、给定程序中fun函数的功能是:输出M行M列整数方阵,然后求两条对角线上元素之和,返回此和数。
#include <stdio.h>
#define M 5
/************found************/
int fun(int n, int xx[][]) 改为:int fun(int n, int xx[M][M])
{ int i, j, sum=0;
printf( "\nThe %d x %d matrix:\n", M, M );
for( i = 0; i < M; i )
{ for( j = 0; j < M; j )
/************found************/
printf( "%f ", xx[i][j] ); 改为:printf( "%4d ", xx[i][j] );
printf("\n"); }
for( i = 0 ; i < n ; i )
sum = xx[i][i] xx[i][ n-i-1 ];
return( sum );
}
main( )
{ int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0}, {6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};
printf ( "\nThe sum of all elements on 2 diagnals is %d.",fun( M, aa )); }
20、给定程序中fun函数的功能是:求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中从此地址开始的字符串;若未打到,则函数值为NULL。
例如:当字符串中的内容为:“abcdabfabcdx”,t中的内容为“ab”时,输出结果为:abcdx。当字符串中的内容为:“abcdabfabcdx”,t中的内容为“abd”时,则程序输出未打到住处:not be found!
#include <stdio.h>
#include <string.h>
char * fun (char *s, char *t )
{ char *p , *r, *a;
/************found************/
a = Null; 改为:a = NULL;
while ( *s )
{ p = s; r = t;
while ( *r )
/************found************/
if ( r == p ) 改为:if ( r* ==* p )
{ r ; p ; }
else break;
if ( *r == '\0' ) a = s;
s ; }
return a ;
}
main()
{ char s[100], t[100], *p;
printf("\nPlease enter string S :"); scanf("%s", s );
printf("\nPlease enter substring t :"); scanf("%s", t );
p = fun( s, t );
if ( p ) printf("\nThe result is : %s\n", p);
else printf("\nNot found !\n" );
}
21、给定程序中fun函数的功能是:统计一个无符号整数中各位数字值为零的个数,通过形参传回主函数,并把该整数中各位上最大的数字值作为函数值返回。例如,若输入无符号整数30800,则数字值为零的个数为3,各位上数字值最大的是8。
#include <stdio.h>
int fun(unsigned n, int *zero)
{ int count=0,max=0,t;
do
{ t=n%10;
/**************found**************/
if(t=0) 改为:if(t==0)
count ;
if(max<t) max=t;
n=n/10;
}while(n);
/**************found**************/
zero=count; 改为:* zero=count;
return max;
}
main( )
{ unsigned n; int zero,max;
printf("\nInput n(unsigned): "); scanf("%d",&n);
max = fun( n,&zero );
printf("\nThe result: max=%d zero=%d\n",max,zero);
}
22、给定程序中fun函数的功能是:求整数x的y次方的低3位值。例如,整数5的6次方为15625,此值的低3位值为625。
#include <stdio.h>
long fun(int x, int y, long *p )
{ int i;
long t=1;
/**************found**************/
for(i=1; i<y; i ) 改为:for(i=1; i<=y; i )
t=t*x;
*p=t;
/**************found**************/
t=t/1000; 改为:t=t%1000;
return t;
}
main( )
{ long t,r; int x,y;
printf("\nInput x and y: "); scanf("%ld%ld",&x,&y);
t=fun(x,y,&r);
printf("\n\nx=%d, y=%d, r=%ld, last=%ld\n\n",x, y,r,t );