第1题 :
#include <stdio.h>
#include <stdlib.h>
#define MAX 200
int main(void)
{
int a[MAX], i = 0;
srand(time(NULL)); // 时间种子, 保证真随机, 每次不会相同
while (i < MAX) {
a[i] = rand() % 10000; // 随机获得10000以下数字, 0-9999
if (a[i] < 1000) { // 不是4位数
continue; // 重新随机
}
i++;
}
FILE *fp;
if ((fp = fopen("in.dat", "wb")) == NULL) {
printf("Open failed.\n");
}
//fwrite(a, sizeof(a), 1, fp); // 将数据写入文件, 字节的方式
for (i = 0; i < MAX; i++) { // 字符的方式, 看你下面的scanf, 可能你是要这种
fprintf(fp, "%d ", a[i]);
}
return 0;
}
第2题 :
void isVal(void)
{
int i, tmp, val;
int count = 0, j = 0;
for (i = 0; i < MAX; i++) { // 循环验证所有数字
count = 0; // 每次清0
tmp = a[i]; // 为了不改变a数组的值, 用tmp保存着
while (tmp > 0) { // 依次取得4个位存到val变量中
val = tmp % 10; // 个十百位位的顺序
tmp /= 10; // 每次除10, 以去掉个位数
if (val == 0 || val == 2 || val == 4
|| val == 6 || val == 8) { // 取得的数只要是这5个数中任意一个, count计数就加1
count ++;
}
}
if (count == 4) { // 如果count=4表示4个位都是0/2/4/6/8
b[j++] = a[i]; // 则复制此数字到b数组中, 同时j自增1
}
}
cnt = j; // j的值就是总共符合要求的数, 全局变量cnt赋值与j相同即可.
for (i = 0; i < cnt - 1; i++) { // 冒泡排序将b从小到大排列
for (j = 0; j < cnt - 1 - i; j++)
if (b[j] > b[j + 1]) {
tmp = b[j];
b[j] = b[j + 1];
b[j + 1] = tmp;
}
}
return;
}
温馨提示:答案为网友推荐,仅供参考