全国计算机等级考试C语言上机考试题库96103套共8套新题.docx

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

全国计算机等级考试C语言上机考试题库96103套共8套新题.docx

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

全国计算机等级考试C语言上机考试题库96103套共8套新题.docx

全国计算机等级考试C语言上机考试题库96103套共8套新题

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

学生练习用第96套至第103套内涵8套新题

第九十六套

1、程序填空

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

有N×N矩阵,将矩阵的外围元素做顺时针旋转。

操作顺序是:

首先将第一行元素的值存入临时数组r,然后使第一列成为第一行,最后一行成为第一列,最后一列成为最后一行,再使临时数组中的元素成为最后一列。

例如,若N=3,有下列矩阵:

操作后应为:

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

注意:

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

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

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

#include

#defineN4

voidfun(int(*t)[N])

{intj,r[N];

for(j=0;j

for(j=0;j

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

t[0][N-j-1]=t[j][___1___];

for(j=0;j

t[j][0]=t[N-1][j];

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

for(j=N-1;j>=0;___2___)

t[N-1][N-1-j]=t[j][N-1];

for(j=N-1;j>=0;j--)

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

t[j][N-1]=r[___3___];

}

main()

{intt[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10},i,j;

printf("\nTheoriginalarray:

\n");

for(i=0;i

{for(j=0;j

printf("\n");

}

fun(t);

printf("\nTheresultis:

\n");

for(i=0;i

{for(j=0;j

printf("\n");

}

}

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

【参考答案】

(1)0  

(2)j--  (3)j

【考点分析】

本题考查:

数组元素的引用;for循环语句。

【解题思路】

填空1:

N×N矩阵,第一列元素表示为t[0][N-j-1],第一行元素表示为t[j][0],将第一列赋值给第一行,因此填入0。

填空2:

for循环语句中,变量j的变化范围为从N-1递减到0,因此j做自减1操作。

填空3:

最后将临时数组r中的元素赋值给矩阵最后一列。

【解题宝典】

二维数组周边元素的表示方法,通过设定数组下标来完成。

我们举个简单的例子来说明,如二维数组a[3][3],我们列出它的所有数组元素:

    

a[0][0],a[0][1],a[0][2]

    

a[1][0],a[1][1],a[1][2]

    

a[2][0],a[2][1],a[2][2]

那么其周边元素有a[0][0],a[0][1],a[0][2], a[1][0], a[1][2] , a[2][0],a[2][1],a[2][2]。

如果我们把a[3][3]改为a[i][j],就不难表示出该数组的周边元素:

 

2、程序修改

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

计算S=f(-n)+f(-n+1)+…+f(0)+f

(1)+f

(2)+…+f(n)的值。

例如,当n的值为5时,函数值应为10.407143。

f(x)函数定义如下:

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

注意:

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

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

#include

#include

#include

#include

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

f(doublex)

{

if(x==0.0||x==2.0)

return0.0;

elseif(x<0.0)

return(x-1)/(x-2);

else

return(x+1)/(x-2);

}

doublefun(intn)

{

inti;doubles=0.0,y;

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

{y=f(1.0*i);s+=y;}

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

returns

}

voidmain()

{system("CLS");

printf("%f\n",fun(5));

}

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

【参考答案】

(1)double f(double x)

(2)return s;

【考点分析】

本题考查:

函数定义,其一般形式为“类型标识符 函数名(形式参数列表)”,其中类型标识符指明了本函数的类型,函数的类型实际上就是函数返回值的类型。

【解题思路】

该程序的流程是:

fun()函数对f(n)项循环累加,fun()函数采用条件选择语句计算函数f(x)的值。

第一处错误在于未定义函数f(double x)的类型,因为返回值类型为double型,所以此处函数应定义为double。

第二处错误的语法错误。

【解题宝典】

我们在做改错题目时候,首先应该检查C语言语法是否有问题,在很多题目中都有类似的错误。

3、程序设计

编写函数fun,其功能是计算:

s作为函数值返回。

在C语言中可调用log(n)函数求ln(n)。

log函数的引用说明为:

double log(double x)。

例如,若m的值为20,则fun函数值为6.506583。

注意:

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

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

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

#include

#include

doublefun(intm)

{

 

}

main()

{

voidNONO();

printf("%f\n",fun(20));

NONO();

}

voidNONO()

{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

*/

FILE*fp,*wf;

inti,n;

doubles;

fp=fopen("in.dat","r");

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

for(i=0;i<10;i++){

fscanf(fp,"%d",&n);

s=fun(n);

fprintf(wf,"%f\n",s);

}

fclose(fp);

fclose(wf);

}

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

【参考答案】

double fun(int m)

{

  

int i;

  

double s=0.0;

  

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

     

s=s+log(i);  /*计算s=ln

(1)+ln

(2)+ln(3)+…+ln(m)*/

  

return sqrt(s); /*对s求平方根并返回*/

}

【考点分析】

本题考查:

计算表达式的值运用for循环语句通过累加操作求和;平方根函数sqrt()的使用。

 

【解题思路】

首先计算从1到m的对数的和,因此循环变量的范围是1~m,每次循环都进行一次累加求和。

该题需要注意的是,log()函数的形式参数应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换。

在返回的时候求出平方根。

 

第九十七套

1、程序填空

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

在形参ss所指字符串数组中,查找含有形参substr所指子串的所有字符串,并输出,若没找到则输出相应信息。

ss所指字符串数组中共有N个字符串,且串长小于M。

程序中库函数strstr(s1,s2)的功能是在s1串中查找s2子串,若没有,函数值为0,若有,函数值为非0。

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

注意:

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

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

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

#include

#include

#defineN5

#defineM15

voidfun(char(*ss)[M],char*substr)

{inti,find=0;

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

for(i=0;i<__1__;i++)

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

if(strstr(ss[i],__2__)!

=NULL)

{find=1;puts(ss[i]);printf("\n");}

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

if(find==__3__)printf("\nDon'tfound!

\n");

}

main()

{charx[N][M]={"BASIC","Clangwage","Java","QBASIC","Access"},str[M];

inti;

printf("\nTheoriginalstring\n\n");

for(i=0;i

printf("\nEnterastringforsearch:

");gets(str);

fun(x,str);

}

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

【参考答案】

(1)N  

(2)substr  (3)0

【考点分析】

本题考查:

 for循环语句;strstr()字符串函数的使用;if语句条件表达式。

【解题思路】

填空1:

此处考查for循环语句中循环变量i的取值范围,题目指出共有N个字符串,所以i的取值范围为0~N-1。

填空2:

strstr(s1,s2)的功能是在s1串中查找s2子串。

题目要求在ss字符串数组中,查找substr所指的字符串,故应填substr。

填空3:

此处使用if条件语句来判断查找结果,由printf("\nDon′t found!

\n")可知此处需填写没有找到的条件,即是find==0。

【解题宝典】

strstr(s1,s2)的功能是在s1串中查找s2子串,若没有找到,则函数值为0,若找到,函数值为非0。

2、程序修改

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

求三个数的最小公倍数。

例如,若给主函数中的变量x1、x2、x3分别输入15,11,2,则输出结果应当是330。

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

注意:

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

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

#include

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

fun(intx,y,z)

{intj,t,n,m;

j=1;

t=j%x;

m=j%y;

n=j%z;

while(t!

=0||m!

=0||n!

=0)

{j=j+1;

t=j%x;

m=j%y;

n=j%z;

}

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

returni;

}

main()

{intx1,x2,x3,j;

printf("Inputx1x2x3:

");scanf("%d%d%d",&x1,&x2,&x3);

printf("x1=%d,x2=%d,x3=%d\n",x1,x2,x3);

j=fun(x1,x2,x3);

printf("Theminimalcommonmultipleis:

%d\n",j);

}

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

【参考答案】

(1)fun(int x,int y,int z)或int fun(int x,int y,int z)

(2)return j;

【考点分析】

本题考查:

函数定义,注意有参函数的参数列表;函数返回值,通过return语句返回给主调函数。

【解题思路】

(1)定义函数时,必须为每个形参分别定义变量类型。

(2)通过return语句将最小公倍数j返回主调函数。

【解题宝典】

几个自然数公有的倍数中最小的一个,叫做这几个数的最小公倍数。

求几个数的最小公倍数的方法为:

定义一个变量从1开始增加,每增加1即对几个数进行求余运算,直到几个数的余数全部为0,此时该数为这几个数的最小公倍数。

3、程序设计

规定输入的字符串中只包含字母和*号。

请编写函数fun,其功能是:

只删除字符前导和尾部的*号,串中字母间的*号都不删除。

形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中尾部*号的个数。

在编写函数时,不得使用C语言提供的字符串函数。

例如,字符串中的内容为:

"****A*BC*DEF*G*******",删除后,字符串中的内容应当是:

"A*BC*DEF*G"。

注意:

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填

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

#include

voidfun(char*a,intn,inth,inte)

{

 

}

main()

{chars[81],*t,*f;intm=0,tn=0,fn=0;voidNONO();

printf("Enterastring:

\n");gets(s);

t=f=s;

while(*t){t++;m++;}

t--;

while(*t=='*'){t--;tn++;}

while(*f=='*'){f++;fn++;}

fun(s,m,fn,tn);

printf("Thestringafterdeleted:

\n");puts(s);

NONO();

}

voidNONO()

{/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。

*/

FILE*in,*out;

inti;chars[81],*t,*f;

intm=0,tn=0,fn=0;

in=fopen("in.dat","r");

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

for(i=0;i<10;i++){

fscanf(in,"%s",s);

t=f=s;

m=0;tn=0;fn=0;

while(*t){t++;m++;}

t--;

while(*t=='*'){t--;tn++;}

while(*f=='*'){f++;fn++;}

fun(s,m,fn,tn);

fprintf(out,"%s\n",s);

}

fclose(in);

fclose(out);

}

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

【参考答案】

void fun(char *a,int n,int h,int e)

{

int i,j=0;

  for(i=h;i

     

a[j++]=a[i];

     

a[j]='\0'; /*在字符串最后加上结束标识*/

}

【考点分析】

本题考查:

删除字符串前导*号和尾部*号,其主要思想就是把不删除的字符保留起来。

【解题思路】

由于程序已经给出前导*号和尾部*号的个数,所以只要用循环语句将中间的字符保留起来。

注意循环变量i的初值(h)和终止值(n-e),由于h和e分别表示a中的前导*号和尾部*号的个数,n是字符串的长度,所以从a[h]到a[n-e-1]之间的所有字符都要保留。

循环结束后在新串的尾部加上结束符'\0'。

【解题宝典】

本题技巧:

     

void fun(char *a,int n,int h,int e )

           

{

             

a[n-e]='\0';

             

strcpy(a,a+h);

      

}

a[n-e]的作用是在最后一个字母后加上字符串结束符。

本程序采用了strcpy()库函数。

 

第九十八套

1、程序填空

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

计算一个带头结点的单向链表中各结点的数据域中数值之和,结果作为函数值返回。

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

注意:

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

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

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

#include

#include

#defineN8

typedefstructlist

{intdata;

structlist*next;

}SLIST;

SLIST*creatlist(int*);

voidoutlist(SLIST*);

intfun(SLIST*h)

{SLIST*p;ints=0;

p=h->next;

while(p)

{

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

s+=p->___1___;

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

p=p->___2___;

}

returns;

}

main()

{SLIST*head;

inta[N]={12,87,45,32,91,16,20,48};

head=creatlist(a);outlist(head);

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

printf("\nsum=%d\n",fun(___3___));

}

SLIST*creatlist(inta[])

{SLIST*h,*p,*q;inti;

h=p=(SLIST*)malloc(sizeof(SLIST));

for(i=0;i

{q=(SLIST*)malloc(sizeof(SLIST));

q->data=a[i];p->next=q;p=q;

}

p->next=0;

returnh;

}

voidoutlist(SLIST*h)

{SLIST*p;

p=h->next;

if(p==NULL)printf("ThelistisNULL!

\n");

else

{printf("\nHead");

do

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

while(p!

=NULL);

printf("->End\n");

}

}

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

【参考答案】

(1)data  

(2)next  (3)head

【考点分析】

本题考查:

链表数据结构,结点的表示方法;掌

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

当前位置:首页 > 求职职场 > 社交礼仪

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

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