第四十一题
题目

#include <stdio.h>
#include <math.h>
double fun(double x , int  n)
{
}
main()
{  void NONO ();
   printf("%f\n", fun(0.3,10));
   NONO();
  getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
  FILE *fp, *wf ;
  int i, n ;
  double s, x ;
  fp = fopen("in.dat","r") ;
  wf = fopen("out.dat","w") ;
  for(i = 0 ; i < 10 ; i++) {
    fscanf(fp, "%lf,%d", &x, &n) ;
    s = fun(x, n) ;
    fprintf(wf, "%f\n", s) ;
  }
  fclose(fp) ;
  fclose(wf) ;
}
 
解析
double fun(double x , int  n)
{
	int i,m=1;
	double t,sum=1.0;
	for(i=1;i<=n;i++){
		t=pow(x,i);
		m*=i;
		sum+=t/m;
	}
	return sum;
} 
分析
第四十二题
题目
请编写函数fun,其功能是:统计出x所指数组中能被e整除的所有元素,这些元素的和通
过函数值返回主函数,元素个数通过形参num返回主函数。
x所指数组的元素个数通过形参n传入。
例如:当数组x内容为1,9,8,6, 12,整数e内容为3时,输出结果应该是: sum=27, num=3
#include <stdio.h>
#pragma warning(disable:4996)
int fun(int x[], int n, int e, int *num)
{
}
int main()
{  
  void NONO();
  int x[] = {1, 9, 8, 6, 12}, num=0, sum;
  sum = fun(x, 5, 3, &num);
  printf("sum=%d,num=%d\n", sum, num);
  NONO();
  return 0;
}
void NONO( )
{
	int x[100] = {1, 9, 8, 6, 12}, num, sum, i, j, count, e;
	FILE *rf, *wf;
	rf = fopen("in.dat","r");
	wf = fopen("out.dat","w");
	for(i=0;i<10;i++) {
		num = 0;
		sum = 0;
		fscanf(rf, "%d,", &count);
		for(j=0;j<count;j++)
			fscanf(rf,"%d,",&x[j]);
		fscanf(rf, "%d,", &e);
		sum = fun(x, count, e, &num);
		fprintf(wf, "sum=%d,num=%d\n", sum, num);
     }
     fclose(rf);
     fclose(wf);
} 
解析
int fun(int x[], int n, int e, int *num)
{
	*num=0;
	int i,sum=0;
	for(i=0;i<n;i++)
		if(x[i]%e==0){
			(*num)++;
			sum+=x[i];
		}
	return sum;
} 
分析
第四十三题
题目

#include <stdio.h>
#include <stdlib.h>
#define  N  5
void fun ( int a[][N], int m )
{
}
main ( )
{  int  a[N][N], m, i, j;void NONO ();
   printf("***** The array *****\n");
   for ( i =0;  i<N; i++ )
   {  for ( j =0; j<N; j++ )
     {  a[i][j] = rand()%20; printf( "%4d", a[i][j] ); }
        printf("\n");
   }
   do m = rand()%10 ; while ( m>=3 );
   printf("m = %4d\n",m);
   fun ( a ,m );
   printf ("THE  RESULT\n");
   for ( i =0;  i<N; i++ )
   {  for ( j =0; j<N; j++ ) printf( "%4d", a[i][j] );
      printf("\n");
   }
   NONO ( );
   getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
  FILE *rf, *wf ;
  int i, j, n, a[5][5] ;
  rf = fopen("in.dat","r") ;
  wf = fopen("out.dat","w") ;
  for(i = 0 ; i < 5 ; i++)
  for(j = 0 ; j < 5 ; j++)
    fscanf(rf, "%d ", &a[i][j]) ;
  fscanf(rf, "%d", &n) ;
  fun(a, n) ;
  for ( i = 0;  i < 5; i++ ) {
    for ( j = 0; j < 5; j++ ) fprintf(wf, "%4d", a[i][j] );
    fprintf(wf, "\n");
  }
  fclose(rf) ;
  fclose(wf) ;
}
 
解析
void fun ( int a[][N], int m )
{
	int i,j;
	for(i=0;i<N;i++)
		for(j=i;j<N;j++)
			a[i][j]*=m;
} 
分析
第四十四题
题目
请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。
例如,数组中有如下整数:
876 675 896 101 301 401 980 431 451 777
则输出结果为: 6,980
#include <stdio.h>
void fun(int *s, int t, int *k)
{
}
main( )
{
    int a[10]={876,675,896,101,301,401,980,431,451,777}, k ;void NONO ();
    fun(a, 10, &k) ;
    printf("%d, %d\n", k, a[k]) ;
    NONO( ) ;
    getchar();
}
void NONO ()
{/* 本函数用于打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。*/
  int a[10], i, k, j ;
  FILE *rf, *wf ;
  rf = fopen("..\\..\\in.dat","r") ;
  wf = fopen("..\\..\\out.dat","w") ;
  for(i = 0 ; i < 10 ; i++) {
    for(j = 0 ; j < 10 ; j++) fscanf(rf, "%d", &a[j]) ;
    fun(a, 10, &k) ;
    fprintf(wf, "%d,%d\n", k, a[k]) ;
  }
  fclose(rf) ;
  fclose(wf) ;
}
 
