全国计算机等级考试C语言上机考试题库120套.docx

上传人:b****7 文档编号:10615967 上传时间:2023-02-21 格式:DOCX 页数:115 大小:104.44KB
下载 相关 举报
全国计算机等级考试C语言上机考试题库120套.docx_第1页
第1页 / 共115页
全国计算机等级考试C语言上机考试题库120套.docx_第2页
第2页 / 共115页
全国计算机等级考试C语言上机考试题库120套.docx_第3页
第3页 / 共115页
全国计算机等级考试C语言上机考试题库120套.docx_第4页
第4页 / 共115页
全国计算机等级考试C语言上机考试题库120套.docx_第5页
第5页 / 共115页
点击查看更多>>
下载资源
资源描述

全国计算机等级考试C语言上机考试题库120套.docx

《全国计算机等级考试C语言上机考试题库120套.docx》由会员分享,可在线阅读,更多相关《全国计算机等级考试C语言上机考试题库120套.docx(115页珍藏版)》请在冰豆网上搜索。

全国计算机等级考试C语言上机考试题库120套.docx

全国计算机等级考试C语言上机考试题库120套

2017年全国计算机等级考试C语言上机考试题库

学生练习用第一套至第二十套

第一套:

1、程序填空

程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。

所有学生数据均以二进制方式输出到文件中。

函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。

请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。

注意:

部分源程序在文件BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

-----------------------------------------------------------------------------------------------------------------

#include

#defineN5

typedefstructstudent{

longsno;

charname[10];

floatscore[3];

}STU;

voidfun(char*filename,STUn)

{FILE*fp;

/**********found**********/

fp=fopen(__1__,"rb+");

/**********found**********/

fseek(__2__,-(long)sizeof(STU),SEEK_END);

/**********found**********/

fwrite(&n,sizeof(STU),1,__3__);

fclose(fp);

}

main()

{STUt[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},

{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},

{10005,"ZhangSan",95,80,88}};

STUn={10006,"ZhaoSi",55,70,68},ss[N];

inti,j;FILE*fp;

fp=fopen("student.dat","wb");

fwrite(t,sizeof(STU),N,fp);

fclose(fp);

fp=fopen("student.dat","rb");

fread(ss,sizeof(STU),N,fp);

fclose(fp);

