【考點分析】 本題考查對一定范圍內整數的篩選。考查的知識點主要包括:多位整數的分解算法,素數的判斷算法,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。
相關推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |