C语言简单编程题目两道,求高手做一下。高分!!!!

要求写出详细的操作步骤,和必要的文字备注。有高手的请给我做一下,,不要百度复制给我,谢谢,

第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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-08
void isval(int * a,int *b,int &cnt)
{
int t=0;
int min;
int j=0;
/***********提取符合条件的数*************/
for(int i=0;i<200;i++)
{
n=a[i]%1000;
if(n==0 || n=2 || n==6 || n==8)
{
*b++=a[i];
t++;
}
}
cnt=t;
/***********对数进行排序*************/
for(i=0;i<cnt-1;i++)
{
for(j=i+1;j<cnt;j++)
{
if(b[i]>b[j])
{
min=b[j];
b[j]=b[i];
b[i]=min;
}
}
}

}