3.編一個程序,將磁盤中的當(dāng)前目錄下名為"ccw1.txt" 的文本文件復(fù)制在同一目錄下,文件名改為"ccw2.txt"。
【解】程序需要兩個文件指針變量,一個對應(yīng)讀文件,另一個對應(yīng)寫文件。并分別用讀和寫方式打開兩個文件。接著是以讀文件狀態(tài)作為循環(huán)控制條件,在讀文件還未結(jié)束下循環(huán),反復(fù)讀人字符,并將讀人字符復(fù)寫到寫文件中。程序如下:
# include
# include
FILE * rp, * wp;
void main()
{ int c;
if((rp= fopen("ccw1.txt","r"))== NULL) {
printf("Can’t open file %s.\n","ccwl.txt"); exit(0);
}
if((wp= fopen("ccw2.txt","w"))== NULL) {
printf("Can’t open file %s.\n","ccw2.txt"); exit(0);
}
while((c= fgetc(rp))!= EOF)
fputc( c,wp);
fclose(wp);
fclose(rp);
}
4.編程序,對名為"CCW.TXT"的磁盤文件中"@"之前的所有字符加密,加密方法是每個字節(jié)的內(nèi)容減10。
【解】程序從文件讀出字符,在字符"@"未出現(xiàn)之前,將讀出字符作加密處理后回寫。加密循環(huán)受文件結(jié)束或當(dāng)前字符是"@"字符控制。程序如下:
# include
# include
# define DALTA 10
FILE * rp;
void main()
{ int c;
if(( rp = fopen("ccw.txt","r+")) ==NULL ) {
printf("Can’t open file %s.\n","ccw.txt"); exit(0);
}
while(( c= fgetc(rp))!= EOF) {
if( c ==’@’) break;
c+= DALTA;
fseek( rp,-1L,1 );
fputc( c, rp);
fseek( rp,OL,l);
}
fclose(rp);
}
5.編程序,對上一題中名為"CCW.TXT"的磁盤文件中"@"之前的所有字符解密并顯示。
【解】要編寫的程序完成與上一程序功能相反的工作,將上述程序中的DALTA定義成一10即可。完整程序略。
6.輸入100個學(xué)生的信息(含學(xué)號、姓名、年齡、七門課程成績、總分),其中學(xué)生的總分由程序計算產(chǎn)生。先將學(xué)生信息存入磁盤二進(jìn)制數(shù)據(jù)文件student.dat中。然后再讀取該文件,尋找總分最高的學(xué)生并輸出該生的所有信息。
【解】程序要定義一個結(jié)構(gòu),逐一輸入學(xué)生信息,并完成學(xué)生的總分計算,將學(xué)生信息存到該結(jié)構(gòu)中,然后將該結(jié)構(gòu)信息存入文件。設(shè)學(xué)生信息的輸入以學(xué)生的學(xué)號為負(fù)數(shù)結(jié)束。然后,程序再用循環(huán)從這文件讀入學(xué)生信息,將其中總分更高的學(xué)生信息存入另一結(jié)構(gòu)中。循環(huán)結(jié)束后,結(jié)構(gòu)中存儲的就是總分最高學(xué)生的信息。最后,顯示這總分最高的學(xué)生信息。程序如下:
# include
# include
# include
struct stu {
long no;
char name[20];
int age;
int score[7];
int total;
} student, maxs;
FILE *fp;
void main()
{ char buf[120];int total,i,t;long lt;
if((fp= fopen("student.dat","wb"))== NULL) {
printf("Can’t open file %s.\n","student.dat" );exit(0);
}
printf("輸入學(xué)生的學(xué)號、姓名、年齡、七門課程成績(學(xué)號小于0結(jié)束) \n");
while(1) {
scanf("%ld", <); student.no = lt;
if(student.no< 0) break;
scanf("%s", buf); strncpy( student.name, buf,19);
scanf("%d", &t); student.age = t;
for( total = 0, i = 0; i < 7;i++) {
scanf("%d", &t); student.score[i]= t;
total+= t;
}
student.total= total;
fwrite(char *) & student,sizeof student, 1, fp);
}
fclose(fp);
if((fp = fopen("student.dat","rb"))== NULL) {
printf("Can’t open file %s.\n","student.dat");exit(0);
}
maxs.total=-100;
While( !feof(fp)) {
fread((char *) & student,sizeof student,l,fp);
if( student.total> maxs.total) maxs=student;
}
fclose(fp);
printf("總分最高的學(xué)生信息:\n");
printf("學(xué)號:%ld", maxs.no);
printf(" \t姓名:%s",maxs,name);
printf("\t年齡::%d\n成績:", maxs.age)
for( i=0; i< 7; i++)
printf("m",maxs.score[i]);
printf("\nTOTAL = %d\n", maxs. total);
}
更多軟考資料請訪問:考試吧軟件水平考試欄目