printf("\nTheoriginaldata:

\n\n");

for(j=0;j

{printf("\nNo:

%ldName:

%-8sScores:

",ss[j].sno,ss[j].name);

for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);

printf("\n");

}

fun("student.dat",n);

printf("\nThedataaftermodifing:

\n\n");

fp=fopen("student.dat","rb");

fread(ss,sizeof(STU),N,fp);

fclose(fp);

for(j=0;j

{printf("\nNo:

%ldName:

%-8sScores:

",ss[j].sno,ss[j].name);

for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);

printf("\n");

}

}

-----------------------------------------------------------------------------------------------------------------

【参考答案】

(1)filename  

(2)fp  (3)fp

【解题思路】

填空1:

本空是对文本文件的打开,filename所指的文件中的最后数据要进行重写,因此首先是要打开,因而本空填写filename。

填空2:

fseek 功能是重定位流上的文件指针。

用法:

 int fseek(FILE *stream, long offset, int fromwhere);本空应该填写fp。

填空3:

因为题目中要对所有学生数据均以二进制方式输出到文件中,因此本空填写fp。

知识点讲解:

函数名:

fseek

功 能:

重定位流上的文件指针。

用 法:

int fseek(FILE *stream, long offset, int fromwhere)。

描 述:

函数设置文件指针stream的位置。

如果执行成功,stream将指向以fromwhere为基准,偏移offset个字节的位置。

如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。

返回值:

成功,返回0;否则返回非0值。

2、程序改错

下列给定程序中函数Creatlink的功能是:

创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。

请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。

注意:

部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!

-----------------------------------------------------------------------------------------------------------------

#include

#include

typedefstructaa

{intdata;

structaa*next;

}NODE;

NODE*Creatlink(intn,intm)

{NODE*h=NULL,*p,*s;

inti;

/**********found***********/

p=(NODE)malloc(sizeof(NODE));

h=p;

p->next=NULL;

for(i=1;i<=n;i++)

{s=(NODE*)malloc(sizeof(NODE));

s->data=rand()%m;s->next=p->next;

p->next=s;p=p->next;

}

/**********found***********/

returnp;

}

outlink(NODE*h)

{NODE*p;

p=h->next;

printf("\n\nTHELIST:

\n\nHEAD");

while(p)

{printf("->%d",p->data);

p=p->next;

}

printf("\n");

}

main()

{NODE*head;

head=Creatlink(8,22);

outlink(head);

}

-----------------------------------------------------------------------------------------------------------------

【参考答案】

(1)p=(NODE *)malloc(sizeof(NODE));

(2)return  h;

【考点分析】 

本题考查:

变量赋初值;for循环语句;函数返回值。

【解题思路】

(1)由变量定义可知p为指向结点的指针。

指向刚分配的结构指针,所以应改为p=(NODE *)malloc(sizeof(NODE))。

(2)在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用p,是因为p的位置已经发生了变化,所以应改为return h。

3、程序设计

请编写函数fun,该函数的功能是:

统计一行字符串中单词的个数,作为函数值返回。

字符串在主函数中输入,规定所有单词由小写字母组成,单词之间有若干个空格隔开,一行的开始没有空格。

注意:

部分源程序在文件PROG1.C中。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

-----------------------------------------------------------------------------------------------------------------

#include

#include

#defineN80

intfun(char*s)

{

}

voidmain()

{

FILE*wf;

charline[N];

intnum=0;

printf("Enterastring:

\n");

gets(line);

num=fun(line);

printf("Thenumberofwordis:

%d\n\n",num);

/******************************/

wf=fopen("out.dat","w");

fprintf(wf,"%d",fun("abigcar"));

fclose(wf);

/*****************************/

}

-----------------------------------------------------------------------------------------------------------------

【参考答案】

int fun(char *s)

{

  

   int i,j=0;

  

   for(i=0;s[i]!

='\0';i++)

     

   if(s[i]!

=' '&&(s[i+1]==' '||s[i+1]=='\0'))   

   /*如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束*/

        

   j++;

  

   return j; /*返回单词个数*/

}

【解题思路】

要判断单词的个数,首先想到的是程序怎样识别出一个单词,如果一个字母的下一个字符为空格或者结束标记,则表示一个单词结束,因此程序使用for循环语句遍历整个字符串,用if条件语句判断当前字符是否表示一个单词的结束,如果当前字符表示一个单词结束,则存放单词个数的变量加1,最后返回单词的个数。

第二套

1、程序填空

给定程序中,函数fun的功能是:

计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回,并将大于平均值的数放在形参y所指数组中,在主函数中输出。

例如,有10个正数:

46、30、32、40、6、17、45、15、48、26,其平均值为30.500000。

主函数中输出:

46 32 40 45 48。

请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。

注意:

部分源程序在文件BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

-----------------------------------------------------------------------------------------------------------------

#include

#include

#defineN10

doublefun(doublex[],double*y)

{inti,j;doubleav;

/**********found**********/

av=__1__;

/**********found**********/

for(i=0;i

av=av+__2__;

for(i=j=0;i

/**********found**********/

if(x[i]>av)y[__3__]=x[i];

y[j]=-1;

returnav;

}

main()

{inti;doublex[N],y[N];

for(i=0;i

printf("\n");

printf("\nTheaverageis:

%f\n",fun(x,y));

for(i=0;y[i]>=0;i++)printf("%5.1f",y[i]);

printf("\n");

}

-----------------------------------------------------------------------------------------------------------------

【参考答案】

(1)0.0  

(2)x[i]/N  (3)j++

【解题思路】

填空1:

通过读上面的程序可以看出此空考的是给变量赋初值,av代表的是平均值,因此av的初值应该是0.0。

填空2:

通过for循环可知,此空代表求平均值,因此应该填写x[i]/N。

填空3:

先把大于平均值的数放在形参y所指数组中,然后使下标值加1,因此此空应该填j++。

2、程序改错

下列给定程序中,函数fun的功能是:

根据整型参数m,计算如下公式的值。

例如,若m=2000,则应输出0.000160。

请改正程序中的错误,使它能得出正确的结果。

注意:

部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!

-----------------------------------------------------------------------------------------------------------------

#include

#include

#include

/*************found**************/

fun(intm)

{doubley=0,d;

inti;

/*************found**************/

for(i=100,i<=m,i+=100)

{d=(double)i*(double)i;

y+=1.0/d;

}

return(y);

}

voidmain()

{intn=2000;

system("CLS");

printf("\nTheresultis%1f\n",fun(n));

}

-----------------------------------------------------------------------------------------------------------------

【参考答案】

(1)double fun(int m)

(2)for(i=100;i<=m;i+=100)

【解题思路】

(1)题目要求在函数fun中求级数前m项和,可用循环语句,每次计算级数中的一项,然后累加。

第一处错误在于定义fun(int m),由函数的返回值可知应该定义为double fun(int m)。

(2)for(i=100,i<=m,i+=100)中是一个简单的语法错误。

for循环语句的形式为for(表达式1;表达式2;表达式3) ,其表达式之间应以";"相隔。

3、程序设计

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。

请编写函数fun,该函数的功能是:

找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。

已给出函数的首部,请完成该函数。

注意:

部分源程序在文件PROG1.C中。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

-----------------------------------------------------------------------------------------------------------------

#include

#include

#include

#include

#defineN10

typedefstructss

{charnum[10];

ints;

}STU;

fun(STUa[],STU*s)

{

}

voidmain()

{

FILE*wf;

STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;

inti;

system("CLS");

printf("*****Theoriginaldata*****\n");

for(i=0;i

printf("No=%sMark=%d\n",a[i].num,a[i].s);

fun(a,&m);

printf("*****THERESULT*****\n");

printf("Thelowest:

%s,%d\n",m.num,m.s);

/******************************/

wf=fopen("out.dat","w");

fprintf(wf,"%s,%d",m.num,m.s);

fclose(wf);

/*****************************/

}

-----------------------------------------------------------------------------------------------------------------

【参考答案】

fun(STU a[],STU *s)

{

   

   int i;    

   *s=a[0];           /*先认为第1个值最小*/

  

   for(i=0;i

    

   if(s->s>a[i].s)

      

   *s=a[i];

}

【解题思路】

找出结构体数组元素中的最小值。

先认为第1个值最小,即*s=a[0];,如果在循环的过程中发现比第1个值更小的,就将指针s指向该元素,直到找到最小元素。

另外,本题还涉及结构体中的指向运算符,请考生注意。

 

第三套

1、程序填空

给定程序中,函数fun的功能是:

计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回给主函数,将小于平均值且最接近平均值的数作为函数值返回,并在主函数中输出。

例如,有10个正数:

46、30、32、40、6、17、45、15、48、26,平均值为30.500000。

主函数中输出m=30。

请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。

注意:

部分源程序在文件BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

-----------------------------------------------------------------------------------------------------------------

#include

#include

#defineN10

doublefun(doublex[],double*av)

{inti,j;doubled,s;

s=0;

for(i=0;i

/**********found**********/

__1__=s/N;

d=32767;

for(i=0;i

if(x[i]<*av&&*av-x[i]<=d){

/**********found**********/

d=*av-x[i];

j=__2__;

}

/**********found**********/

return__3__;

}

main()

{inti;doublex[N],av,m;

for(i=0;i

printf("\n");

m=fun(x,&av);

printf("\nTheaverageis:

%f\n",av);

printf("m=%5.1f",m);

printf("\n");

}

-----------------------------------------------------------------------------------------------------------------

【参考答案】

(1)*av  

(2)i  (3)x[j]

【解题思路】

填空1:

从原程序中可以看出*av代表的是平均值,而s/N表示的就是平均值,因此本空应该填*av。

填空2:

if语句来判断找最接近平均值的数,因而此空应该填i。

填空3:

题目要求将小于平均值且最接近平均值的数作为函数返回,而j表达的是最接近平均值的数在数组中的下标,因而本空应该填写x[j]。

2、程序修改

下列给定程序中,函数fun的功能是:

根据整型形参n,计算如下公式的值。

例如,若n=10,则应输出0.617977。

请改正程序中的错误,使它能得出正确的结果。

注意:

部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!

-----------------------------------------------------------------------------------------------------------------

#include

#include

#include

/*************found**************/

intfun(int

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1