问答题下列程序的功能是:将大于整数m且紧靠m的k个素数存入数组xx。请编写函数num(int m,int k,int xx[])实现程序功能,最后调用函数readwriteDAT(),把结果输出到OUT.DAT文件中。
例如,若输入17,5,则应输出19,23,29,31,37。
注意:请勿改动主函数main()和输入输出函数readwriteDAT()的内容。
【试题程序】
#include < stdlib.h >
#include < stdio.h >
void readwriteDAT () ;
void num (int m, int k, int xx[ ] )
{
}
void main ()
{
int m,n,xx[1000];
system ( "CLS" ) ;
printf ("/nPlease enter two integers :");
scanf ("%d, %d",
num(m, n, xx);
for (m =0;m<n;m ++ )
printf ("%d ",xx[m] ) ;
printf ("/n") ;
readwriteDAT () ;
}
void readwriteDAT ()
{
int m, n, xx[1000],i;
FILE * rf,* wf;
rf = fopen ("IN.DAT", "r") ;
wf = fopen ("OUT. DAT", "w") ;
for (i =0;i <10;i ++ )
{
fscanf (rf,"%d %d",
num (m, n, xx) ;
for (m =0;m <n;m ++ )
fprintf (wf, "%d ",xx[m] ) ;
fprintf (wf, "/n") ;
}
fclose (rf) ;
felose (wf) ;
}
问答题已知数据文件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,",
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("/n");
writeDat();
}
问答题设有n个人坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始从1到m报数,如此进行下去直到所有的人都出圈为止。先要求按出圈次序,每10个人为一组,给出这n个人的顺序表。请编制函数Josegh()实现此功能并调用函数WriteDat()把编号按照出圈顺序输出到文件OUT59.DAT中。 设n=100,s=1,m=10进行编程。 注意;部分源程序已给出。 请勿改动主函数main()和写函数WriteDat()的内容。 试题程序: #include<stdio.h> #define N 100 #define S 1 #define M 10 int p[100],n,s,m; void writeDat(void); void Josegh(void) void main () m=M; n=N; s=S; Josegh(); WriteDat(); void WriteDat(void) int i; FILE *fp; fp=fopen("OUT59.DAT", "w"); for(i=N-1;i>=0;i--) printf ( "%4d" ,p [i]); fprintf(fp, "%4d",p[i]); if (i%10==0) printf("/n"); fprintf(fp,"/n"); fclose(fp);
问答题函数ReadDat()实现从IN.DAT文件中读取一篇英文文章并存入到字符串数组xx中。请编写函数ConvertCharD(),其功能是:以行为单位把字符串中的所有小写字母改写成该字母的上一个字母,如果是字母a,则改写成字母z。大写字母仍为大写字母,小写字母仍为小写字母,其他字符不变。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat(),把结果xx输出到OUT.DAT文件中。 例如,原文:Adb.Bcdza abck.LLhj 结果:Aca.Bbcyz zabj.LLgi 原始数据文件存放的格式是:每行的宽度均小于80个字符。 注意:部分源程序已经给出。 请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。 #include<stdio.h> #include<string.h> #include<conio.h> char xx[50][80]; int maxline=0; /*文章的总行数*/ int ReadDat(void); void WriteDat(void); void ConvertCharD(void) void mein() if(ReadDat()) printf("数据文件IN.DAT不能打开!/n/007"); return; ConvertCharD(); WriteDat(); int ReadDat(void) FILE *fp; int i=0; char *p; if((fp=fopen("IN.DAT","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(void) FILE *fp; int i; fp=fopen("OUT.DAT","w"); for(i=0;i<maxline;i++) printf("%s/n",xx[i]); fprintf(fp,"%s/n",xx[i]); fclose(fp);
问答题下列程序的功能是:找出所有100以内(含100)满足i、i+4、i+10都是素数的整数i(i+10也在100以内)的个数cnt以及这些i之和sum。请编写函数countValue()实现程序要求的功能,最后调用函数writeDat(),把结果cnt和sum输出到out.dat文件中。
注意:部分源程序已经给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。
#include <stdio.h>
int cnt,sum;
int isPrime(int number)
{
int i,tag=1;
for(i=2;tag i++)
if(number%i==0)
tag=0;
return tag;
}
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("满足条件的整数的和值=%d/n",sum);
writeDat();
}
问答题已知数据文件IN.DAT中存有200个四位数,并已调用读函数readDat()把这些数存入数组a中。请编写函数jsVal(),其功能是:依次从数组a中取出一个四位数,如果该四位数连续小于该四位数以后的五个数且该数是偶数(该四位数以后不满五个数,则不统计),则统计出满足此条件的个数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,",
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();
}
问答题已知数据文件IN14.DAT中存有200个4位数,并已调用读函数readDat() 把这些数存入数组a中,请编制一个函数jsVal(),其功能是:把千位数字和十位数字重新组成一个新的十位数ab(新十位数的十位数字是原4位数的千位数字,新十位数的个位数字是原4位数的十位数字),以及把个位数字和百位数字组成另一个新的十位数cd(新十位数的十位数字是原4位数的个位数字,新十位数的个位数字是原4位数的百位数字),如果新组成两个十位数ab-cd>=0且ab-cd
#define MAX 200
int a[MAX], b[MAX], cnt = 0;
void jsVal()
{
}
void readDat()
{
int i;
FILE *fp;
fp = fopen("IN14.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("OUT14.DAT", "w");
fprintf(fp, "%d/n", cnt);
for(i = 0; i < cnt; i++)
fprintf(fp, "%d/n", b[i]);
fclose(fp);
}
问答题下列程序的功能是:将不超过整数m(m<2000)的所有素数存入数组xx。请编写函数 num(int m,int xx[])实现程序的要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。 例如:若输入30,则应输出:2,3,5,7,11,13,17,19,23,29。 部分源程序已给出。 请勿改动主函数main()和输出数据函数readwriteDat()的内容。 #include <conio.h> #include <stdio.h> void readwriteDat(); int num(int m, int xx[]) main ( ) int m,n,xx[2000]; clrscr(); printf("/nPlease enter the integer m:"); scanf(" %d" , n = num(m, xx); for(m-0;m printf(" %d" ,xx[m]); printf("/n" ); readwriteDat(); viod readwriteDat () int m,n,xx[1000], i; FILE *rf,*wf; rf=fopen("in.dat" ," r" ); wf=fopen(" out.dat" ," w" ); for(i=0;i<10;i++) fscanf(rf," %d" , n=num(m, xx); for(m=0;m<n;m++)fprintf(wf," %d" ,xx[m]); fprintf(wf,"/n" ); fclose(rf); fclose(wf);
问答题函数ReadDat()的功能是实现从文件IN2.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数StrOL(),该函数的功能是:以行为单位对行中以空格或标点符号为分隔的所有单词进行倒排。最后把已处理的字符串(应不含标点符号)仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT2.DAT中。 例如,原文:You He Me lam a student. 结果: Me He You student a am I 原始数据文件存放的格式是:每行的宽度均小于80个字符,含标点符号和空格。 注意:部分源程序已给出。 请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。 试题程序: #include <stdio.h> #include <string.h> #include <conio.h> #include <ctype.h> char xx[50] [80]; int maxline=0;/* 文章的总行数 */ int ReadDat (void); void WriteDat(void); void StrOL(void) main ( ) clrscr ( ); if (ReadDat ()) printf("数据文件IN2.DAT不能打开! /n/007"); return; StrOL ( ); WriteDat ( ); int ReadDat (void) FILE *fp; int i = 0; char *p; if((fp = fopen("IN2.DAT", "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(void) FILE*fp; int i; clrscr(); fp = fopen("OUT2.DAT", "w"); for(i = 0; i < maxline; i++) printf("%s/n", xx[i] ); fprintf(fp, "%s/n", xx[i] ); fclose(fp);
问答题函数Rdata()实现从文件IN.dat中读取一篇英文文章存入字符串数组string中,请编写函数SortCharA(),其功能是:以行为单位对字符按从小到大的顺序进行排序,排序后的结果仍按行重新存入字爷串数组string中。最后调用函数Wdata(),把结果string输出到OUT.dat文件中。 例如,原文:dAe, BfC. CcbbAA 结果:,. ABCdef AACbbc 原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。 注意:部分源程序已经给出。请勿改动主函数main()、读数据函数Rdata()和输出数据函数Wdata()的内容。#include <stdio.h>#include <string.h>#include <conio.h>char string [50] [80];int maxline = 0; /* 文章的总行数 */int Rdata (void);void Wdata (void);void SortCharA(void)void main () if (Rdata ()) printf("数据文件 IN. dat 不能打开! /n/007"); return; SortCharA (); Wdata ( );int Rdata (void) FILE *fp; int i = 0; char *p; if ((fp = fopen("IN. dat", "r")) == NULL) return 1; while (fgets(string[i], 80, fp) != NULL) p = strchr(string[i], '/n'); if (p) *p = 0; i++; maxline = i; fclose (fp); return 0;void Wdata (void) FILE *fp; int i; fp = fopen("OUT. dat", "w"); for (i=0; i<maxline; i++) printf("%s/n", string[i]); fprintf(fp, "%s/n", string[i]); fclose (fp);
问答题已知在文件IN65.DAT中存有若干个(个数<200)4位数字的正整数,函数ReadDat()是读取这若干个正整数并存入数组xx中。请编制函数CalValue(),其功能要求是:(1)求出这个文件中共有多少个正整数totNum。(2)求出这些数中的各位数字之和是奇数的个数totCnt,以及满足此条件的这些数的算术平均值totPjz。最后调用函数WriteDat()把所有结果输出到文件OUT65.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; clrscr(); for(i=0;i<MAXNUM;i++) xx[i]=0; if (ReadDat ()) printf ( "数据文件IN65.DAT不能打开! /007/n"); return; CalValue(); printf ( "文件IN65.DAT中共有正整数=%d个/n", totNum); printf ( "符合条件的正整数的个数=%d个/n", totCnt); printf("平均值=%.21f/n",totPjz); WriteDat(); int ReadDat(void) FILE *fp; int i=0; if((fp=fopen("IN65.DAT","r"))==NULL) return 1; while(!feof(fp)) fscanf (fp, "%d", return 0; void WriteDat(void) FILE *fp; fp=fopen("OUT65.DAT","w"); fprintf(fp,"%d/n%d/n%.21fkn",totNum, totCnt,totPjz); fclose(fp);
问答题函数ReadDat()的功能是从文件ENG.IN中读取一篇英文文章,存入到字符串数组XX中。请编写函数encryChar(),按给定的替代关系对数组xx中所有字符进行替换,替换后的字符仍存入数组xx的对应的位置上,最后调用函数WriteDat(),把结果xx输出到文件PS.DAT中。
替代关系:f(p)=p*11 mod 256(p是数组xx中某一个字符的ASCII码值,f(p)是计算后新字符的ASCII码值),如果计算后f(p)的值小于等于32或f(p)对应的字符是大写字母,则该字符不变,否则将f(p)所对应的字符进行替代。
原始数据文件的存放格式是每行的宽度均小于80个字符(含标点符号和空格)。请勿改动主函数main()、读函数ReadDaf()和写函数WriteDat()的内容。
[试题程序]
#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);
}
问答题设某超市经营管理系统使用SQL Server 2008数据库管理系统,上线运行一年后,用户反映速度缓慢。经技术人员分析,发现速度缓慢的原因为销售单据表和销售单据明细表数据量巨大,当进行这两个表相关查询时就会造成SQL语句执行缓慢。已知这两个表结构如下:销售单据表(销售单据编号,付款总金额,销售时间,销售人员编号,收银台编号),销售单据明细表(销售单据编号,销售时间,商品编号,单价,数量,总价)从业务上看,程序经常会查询1个月内和最近6个月内销售相关数据。为了保证系统稳定运行,两位工程师分别给出了两种优化方案:甲工程师:按照销售时间将两张表分别拆分为每月一张表,在系统进行查询时按照给定条件到相关的表中直接查询,降低查询涉及到的数据。乙工程师:使用SQL Server 2008的分区功能,将两张表变为分区表,按照销售时间每年一个分区,降低查询涉及到的数据。请从程序修改的难易程度、查询1个月内数据的执行速度、查询最近6个月内数据的执行速度3个方面比较甲乙工程师方案。根据上述分析结果,请基于甲乙工程师的方案给出最合理的优化方案并说明理由。
问答题设某超市经营管理系统使用SQL Server 2008数据库管理系统,此数据库服务器有2颗CPU、16GB内存、2TB磁盘。上线运行1年后,用户在生成每天每个销售人员及每个收银台的总销售额报表时速度缓慢。经技术人员分析,发现速度缓慢的原因为销售单据表和销售单据明细表数据量合计已经达到60GB。
已知这两个表结构如下:
销售单据表(销售单据编号,销售时间,销售人员编号,收银台编号)
销售单据明细表(销售单据编号,商品编号,单价,数量)
在进行此报表计算时数据库服务器CPU消耗非常高。为了优化此操作,某工程师建议在销售单据表中增加“付款总金额”属性,取值由触发器自动计算。请从磁盘空间使用、销售操作时对数据库服务器的影响、数据一致性以及对总销售额计算速度影响方面分析此方案优劣。请判断此方案是否可行,并从时空代价和优化效果方面分析原因。
问答题编写函数jsValue(int t),它的功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2) (n≥2)
最后调用函数writeDat()读取10个数据t,分别得出结果且把结果输出到文件out.dat中。
例如:当t=1000时,函数值为:1597。
请勿改动数据文件in.dat中的任何数据、主函数main()和写函数writeDat()的内容。
#include <stdio.h>
void writeDat(); //函数writeDat()的说明语句
int jsValue(int t)
{
}
main ()
{
int n;
n=1000; //把1000赋给n
/*在屏幕上显示1000和Fibonacci数列中大于1000的最小的一个数*/
printf ("n=%d, f=%d/n", n, jsValue (n));
writeDat ();
}
/*函数writeDat()读取10个数据t,分别得出结果且把结果输出到文件out.dat中*/
void writeDat()
{
FILE *in, *out; //定义文件指针in和out
int i, n, s;
in=fopen("in.dat", "r"); //以只读的方式打开文件in.dat,并且使文件指针in指向文件in.dat
out=fopen("out.dat", "w"); //以只写的方式打开文件out.dat,并且使文件指针out向文件out.dat
/*每次从文件in.dat中读取一个数赋n,并计算出Fibonacci数列中大于n的最小的一个数s,并且把s的值写入out.dat文件*/
for(i=0; i<i0; i++) //循环变量i从0开始,每次递增1,直到其值等于10
{
fscanf(in, "%d", //从in.dat文件中读取一个数赋给n
s=jsValue (n); //计算Fibonacci数列中大于n的最小一个数并赋给s
fprintf(out, "%d/n", s); //把s的值写入文件out.dat
}
fclose(in); //关闭文件in.dat
fclose (out); //关闭文件out.dat
}
问答题设在SQL Server 2008某数据库中有购买表(顾客号,商品号,购买时间),现要查询C01顾客购买过但C02顾客没有购买过的商品。请补全下列语句。SELECT商品号FROM购买表WHERE顾客号='C01'_________SELECT商品号FROM购买表WHERE顾客号='C02';
问答题编写函数jsValue(),其功能是:求Fibonacci数列中大于t的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2)
最后调用函数writeDat()从in.dat中读取50个数据t,分别得出结果,且把结果输出到out.dat文件中。
例如:当t=1000时,函数值为:1597。
注意:部分程序已经给出。
请勿改动主函数main()和写函数writeDat()的内容。
#include <stdio.h>
int jsValue(int t)
{
void writeDat()
{
FILE *in,*out;
int i,n,s;
in=fopen("in.dat","r");
out=fopen("out.dat","w");
for(i=0;i<50;i++)
{
fscanf(in,"%d,",
s=jsValue(n);
fprintf(out,"%d/n",s);
}
fclose(in);
fclose(out);
}
main()
{
int n;
n=1000;
printf("t=%d,f=%d/n",n,jsValue(n));
writeDat();
}
问答题已知数据文件IN1.DAT和IN2.DAT中分别存有100个2位十进制数,并且已调用读函数readDat()把这两个文件中的数存入数组a和b中,请考生编写函数jsVal(),它实现的功能是依次对数据组a和b中的数按条件重新组成一个新数并依次存入数组c中,再对数组c中的数按从小到大的顺序进行排序,最后调用输出函数writeDat(),把结果c输出到文件OUT.DAT中。
组成新数的条件:如果数组a和b中相同下标位置的数均是奇数,则数组a中十位数字为新数的千位数字,个位数字仍为新数的个位数字,数组b中的十位数字为新的百位数字,个位数字为新的十位数字,将这样新数存入数组c中。
例如,
a:12 31 24 15 21 15
b:32 45 17 27 18 15
c:3451 1275 1155
排序后c:1155 1275 3451
注意:程序中已定义数组a[100]、b[100]和c[100]。请勿改动数据文件IN1.DAT和IN2.DAT中的任何数据、主函数main()、读函数readDat()和写函数writeDat()的内容。
【试题程序】
#include < stdio.h >
#define MAX 100
int a[MAX], b[MAX], c[MAX] ;
int cnt =0; // 存放符合条件数的个数
void jsVal ()
{
void readDat ()
{
int i ;
FILE * fp ;
fp = fopen ("IN1 .DAT", "r") ;
for(i=0 ; i<MAX ; i++)
fscanf(fp, "%d",
fclose (fp) ;
fp = fopen ("IN2 .DAT", "r") ;
for(i=0 ; i <MAX ; i ++) fscanf(fp,"%d",
fclose (fp) ;
}
void main ()
{
int i ; void writeDat () ;
for(i=0 ; i<MAX ; i++)
c[i] =0 ;
readDat () ;
jsVal () ;
for(i=0 ; i<MAX; i++)
if (c[i] > 0)
printf ("%d/n", c[i]
writeDat () ;
}
void writeDat ()
}
FILE * fp ;
int i ;
fp =fopen ("OUT.DAT", "w") ;
for(i=0 ; i<MAX; i++)
if (c[i] > 0)
fprintf(fp, "%d/n", c[i]) ;
fclose (fp) ;
}
问答题函数ReadDat()实现从IN.DAT文件中读取一篇英文文章并存入字符串数组xx中。请编写函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替代后,仍存入数组xx的对应的位置上,最后调用函数WriteDat(),把结果xx输出到OUT.DAT文件中。
替代关系:f(p)=p*11 mod 256(p是数组中某一个字符的ASCII值,f(p)是计算后新字符的ASCII值),如果原字符是大写字母或计算后f(p)值小于等于32,则该字符不变,否则将f(p)所对应的字符进行替代。
原始数据文件存放的格式是:每行的宽度均小于80个字符。
注意:部分程序已经给出。
请勿改动主函数main()、读数据函数ReadDat()和输出数据函数WriteDat()的内容。
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
unsigned char xx[50][80];
int maxline=0; /*文章的总行数*/
int ReadDat(void);
void WriteDat(void);
void encryptChar()
{
}
void main()
{
if (ReadDat())
{
printf("数据文件IN.DAT不能打开!/n/007");
return;
}
encryptChar();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
unsigned char *p;
if((fp=fopen("IN.DAT","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(void)
{
FILE *fp;
int i;
fp=fopen("OUT.DAT","w");
for(i=0;i<maxline;i++)
{
printf("%s/n",xx[i]);
fprintf(fp,"%s/n",xx[i]);
}
fclose(fp);
问答题函数ReadDat()的功能是从文件ENG.IN中读取一篇英文文章,存入到字符串数组xx中。请编写函数encryptChar(),按给定的替代关系对数组xx中的所有字符进行替换,结果仍存入数组xx的对应的位置上,最后调用函数WriteDat(),把结果xx输出到文件PS.DAT中。
替代关系:f(p)=p*11 mod 256(p是数组xx中某一个字符的ASCII码值,f(p)是计算后新字符的ASCII码值),如果计算后f(p)的值小于等于32或f(p)对应的字符是数字0~9,则该字符不变,否则将f(p)所对应的字符进行替换。
注意:原始数据文件存放的格式是:每行的宽度均小于80个字符。请勿改动主函数main()、读函数ReadDat()和写函数WriteDat()的内容。
【试题程序】
#include < stdio.h >
#include < string.h >
#include < stdlib.h >
#include < ctype.h >
unsigned char xx [50] [80] ;
int maxline = 0 ; //文章的总行数
int ReadDat (void) ;
void WriteDat (void) ;
void encryptChar ()
{
void main ()
{
system ("CLS") ;
if (ReadDat ())
{
printf ("数据文件 ENG. IN 无法打开!
/n/007") ;
return;
}
encryptChar () ;
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 (void)
{
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) ;
}
