【考點分析】 本題考查對一定范圍內(nèi)整數(shù)的篩選。考查的知識點主要包括:多位整數(shù)的分解算法,素數(shù)的判斷算法,if判斷語句和邏輯表達式。
【解題思路】 此題屬于數(shù)學類問題。分析題干要求,歸納出本題的2個關(guān)鍵點:關(guān)鍵點1判斷該數(shù)是否為素數(shù);關(guān)鍵點2判斷是否滿足條件:個位數(shù)字和十位數(shù)字之和被10除所得余數(shù)等于百位數(shù)字。
本題思路為:通過循環(huán)語句,依次求出所有3位數(shù)的各位數(shù)數(shù)字,并判斷是否滿足關(guān)鍵點2(個位數(shù)字和十位數(shù)字之和被10除所得余數(shù)等于百位數(shù)字),如果滿足則判斷該數(shù)是否為素數(shù),如果是則個數(shù)加1,并將該數(shù)加到和值中。判斷的方法為:依次取從2到該數(shù)1/2的數(shù)去除這個數(shù),如果有一個可被整除,則不是素數(shù),如果循環(huán)后的數(shù)大于該數(shù)的一半就可以判定該數(shù)是一個素數(shù)。
【參考答案】
void countValue()
{
int i,j; /*定義循環(huán)控制變量*/
int half;
int a3,a2,a1; /*定義變量存儲3位數(shù)每位的數(shù)字*/
for(i=101;i<1000;i++) /*在該范圍內(nèi)尋找符合條件的數(shù)*/
{
a3=i/100; /*求百位數(shù)字*/
a2=i%100/10; /*求十位數(shù)字*/
a1=i%10; /*求個位數(shù)字*/
if(a3==(a2+a1)%10) /*如果個位數(shù)字與十位數(shù)字之和被10除所得余數(shù)恰是百位數(shù)字*/
{
half=i/2;
for(j=2;j<=half;j++) /*進一步判斷該數(shù)是否為素數(shù)*/
if(i%j==0) break; /*如果不是素數(shù),則跳出循環(huán),接著判斷下一個數(shù)*/
if(j>half) /*如果是素數(shù)*/
{
cnt++; /*計算這些素數(shù)的個數(shù)cnt*/
sum+=i; /*計算這些素數(shù)值的和sum*/
}
}
}
}
【易錯提示】 素數(shù)的判斷算法使用錯誤,分解整數(shù)各個數(shù)位的方法錯誤,if判斷語句中邏輯表達式錯誤。
【考點分析】 本題考查結(jié)構(gòu)體數(shù)組的排序?疾榈闹R點主要包括:結(jié)構(gòu)體成員運算,字符串比較符,數(shù)組排序。
【解題思路】 此題屬于銷售記錄排序類題型。此類題型主要考查對結(jié)構(gòu)體數(shù)組的排序。解題時,應(yīng)注意3個關(guān)鍵點:關(guān)鍵點1如何按產(chǎn)品名稱從小到大排序;關(guān)鍵點2如果產(chǎn)品名稱相同;關(guān)鍵點3如何按金額從小到大排列。
數(shù)組排序可以用起泡法實現(xiàn),起泡法的思路是:將較小的值像空氣泡一樣逐漸"上浮"到數(shù)組的頂部,而較大的數(shù)值逐漸"下沉"到數(shù)組的底部。具體為第1趟用第1個記錄和第2個記錄進行比較,如果不符合要求,就進行交換,第2個記錄和第3個記錄比較,直到倒數(shù)第2個記錄和最后1個記錄比較完成;第2趟用第2個記錄和第3個記錄比較,然后第3個和第4個比較,依此類推。
本題在雙循環(huán)中進行每次記錄比較時,首先用字符串比較函數(shù)strcmp比較兩個產(chǎn)品的名稱,如果返回的值大于0,則這兩個產(chǎn)品進行數(shù)據(jù)交換;如果返回值等于0,再比較兩個產(chǎn)品的金額,如果前一個產(chǎn)品的金額大于后一個產(chǎn)品的金額,則這兩個產(chǎn)品進行數(shù)據(jù)交換。
【參考答案】
void SortDat()
{
int i,j; /*定義循環(huán)控制變量*/
PRO temp; /*定義數(shù)據(jù)交換時的暫存變量(這里是PRO類型的結(jié)構(gòu)體變量)*/
for(i=0;i<99;i++) /*利用選擇法進行排序*/
for(j=i+1;j<100;j++)
if(strcmp(sell[i].mc,sell[j].mc)>0) /*按產(chǎn)品名稱從小到大進行排列*/
{
temp=sell[i];
sell [i]=sell[j];
sell[j]=temp;
}
else if(strcmp(sell[i].mc,sell[j].mc)==0) /*若產(chǎn)品名稱相同*/
if(sell[i].je>sell[j].je) /*則按金額從小到大進行排列*/
{
temp=sell[i];
sell[i]=sell[j];
sell[j]=temp;
}
}
模板一 銷售記錄排序
【模板速記】
記憶口訣:一定義二循環(huán)三比較。定義指定義變量,循環(huán)指循環(huán)語句,比較是比較記錄成員大小及交換,詳見模板一。做題時,需靈活應(yīng)用模板,切勿死記硬背。
【易錯提示】 結(jié)構(gòu)型數(shù)據(jù)對成員的訪問用"."成員運算符;兩個字符串的比較用字符串比較函數(shù)strcmp。
相關(guān)推薦:
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |