【考点分析】 本题考查对数的筛选。考查的知识点主要包括:if条件判断结构,逻辑表达式,位运算,平均值计算方法。
【解题思路】 此题属于数学类问题。分析题干,本题存在2个关键点:关键点1如何通过条件"将数右移一位后产生的新数是奇数"实现对数的筛选;关键点2如何计算其平均值。
本题的解题思路为:使用一个循环控制对所有数遍历访问,统计其中正整数的个数,再通过if判断结构和逻辑表达式实现对数的筛选判断,累加出所有满足条件的数的总和,最后根据其求出算术平均值。
【参考答案】
void CalValue(void)
{
int i; /*定义循环控制变量*/
int data; /*用于保存处理后产生的新数*/
for(i=0;i<200;i++) /*逐个取数组xx中的数进行统计*/
if(xx[i]>0) /*判断是否正整数*/
{
totNum++; /*统计正整数的个数*/
data=xx[i]>>1; /*将数右移一位*/
if(data%2==1) /*如果产生的新数是奇数*/
{
totCnt++;
totPjz+=xx[i];
}
} /*统计这些数的个数,并将满足条件的原数求和*/
totPjz/=totCnt; /*求满足条件的这些数(右移前的值)的算术平均值*/
}
【易错提示】 if结构中的逻辑表达式;平均值的计算。
【考点分析】 本题考查对指定范围内数的筛选和计算。考查的知识点主要包括:if条件判断结构,逻辑表达式,平均值计算方法。
【解题思路】 此题属于数学类问题。分析题干,本题存在2个关键点:关键点1如何判断一个数是奇数还是偶数;关键点2如何计算所有下标为偶数的元素的平均值。
本题的解题思路为:使用循环控制逐个访问数组中的每个数据,通过if else结构判断该数的奇偶性,并分别统计个数,同时累加所有下标为偶数的元素的和值,最后由和值计算出平均值。
通过一个数被2除的结果可以判断该数的奇偶性,如果可以整除则表示该数是偶数,反之为奇数。
【参考答案】
void main()
{
int cnt1,cnt2,xx[N];
float pj;
FILE *fw;
int i,k=0;
long j;
system("CLS");
fw=fopen("out.dat","w");
read_dat(xx);
for(i=0,j=0,cnt1=0,cnt2=0;i
cnt1=%d,cnt2=%d,pj=%6.2f
",cnt1,cnt2,pj);
fprintf(fw,"%d
%d
%6.2f
",cnt1,cnt2,pj);
fclose(fw);
}
【易错提示】 if结构中的逻辑表达式; 平均值的计算方法。
【考点分析】 本题考查对指定范围内数的筛选和计算。考查的知识点主要包括:if条件判断结构,逻辑表达式,平均值计算方法。
【解题思路】 此题属于数学类问题。分析题干,本题存在2个关键点:关键点1如何判断一个数是奇数还是偶数;关键点2如何计算所有下标为奇数元素的平均值。
本题的解题思路为:使用循环控制逐个访问数组中的每个数据,通过if else结构判断该数的奇偶性,并分别统计个数,同时累加所有下标为奇数元素的和值,最后由其计算出平均值。
【参考答案】
void main()
{
int cnt1,cnt2,xx[N];
float pj;
FILE *fw;
int i,k=0;
long j=0;
cnt1=0;
cnt2=0;
pj=0.0;
system("CLS");
fw=fopen("out.dat","w");
read_dat(xx);
for(i=0;i
cnt1=%d,cnt2=%d,pj=%6.2f
",cnt1,cnt2,pj);
fprintf(fw,"%d
%d
%6.2f
",cnt1,cnt2,pj);
fclose(fw);
}
【考点分析】 本题考查对指定范围内数计算。考查的知识点主要包括:强制转化类型运算,平均值的计算方法。
【解题思路】 此题属于数学类问题。分析题干,本题存在2个问题:问题1如何分解得到一个数的整数部分和小数部分;问题2如何计算N个数的平均值。
本题的解题思路为:使用循环控制逐个访问数组中的数据,实数取整运算所得结果就是该数的整数部分,再用该实数减去其整数部分,结果就是小数部分的数值。分别对这两部分以及实数累加求和。最后由实数的总和计算出平均值。
【参考答案】
void CalValue( )
{
int i; /*定义循环控制变量*/
double sum=0.0; /*定义存储所有数的和值的变量*/
for(i=0;i");
if(feof(fp)) break; /*文件读取结束,则退出*/
}
fclose(fp);
return 0;
}
void Compute(void)
{
int i; /*循环控制变量*/
for(i=0;i<1000;i++) /*依次取每个数*/
{
if(xx[i]%2!=0)
odd++; /*求出xx中奇数的个数odd*/
else
even++; /*求出xx中偶数的个数even*/
aver+=xx[i]; /*求出xx中元素的总和*/
}
aver/=MAX; /*求出xx中元素的平均值*/
for(i=0;i<1000;i++)
totfc+=(xx[i]-aver)*(xx[i]-aver)/MAX;
}
【易错提示】 文件操作函数fscanf()和feof()的用法;if判断语句中逻辑表达式;对方差计算公式运用错误。
【考点分析】 本题考查对一定范围内整数的筛选。考查的知识点主要包括:if判断语句和逻辑表达式,指针对存储单元的访问。
【解题思路】 此题属于数学类问题。分析题干,本题存在2个关键点:关键点1判断条件"能被7或11整除但不能同时被7和11整除";关键点2统计满足条件的数的数量。
本题的解题思路为:通过循环控制,依次判断1至1000内的数是否满足关键点1中的条件。如果满足,则将数据保存到数组中,并统计其数量。
【参考答案】
void countValue(int *a,int *n)
{ int i; /*定义循环控制变量*/
*n=0 ; /*初始化计数器变量*/
for(i=1;i<=1000;i++) /*在这个范围内寻找符合条件的数*/
if((i%7==0 && i%11!=0)||(i%7!=0 && i%11==0))
/*如果当前的数可以被7整除