原标题:C语言强化学习系列之一
C语言强化学习(一) 一、题目
1.程序设计:请编写一个函数fun,它的功能是:求出一个2×M整型二维数组中最大元素的值,并将此值返回调用函数。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#define M 4
#include
fun (int a[][M])
{
/***********************Begin*********************/
/***********************End***********************/
}
2.给定程序modi.c中函数fun的功能是:按以下递归公式求函数值。 ┌ 10 (n=1) fun(n)=┥ └ fun(n-1)+2 (n>1) 例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。请改正程序中的错误,使它能得出正确结果。
#include
/************Error************/
void fun(n)
{ int c;
/************Error************/
if (n=1)
c=10;
else
c=fun(n-1)+2;
return(c);
}
main()
{ int n;
printf("Enter n: ");scanf("%d",&n);
printf("The result:%dnn",fun(n));
}
3.程序填空:给定程序中,函数fun的功能是:将自然数1~10以及它们的平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
#include
#include
int fun(char *fname )
{ FILE *fp; int i,n; float x;
if((fp=fopen(fname, "w"))==NULL) return 0;
for(i=1;i<=10;i++)
/**********fill**********/
fprintf(_____,"%d %fn",i,sqrt((double)i));
printf("nSucceed!n");
/**********fill**********/
_____;
printf("nThe data in file :n");
/**********fill**********/
if((fp=fopen(_____,"r"))==NULL)
return 0;
fscanf(fp,"%d%f",&n,&x);
while(!feof(fp))
{ printf("%d %fn",n,x); fscanf(fp,"%d%f",&n,&x); }
fclose(fp);
return 1;
}
main()
{ char fname[]="myfile3.txt";
fun(fname);
}
4.程序设计:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#define N 8
typedef struct
{ char num[10];
double s;
} STREC;
double fun(STREC *a,STREC *b,int *n)
{
/***********************Begin*********************/
/***********************End***********************/
}
main()
{ STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}};
STREC h[N];FILE *out;
int i,n;double ave;
ave=fun(s,h,&n);
printf("The %d student data which is lower than %7.3f:n",n,ave);
for(i=0;i
printf("%s %4.1fn",h[i].num,h[i].s);
printf("n");
out=fopen("out13.dat","w");
fprintf(out,"%dn%7.3fn",n,ave);
for (i=0;i
fprintf(out,"%s %4.1fn",h[i].num,h[i].s);
fclose(out);
}
5.给定程序MODI1.C中fun函数的功能是:根据整型形参m,计算如下公式的值。 1 1 1 1 t = 1 - ── - ── - ── - ……- ── 2 3 4 m 例如,若主函数中输入5,则应输出 -0.283333。请改正函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。
#include
double fun( int m )
{
double t = 1.0;
int i;
for( i = 2; i <= m; i++ )
/**********Error**********/
t = 1.0-1 /i;
/**********Error**********/
_______;
}
main()
{
int m ;
printf( "nPlease enter 1 integer numbers:n" );
scanf( "%d", &m);
printf( "nnThe result is %lfn", fun( m ) );
}
6.程序填空:给定程序中,函数fun的功能是:将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
#include
typedef struct
{ char name[10];
int age;
}STD;
STD fun(STD std[], int n)
{ STD max; int i;
/**********fill**********/
max= _____;
for(i=1; i
/**********fill**********/
if(max.age<_____ max="std[i];</p">
return max;
}
main( )
{ STD std[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15 };
STD max;
max=fun(std,5);
printf("nThe result: n");
/**********fill**********/
printf("nName : %s, Age : %dn", _____,max.age);
}
7.程序设计:请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函数值返回。例如:若有5门课程的成绩是:90.5,72,80,61.5,55,则函数的值为:71.80。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
float fun(float *a,int n)
{
/***********************Begin*********************/
/***********************End***********************/
}
void NONO ( )
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
FILE *fp, *wf ;
int i, j ;
float aver, score[5] ;
fp = fopen("bc01.in","r") ;
if(fp == NULL) {
printf("数据文件bc01.in不存在!") ;
return ;
}
wf = fopen("bc01.out","w") ;
for(i = 0 ; i < 10 ; i++) {
for(j = 0 ; j < 5 ; j++) fscanf(fp,"%f,",&score[j]) ;
aver = fun(score, 5) ;
fprintf(wf, "%5.2fn", aver) ;
}
fclose(fp) ;
fclose(wf) ;
}
main()
{ float score[30]={90.5,72,80,61.5,55},aver;
aver=fun(score,5);
printf("nAverage score is: %5.2fn",aver);
NONO ( );
}
8.给定程序modi.c中,函数fun的功能是:应用递归算法求形参a的平方根,求平方根的迭代公式如下(请自行查找公式):例如,2的平方根值为:1.414214。请改正程序中的错误,使它能得出正确结果。
#include
#include
/************Error************/
fun(double a,double x0)
{ double x1,y;
x1=(x0+a/x0)/2.0;
/************Error************/
if(fabs(x1-x0)<0.00001)
y=fun(a,x1);
else y=x1;
return y;
}
main()
{ double x;
printf("Enter x:");scanf("%lf",&x);
printf("The square root of %lf is %lfn",x,fun(x,1.0));
}
9.程序填空:函数fun的功能是:逆置数组元素中的值。例如:若a所指数组中的数据依次为:1、2、3、4、5、6、7、8、9,则逆置后依次为:9、8、7、6、5、4、3、2、1。形参n给出数组中数据的个数。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
#include
void fun(int a[], int n)
{ int i,t;
/**********fill**********/
for (i=0; i<_____ i>
{
t=a[i];
/**********fill**********/
a[i] = a[n-1-_____];
/**********fill**********/
_____ = t;
}
}
main()
{ int b[9]={1,2,3,4,5,6,7,8,9}, i;
printf("nThe original data :n");
for (i=0; i<9; i++)
printf("%4d ", b[i]);
printf("n");
fun(b, 9);
printf("nThe data after invert :n");
for (i=0; i<9; i++)
printf("%4d ", b[i]);
printf("n");
}
10.程序设计请编写函数fun,函数的功能是:将M行N列的二维数组中的数据按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。例如,二维数组中的数据为: 33 33 33 33 44 44 44 44 55 55 55 55 则一维数组中的内容应是:33 33 33 33 44 44 44 44 55 55 55 55。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
void fun(int (*s)[10], int *b, int *n, int mm, int nn)
{
/***********************Begin*********************/
/***********************End***********************/
NONO()
{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。*/
FILE *rf, *wf ; int i, j, k ;
int w[10][10], a[100], n = 0, mm, nn ;
rf = fopen("bc.in", "r") ;
wf = fopen("bc.out", "w") ;
for(k = 0 ; k < 5 ; k++) {
fscanf(rf, "%d %d", &mm, &nn) ;
for(i = 0 ; i < mm ; i++)
for(j = 0 ; j < nn ; j++) fscanf(rf, "%d", &w[i][j]) ;
n=0;
fun(w, a, &n, mm, nn) ;
for(i = 0 ; i < n ; i++) fprintf(wf, "%3d", a[i]) ; fprintf(wf, "n") ;
}
fclose(rf) ; fclose(wf) ;
}
main()
{ int w[10][10] = {{33,33,33,33},{44,44,44,44},{55,55,55,55}},i,j ;
int a[100] = {0}, n = 0 ;
printf("The matrix:n") ;
for(i = 0 ; i < 3 ; i++)
{ for(j = 0 ; j < 4 ; j++) printf("%3d",w[i][j]) ;
printf("n") ;
}
fun(w, a, &n, 3, 4) ;
printf("The A array:n") ;
for(i = 0 ; i < n ; i++) printf("%3d",a[i]);printf("nn") ;
NONO() ;
}二、参考答案
1.【参考代码】
int i,j;
int max=a[0][0];
for(i=0;i<2;i++)
for(j=0;j
if(a[i][j]>max)
max=a[i][j];
return max;
2.【参考答案】int fun(n)或int fun(int n), if (n==1) 3.【参考答案】fprintf(fp,"%d %fn",i,sqrt((double)i));,fclose(fp);,if((fp=fopen(fname,"r"))==NULL) 4.【参考代码】
int i,j=0;
double sum=0,ave;
for(i=0;i
sum=sum+a[i].s;
ave=sum/N;
for(i=0;i
if(a[i].s
b[j++]=a[i];
*n=j;
return ave;
5.【参考答案】t-=1.0/i;或t=t-1.0/i;,return t;或return(t); 6.【参考答案】max= std;或max= std[0];,if(max.age(std+i)).age) max=std[i];,printf("nName : %s, Age : %dn", max.name,max.age); 7.【参考代码】
int i;
float s=0;
for(i=0;i
s+=a[i];
return s/n;
8.【参考答案】double fun(double a,double x0)或float fun(double a,double x0),if(fabs(x1-x0)>0.00001)
9.【参考答案】for (i=0; i< n/2; i++),a[i] = a[n-1-i];a[n-i-1] = t;或a[n-1-i] = t;
10.【参考代码】返回搜狐,查看更多
nt i,j,k=0;
*n=mm*nn;
for(i=0;i
for(j=0;j
b[k++]=s[i][j];
责任编辑: