问答题编写一个函数findStr(char *str,char*substr),该函数统计一个长度为2的子字符串substr在另一个字符串str中出现的次数,该次数作为函数值返回。
例如,假定输入的字符串为"asd asasdfg asd as zx67 asd mklo",子字符串为"as",函数返回值是6。
函数ReadWrite()实现从文件in.dat中读取两个字符串,并调用函数findStr(),最后把结果输出到文件out.dat中。
请勿改动主函数main()和其他函数中的任何内容,仅在函数findStr()的花括号中填入你编写的若干语句。
#include <stdio.h>
#include <string.h>
void ReadWrite();
int findStr(char *str, char *substr)
{
}
main ()
{
char str[81], substr[3];
int n;
printf ("输入到原字符串:");
gets(str);
printf ("输入子字符串:");
gets(substr);
puts (str);
puts (substr);
n=findStr(str, substr);
printf("n=%d/n", n);
ReadWrite ();
}
/*从文件in.dat中读取两个字符串,并调用函数findStr(),最后把结果输出到文件out.dat中*/
void ReadWrite()
{
char str[81], substr[3], ch;
int n, len, i=0;
FILE *rf, *wf;
rf=fopen("in.dat", "r");
wf=fopen("out.dat", "w");
while(i<5)
{
fgets (str, 80, rf); //从文件in.dat中读取长度为79的字符串存入到字符串str
fgets (substr, 10, rf); //从文件in.dat中读取长度为9的子字符串存入到字符串substr
len=strlen (substr)-1; //把子字符串substr的长度减1的值赋给len
ch=substr [len]; //把子字符串的最后一个字符的值赋给字符ch
if(ch == "/n" || ch == 0x1a)
substr[len]=0;
/*调用函数findStr(str, substr)返回子字符串substr在字符串str中出现的次数*/
n=findStr(str, substr);
fprintf (wf, "%d/n", n); //把计算结果n写入到文件out.dat
i++; //循环变量i加1
}
fclose(rf);
fclose(wf);
}
问答题已知在文件IN13.DAT中存有若干个(个数〈200)4位数字的正整数,函数ReadDat()的功能是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求: (1)求出该文件中共有多少个正整数totNum; (2)求这些数右移1位后,产生的新数是偶数的数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数WriteDat()把所求的结果输出到文件OUT13.DAT中; 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include〈stdio.h> #include〈conio.h> #define MAXNUM 200 int xx [MAXNUM]; int totNum = 0; /* 文件IN13.DAT 中共有多少个正整数 */ int totCnt = 0; /* 符合条件的正整数的个数*/ double totPjz = 0.0; /* 平均值 */ int ReadDat (void); void Writedat(void); void CalValue(void) main ( ) int i; clrscr ( ); for(i = 0; i〈 MAXNUM; i++) xx[i] = 0; if (ReadDat ()) print f ( "数据文件 IN13.DAT 不能打开! /007/n" ); return; CalValue ( ); printf("文件IN13.DAT 中共有正整数= %d 个/n", totNum); printf("符合条件的正整数的个数 = %d 个/n", totCnt); printf("平均值=%.21f/n", totPjz); Writedat ( ); int ReadDat (void) FILE *fp; int i = 0; if((fp = fopen ("IN13.DAT", "r") == NULL) return 1; while(! feof(fp) ) fscanf(fp, "%d,", fclosefp); return 0; void WriteDat(void) FILE *fp; fp = fopen("OUT13.DAT", "w"); fprintf(fp, "%d/n%d/n%.21f/n", totNum, totCnt, totPjz); fclose(fp);
问答题已知数据文件IN23.DAT中存有200个4位数,并已调用读函数readDat()把这些数存入数组a中。请编制函数jsVal(),其功能是:依次从数组a中取出一个4位数,如果4位数连续大于该4位数以前的5个数且该数是奇数,该数必须能被7整除,则统计出满足此条件的数的个数cnt,并把这些4位数按从大到小的顺序存入数组b中,最后调用写函数writeDat()把结果cnt及数组b中符合条件的4位数输出到OUT23.DAT文件中。 注意:部分源程序已给出。 程序中已定义数组:a[200],b[200],已定义变量:cnt。 请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。 试题程序: #include〈stdio.h> #define MAX 200 int a[MAX], b[MAX], cnt = 0; void jsVal() void readDat() int i; FILE *fp; fP = fopen("IN23.DAT", "r"); for(i=0; i〈MAX; i++) fscanf(fp, "%d", fclose(fp); 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("OUT23.DAT", "w"); fprintf(fp, "%d/n", cnt); for(i=0; i〈cnt; i++) fprintf(fp, "%d/n", b[i] ); fclose(fp);
问答题已知数据文件IN.DAT中存有300个4位数,并已调用读函数readDat(),把这些数存入数组a中,请编写一个函数jsValue(),其功能是:求出数组a中千位上的数加百位上的数等于十位上的数加个位数上的数的个数cnt,再把所有满足此条件的4位数依次存入数组b中,然后对数组b中的数按从大到小的顺序排序,最后调用写函数writeDat(),把数组b中的数输出到OUT.DAT文件。
例如,7153,7+1=5+3,则该数满足条件,存入数组b中,且个数cnt=cnt+1。
8129,8+1≠2+9,则该数不满足条件,忽略。
程序中已定义数组a[300],b[300],已定义变量cnt。请勿改动主函数main()、读函数readDat()和写函数writeDat()的内容。
[试题程序]
#include<stdio.h>
int a[300],b[300],cnt=0;
void readDat();
void writeDat();
void jsValue()
{
}
void main()
{
int i;
readDat();
jsValue();
writeDat();
printf("cnt=%d/n",cnt);
for(i=0;i<cnt;i++)
printf("b[%d]=%d/n",i,b[i]);
}
void readDat()
{
FILE*fp;
int i;
fp=fopen("IN.DAT","r");
for(i=0;i<300; i++)
fscanf(fp,"%d,",&a[i]);
fclose(fp);
}
void writeDat()
{
FILE*fp;
int i;
fp=fopen("OUT.DAT,"w");
fprintf(fp,"%d/n",cnt);
for(i=0;i<cnt;i++)
fprintf(fp,"%d,/n",b[i]);
fclose(fp);
}
问答题下列程序的功能是;把s字符串中的所有字母改成该字母的下一个字母,字母z改成字母a。要求大写字母仍为大写字母,小写字母仍为小写字母,其他字符不做改变。请编写函数chg(char*s)实现程序要求,最后调用函数readwriteDAT(),读取in36.dat中的字符串,并把结果输出到文件out36.dat中。 例如:s字符串中原有的内容为Mn 123Zxy,则调用该函数后,结果为No 123Ayz。 注意:部分源程序已给出。 请勿改动主函数main()和输入输出函数readwriteDAT()的内容。 试题程序: #include<stdio.h> #include<string.h> #include<conio.h> #include<ctype.h> #define N 81 void readwriteDAT ( ); void chg(char *s) main ( ) char a [N]; clrscr(); printf("Enter a string:"); gets(a); printf("The original string is :"); puts(a); chg(a); printf("The string after modified :"); puts(a); readwriteDAT(); void readwriteDAT() int i; char a[N]; FILE *rf,*wf; rf=fopen("in36.dat","r"); wf=fopen("out36.dat","w"); for(i=0;i<10;i++) fgets(a,81,rf); chg(a); fprint f (wf, "%s" , a); fclose (rf); fclose (wf);
问答题已知数据文件in.dat中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一函数jsValue(),其功能是:求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再求出所有满足此条件的四位数平均值pjz1,以及所有不满足此条件的四位数平均值pjz2。最后main()函数调用写函数wnteDat()把结果cnt,pjz1,pjz2输出到out.dat文件。
例如:7153,7+1=5+3,则该数满足条件计算平均值pjz1,且个数cnt=cnt+1。
8129,8+1!=2+9,则该数不满足条件计算平均值pjz2。
程序中已定义数组:a[300],已定义变量:cnt,pjz1,pjz2
请勿改动数据文件in.dat中的任何数据、主函数main()、读函数readDat()和写函数wnteDat()的内容。
#include <stdio.h>
int a[300], cnt=0;
double pjzi=0.0, pjz2=0.0;
void readDat();
void writeDat();
void jsValue()
{
}
void main()
{
readDat();
jsValue();
writeDat();
printf("cnt=%d/n满足条件的平均值pzjl=%7.2lf/n不满足条件的平均值pzj2=%7.2lf/n", cnt, pjz1, pjz2);
}
void readDat()
{
FILE *fp;
int i;
fp=fopen("in.dat", "r");
for(i=0; i<300; i++)
fscanf(fp, "%d,",
fclose(fp);
}
void writeDat()
{
FILE *fp;
fp=fopen("out.dat", "w");
fprintf(fp, "%d/n%7.2lf/n%7.2lf/n", cnt, pjz1, pjz2);
fclose(fp);
}
问答题某学校网络计费系统使用SQL Server 2008作为数据库管理系统,系统中需保存每个用户的每次登录和退出时间,该表的结构如下:CR_EATE TABLE登录日志表(序列号int identity(1,1),帐号varchar(8),登录时间datetime,退出时间datetime,本次上网费用real);在系统运行一段时间后,此表中有近5千万条数据。此时,用户按照登录时间查询自己近期上网情况时速度缓慢。为了提高用户体验,某工程师提出建议对此表进行分区,请分析其建议合理性(若合理请给出最优的分区方案),并说明原因。在解决了①中的问题系统平稳运行3年后,管理员考虑升级硬件。经过监控,系统资源使用情况如下:.CPU使用率一般不超过50%.内存使用率90%.磁盘IO使用率高峰期90%~95%,主要为读操作某工程师给出两种升级后的硬件配置方案:.配置一:2颗处理器,6核心,主频2.4GHz;64GB内存;300GB 10K转SAS硬盘,3块,RAID0.配置二:2颗处理器,6核心,主频1.9GHz;128GB内存;800GB固态硬盘SAS读取密集型MLC,2块,RAIDl请根据以上数据,在不考虑费用因素的前提下,说明哪种配置更合理,并给出原因。
问答题函数ReadDat()的功能是实现从文件ENG4.IN中读取一篇英文文章,存入到字符串数组xx中。请编制函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代,结果仍存入数组xx对应的位置上,最后调用函数writeDat()把结果xx输出到文件PS4.DAT中。 替代关系:f(p)=p*11 mod 256(p是数组xx中某一个字符的ASCⅡ值,f(p)是计算后新字符的ASCⅡ值),如果计算后f(p)的值小于等于32或大于130,则该字符不变,否则将f(p)所对应的字符进行替代。 注意:部分源程序已给出。 原始数据文件存放的格式是:每行的宽度均小于80个字符。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include<stdib.h> #include<stdio.h> #include<string.h> #include<ctype.h> unsigned char xx[50][80]; int maxline=0;/*文章的总行数*/ int ReadDat(void); void WriteDat(void); void eneryptChar() void main() system("CLS"); if(ReadDat()) printf("数据文件ENG4.IN不能打开!/n/007"); return; encryptChar(); WriteDat(); int ReadDat(void) FILE *fp; int i=0; unsigned char *p; if((fp=fopen("ENG4.IN","r"))==NULL)return 1; while(fgets(xx[i],80,fp)!=NULL) P=strchr(xx[i],'/n'); if(P) *P=0; i++; maxline=i; fclose(tp); return 0; void WriteDat(void) FILE *fp; int i; fp=tbpen("PS4.DAT","w"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprinff(fp,"%s/n",xx[i]); fclose(fp);
问答题下列程序的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt以及满足此条件所有的SIX与NINE的和sum。请编写函数countValue()实现程序的要求,最后调用函数writeDat(),把结果cnt和sum输出到OUT.DAT文件中。 其中,S、I、X、N、E各代表一个十进制数。 注意:部分源程序已经给出。 请勿改动主函数main()和输出数据函数writeDat()的内容。 #include<stdio.h> int cnt,sum; void countValue() void writeDat() FILE *fp; fp=fopen("OUT.DAT","w"); fprintf(fp,"%d/n%d/n",cnt,sum); fclose(fp); void main() cnt=sum=0; countValue(); printf("满足条件的个数=%d/n",cnt); printf("满足条件所有的SIX与NINE的和=%d/n",sum); writeDat();
问答题程序test.c的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请考生编写函数num(int m,int k,int xx[])实现程序的要求,最后调用函数readwriteDAT()把结果输出到out.dat文件中。 例如,若输入17,5,则应输出:19,23,29,31,37。 注意:部分源程序存在test.c文件中。 请勿改动数据文件in.dat中的任何数据以及主函数main()和输出函数readwriteDAT()的内容。 #include <stdio.h> //include语句说明各程序中包含vc6.0中的标准输入输出库函数stdio.h void readwriteDAT();//函数readwriteDAT()说明语句 int isP(int m) //函数isP(int m)判断m是否为素数,如果是素数则返回1,否则返回0 int i; //定义变量i for (i=2; i<m; i++) //变量i从2依次递增到m-1 if (m % i==0) return 0; //如果m能被i整除,返回0 return 1; //否则返回1 void num(int m, int k, int xx[]) main() int m, n, xx[1000]; //定义变量m,n和数组xx[1000] printf("/nPlease enter two integers:"); scanf("%d, %d", //从键盘读入两个数赋给变量m,n num (m,n,xx); //调用函数num(int m,int k,int xx[])实现将大于整数m且紧靠m的k个素数存入数组xx for (m=0; m<n; m++) //变量m从0依次递增到n-1 printf("%d",xx[m]); //输出数组元素xx[m] printf("/n"); //输出一个回车换行符 readwriteDAT();//调用函数readwriteDAT()把结果输出到out.dat文件中 void readwriteDAT()//函数readwriteDAT()的定义语句 int m,n,xx[1000],i; //定义整型变量m,n,i和数组xx[1000] FILE *rf,*wf; //定义文件指针变量rf,wf rf=fopen("in.dat","r"); //以只读的方式的打开文件in.dat,并用rf指向这个文件 wf=fopen("out.dat","w"); //以只写的方式的打开文件out.dat,并用wf指向这个文件 for (i=0; i<10; i++) //循环变量i从0依次递增到9 fscanf (rf,"%d%d", //从文件in.dat读入两个数值赋给m,n num (m,n,xx);//调用函数函数num(m,k,xx[])实现将大于整数m且紧靠m的k个素数存入数组xx for(m=0;m<n; m++) //循环变量m从0依次递增到n-1 fprintf (wf,"%d",xx[m]); //把数组元素xx[m]写入到文件out.dat中 fprintf (wf,"/n"); //把回车换行符写入到文件out.dat中 fclose (rf); //关闭输入文件in.dat fclose (wf); //关闭输出文件out.dat
问答题设某全国性的运输企业建立了大型OLTP系统,并在该系统之上建立了数据仓库。OLTP系统和数据仓库中有如下数据表:
运输明细表(运输单ID,发送站ID,终到站ID,货物ID,货物重量,运输价格,发货日期)
汇总表1(发送站ID,终到站ID,货物ID,发货日期,总重,总运价)
汇总表2(发送站ID,终到地区ID,货物ID,发货日期,总重,总运价)
汇总表3(发送站ID,终到站ID,货物ID,发货月份,总重,总运价)
汇总表4(发送地区ID,终到地区ID,货物类别ID,发货日期,总重,总运价)
该企业管理的货运站约有100个,货物约有500种共10类,各汇总表都建有主码,且各表有合理的维护策略,在每次维护后数据能保持一致。设有视图V,该视图的访问频率很高,其查询结果模式为(发送地区ID,终到站ID,发货月份,总重,总运价),该视图现以汇总表1为计算数据源。经监控发现,汇总表1的被访问频率过高,导致系统整体性能下降,而其它汇总表被访问频率较低。在不增加汇总表和索引的情况下,请给出一个改善系统服务性能的优化方案,并简要说明理由。
问答题已知在IN.DAT文件中存有若干个(<200)四位数字的正整数,函数ReadDat()读取若干个正整数并存入数组xx中。请编写函数CalValue(),其功能是:(1)求出这文件中共有多少个正整数totNum;(2)求这些数中的各位数字之和是偶数的数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz,最后调用函数writeDat()把所求的结果输出到OUT.DAT文件中。 注意:部分程序已经给出。 请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。 #include<stdio.h> #include<conio.h> #define MAXNUM 200 int xx[MAXNUM]; int totNum=0; int totCnt=0; double totPjz=0.0; int ReadDat(void); void writeDat(void); void CalValue(void) void main() int i; for(i=0;i<MAXNUM;i++) xx[i]=0; if(ReadDat()) printf("数据文件IN.DAT不能打开!/007/n"); return; CalValue(); printf("IN.DAT文件中的正整数个数=%d个/n",totNum); printf("符合条件的正整数个数=%d个/n",totCnt); printf("平均值=%.2f/n",totPjz); writeDat(); int ReadDat(void) FILE *fp; int i=0; if((fp=fopen("IN.DAT","r"))==NULL) return 1; while(!feof(fp)) fscanf(fp,"%d,",&xx[i++]); fclose(fp); return 0; void writeDat(void) FILE *fp; fp=fopen("OUT.DAT","w"); fprintf(fp,"%d/n%d/n%6.2f/n",totNum,totCnt,totPjz); fclose(fp);
问答题已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中。请编写函数jsVal(),其功能是:若一个四位数的干位上的数字值小于等于百位上的数字值,百位上的数字值小于等于十位上的数字值,以及十位上的数字值小于等于个位上的数字值,并且原四位数是偶数,则统计出满足此条件的个数cnt,并把这些四位数按从小到大的顺序存入数组b中,最后调用写函数writeDat(),把结果cnt以及数组b中符合条件的四位数输出到OUT.DAT文件中。 注意:部分程序已经给出。 程序中已定义数组:a[200],b[200];已定义变量:cnt 请勿改动数据文件IN.DAT中的任何数据及主函数main()、读函数readDat()和写函数writeDat()的内容。 #include<Stdio.h> #define MAX 200 int a[MAX],b[MAX],cnt=0; void jsVal() void readDat() int i; FILE *fp; fp=fopen("IN.DAT","r"); for(i=0;i<MAX;i++) fscanf(fp,"%d,",&a[i]); fclose(fp); void writeDat() FILE *fp; int i; fp=fopen("OUT.DAT","w"); fprintf(fp,"%d/n",cnt); for(i=0; i<cnt; i++) fprintf(fp,"%d/n",b[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();
问答题某级数的前两项A
1
=1,A
2
=1,以后各项具有如下关系:
A
n
=A
n-2
+2A
n-1
程序test.c的功能是:要求依次对于整数M,求出级数前n的和S
n
=A
1
+A
2
+…+A
n
小于M的项数n,并依次把n值存入数组单元b[0],b[1]和b[2]中,请考生编制jsValue()函数来实现此功能,最后调用函数writeDat()把数组b[]中的值输出到out.dat文件中。
请勿改动主函数main()和输出数据函数writeDAT()的内容。
#include <stdio.h>
int b[3]; //定义全局整型一维数组b[3]
void writeDAT(); //输出函数writeDAT()的说明语句
void jsValue()
{
}
main ()
{
jsValue(); //调用函数jsValue () ,实现题目要求的功能
printf("M=100, n=%d/nM=1000, n=%d/nM= 10000, n=%d/n", b[0], b[1], b[2]);
writeDAT ();
}
/*函数writeDat()把数据b[]中的值输出到out.dat文件中*/
void writeDAT()
{
FILE *fp;
fp=fopen("out.dat", "w");
fprintf(fp, "%d/n%d/n%d/n", b[0], b[1], b[2]);
fclose(fp);
}
问答题函数ReadDat()的功能是从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中。请编写函数encryChar(),按给定的替代关系对数组xx中所有字符进行替换,替换后的字符仍存入数组xx的对应位置上,最后调用函数WriteDat(),把结果xx输出到文件PS.DAT中。
替代关系:f(p)=P×13 mod 256(p是数组xx中某一个字符的ASCII码值f(P)是计算后新字符的ASCII码值),如果计算后f(p)的值小于等于32或其ASCII码值是偶数,则该字符不变,否则,将f(P)所对应的字符进行替换。
原始数据文件的存放格式是每行的宽度均小于80个字符。请勿改动主函数main()、读函数ReadDat()和写函数WfiteDat()的内容。
[试题程序]
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
unsigned char xx[50][80];
int maxline=0;
int ReadDat(void);
void WriteDat(void);
void encryChar()
{
}
void main()
{
system("CLS");
if(ReadDat())
{
printf("数据文件ENG.IN无法打开!
/n/007");
return;
}
encryChar();
WriteDat();
}
int ReadDat(void)
{
FILE*fp;
int i=0;
unsigned char*P;
if((fp=fopen("ENG.IN","r"))==NULL)
return 1;
while(fgets(xx[i],80,fp)!=NULL)
{
P=strchr(xx[i],"/n");
if(P)
*P=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}
void WriteDat()
{
FILE*fp;
int i;
fp=fopen("ps.dat","w");
for(i=0;i<maxline;i++)
{
printf("%S/n",xx[i]);
fprintf(fp,"%s/n",xx[i]);
}
fclose(fp);
}
问答题请补充完整程序,使得程序能实现以下功能: 从文件IN.dat中读取200个整数至数组number中,求出最大数max及最大数的个数cnt和数组number中能被3整除或能被7整除的算术平均值ave(保留2位小数)。把结果max、 cnt、ave输出到OUT. dat文件中。 注意:部分程序、读数据函数read_ dat (int number[200])及输出格式已给出。#include <conio. h>#include <stdio. h>#define N 200void read_ dat(int number[N]) int i, j; FILE *fp; fp = fopen("IN. dat", "r"); for (i=0; i<20; i++) for (j=0; j<10; j++) fscanf(fp, "%d,", printf("%d ", number[i*10+j]); printf ("/n"); fclose (fp);void main () int cnt, number[N], max; float ave; FILE *fw; int i, k; ' long j = 0; fw = fopen("OUT.dat", "w"); read_ dat (number); / ************************************************ / / ************************************************ / printf("/n/nmax=%d, cnt=%d, ave=%6.2f/n", max, cnt, ave); fprintf(fw, "%d/n%d/n%6.2f/n", max, cnt, ave); fclose (fw);
问答题设在SQL Servet2008某数据库中有商品表和销售表,两个表的定义如下:
CREATE TABLE商品表(
商品号char(10)PRIMARY KEY,
商品名varchar(40),
类别varchar(20),
进货单价int);
CREATETABLE销售表(
商品号char(10)REFERENCES商品表(商品号),
销售时间datetime,
销售数量int,
销售单价int,
PRIMARYKEY(商品号,销售时间));
现要创建一个存储过程:查询指定类别的每种商品当前年销售总金额(销售总金额=销售单价*销售数量)。请补全下列代码。
CREATEPROC p_TotalProfit
@lb varchar(20)
AS
SELECT商品名,(SELECT______FROM销售表t1 WHERE______and______=year(Getdate()))AS销售总金额FROM商品表t2 WHERE______
问答题已知在文件IN.DAT中存有若干个(个数<200)4位正整数,函数ReadDat()的功能是读取这些正整数并存入数组xx中。请编写函数CalValue(),其功能是:(1)求出该文件中正整数的个数totNum。(2)求这些数右移1位后,产生的新数中偶数的个数totCnt,以及满足此条件的这些数(右移前的值)的算术平均值totPjz,最后调用函数WriteDat(),把结果输出到文件OUT.DAT中。
请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。
[试题程序]
#include<stdio.h>
#include<stdlib.h>
#define MAXNUM 200
int xx[MAXNUM];
int totNum=0; //文件IN.DAT正整数的个数*/
int totCnt=0; //符合条件的正整数的个数
double totPjz=0.0; //平均值
int ReadDat(void);
void WriteDat(void);
void CalValue(void)
{
}
void main()
{
int i;
system("CLS");
for(i=0; i<MAXNUM; i++)
xx[i]=0;
if(ReadDat())
{
printf("数据文件IN.DAT无法打开!/007/n");
return;
}
CalValue();
printf("文件IN.DAT中正整数的个数=%d个/n", totNum);
printf("符合条件的正整数的个数=%d个/n", totCnt);
printf("平均值=%.21f/n", totPjz);
WriteDat();
}
int ReadDat(void)
{
FILE*fp;
int i=0;
if((fp=fopen("IN.DAT", "r"))==NULL)
return 1;
while(!feof(fp))
{
fscanf(fP, "%d,",
}
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE*fp;
fp=fopen("OUT.DAT", "w");
fprintf(fp, "%d/n%d/n%.21f/n", totNum, totCnt, totPjz);
fclose(fp);
}
问答题已知数据文件in.dat中存有300个四位数,并已调用读函数ReadDat()把这些数存入数组a中。请编写函数jsValue(),其功能是:求出千位数上的数减百位数上的数减十位数上的数减个位数上的数大于零的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b的四位数按从小到大的顺序进行排序,最后调用写函数writeDat(),把结果输出到out.dat文件。
例如:9123, 9-1-2-3>0,则该数满足条件存入数组b中,且个数cnt=cnt+1。
9812,9-8-1-2<0,则该数不满足条件,忽略。
注意:部分源程序已经给出。
程序中已定义数组:a[300],b[300];已定义变量:cnt。
请勿改动主函数main()、读函数ReadDat()和写函数writeDat()的内容。
#include <stdio.h>
int a[300],b[300],cnt=0;
void jsValue()
{
}
void ReadDat()
{
FILE *fp;
int i;
fp=fopen("in.dat","r");
for(i=0;i<300;i++)
fscanf(fp,"%d,",
fclose(fp);
}
void writeDat()
{
FIIE *fp;
int i;
fp=fopen("out.dat","w");
fprintf(fp,"%d/n",cnt);
for(i=0;i<cnt;i++)
fprintf(fp,"%d/n",b[i]);
fclose(fp);
}
main()
{
int i;
ReadDat();
jsValue();
writeDat();
printf("cnt=%d/n",cnt);
for(i=0;i<cnt;i++)
printf("b[%d]=%d/n",i,b[i]);}
问答题函数ReadDat()实现从IN.DAT文件中读取1000个十进制整数到数组xx中。请编写函数Compute()分别计算出xx中奇数的个数odd,偶数的个数even,以及所有数的平均值aver和方差totfc的值,最后调用函数WriteDat(),把结果输出到OUT.DAT文件中。计算方差的公式如下:原始数据文件存放的格式是:每行存放10个数(每个数均大于0且小于等于2000),并用逗号隔开。注意:部分源程序已经给出。请勿改动主函数main()、读函数ReadDat()和输出数据函数WriteDat()的内容。#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX1000intxx[MAX],odd=0,even=0;doubleaver=0.0,totfc=0.0;voidWriteDat(void);intReadDat(void){FILE*fp;inti,j;if((fp=fopen("IN.DAT","r"))==NULL)return1;for(i=0;i<100;i++){for(j=0;j<10;j++)fscanf(fp,"%d,",fscanf(fp,"/n");if(feof(fp))break;}fclose(fp);return0;}voidCompute(void){}voidmain(){inti;for(i=0;i<MAX;i++)if(ReadDat(){printf("数据文件IN.DAT不能打开!/007/n");return;Compute();printf("odd=%d/neven=%d/naver=%f/ntotfc=%f/n",odd,even,aver,totfc);WriteDat();}voidWriteDat(void){FILE*fp;fp=fopen("OUT.DAT","w");fprintf(fp,"%d/n%d/n%f/n%f/n",odd,even,aver,totfc);fclose(fp);}