totfc+=(tt[i]-ave1)*(tt[i]-ave1)/odd; /*求所有奇数的方差*/
}
4【考点分析】本题考查对一定范围内整数的筛选。
考查的知识点主要包括:
多位整数的分解算法,完全平方数判断方法,if判断语句和逻辑表达式。
【解题思路】此题属于数学类问题。
分析题干,本题需注意2个关键点:
关键点1判断该数是否是完全平方数;关键点2判断该数是否有两位数数字相同。
本题的解题思路为:
通过循环控制,依次判断100至999数是否满足关键点1(是否为完全平方数)。
如果是,则将该数分解出各位数数字,并判断是否有两位数数字相同,如果存在,则个数加1,并将该数存入数组中。
【参考答案】
intjsValue(intbb[])
{
inti,j;/*定义循环控制变量*/
intcnt=0;/*定义计数器变量*/
inta3,a2,a1;/*定义变量存储三位数每位的数字*/
for(i=100;i<=999;i++)/*在该范围中找符合条件的数*/
for(j=10;j<=sqrt(i);j++)
if(i==j*j)/*如果该数是完全平方数*/
{
a3=i/100;/*求该数的百位数字*/
a2=i%100/10;/*求该数的十位数字*/
a1=i%10;/*求该数的个位数字*/
if(a3==a2||a3==a1||a2==a1)/*有两位数字相同*/
{
bb[cnt]=i;/*则把该数存入数组bb中*/
cnt++;
}/*统计满足条件的数的个数*/
}
returncnt;/*返回满足该条件的整数的个数*/
}
5【考点分析】本题考查对一定范围内整数的筛选。
考查的知识点主要包括:
多位整数的分解算法,素数的判断算法,if判断语句和逻辑表达式。
【解题思路】此题属于数学类问题。
分析题干要求,归纳出本题的2个关键点:
关键点1判断该数是否为素数;关键点2判断是否满足条件:
个位数字和十位数字之和被10除所得余数等于百位数字。
本题思路为:
通过循环语句,依次求出所有3位数的各位数数字,并判断是否满足关键点2(个位数字和十位数字之和被10除所得余数等于百位数字),如果满足则判断该数是否为素数,如果是则个数加1,并将该数加到和值中。
判断的方法为:
依次取从2到该数1/2的数去除这个数,如果有一个可被整除,则不是素数,如果循环后的数大于该数的一半就可以判定该数是一个素数。
【参考答案】
voidcountValue()
{
inti,j;/*定义循环控制变量*/
inthalf;
inta3,a2,a1;/*定义变量存储3位数每位的数字*/
for(i=101;i<1000;i++)/*在该范围内寻找符合条件的数*/
{
a3=i/100;/*求百位数字*/
a2=i%100/10;/*求十位数字*/
a1=i%10;/*求个位数字*/
if(a3==(a2+a1)%10)/*如果个位数字与十位数字之和被10除所得余数恰是百位数字*/
{
half=i/2;
for(j=2;j<=half;j++)/*进一步判断该数是否为素数*/
if(i%j==0)break;/*如果不是素数,则跳出循环,接着判断下一个数*/
if(j>half)/*如果是素数*/
{
cnt++;/*计算这些素数的个数cnt*/
sum+=i;/*计算这些素数值的和sum*/
}
}
}
}
6【考点分析】本题考查结构体数组的排序。
考查的知识点主要包括:
结构体成员运算,字符串比较符,数组排序。
【解题思路】此题属于销售记录排序类题型。
此类题型主要考查对结构体数组的排序。
解题时,应注意3个关键点:
关键点1如何按产品名称从小到大排序;关键点2如果产品名称相同;关键点3如何按金额从小到大排列。
数组排序可以用起泡法实现,起泡法的思路是:
将较小的值像空气泡一样逐渐"上浮"到数组的顶部,而较大的数值逐渐"下沉"到数组的底部。
具体为第1趟用第1个记录和第2个记录进行比较,如果不符合要求,就进行交换,第2个记录和第3个记录比较,直到倒数第2个记录和最后1个记录比较完成;第2趟用第2个记录和第3个记录比较,然后第3个和第4个比较,依此类推。
本题在双循环中进行每次记录比较时,首先用字符串比较函数strcmp比较两个产品的名称,如果返回的值大于0,则这两个产品进行数据交换;如果返回值等于0,再比较两个产品的金额,如果前一个产品的金额大于后一个产品的金额,则这两个产品进行数据交换。
【参考答案】
voidSortDat()
{
inti,j;/*定义循环控制变量*/
PROtemp;/*定义数据交换时的暂存变量(这里是PRO类型的结构体变量)*/
for(i=0;i<99;i++)/*利用选择法进行排序*/
for(j=i+1;j<100;j++)
if(strcmp(sell[i].mc,sell[j].mc)>0)/*按产品名称从小到大进行排列*/
{
temp=sell[i];
sell[i]=sell[j];
sell[j]=temp;
}
elseif(strcmp(sell[i].mc,sell[j].mc)==0)/*若产品名称相同*/
if(sell[i].je>sell[j].je)/*则按金额从小到大进行排列*/
{
temp=sell[i];
sell[i]=sell[j];
sell[j]=temp;
}
}
7【考点分析】本题考查对多个整数的筛选以及排序。
考查的知识点主要包括:
多位整数的分解算法,逻辑表达式,数组排序算法。
【解题思路】此题属于4位数的筛选类题,并且需求出各位数数字,再筛选排序。
解此类题目需主要解决3个问题:
问题1如何取得4位数的各个数位数字;问题2如何通过条件(本题为千位数字加个位数字等于百位数字加十位数字)筛选出满足条件的数;问题3如何对数组中的数进行排序。
解此类题的一般思路为:
先求出每个数的各位数字,再根据各位数数字筛选出满足条件的数存入新的数组中,最后对新数组进行排序。
对于问题1通过算术运算取余和整除可以分解得到4位数的各个数位上的数字;问题2通过if条件判断语句和逻辑表达式可以实现。
问题3排序可以通过循环嵌套的起泡法来完成。
在求各位数数字时,先将每个数进行取整运算求出千位数,将该数取余再除100取整得出百位数,将该数取余再除10取整得出十位数,最后将该数取余得出个位数。
【参考答案】
voidjsValue()
{
inti,j;/*定义循环控制变量*/
inta1,a2,a3,a4;/*定义变量保存4位数的每位数字*/
inttemp;/*定义数据交换时的暂存变量*/
for(i=0;i<300;i++)/*逐个取每一个4位数*/
{
a4=a[i]/1000;/*求4位数的千位数字*/
a3=a[i]%1000/100;/*求4位数的百位数字*/
a2=a[i]%100/10;/*求4位数的十位数字*/
a1=a[i]%10;/*求4位数的个位数字*/
if(a4+a1==a3+a2)/*如果千位数加个位数等于百位数加十位数*/
{
b[cnt]=a[i];/*将满足条件的数存入数组b中*/
cnt++;/*统计满足条件的数的个数cnt*/
}
}
for(i=0;ifor(j=i+1;jif(b[i]>b[j])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
8【考点分析】本题考查对多个整数的筛选以及排序。
考查的知识点主要包括:
多位整数的分解算法,逻辑表达式,数组排序算法。
【解题思路】此题属于4位数的筛选类题,并且需将各位数组成新的2位数,再筛选排序。
解题时,需主要解决4个问题:
问题1如何取得4位数的各个数位数字;问题2如何按照要求组成新的2位数字ab(本题为千位数字与十位数字),以及cd(本题为个位数字与百位数字);问题3如何通过判断条件(ab-cd>=0,ab-cd<=10,ab和cd都为奇数,ab和cd都不为0)筛选出满足条件的数,并统计出满足条件的数的个数;问题4如何对数组中的数进行从小到大的排序。
解此类题的一般思路为:
先求出每个数的各位数字,再根据各位数数字组成2位数的条件筛选出满足要求的数存入新的数组中,最后对新数组进行排序。
本类题和前一类题的不同之处在于筛选的判断条件不同。
问题2由加法和乘法得出的各位数字组成新的2位数(本题为:
ab=10*a4+a2,cd=10*a1+a3);问题3的条件可以由逻辑表达式实现(本题为:
(ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&a4!
=0&&a1!
=0))。
【参考答案】
voidjsVal()
{
inti,j;/*定义循环控制变量*/
inta1,a2,a3,a4;/*定义变量保存4位数的每位数字*/
inttemp;/*定义数据交换时的暂存变量*/
intab,cd;/*存储重新组合成的十位数*/
for(i=0;i<200;i++)/*逐个取每一个4位数*/
{
a4=a[i]/1000;/*求4位数的千位数字*/
a3=a[i]%1000/100;/*求4位数的百位数字*/
a2=a[i]%100/10;/*求4位数的十位数字*/
a1=a[i]%10;/*求4位数的个位数字*/
ab=10*a4+a2;/*把千位数字和十位数字重新组成一个新的十位数ab*/
cd=10*a1+a3;/*把个位数字和百位数字组成另一个新的十位数cd*/
if((ab-cd)>=0&&(ab-cd)<=10&&ab%2==1&&cd%2==1&&a4!
=0&&a1!
=0)
{/*如果ab-cd>=0且ab-cd<=10且两个数均是奇数同时两个新十位数的十位上的数字均不为零*/
b[cnt]=a[i];/*则把满足条件的数存入数组b中*/
cnt++;/*统计满足条件的数的个数*/
}
}
for(i=0;ifor(j=i+1;jif(b[i]
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
9【考点分析】本题考查对多个整数的筛选以及求平均值。
考查的知识点主要包括:
多位整数的分解算法,逻辑表达式,平均值的计算方法。
【解题思路】此题属于4位数的筛选题型,并且涉及统计及平均值问题。
解题时,需主要解决3个问题:
问题1如何取得4位数的各个数位数字;问题2如何通过判断条件(本题为千位数上的数加百位数上的数等于十位数上的数加个位数上的数)对目标进行筛选,再分别统计出满足和不满足条件的数的和以及数目;问题3分别求出两类数的平均值。
本题与上题解题思想相同,不同之处在于问题2的判断条件改为:
千位数上的数加百位数上的数等于十位数上的数加个位数上的数(a4+a3=a2+a1)。
【参考答案】
inti,n=0;/*定义循环变量和计数器变量*/
inta1,a2,a3,a4;/*定义变量保存4位数的每位数字*/
for(i=0;i<300;i++)/*逐个取每一个4位数*/
{
a4=a[i]/1000;/*求4位数的千位数字*/
a3=a[i]%1000/100;/*求4位数的百位数字*/
a2=a[i]%100/10;/*求4位数的十位数字*/
a1=a[i]%10;/*求4位数的个位数字*/
if(a4+a3==a2+a1)/*如果千位数加百位数等于十位数加个位数*/
{
cnt++;/*统计满足条件的数的个数*/
pjz1+=a[i];/*将满足条件的数求和*/
}
else
{
n++;/*否则统计不满足条件的数的个数*/
pjz2+=a[i];/*将不满足条件的数求和*/
}
}
pjz1/=cnt;/*求满足条件的数的平均值*/
pjz2/=n;/*求不满足条件的数的平均值*/
}
10【考点分析】本题考查对整数的筛选以及数组排序。
考查的知识点主要包括:
C语言循环结构,逻辑表达式,数组排序。
【解题思路】此题属于4位数的筛选题型。
分析题干要求,本题要求实现jsVal()函数的功能,归纳可以得出2个问题:
问题1如何通过判断条件(该4位数连续小于该4位数以后的5个数且该数是偶数)筛选出满足条件的数,同时统计其个数;问题2如何将这些数按照从小到大的顺序排列。
通过问题分析,得出解此题的思路为:
先根据题目中的条件筛选出满足条件的数并存入新的数组中,再对新数组进行排序。
对于问题1通过if条件判断语句和逻辑表达式可以实现;问题2排序可以通过循环嵌套的起泡法实现。
【参考答案】
voidjsVal()
{
inti,j;/*定义循环控制变量*/
inttemp;/*定义数据交换是的暂存变量*/
for(i=0;iif(a[i]/*如果当前数是偶数且小于后面连续5个数*/
{
b[cnt]=a[i];/*将满足条件的数存入数组b中*/
cnt++;/*并统计满足条件的数的个数*/
}
for(i=0;ifor(j=i+1;jif(b[i]>b[j])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
11【考点分析】本题考查对字符数组中的字符进行计算以及替换。
考查的知识点主要包括:
字符串数组的访问,字符ASCII码的位运算,if判断结构以及逻辑表达式。
【解题思路】首先通读题目,得知此题属于字符计算问题;其次分析题干要求,本题要求实现StrCharJL()函数的功能,分析后可以归纳出3个关键点:
关键点1如何对字符数组的元素逐一访问;关键点2如何对字符的ASCII码做左移的位运算;关键点3如何根据条件(移位后的ASCII值小于等于32或大于100)对计算结果进行判断,并分别对满足与不满足条件的情况进行处理。
接着分析每一步的解决方法,关键点1通过字符串处理函数strlen获取字符串的长度,再通过获得的长度使用下标法对字符数组的元素逐一访问;关键点2可以直接对字符的ASCII码进行位运算;关键点3通过if判断结构和逻辑表达式即可实现功能。
【参考答案】
voidStrCharJL(void)
{inti,j;/*定义循环控制变量*/
intstr;
charch;
for(i=0;i{
str=strlen(xx[i]);/*求得当前行的字符串长度*/
for(j=0;j{
ch=xx[i][j]<<4;
if(ch<=32||ch>100)
continue;/*如果左移4位后字符的ASCII值小于等于32或大于100,则原字符保持不变*/
else
xx[i][j]+=4;/*否则就把左移后的字符ASCII值加上原字符的ASCII*/
}
}
}
12【考点分析】本题考查对字符数组中的字符计算。
考查的知识点主要包括:
字符串数组的访问,字符ASCII码的算术运算,if判断结构以及逻辑表达式。
【解题思路】首先通读题目,得知此题属于字符计算问题;其次分析题干要求,本题要求实现ChA(void)函数的功能,分析后可以归纳出3个关键点:
关键点1如何对字符数组的元素逐一访问;关键点2按照要求取每个位置的字符和其下一个字符相加,并将结果作为该位置上的新字符,需要注意的是,末尾位置的新字符是该位原字符和第1个原字符相加的结果;关键点3最后要将所得的结果逆序保存。
接着分析每一步的解决方法,对于关键点1通过字符串处理函数strlen获取字符串的长度,再通过获得的长度用下标法对字符数组的字符元素逐一访问;关键点2在遍历访问字符时,可以直接取下一个位置的字符进行运算,在进行计算之前需要首先保存第1个位置的字符,以作为计算最后位置新字符的条件;关键点3可以通过for循环对数组从首尾同时遍历的算法实现。
【参考答案】
voidChA(void)
{
inti,j,k;/*定义循环控制变量*/
intstr;/*存储字符串的长度*/
charch,temp;/*定义字符暂存变量*/
for(i=0;i{
str=strlen(xx[i]);/*求得当前行的字符串长度*/
ch=xx[i][0];/*将第一个字符暂存入ch*/
for(j=0;j/*将该字符的ASCII值赋值为下一个字符的ASCII值加1,得到新的字符*/
xx[i][j]+=xx[i][j+1];
xx[i][str-1]+=ch;
/*将最后一个字符的ASCII值与第一个字符的ASCII值相加,得到最后一个新的字符*/
for(j=0,k=str-1;j{
temp=xx[i][j];
xx[i][j]=xx[i][k];
xx[i][k]=temp;
}
}
}
13【考点分析】本题考查对字符串的查找和统计。
考查的知识点包括:
指针对字符串的访问方法,C语言循环嵌套结构。
【解题思路】首先通读题目,得知此题属于字符串处理问题;其次分析题干要求,本题要求实现findStr(char*str,char*sunstr)函数,该函数需要实现在一个字符串中查找另一个字符串,并统计出现次数的功能,分析后可以归纳出实现功能的3个关键点;关键点1如何实现对字符串中字符的遍历;关键点2如何实现对子字符串的查找功能;关键点3如何统计子串其出现的次数。
接着分析每一步的解决方法。
对于关键点1使用循环和指针的方式可以实现对字符串的访问;关键点2通过嵌套的循环可以实现查找功能,具体方法是,外层循环控制对主串的遍历,内层是对子串的遍历,当主串中当前字符和子串第1个字符相同时,继续判断其后的字符是否和子串的下一个字符相同,依次类推,则每次内层循环遍历过子串就表示找到一次;关键点3每找到一次子串的同时,累加一个记数器,作为出现次数的统计结果。
【参考答案】
intfindStr(char*str,char*substr)
{
intn=0;/*定义计数器变量,统计出现次数*/
char*p,*r;/*定义指针变量来分别指向两个字符串*/
while(*str)/*如果字符串没有结束,则一直循环下去*/
{
p=str;/*指针p指向字符串首地址*/
r=substr;/*指针r指向子字符串首地址*/
while(*r)/*若子字符串没有结束,则循环继续*/
if(*r==*p)/*如果子字符串的第一个字符等于字符串中的该字符,则继续比较下一个字符*/
{
r++;
p++;
}
else
break;/*否则退出循环*/
if(*r=='\0')/*如果子字符串在字符串中出现了一次*/
n++;/*则n加1,进行统计*/
str++;/*指向字符串中的下一个字符*/
}
returnn;/*返回统计结果n*/
}
14【考点分析】本题考查对字符数组中字符排序。
考查的知识点包括:
字符串数组的访问,数组排序算法。
【解题思路】首先通读题目,得知此题属于字符排序问题;其次分析题干要求,本题要求实现SortCharD()函数,该函数需要实现将字符数组中的元素排序的算法。
分析后可以归纳出实现该功能的关键点是:
如何按照字符从大到小的顺序对数组中的字符进行排序。
这可以通过循环嵌套的起泡法来实现。
【参考答案】
voidSortCharD()
{
inti,j,k;/*定义循环控制变量*/
intstr;/*存储字符串的长度*/
chartemp;/*定义数据交换时的暂存变量*/