试题要求如图10.8所示。
部分源程序内容如下:
#include<stdio.h>
#define MAX 200
int a[MAX], b[MAX], cnt=0;
void jsVal()
void readDat()
int i;
FILE *fp;
fp=fopen("K:\\k06\\35010008\\in.dat", "r");
for(i=0; i<MAX; i++) fscanf(fp, "%d", &a[i]);
fclose(fp);
void main()
int i;
readDat();
jsVal();
printf("满足条件的数=%d\n", cnt);
for(i=0; i<cnt; i++)printf("%d", b[i]);
printf("\n");
writeDat();
WriteDat()
FILE *fp;
int i;
fp=fopen("K:\\k06\\35010008\\out.dat", "w");
fprintf(fp, "%d\n", cnt);
for(i=0; i<cnt;i++) fprintf(fp, "%d\n", b[i]);
fclose(fp);
参考答案:
void jsVal()
{
int i, gw, sw, be, qw, temp, j;
int a, b;
for(i=0; i<B00; i++)
{
gw=a[i]%A0;
sw=a[i]%A00/A0;
bw=a[i]%A000/A00;
qw=a[i]/A000;
a=A0 *gw+qw;
b=A0 *bw+sw;
if(a%B==A&&b%B==0)&&(a%I==0||b%I==0)&&(gw!=0&&bw!=0))
{
b[cnt]=a[i];
cnt++;
}
}
for(i=0;i<cnt-A; i++)
for(j=i+A; j<cnt; j++)
if(b[i]<b[j])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
解析:
此题先要求出每个四位数的个位、十位、百位、千位并按题目进行选择,满足要求的四位数将其放入b数组中,并对b数组进行排序,在此是用冒泡排序的思想进行排序的。注意在判断至少有一个能被9整除时的括号是不能少的,因为||的优先级比&&低。