注意:部分源程序已给出。原始数据文件存放的格式是:每行的宽度均小于80个字符。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
void encryptChar() /*标准答案*/ {int I; char *pf;
for(I=0;I {if(*pf%2==0||*pf*11%6<=32) ; else *pf=*pf*11%6; pf++; } } } 或者: void encryptChar() { int i,j; char *p; for(i=0;i else xx[i][j]=p; } } 原程序如下: #include unsigned char xx[50][80]; int maxline=0;/*文章的总行数*/ int ReadDat(void); void WriteDat(void); void encryptChar() { } void main() { clrscr(); if(ReadDat()){ printf(\数据文件ENG.IN不能打开!\\n\\007\ return; } encryptChar(); WriteDat(); system(\ } int ReadDat(void) { FILE *fp; int i=0; unsigned char *p; if((fp=fopen(\ 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(void) { FILE *fp; int i; fp=fopen(\ for(i=0;i fclose(fp); } 19:编写一个函数findstr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如:假定输入的字符串为\子字符串为\函数返回值为6。函数readwriteDat()的功能是实现从文件in.dat中读取两个字符穿4,并调用函数findstr(),最后把结果输出到文件out.dat中。 注意:部分源程序已给出。 请勿改动主函数main()和函数ReadWrite()的内容。 int findStr(char *str,char *substr) { int n; char *p , *r; n=0; while ( *str ) { p=str; r=substr; while(*r) if(*r==*p) { r++; p++; } else break; if(*r=='\\0') n++; str++; } return n; } 原程序如下: #include int findStr(char *str,char *substr) { int n; char *p , *r; n=0; while ( *str ) { p=str; r=substr; while(*r) if(*r==*p) { r++; p++; } else break; if(*r=='\\0') n++; str++; } return n; } main() { char str[81],substr[3]; int n; clrscr(); printf(\ printf(\ puts(str);puts(substr); n=findStr(str,substr); printf(\ ReadWrite(); system(\ } ReadWrite() {char str[81],substr[3],ch; int n,len,i=0; FILE *rf, *wf ; rf = fopen(\ wf = fopen(\ while(i<5) {fgets(str,80,rf); fgets(substr,10,rf); len=strlen(substr)-1; ch=substr[len]; if(ch=='\\n'||ch==0x1a) substr[len]=0; n=findStr(str,substr); fprintf(wf,\ i++; } fclose(rf) ; fclose(wf) ; } 20:编写函数jsvalue,它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返 回。其中Fibonacci数列F(n)的定义为: F(0)=0,F(1)=1 F(n)=F(n-1)+F(n-2) 最后调用函数writeDat()读取10个数据t,分别得出结果且把结果输出到文件out.dat中。 例如:当t=1000时,函数值为:1597。 注意:部分源程序已给出。 请勿改动主函数main()和写函数writeDat()的内容。 int jsValue(int t) /*标准答案*/ { int f1=0,f2=1,fn; fn=f1+f2; while(fn<=t) {f1=f2; f2=fn; fn=f1+f2;} return fn; } 原程序如下: #include main() {int n; n=1000; printf(\ writeDat();} writeDat() {FILE *in,*out; int i,n,s; in=fopen(\ out=fopen(\ for(i=0;i<10;i++){ fscanf(in,\ s=jsvalue(n); printf(\ fprintf(out,\ fclose(in); fclose(out);} 21:下列程序的功能是:利用发下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。 xn+1=cos(xn) 迭代步骤如下: (1)取X1初值为0.0; (2)X0=X1,把X1的值赋给X0; (3)X1=COS(X0),求出一个新的X1; (4)若X0-X1绝对值小0.000001,执行步骤(5),否则执行步骤(2); (5)所求X1就是方程cos(X)-X=0的一个实根,作为函数值返回。 请编写函数countvalue()实现程序的要求,最后调用函数WRITEDAT()把结果输出到文件 OUT17.DAT中。 注意:部分源程序已给出。 请勿改动主函数main()和输出数据函数writeDAT()的内容。 float countValue() /*标准答案*/ {float x0,x1=0.0; while(1) {x0=x1; x1=cos(x0); if(fabs(x0-x1)<1e-6) break; } return x1;