2012年自考“高级语言程序设计”经典习题及答案(29)
来源:本站整理 时间:2020-02-13 15:55:06
4.编一个程序,输入下列学生成绩表中的数据,并用结构体数组存放,然后统计并输出三门课程的名称和平均分数。
name foxbase pascal c
wang 98.0 87.0 77.0
qian 90.5 91.0 88.0
sun 74.0 77.5 66.5
li 84.5 64.5 55.0
解 类似上一程序,直接给出程序如下:
# include
# include
# define N 100
struct stu {
char namep[20];
int foxbase;
int pascal;
int c;
} students[N], *p;
void main ()
{ int n, sf, sb, sc;
char buf[120];
printf( 输入n( %d) ! \n , N);
do {
scanf( %d , n);
if(n 0 n
printf( 输入 n不合理! 请重新输入! \n );
} while(1);
printf( 输入%d个人的姓名、Foxbase成绩、Pascal成绩、C成绩 \n , n);
for( p= students;p students+n; p++);
scanf( %s ,buf );strncpy(p - name, buf, 19);
scanf( %d%d%d , p - foxbase, p - pascal, p - c)
}
sf=sb=sc =0;
for( p=students; p
sf+= p - foxbase; sb+= p - pascal; sc+= p - c;
}
printf( Foxbase:%.2f \t Pascal:%.2f \t c:%.2f \n ,
(float)sf/n,(float)sb/n,(float)sc/n);
}
8.1 单项选择题
1.若与文件型指针中相关联的文件的当前读位置已到了文件的末尾,则函数feof(fp)的返回值是( )
①0 ②-l
③非零值 ④NULL
解 当调用fopen函数时,系统将为实参文件设定一个存放文件读写控制信息的控制块。该控制块记录有关文件持征、使用方式,当前读写位置等文件状态,并将该控制块的指针返回,作为文件指针变量的值。以后程序通过该指针调用函数时,系统能访问到这个控制块,利用该文件控制块中的控制信息,正确完成文件的读或写。所以文件指针并不真正指向文件当前读写位置,但通过文件指针,系统能在文件控制块中访问文件的当前读写位置。若某文件与文件指针中相关联着,该文件的当前读写位置在文件的末尾时,函数调用feof(fp)的返回值是一个非零值。所以正确解答是③。
2.下列语句中,将C定义为文件型指针的是( )
① FILE c; ② FILE *c; ③ file c; ④ file *c;
解 如上题所述,文件控制块的类型已由系统命名为FILE.所以定义文件指针变量是C,就得用代码: FILE *c; 。所以正确解答是②。
3.标准库函数fputs(pl,p2)的功能是( )
①从pl指向的文件中读一个字符率存入p2指向的内存
②从p2指向的文件中读一个字符串存入pl指向的内存
③从pl指向的内存中的一个字符串输出到p2指向的文件
④从p2指向的内存中的一个字符串输出到pl指向的文件
解 标准函数调用fputs(p1,p2)完成的功能是将由字符指针pl所指的字符串内容输出到与文件指针p2相关联的文件中,即将从pl所指的内存中的字符串内容输出到p2所指向的文件中。所以正确解答是③。
8.2 填充题
1. FILE *p 的作用是定义一个______,其中的 FILE 是在________头文件中定义的。
解 代码 FILE *p 的作用是定义一个文件指针变量,其中的FILE是在标准输入输出头文件stdio.h中定义的。
2.在对文件进行操作的过程中,若要求文件的现行位置回到文件的开头,应当调用的函数是_______函数。
解 若要让文件随机地从某个现行位置回到文件的开头,可调用库函数rewind( )。
f2);
}
fclose(f1);
fclose(f2);
}
解 程序首先以读方式打开文件pl.c,以写方式打开文件P2.c.程序在文件pl.c未结束之前读入l000个字符复制到文件p2.c.然后关闭这两个文件。所以程序的功能是将文件pl.c的前l000个字符复制到文件p2.c.子目录字符 \ 在C语言中作为转义字符的引导字符,若在字符串中要用这个字符,必须双写该字符。如C盘根目录tc子目录文件p1.c,在C程序中应写成字符串 c:\\tc \\pl.c.
2.假定在当前盘当前目录下有2个文本文件,其名称和内容如下:
文件名 al.txt a2.txt
内容 121314 # 252627#
写出运行下列程序后的输出。
# include
# include
void fc( FILE *);
main()
{ FILE *fp;
if( fP= fopen( al.txt , r ))== NULL)
{ printf( Can not open file! \n );
exit(l);
}
else{ fc(fp); fclose(fp); }
if(( fp = fopen( a2.txt , r ))==NULL)
{ printf( Can not open file! \n );
exit(1);
}
else { fc(fp); fclose(fp); }
}
void fc(fp1)
FILE *fpl;
{ char c;
while((c=fgetc(fpl))!= # ) putchar(c);
}
解 程序以读方式打开文件a1.txt,若能正常打开,则调用函数fc.接着同样地,以读方式打开文件a2.txt,若能正常打开,也调用函数fc.函数企从指定的文件读入字符,在读入字符不是字符 # 情况下循环,将读人字符输出。对于文件a1.txt,程序输出121314,对于文件a2.txt,程序输出252627.所以程序输出121314252627.