国家二级(C语言)机试模拟试卷948
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,通过定义学生结构体变量,存储学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到student. dat文件中。函数fun的功能是:从文件中找出指定学号的学生数据,读入此学生数据,对该学生的分数进行修改,使每门课的分数加3分,修改后重写文件中学生的数据,即用该学生的新数据覆盖原数据,其它学生数据指定不变;若找不到,则不做任何操作。
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件blank1.c中。
不得增行或删行,也不得更改程序的结构!
#include
#define N 5
typedef struct student {
long sno;
char name[10];
float score[3];
} STU;
void fun(char *filename, long sno)
{ FILE *fp;
STU n; int i;
fp = fopen(filename,\\
(1)fp (2)== (3)fp
解析:文件结束检测函数feof; if语句条件表达式: fseek函数 。
填空1:while循环语句的循环条件是判断文件是否结束,配合feof函数来完成,其一般形式为: feof(文件指针)。
填空2:根据题目要求确定if语句条件表达式的内容,满足条件后跳出循环。
填空3:文件定位函数fseek( ),调用形式; fseek(文件指针,位移量,起始点);,此处文件指针是fp。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:用插入排序法对字符串中的字符进行升序排列。插入法的基本算法是:先对头两个字符进行排序,然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中,….。待排序的字符串已在主函数中赋予。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件modi1.c中。
不要改动main函数,不得增行或删行,也不得更改程序的结构!
#include
#include
#define N 80
void insert(char *aa)
{ int i,j,n; char ch;
/**********found**********/
n=strlen[ aa ];
for( i=1; i<n ;i++) {
/**********found**********/
c=aa[i];
j=i-1;
while ((j>=0) && ( ch<aa[j] ))
{ aa[j+1]=aa[j];
j–;
}
aa[j+1]=ch;
}
}
void main( )
{ char a[N]=\\
(1)n=strlen(aa);
(2)ch=aa[i];
解析:插入排序法; strlen函数的使用。
插入排序算法:先对字符串中的前两个元素进行排序,然后第三个元素插入到前两个元素中,三个元素依然有序,依次类推,完成排序。
(1)此处考查strlen函数的格式,应改为strlen(aa)。
(2)程序中并没有定义变量c,该语句的作用是将元素a[i]的值赋给中间变量ch,以与其他元素进行比较并交换,所以应改为ch= a[i]。
程序设计题
3.使VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,N名学生的成绩已在主函数中放入一个带有头节点的链表结构中,h指向链表的头节点。请编写函数fun,其功能是:找出学生的最高分,并由函数值返回。
注意:部分源程序在文件prog1.c中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#define N 8
struct slist
{ double s;
struct slist *next;
};
typedef struct slist STREC;
double fun( STREC *h )
{
}
STREC * creat( double *s)
{ STREC *h,*p,*q; int i=0;
h=p=(STREC*)malloc(sizeof(STREC));p->s=0;
while(i<N)
{ q=(STREC*)malloc(sizeof(STREC));
q->s=s[i]; i++; p->next=q; p=q;
}
p->next=0;
return h;
}
void outlist( STREC *h)
{ STREC *p;
p=h->next; printf(\\
double fun(STREC *h)
{
double max =h->s;
while(h!=NULL) /*通过循环找到最高分数*/
{
if(max<h->s) max=h->s;
h=h->next;
}
return max;
}
解析:本题考查:结构体类型;指针型变量;链表的相关知识。本题使用循环语句遍历链表中的每个结点,用判断语句比较结点数据的域大小。注意,h是一个指向结构体类型的指针变量,若要引用它所指向的结构体中的某一成员时,要用指向运算符\\
本文档预览:3600字符,共3258字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载