题目:给数据文件IN.DAT中写入300个4位随机数。调用函数readDat()把这些随机数存入数组a中。编写函数jsValue(),其功能是求出千位数减去百位数减去个位数大于0的数的个数cnt,再求出所有满足条件的4位数的平均值pjz1,以及不满足条件的4位数的平均值pjz2.最后调用writeDat()把结果输出到OUT.DAT文件中。
分析:
(1)先产生300个大于1000小于9999的随机数,并应用fprintf()函数将其输出到文件IN.DAT中
(2)编写函数readDat()读取文件IN.DAT,在读取的过程中需要用到库函数fscanf(),将读取的值存入全局变量中a[MAXLINE]中(也可以将是静态的局部变量 static a[]);
(3)编写jsValue判断并找出满足条件的数。之前组声明数组为全局变量,因此不用给函数写参数;
(4)编写函数writeDat()将相应的值写入OUT.DAT中。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 #define MAXNUM 9999 5 #define MINNUM 1000 6 #define MAXLINE 300 7 8 void getRand(); 9 void readDat(); 10 void jsValue(); 11 int Sum(int n,int a[]); 12 void writeDat(); 13 14 double pjz1=0.0,pjz2=0.0; 15 int a[MAXLINE],cnt = 0; 16 17 main() 18 { 19 printf("Hellow FJK "); 20 getRand(); 21 readDat(); 22 jsValue(); 23 writeDat(); 24 } 25 void getRand() 26 { 27 int i; 28 FILE *fp; 29 30 fp=fopen("C:\Users\Administrator\Desktop\The C Programming Language\EX5\IN.DAT","w+"); 31 srand((unsigned int )time(NULL)); 32 for(i=0;i<MAXLINE;i++) 33 fprintf(fp,"%d ",rand()%(MAXNUM-MINNUM+1)+MINNUM); 34 fclose(fp); 35 } 36 37 void readDat() 38 { 39 int i; 40 FILE *fp; 41 42 fp=fopen("C:\Users\Administrator\Desktop\The C Programming Language\EX5\IN.DAT","r"); 43 for(i=0;i<MAXLINE;i++) 44 fscanf(fp,"%d",&a[i]); 45 fclose(fp); 46 } 47 48 void jsValue() 49 { 50 int i; 51 int ge_wei,shi_wei,bai_wei,qian_wei; 52 int b[MAXLINE]; 53 54 for(i=0;i<MAXLINE;i++) 55 { 56 ge_wei=a[i]%10; 57 shi_wei=a[i]%100/10; 58 bai_wei=a[i]%1000/100; 59 qian_wei=a[i]/1000; 60 if((qian_wei-ge_wei-shi_wei-bai_wei)>0) 61 { 62 cnt++; 63 b[i]=a[i]; 64 } 65 } 66 pjz1=Sum(cnt,b)/cnt; 67 pjz2=(Sum(MAXLINE,a)-Sum(cnt,b))/(MAXLINE-cnt); 68 } 69 70 int Sum(int n,int a[]) 71 { 72 int sum=0,i; 73 for(i=0;i<n;i++) 74 sum+=a[i]; 75 return sum; 76 } 77 78 void writeDat() 79 { 80 FILE *fp; 81 82 fp=fopen("C:\Users\Administrator\Desktop\The C Programming Language\EX5\OUT.DAT","w+"); 83 fprintf(fp,"%d %f %f ",cnt,pjz1,pjz2); 84 fclose(fp); 85 }