【考点分析】 本题考查对一定范围内整数的筛选。考查的知识点主要包括:多位整数的分解算法,素数的判断算法,if判断语句和逻辑表达式。
【解题思路】 此题属于数学类问题。分析题干要求,归纳出本题的2个关键点:关键点1判断该数是否为素数;关键点2判断是否满足条件:个位数字和十位数字之和被10除所得余数等于百位数字。
本题思路为:通过循环语句,依次求出所有3位数的各位数数字,并判断是否满足关键点2(个位数字和十位数字之和被10除所得余数等于百位数字),如果满足则判断该数是否为素数,如果是则个数加1,并将该数加到和值中。判断的方法为:依次取从2到该数1/2的数去除这个数,如果有一个可被整除,则不是素数,如果循环后的数大于该数的一半就可以判定该数是一个素数。
【参考答案】
void countValue()
{
int i,j; /*定义循环控制变量*/
int half;
int a3,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*/
}
}
}
}
【易错提示】 素数的判断算法使用错误,分解整数各个数位的方法错误,if判断语句中逻辑表达式错误。
【考点分析】 本题考查结构体数组的排序。考查的知识点主要包括:结构体成员运算,字符串比较符,数组排序。
【解题思路】 此题属于销售记录排序类题型。此类题型主要考查对结构体数组的排序。解题时,应注意3个关键点:关键点1如何按产品名称从小到大排序;关键点2如果产品名称相同;关键点3如何按金额从小到大排列。
数组排序可以用起泡法实现,起泡法的思路是:将较小的值像空气泡一样逐渐"上浮"到数组的顶部,而较大的数值逐渐"下沉"到数组的底部。具体为第1趟用第1个记录和第2个记录进行比较,如果不符合要求,就进行交换,第2个记录和第3个记录比较,直到倒数第2个记录和最后1个记录比较完成;第2趟用第2个记录和第3个记录比较,然后第3个和第4个比较,依此类推。
本题在双循环中进行每次记录比较时,首先用字符串比较函数strcmp比较两个产品的名称,如果返回的值大于0,则这两个产品进行数据交换;如果返回值等于0,再比较两个产品的金额,如果前一个产品的金额大于后一个产品的金额,则这两个产品进行数据交换。
【参考答案】
void SortDat()
{
int i,j; /*定义循环控制变量*/
PRO temp; /*定义数据交换时的暂存变量(这里是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;
}
else if(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;
}
}
模板一 销售记录排序
【模板速记】
记忆口诀:一定义二循环三比较。定义指定义变量,循环指循环语句,比较是比较记录成员大小及交换,详见模板一。做题时,需灵活应用模板,切勿死记硬背。
【易错提示】 结构型数据对成员的访问用"."成员运算符;两个字符串的比较用字符串比较函数strcmp。
相关推荐:
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |