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

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

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

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

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

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

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

学生练习用第91套至第95套内涵5套新题

第九十一套

1、程序填空

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

逆置数组元素中的值。

例如:

若a所指数组中的数据为:

1、2、3、4、5、6、7、8、9,则逆置后依次为:

9、8、7、6、5、4、3、2、1。

形参n给出数组中数据的个数。

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

注意:

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

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

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

#include

voidfun(inta[],intn)

{inti,t;

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

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

{

t=a[i];

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

a[i]=a[n-1-___2___];

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

___3___=t;

}

}

main()

{intb[9]={1,2,3,4,5,6,7,8,9},i;

printf("\nTheoriginaldata:

\n");

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

printf("%4d",b[i]);

printf("\n");

fun(b,9);

printf("\nThedataafterinvert:

\n");

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

printf("%4d",b[i]);

printf("\n");

}

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

【参考答案】

(1)n/2  

(2)i  (3)a[n-i-1]或a[n-1-i]

【考点分析】

本题考查:

for循环语句;变量交换算法。

【解题思路】

填空1:

逆置数组元素中的值,将a[0]与a[n-1]对换位置,依此类推,那么需要对换n/2次。

填空2:

将a[0]与a[n-1]对换位置,a[1]与a[n-2]对换位置,依次类推,则a[i]=a[n-1-i]。

填空3:

普通的调换位置程序,显然填入a[n-i-1]。

2、程序修改

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

将一个由八进制数字字符组成的字符串转换成十进制整数。

规定输入的字符串最多只能包含5位八进制数字字符。

例如,若输入77777,则输出32767。

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

注意:

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

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

#include

intfun(char*p)

{intn;

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

n=*p-'o';

p++;

while(*p!

=0){

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

n=n*8+*p-'o';

p++;

}

returnn;

}

main()

{chars[6];inti;intn;

printf("Enterastring(Ocataldigits):

");gets(s);

if(strlen(s)>5){printf("Error:

Stringtoolonger!

\n\n");exit(0);}

for(i=0;s[i];i++)

if(s[i]<'0'||s[i]>'7')

{printf("Error:

%cnotisocataldigits!

\n\n",s[i]);exit(0);}

printf("Theoriginalstring:

");puts(s);

n=fun(s);

printf("\n%sisconveredtointegernumber:

%d\n\n",s,n);

}

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

【参考答案】

(1)n=*p-'0';

(2)n=n*8+*p-'0';

【考点分析】

本题考查:

 数字和字符转换方法;八进制转十进制方法。

【解题思路】

(1)"0"和"1"是字符串中的数字字符,为了进行数字运算,必须要将数字字符转换为数字,用数字字符减去字符'0'的ASCII码,就得到对应的数字。

题中给出的是"o",不是"0"。

(2)要在一个八进制数的最后加上一位,原来各个位上的数上升一位,只需将原数乘以8再加上个位数。

【解题宝典】

各种进制之间转换方法需要掌握,二进制数、八进制数、十六进制数转换为十进制数采取按权求和的方法;十进制数转换为二进制数、八进制数、十六进制数采取除2/8/16取余方法来实现。

3、程序设计

学生的记录由学号成绩组成,N名学生的数据已放入主函数中的结构体数组s中,请编写函数fun,其功能是:

函数返回该学号的学生数据,指定的学号在主函数中输入。

若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。

(用于字符串比较的函数是strcmp)。

注意:

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

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

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

#include

#include

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

STRECfun(STREC*a,char*b)

{

 

}

main()

{STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

{"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};

STRECh;

charm[10];

inti;FILE*out;

printf("Theoriginaldata:

\n");

for(i=0;i

{if(i%4==0)printf("\n");

printf("%s%3d",s[i].num,s[i].s);

}

printf("\n\nEnterthenumber:

");gets(m);

h=fun(s,m);

printf("Thedata:

");

printf("\n%s%4d\n",h.num,h.s);

printf("\n");

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

h=fun(s,"GA013");

fprintf(out,"%s%4d\n",h.num,h.s);

fclose(out);

}

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

【参考答案】

 

STREC fun( STREC *a,char *b )

{

int i;

  

STREC str={"\0",-1}; /*若没找到指定的学号,在结构体变量中给学号置空串,给成绩置-1*/ 

  

for(i=0;i

     

if(strcmp(a[i].num,b)==0)  /*找到指定学号的学生数据*/

     

str=a[i];

  

return str; /*返回学生记录*/

}

【考点分析】

本题考查:

结构体类型;字符串比较函数strcmp()的应用。

【解题思路】

本程序一开始先使结构体变量str中的学号为空串,成绩为-1。

循环体的功能是搜索所有学生的学号,并判断是否有学号与b所指字符串相同(即找到),若找到则给str重新赋值(str=a[i]),若没找到则str成员的值还是原有值(即未找到时学号返回空串,成绩返回-1)。

【解题宝典】

常见的字符串处理函数总结如下:

 

第九十二套

1、程序填空

下列给定程序的功能是:

调用函数fun将指定源文件中的内容复制到指定的目标文件中,复制成功时函数返回1,失败时返回0。

在复制的过程中,把复制的内容输出到屏幕。

主函数中源文件名放在变量sfname中,目标文件名放在变量tfname中。

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

注意:

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

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

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

#include

#include

intfun(char*source,char*target)

{FILE*fs,*ft;charch;

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

if((fs=fopen(source,___1___))==NULL)

return0;

if((ft=fopen(target,"w"))==NULL)

return0;

printf("\nThedatainfile:

\n");

ch=fgetc(fs);

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

while(!

feof(___2___))

{putchar(ch);

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

fputc(ch,___3___);

ch=fgetc(fs);

}

fclose(fs);fclose(ft);

printf("\n\n");

return1;

}

main()

{charsfname[20]="myfile1",tfname[20]="myfile2";

FILE*myf;inti;charc;

myf=fopen(sfname,"w");

printf("\nTheoriginaldata:

\n");

for(i=1;i<30;i++){c='A'+rand()%25;fprintf(myf,"%c",c);printf("%c",c);}

fclose(myf);printf("\n\n");

if(fun(sfname,tfname))printf("Succeed!

");

elseprintf("Fail!

");

}

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

【参考答案】

(1)"r"  

(2)fs  (3)ft

【考点分析】

本题考查:

打开文件操作,fopen函数用来打开一个文件,其一般形式为 “文件指针名=fopen(文件名,使用文件方式);”;文件结束检测函数feof函数;写字符函数fputc,功能是把一个字符写入指定的文件中,函数调用的形式为“fputc(字符量,文件指针);”其中,待写入的字符量可以是字符常量或变量,被写入的文件可以用写、读写、追加方式打开。

文件一旦使用完毕,需使用关闭文件函数fclose将文件关闭,以避免文件的数据丢失等错误。

【解题思路】

填空1:

本题考查对文件操作的掌握。

打开一个文件的调用方式是,fs=fopen(文件名,使用文件方式),以只读的方式打开文件,所以文件打开方式为"r"。

填空2:

while循环语句中,循环条件通过feof()函数来检测是否到文件结尾。

填空3:

fputc()函数用于将一个字符写到磁盘文件上去,调用形式为:

fputc(要输出的字符,文件指针)。

2、程序修改

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

将长整型数中各位上为偶数的数依次取出,构成一个新数放在t中。

高位仍在高位,低位仍在低位。

例如,当s中的数为87653142时,t中的数:

8642。

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

注意:

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

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

#include

voidfun(longs,long*t)

{intd;

longsl=1;

*t=0;

while(s>0)

{d=s%10;

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

if(d%2=0)

{*t=d*sl+*t;

sl*=10;

}

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

s\=10;

}

}

main()

{longs,t;

printf("\nPleaseenters:

");scanf("%ld",&s);

fun(s,&t);

printf("Theresultis:

%ld\n",t);

}

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

【参考答案】

(1)if(d%2==0)

(2)s/=10;

【考点分析】

本题考查:

if语句条件表达式,注意"=="和"="的区别;除法运算符"/"。

 

【解题思路】

(1)分析程序,在if的条件表达式中,不应该出现赋值运算符"=",应使用"=="运算符。

(2)这里是一个运算符的错误,表示除法的运算符是"/"。

【解题宝典】

一般情况下,在if条件语句中,很容易出现"=="和"="的混淆错误,这也是经常考查的内容,考生应当注意。

3、程序设计

函数fun的功能是:

将s所指字符串中除下标为偶数同时ASCII码值也为偶数的字符外,其余的全部删除;字符串中剩余字符所形成的新串放在t所指的数组中。

例如,若s所指字符串中的内容为"ABCDEFG123456",其中字符A的ASCII码值为奇数,因此应当删除;字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;字符2的ASCII码值为偶数,在数组中的下标也为偶数,因此不应当删除,其他依此类推。

最后t所指的数组中的内容应是"246"。

注意:

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

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

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

#include

#include

voidfun(char*s,chart[])

{

 

}

main()

{

chars[100],t[100];

voidNONO();

printf("\nPleaseenterstringS:

");scanf("%s",s);

fun(s,t);

printf("\nTheresultis:

%s\n",t);

NONO();

}

voidNONO()

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

*/

chars[100],t[100];

FILE*rf,*wf;

inti;

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

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

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

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

fun(s,t);

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

}

fclose(rf);

fclose(wf);

}

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

【参考答案】

 

void fun(char *s,char t[])

{

  

int i,j=0;

  

for(i=0;s[i]!

='\0';i++)

     

if(i%2==0 && s[i]%2==0)  /*将s所指字符串中下标和ASCII码值都为偶数的字符放入数组t中*/

        

t[j++]=s[i];

 

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

}

【考点分析】

本题考查:

循环判断结构;字符串的操作;逻辑运算符的使用。

【解题思路】

 

本题要求删除除了下标为偶数同时ASCII码值也为偶数的字符,即保留下标为偶数同时ASCII码值也为偶数的字符。

循环语句用于遍历字符串,条件语句用于判断当前字符是否符合要求。

注意判断条件是下标为偶数,同时ASCII码值也为偶数,所以应使用逻辑与"&&"运算符。

 

第九十三套

1、程序填空

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

有N×N矩阵,根据给定的m(m<=N)值,将每行元素中的值均向右移动m个位置,左位置为0。

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

程序执行结果为:

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

注意:

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

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

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

#include

#defineN4

voidfun(int(*t)[N],intm)

{inti,j;

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

for(i=0;i

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

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

t[i][j+___2___]=t[i][j];

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

for(j=0;j<___3___;j++)

t[i][j]=0;

}

}

main()

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

printf("\nTheoriginalarray:

\n");

for(i=0;i

{for(j=0;j

printf("%2d",t[i][j]);

printf("\n");

}

printf("Inputm(m<=%d):

",N);scanf("%d",&m);

fun(t,m);

printf("\nTheresultis:

\n");

for(i=0;i

{for(j=0;j

printf("%2d",t[i][j]);

printf("\n");

}

}

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

【参考答案】

(1)i++  

(2)m  (3)m

【考点分析】

本题考查:

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

【解题思路】

填空1:

循环语句中,循环变量i增量为1。

填空2:

将每行元素中的值均右移m个位置,所以数组元素的下标是t[i][j+m]。

填空3:

此for循环语句实现左边元素置0操作,所以j的取值范围是0到m。

2、程序修改

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

计算并输出high以内最大的10个素数的和。

high的值由主函数传给fun函数。

例如,若high的值为100,则函数的值为732。

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

注意:

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

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

#include

#include

intfun(int

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

当前位置:首页 > 高等教育 > 其它

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

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