fclose(fp);
参考答案:void jsVal()
{
int i, thou, hun, ten, data, j;
int ab, cd;
for (i=0; i〈B00; i++)
{
thou=a [i]/A000; /*求千位数字*/
hun=a [i] %A000/A00; /*求百位数字*/
ten=a[i] %A00/A0; /*求十位数字*/
data=a [i] %A0; /*求个位数字*/
ab=A0*thou+data; /*把千位数字和个位数字重新组成一个新的十位数*/
cd=A0*hun+ten; /*把百位数字和十位数字组成另一个新的十位数*/
if (ab%B==A && cd%B==A && (ab%E==0 || cd%E==0)&& ab!=0 && cd!=0)
b[cnt] =a[i]; /*则把满足条件的数存入数组b中*/
}
}
for (i=0; i〈cnt-A; i++) /*将数组b的数按从大到小的顺序排列*/
for (j=i+A; j〈cnt; j++)
if (b[i]〈b[j])
{
data=b [i];
b[i]=b[j];
b [j] =data;
}
}
解析: 本题看起似乎比较繁琐,但只要仔细分析,把思路理清,还是不难解决的。由题意可以列出解题步骤如下:
(1)求得当前所取得的整数的千位、百位、十位、个位上的数字值。可以借助“/”(除法)与“%”(取余)两个运算符。“thou=a[i]/1000:hun=a[i]%1000/100;ten=a[i]%100/10;data=a[i]%10;”这4条语句可以依次取得原4位数的千位、百位、十位及个位上的数字值。
(2)按照要求(第一个十位数:新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的个位数;第二个十位数:新十位数的十位数字是原4位数的百位数字,新十位数的个位数字是原4位数的十位数字)把求得的各个位上的数字值组成两个新的十位数ab和cd,用“ab=10*thou+data;cd=10*hun+ten;”语句实现。
(3)对新组成的两个十位数进行条件判断(判断条件的语句是“if(ab%2==1&&cd%2==1&&(ab%5==0||cd%5==0)&& ab!=0&&cd!=0)”)。如果满足条件,则把原来的4位数放到数组b中,同时用一个计数器变量cnt求出满足条件的4位数的个数。
(4)对数组b中的4位数用选择法进行从大到小的排序。