解析
void fun(int *s, int t, int *k)
{
	int i,max=0;
	for(i=0;i<t;i++)
		if(s[i]>max){
			max=s[i];
			*k=i;
		}
} 
分析
第四十五题
题目
请编写函数fun,其功能是:找出用1、2、3、4四个数字,能组成多少个互不相同且无重
复数字的三位数,然后把这些三位数按从小到大的顺序依次存入相应的数组xxx中,符合条件的个数由函数值返回。
#include <stdio.h>
#define max 100
int fun(int xxx[])
{
}
int main()
{
	int xx[max],cnt;
	void NONO(int xx[], int cnt);
	
	cnt = fun(xx);
	printf("符合条件的个数=%d\n", cnt);
	NONO(xx, cnt);
	return 0;
}
void NONO(int xx[], int cnt)
{
	int i;
	FILE *fp;
	fp = fopen("out.dat", "w");
	fprintf(fp, "%d\n", cnt);
	for(i=0;i<cnt;i++)
		fprintf(fp, "%d\n", xx[i]);
	fclose(fp);
}
 
解析
int fun(int xxx[])
{
	int i,j,k,n=0;
	for(i=1;i<=4;i++)
		for(j=1;j<=4;j++)
			if(i!=j)
                for(k=1;k<=4;k++)
					if(k!=i&&k!=j)
						xxx[n++]=i*100+j*10+k;
	return n;
} 
分析
第四十六题
题目
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。(用于字符串比较的函数是strcmp)。
#include <stdio.h>
#include <string.h>
#pragma warning (disable:4996)
#define   N   16
typedef  struct
{  char  num[10];
   int   s;
} STREC;
STREC  fun( STREC  *a, char *b )
{
  int i;
  STREC t = {'\0', -1};
}
main()
{  STREC  s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},
		{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},
		{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},
		{"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};
   STREC  h;
   char  m[10];
   int  i;FILE *out ;
   printf("The original data:\n");
   for(i=0; i<N; i++)
   {  if(i%4==0) printf("\n");
      printf("%s %3d  ",s[i].num,s[i].s);
   }
   printf("\n\nEnter the number:  ");gets(m);
   h=fun( s,m );
   printf("The data :  ");
   printf("\n%s  %4d\n",h.num,h.s);
   printf("\n");
   out = fopen("..\\..\\out.dat","w") ;
   h=fun(s,"GA013");
   fprintf(out,"%s  %4d\n",h.num,h.s);
   fclose(out);
   getchar();
}
 
解析
STREC  fun( STREC  *a, char *b )
{
  int i;
  STREC t = {'\0', -1};
  for(i=0;i<N;i++)
	  if(strcmp(a[i].num,b)==0)
		  t=a[i];
  return t;
} 
分析
第四十七题
题目
请编写函数fun,其功能是:给定一个整数n(n<10000),如果n加上100后是一个完全平方数(所谓“完全平方数”,就是开方后的结果是整数的数),并且n加上268也是一个完全平方数,则函数值返回1,否则返回0。
#include <stdio.h>
#include <math.h>
int fun(long n)
{
}
int main()
{
    long i;
    FILE *fp = fopen("out.dat", "w");
    for(i=1;i<10000;i++)
    {
        if (fun(i))
        {
            printf("%ld\n", i);
            fprintf(fp, "%ld\n", i);
        }
    }
    return 0;
}
 
解析
int fun(long n)
{
	if(sqrt(double(n+100))-(int)sqrt(double(n+100))==0.0&&sqrt(double(n+268))-(int)sqrt(double(n+268))==0.0)
		return 1;
	return 0;
} 
分析
double sqrt (double n);
第四十八题
题目
请编写函数fun,其功能是将形参s所指的字符串放入形参a所指的字符数组中,使a中存放同样的字符串。说明:不得使用系统提供的字符串函数。
#include  <stdio.h>
#define    N    20
void NONO();
void  fun( char  *a , char  *s)
{
}
main()
{  char  s1[N],  *s2="abcdefghijk";
   fun( s1,s2);
   printf("%s\n", s1);
   printf("%s\n", s2);
   NONO();
  getchar();
}
void NONO()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
  FILE *fp, *wf ;
  int i;
  char s1[256], s2[256];
  fp = fopen("in.dat","r") ;
  wf = fopen("out.dat","w") ;
  for(i = 0 ; i < 10 ; i++) {
    fgets(s2, 255, fp);
    fun(s1,s2);
    fprintf(wf, "%s", s1);
  }
  fclose(fp) ;
  fclose(wf) ;
}
 
解析
void  fun( char  *a , char  *s)
{
	int i=0;
	while(s[i]!='\0')
		a[i]=s[i++];
	a[i]='\0';
} 
分析







![[数据结构]算法复杂度详解](https://i-blog.csdnimg.cn/direct/7c1cf9a98cf146338aa302f2a31bd350.png)











