第四十一题
题目
#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';
}
分析