test02 【Day2.7】
1.程序填空
#include <stdlib.h>
#include <stdio.h>
#define N 10
double fun(double x[],double *y)
{ int i,j; double av;
/**********found**********/
av=0.0; /*赋初值av=0.0*/
/**********found**********/
for(i=0; i<N; i++)
av=av+ a[i]/N; /*求平均值方法: 1.同分母的分子拆分求和; 2.总和 / 项数. */
for(i=j=0; i<N; i++)
/**********found**********/
if(x[i]>av) y[j++]= x[i]; /* for循环判断大于均值的项,并赋值给数组y中对应下标,同时y要随着i自增; */
y[j]=-1; /*!!! 思考:存放在最后1项,用于判断终止,不会产生越界*/
return av;
}
void main()
{ int i; double x[N],y[N];
for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);} //生成0-49的随机数,并赋值给数组x
printf("\n");
printf("\nThe average is: %f\n",fun(x,y));
for(i=0; y[i]>=0; i++) printf("%5.1f ",y[i]); /* !!! 注意:循环终止条件,y[i]>=0 ,数组y中最后一项为-1 */
printf("\n");
}
总结💥:
1.数组求平均值: 同分母,分子循环遍历求和,再求均值;
2. y[j++] = x[i] 传值给数组y的元素,同时数组项自增。
3. 判定y数组的终止条件: y中最后一项为:**-1**,即y[j]=-1。
2.程序修改
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
/*************found**************/
double fun (int m) /*函数定义:返回值类型 函数名(参数)*/
{ double y=0, d;
int i;
/*************found**************/
for(i=100,i<=m,i+=100) /*细节题,for循环中表达式用“ ; ”分号隔开*/
{d=(double)i*(double)i;
y+=1.0/d;
}
return(y);
}
void main()
{ int n=2000;
system("CLS"); //清除屏幕内容
printf("\nThe result is %1f\n",fun(n));
}
Analy:
【考点】:函数定义,for循环语句;
【小结】:
①、1/m*m多项求和的实现:
for(i=100,i<=m,i+=100)
{d=(double)i*(double)i;
y+=1.0/d;
}
②、
system("CLS");
/引入“#include <conio.h>
头文件”,清屏/
system("pause");
/引入“#include <windows.h>
头文件调用DOS命令集合的暂停命令,防止C/C++程序运行时,一闪而过。/
3.程序设计
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define N 10
typedef struct ss
{ char num[10];
int s;
} STU;
/*void fun(STU a[], STU *s)
{
int i;
*s=a[0];
for(i=1;i<N;i++){
if(a[i].s<s->s)
*s=a[i];
}
}*/
void main()
{
FILE *wf;
STU a[N]={{ "A01",81},{ "A02",89},{ "A03",66},{ "A04",87},{ "A05",77},
{ "A06",90},{ "A07",79},{ "A08",61},{ "A09",80},{ "A10",71}},m;
int i;
system("CLS");
printf("*****The original data*****\n");
for(i=0;i<N;i++)
printf("No=%s Mark=%d\n", a[i].num,a[i].s);
fun(a,&m);
printf("*****THE RESULT*****\n");
printf("The lowest :%s, %d\n",m.num,m.s);
/******************************/
wf=fopen("out.dat","w");
fprintf(wf,"%s, %d",m.num,m.s);
fclose(wf);
/*****************************/
}
Analy:
[解题思路]
1.先假定结构体数组中第一个元素a[0]为最小值*/
2.遍历整个结构体数组,如果发现循环过程中有比假定最小值a[0]更小的值,就将指针s指向该元素。
void fun(STU a[], STU *s)
{
int i;
*s=a[0];
for(i=1;i<N;i++){ /*假定a[0]为最小值后,循环可以直接从1开始*/
if(a[i].s<s->s)
*s=a[i];
}
}
Less interests,More interest.1
少一些功利主义的追求,多一些不为什么的坚持! ↩︎