国家二级(C语言)机试模拟试卷19(共62题)_第1页
国家二级(C语言)机试模拟试卷19(共62题)_第2页
国家二级(C语言)机试模拟试卷19(共62题)_第3页
国家二级(C语言)机试模拟试卷19(共62题)_第4页
国家二级(C语言)机试模拟试卷19(共62题)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

家二级(C语言)机试模拟试卷19

(共9套)

(共62题)

国家二级(C语言)机试模拟试卷第1

一、程序填空题(本题共7题,每题7.0分,共1分。)

1、请补充函数fun(),该函数的功能是判断一个数是否为回文数。当字符串是回文

时,函数返回字符申:yes!,否则函数返回字符串:no!,并在主函数中输出。所谓

回文即正向与反向的拼写都一样,例如:abcba。注意:部分源程序给出如下,请

勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写

的若干表达式或语句。试题程序:#include<string.h>#include<stdio.h>char

*fun(char*str){char*pl,*p2;inti,t=0;pl=str;p2=str-strlen(str)-l;for(i=0;[];i++)

if([]){t=l;break;)if([])return("yes!");elsereturn("no!H);}main(){char

str[5O];printf("Input;");scanf("%s",str);printf(n%s\n",fun(str));}

标准答枭:i<=strlcn(sb)/2或i<strlcn(sw)/2*pl++!=*p2—t==20

知识点解析:第一空:判断回文数就是将第一个字符与最后一个字符比较,第二个

字符与倒数第二个字符进行比较,依此类推,直到中间的字符,如果比较的结果都

是相同,则这个字符串就是回文数,否则不是。所以比较的次数是strlcn(str)/2。第

二空:指针pl从第一个字符向后移动,指针p2从最后一个字符向前移动,如果两

字符不相同,则说明此字符串不是回文数,将标记变量t置为1。第三空:变量t

用来标记此字符串是否为回文数,当t为0时,表示字符串是问文数,当t为1

时,表示字符串不是回文数。

二、程序修改题(本题共1题,每题7.0分,共2分。)

2、下列给定程序中,fun()函数的功能是:根据形参m,计算下列公式的值。

1+1/2+1/3+1/4+…+l/m例如,若输入5,则应输出2.283333。请改正程序中的错

误,使它能计算出正确的结果。注意:不要改动main函数,不得增行或删行,也

不得更改程序的结构。试题程序:#include<conio.h>#include<stdio.h>double

fun(intm){doublet=1.0;inti;for(i=2;i<=m;i++)

)main(){intm;clrscr();

printf("\nPleaseenterlintegernumber:*');scanf("%d",&m);printf("\nTheresultis%lf\nu,

fun(m));}

标准答案:⑴错误:t+=l.O/k;正确:t+=LO/i;(2)错误:returni;正确:returnt;

知识点解析:该题目考查分母成等差数列递增的一个数学公式,我们先看看循环条

件fbr(i=2;iv=m;i++),i是从2开始递增到m,所以t的值应该由LO/i的值逐步循

环叠加后的结果,而不是t+=l.O/k;,relurni;考查对程序的解读能力,当循环结束

后(由输入m的值决定),函数值返回当前t的值。

三、程序设计题(本题共7题,每题1.0分,共[分0)

3、请编写函数fun(),函数的功能是求出二维数组周边元素之和,作为函数值返

回。二维数组中的值在主函数中赋予。例如:若二维数组中的值为135792999

469998I3570则函数值为61。注意:部分源程序给出如下。请勿改动主函数

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

试题程序:#include<conio.h>#includc<stdio.h>#dcfincM4#dcfincN5int

tun(mtaLMJLNJ)(}main(){mtaa[M]LNJ={{1,3,5,78},{2,9,9,9,4),

{6,9,9,9,8},{1,3,5,7,0}};inti,j,y;clrscr();printf("Theoriginaldatais:\n");for(i=0;i<

N;i++){for(j=O;j<N;j++)printf(H%6dH,aa[i][j]);printf("\n");}y=fun(aa);

printf("\nThesun:%d\n",y);printf("\n");}

标准答案:inifun(inta|M||N]){inti,j,sum=0;for(i=0;i<M;i++)for(j=0;i<N;j++)

if(i==0||i二=卜二N-l)/*只要下标中有一个为0或M-l或N-l,则它一定是

周边元素*/sum=sum+a[i][j];/*将周边元素相加*/returnsum;)

知识点解析:本题采用逐一判断的方式,周边元素的下标一定有一个是0或M-1

或N-1,且只要下标中有一个为0或M-1或N-1,则它一定是周边元素。

国家二级(C语言)机试模拟试卷第2

一、程序填空题(本题共[题,每题7.0分,共7分。)

1、给定程序中,函数fun的功能是:在形参SS所指字符串数组中查找与形参t所

指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到则返

回SS所指字符串数组中共有N个内容不同的字符串,且串长小于M。请在程

序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:

源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程

序的结构!#include<stdio.h>#include<string.h>#defineN5#defineM8

intfun(char(*ss)[M],char*t){inti;/***********found***********/for(i=0;i<_1

_;i++)/***********found***********/if(strcmp(ss[i],t)=O)return_2—;return-

1;}main(){charch[N][M]={I.ifY'while","switch",''fbr"),t[M];

intn,i;printf(*'XnTheoriginalstringVnNn*?);for(i=0;i<N;i++)puts(ch[i]);

prinW'll");printff'inEnterastringfbrsearch:");gets(t);n=fun(ch,t);

/**********found**********/if(n=_3_)printf("haDon,tfbund!\n");

elseprintf(,*\nThepositionis%d.\n‘',n);!

标准答案:(1)N(2)I(3)-1

知识点解析:本题中函数fun的功能是在形参ss所指字符串数组中查找与形参t所

指字符串相同的串,找到后返回该串在字符串数组中的位置,未找到则返回

第一空:“fbr(i=0;i++)”补充循环的结束条件,fun的参数(*ss)[M]是指

向N行M列的字符串数组,循环是逐行查找是否存在I所指的字符串,因此循环

次数是N次,故第一空处应为“N”。第二空:“if(strcmp(ss[i],t)==0)retmm_2

说明两个字符串相同,按照题干要求,应返回该串在字符串数组中的位置i,

故第二空处为“i”。第三空:"iRn==_3_)primf(''\naDon'tfound!\n'');",fun函数

未找到则返回-1,因此这里是判断n是否等于-1,如果n等于-1标识没有找到,在

屏幕上输出“DoiTtfound!咽此第三空处为“-1”。

二、程序修改题(本题共[题,每题7.0分,共7分0)

2、给定程序MODH.C中函数fun的功能是:判断一个整数是否是素数,若是返

回1,否则返回0。在main。数中,若fun返回1输出YES,若fun返回0输出

NO!。请改正程序中的缙误,使它能得出正确的结果。注意:不要改动main函

数。不得增行或删行,也不得更改程序的结构!#includc〈stdio.h>intfun(intm)

{intk=2;while(k<=m&&(m%k))/************found************/k++

/************found***率********/if(m=k)return1;elseretumO:}main(){intn:

printf(''\nPleaseentern:'');scanf(''%d'',&n);if(fun(n))pfintf(,,YES\n,>);

,,,,

elseprintf(NO!\n);}

标油答案:(l)k++;(2)if(m=k)

知识点解析:本题中函数的功能是判断一个整数n是否是素数。素数是只能被1和

本身整除的正整数(>1),所以判别n是否为素数,只要用2、3.........n.1这些数

逐个去除n,观察余数是否为0即可,只要有一次相除余数为0,n就不是素数,

否则n为素数。(I)第一个标识下“++”语句没有结束符分号,所以将“k++”改

为“k++;(2)第二个标识下的“if(m:k)”语句应该是判断m是否素数,而原题中

是将k的值赋给m,并不表示是否m等于k,所以第二个标识下“if(m=k。广应该改

为‘加=。'<>

三、程序设计题(本题共7题,每题7.0分,共7分0)

知识点解析:软件需求分析阶段的工作,可以概括为四个方面:需求获取、需求分

析、编写需求规格说明书和需求评审。需求获取的目的是确定对同标系统的各方

面需求。涉及到的主要任务是建立获取用户需求的方法框架,并支持和监控需求获

取的过程。需求分析是对获取的需求进行分析和综合,最终给出系统的解决方案

和目标系统的逻辑模型。编写需求规格说明书作为需求分析的阶段成果,可以为

用户、分析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统的确

认,又可以作为控制软件开发进程的依据。需求评审是对需求分析阶段的工作进

行复审,验证需求文档的一致性、可行性、完整性和有效性。

6、在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的

阶段是()。

A、需求分析

B、详细设计

C、软件设计

D、概要设计

标准答案:A

知识点解析:软件生命周期的主要活动阶段为:可行性研究和计划制定、需求分

析、软件设计、软什实现、软件测试、运行和维护。其中需求分析是对开发软件提

出的需求进行分析并给出详细定义,即准确地确定软件系统的功能,编写软件规格

说明书及初步的用户手册,提交评审。

7、对建立良好的程序设计风格,下面描述正确的是()。

A、程序应简单、清晰、可读性好

B、符号名的命名只要符合语法

C、充分考虑程序的执行效率

D、程序的注释可有可无

标准答案:A

知识点解析:程序设计应该简单易懂.语句结构应该简单直接,不应该为提高效率

而把语句复杂化。

8、下列工具中,不属于结构化分析的常用工具的是()。

A、数据流图

B、数据字典

C、判定树

D、N—S图

标准答案:D

知识点解析:结构化分析的常用工具有数据流图、数据字典、判定树和判定表。

9、在软件生产过程中,需求信息的来源是()。

A、程序员

B、项目经理

C、设计人员

D、软件用户

标准答案:D

知识点解析:软件需求是指用户对目标软件系统在功能、性能、设计约束等方面的

要求,是由用户提出的。

10、对关系S和R进行集合运算,结果中既包含S中的所有元组也包含R中的所

有元组,这样的集合运算称为()。

A、并运算

B、交运算

C、差运算

D、积运算

标准答案:A

知识点解析:关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,

新关系中包含两个关系中的所有元组。

11、设有关键码序列(Q,G,M,Z,A,N,B,P,X,H,Y,S,T,L,K,

E),采用堆排序法进行排序,经过初始建堆后关键码值B在序列中的序号是()。

A、1

B、3

C、7

D、9

标准答案:B

知识点解析:建堆的算法:首先将要排序的所有关键码放到一棵完全二叉树的各个

结点中(这时的二又树不具备堆的特性),然后,从i=[n/2](n为结点的个数)的结点

Ki开始,逐步把以K[n⑵,K[n⑵-1,:K[n⑵-2,…为根的子树排成堆,直到以K|

为根的树排成堆,就完成了建堆过犀。此题中,n=16,i=[16/2]=8,即从第8个结

点开始,建堆完成后如下图:z所以经过初始建

堆后关键码值B在序列中的序号是3o

12、数据库的故障恢复一般是由()来执行恢复。

A、电脑用户

B、数据库恢复机制

C、数据库管理员

D、系统普通用户

标准答案:C

知识点解析:数据库一旦发生故障,需要及时进行故障恢复,并由数据库管理员负

责执行故障恢复。

13、下列选项中,不属于数据模型所描述的内容的是()。

A、数据类型

B、数据操作

C、数据结构

D、数据约束

标准答案:A

知识点解析:数据模型选述的内容包含数据结构、数据操作和数据约束。

14、以卜程序的运行结果是()。#include<stdio.h>main(){inta=3,b=4,

c=8,d=4,m=l,n=3;printf(,,%d\n,\(m=a>b)&&(n=c>d));}

A、0

B、1

C、2

D、3

标准答案:D

知识点解析:C语言规定,标识符是由字母、数字或下划线组成,并且它的第〜个

字符必须是字母或者下划线。“铲不允许出现在标识符中。

15、以下选项中,能用作数据常量的是()。

A、018

B、011

C、0.8e2.5

D、25L

标准答案:A

知识点解析:逻辑与(&&)运算符的功能是:当“&&”运算符两边的运算对象均为

1时,整个表达式的值为1,否则为0。因为a=3

16^有下列程序:main(){intm,n,p;scanf(''m=%dn=%dp=%dt.,&m,&n,

&p);printfL%d%d%d\nHm,n,p);}若想从键盘上输入数据,使变量mt扣

的值为123,n中的值为456,p中的值为789,则正确的输入是()。

A、m=123n=456p=789

B、m=123n=456p=789

C^m=123,n=456,p=789

D、1.23457e+008

标准答案:D

知识点解析:本题考查常量定义。数据常量可有10进制、8进制、16进制、指数

法等,8进制数字为0-7,第〜个字符为O,而不是。,因此选项A和B错误。为

指数法时,指数部分须为整形,因此选项C错误,选项D中数字后加入L是说明

此变量为长整型。

17、以下关于long、int和shorl类型数据占用内存大小的叙述中正确的是()。

A、均占4个字节

B、根据数据的大小来决定所占内存的字节数

C、由用户自己定义

D、由C语言编译系统决定

标准答案:A

知识点解析:scanf()函数中格式控制字符串是为了输入数据用的,无论其中有什

么字符,在输入数据时,按照一一对应的位置原样输入这些字符。

18、有以下程序#includc<stdio.h>main(){intk=5,n=0;whilc(k>0)

{SWitch(k){default:break;case1:n+=k:case2:case3:n+=k=}k・;}

printfr%d\n\n);}程序运行后的输出结果是

A、0

B、4

C、6

D、7

标准答案:D

知识点解析:不同的编译系统或计算机系统对几类整型数所占用的字节数有不同的

规定。10ng、ini和short类型数据占用内存大小是由选择何种C编译系统决定的。

19、有以下程序段m";floaty;charname[50];scan''%2d%ff7oS'',&j,&

y,name);当执行上述程序段,从键盘上输入555667777ABC后,y的值为()。

A、55566.0

B、566.0

C、7777.0

D、566777

标准答案:D

知识点解析:因为没有break语句.当k=2的时候,会顺序执行两条语句,k=1的

时候,会顺序执行3条语句。

20、若变量已正确定义,有以下程序段:i=0:doprintf「%d,',,i);

while(i++);printf(,,%d\n,\i);其输出结果是()。

A、0,0

B、0,1

C、1,1

D、程序进入无限循环

标准答案:B

知识点解析:因为在输入格式控制符中指定变量j的输入格式控制符为“%2d”,即

变量j所占的宽度为2,所以变量j只接收输入数据的前两位,从第3位开始直到

空格之间的输入整数都会被保存到变量y中,因为y为浮点型数据,所以输出结果

为选项B。

21、设有条件表达式:(ExP)?i++j-则以下表达式q〜(ExP)完全等价的是()。

A、(ExP=O)

B、(ExP!=O)

C、(ExP=I)

D、(ExP!=I)

标准答案:B

知识点解析:do…while循环的执行过程如下:①执行do后面的循环体中的语

句。②计算while后一对圆括号中表达式的值。当道为非0时,转去执行步骤

①;当值为。时.,执行步骤③。③退出do…while循环。对于本题变量i的初始值

等于“0”,接着执行do后面的循环体中的语句,输出变量i的值0。再判断while后

面括号中表达式i++的值,其值为0,所以循环结束。此时变量i的值经过自加已

经变为1,所以再次输Hi的值力”。

22、有以下程序程ncludeVstdio.h>main(){inty=9:for(;y>0;y-)iffy%

3=0)printfr%d.-y);}程序的运行结果是()。

A、741

B、963

C、852

D、875421

标准答案:B

知识点解析:条件表达式的形式为:“表达式17表达式2:表达式3”。其含义为:

当“表达式1”的值为非零时,求出“表达式2”的值,此时“表达式2”的值就是整个条

件表达式的值;当“表达式1”的值为零时,求出“表达式3”的值,此时“表达式3”的

值就是整个条件表达式,的值。对于本题来说,当表达式EXP为非0值时条件成

立,即执行语句i++;当ExP等于0时)执行语句i-;这等同于条件表达式

“(ExP!=0)?iH.j++;

23、若要求从键盘读入含有空格字符的字符串,应使用函数()。

A、getc()

B、gets()

C^getchar()

D、scanf()

标准答案:C

知识点解析:y的初值为9,所以在for循环中,当y的值为9、6或3时,if语句

的条件成立,执行输出语句,输出表达式-y的值。因为自减符号在y的前面,所以

首先y自减1,然后再输出y的值,故输出结果为852。

24>当a=4,b=5,c=7,d=6时,执行下面一段程序:iffa<b)if(c<d)x=l:else

iffa<c)if(b<c)x=2;elsex=3;elsex=4;elsex=5;程序执行后,x的值为()。

A、1

B、2

C、3

D、4

标准答案:B

知识点解析:scanf()语句中用“空格”间隔不同的字符串,空格将被全部忽略掉,所

以用scanf()函数不能输入空格;gelchar()函数用于输入字符,其调用形式为:

ch=getchar(),getchar()函数从终端读入一个字符作为函数值,把读入的字符赋给变

量ch。在输入时:空格、回车符都将作为字符读入,而且只有在用户敲入En®•键

时,读入才开始执行。gets()函数的调用形式为:gets(stradr),其中slradr。是存放

输入字符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指针变

量。gets函数用来从终端键盘读入字符串(包括空格符),直到读入一个换行符为

止。geic()函数的调用形式为:ch=gelc(pf)其中pf是文件指针。函数的功能是从pf

指定的文件中读入一个字符,并把它作为函数值返同。

25、在C语言程序中,以下说法正确的是()。

A、函数的定义和函数的调用均不可以嵌套

B、函数的定义不可嵌套,但函数的调用可以嵌套

C、函数的定义可以嵌套,但函数的调用不可以嵌套

D、函数的定义和函数的调用均可以嵌套

标准答案:B

知火点解析:本题考查ifclse语句。笫一个if语句,先判断条件,a<b成立,则执

行下面的语句;第二个if语句,先判断条件,cVd不成立,则执行其对应的else

语句;第三个if语句,先判断条件,aVc成立,执行其后语句;第四个if语句,

先判断条件,bVc成立,执行语句x=2。

26、设y为整型变量,a=6,am地址为E2000,b=l4,b的地址为E2001;执行语

句6=&@:y=&a;后y的值为()。

A、E2000

B、E2001

C、6

D、14

标准答案:B

知识点解析:本题考查函数调用时的参数传递。函数reverse将数组b进行了逆

置,此时b[10]={10,9,8,7,6,5,4,3,2,1),后面for语句的功能是将b中的后3

个数累加,并将结果放在s中,最后将s输出,结果s=l+2+3=6。

27、若有以下程序段:structst{intn;);inta=2,b=3,c=5;

structsts[3]=({101,&a),{102,&c},{103,&b}};main(){structst*p;p=

s;}则以下表达式中值为5的是()。

A^(*p).m

B、*(p+l)->m

C、*(p++)->n

D^(p++).(*m)

标准答案:D

知识点解析:&是取地址运算符,y=&a是将a的地址赋给y,而a的地址没有发

生变化,因此y的值为E2000。

28、在下列叙述中,错误的是()。

A、C语言中,二维数组或多维数组是按行存放的

B、赋值表达式b⑴⑵二a⑵⑶是正确的

C、chara[l];a[O]='A'与a[。尸A,等价

D、数组名后的方括号内可以为常量表达式,也可以为变量

标准答案:B

知识点解析:本题考查如何通过指针引用数组元素。首先定义了一个结构体,然后

定义了一个结构体变量s[3],并赋了初值。在主程序中,定义了一个指向结构体变

量s的指针p,要使表达式的值为5,就应该引用s[l].m的值,使指针p指向

s[l],++p可以实现将p指针加1,指向s[l]。

29、若已包括头文件Vstdio.h>n<string.h>,运行下面程序的输出结果是(

charsl[10]=,,12345,\s2[10]=''089'',s3[尸'67";strcat(strcpy(s1,s2),s3):

puts(sl);

A、08967

B、0894567

C、089567

D、89567

标准答案:D

知识点解析:本题考查数组的4个知识点:①C语言中,二维数组或多维数组元

素排列的顺序是按行存放;②不同数组的元素之间可以相互赋值;③字符型数组

中存放的是字符,int型数组中存放的是字符对应的ASCII码值,虽然在计算机内

部字符常量都是作为整型量来处理的,其对应的整数值就是ASCII码值,但两者

并不完全等价;④数组名后的方括号内可以为常量,也可以为常量表达式,但不

可以为变量.

30、下列说法正确的是()。

A、auto和register将声明的对象说明为自动存储类对象,这些对象可用在函数中

或函数外。

B、将变量其定义为stalic类型,则其初值默认为随机值。

C、typedef说明符并不会为对象预留存留空间。

D、加果一个对象被声明为register,则对它应用一元运算符&,意在取得其存储的

地址

标准答案:A

知识点解析:本题考查字符串复制函数和字符串连接函数:字符串复制函数

strcpy(sl,s21是把s2的字符串复制给si,执行后4=089;字符串连接函数

strcat(sl,s2),功能是把s2字符串连接到si字符串的末尾,执行后si=08967。

31、以F程序段的输出结果为()。staticchara[]-'programme44;char*p;p=a;

for(p=a:p<a+8;p+=2)putchar(*p);

A^programme

B、porm

C、有语法错误

D、prog

标准答案:D

知识点解析:本题考查宏的使用规则:①字符替换格式:#define标识符字符串,

标识符称为宏名,无类型;②双引号中出现的宏名不替换;③宏名的定义通常用

大写字母,但不是必须用大写;④宏定义不是赋值语句,不做语法检查。

32、下列关于C语言数据文件的叙述中正确的是()。

A、文件由ASCII码字符序列组成,C语言只能读写文本文件

B、文件由二进制数据序列组成,C语言只能读写二进制文件

C、文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件

D、文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件

标准答案:B

知识点解析:本程序首先定义了静态字符数组a,然后将指针p指向数组a的首地

址,笫一次for循环,p=a,p指向数组的笫一个元素,*p是取指制p所指地址的内

容,输出p;第二次for循环,p=p+2,则p指向数组的第三个元素,*p是取指针p

所指地址的内容,输出。;第三次for循环,p=p+2,则p指向数组的第5个元素,

*p是取指针p所指地址的内容,输出r;第四次for循环,p=p+2,则p指向数组的

第7个元素,*p是取指针p所指地址的内容,输出m;结束循环。

33已知char**s,下面正确的语句是()。

,,,,

A、s=ABCDEF;

B、*s=''ABCDEF";

「***=,,ARCDEFL

D、*s='A,;

标准答案:D

知识点解析:本题考查数据文件的基本概念。①文件由数据流形式组成,可以按

数据的存放形式分为二进制文件和文本文件;②C语言既能读写文本文件,又可

以读写二进制文件。

34、下列程序的运行结果是()。#include<stdio.h>voidfun(int*S,int*P)

{staticintt=3;*p=s[t];t—;}voidmain(){intaa=j2,3,4,5),k,x;fdr(k=

0:k<4;k++){fun(a,&x);printf("%d,”x);))

A5,4,3,2,

B、2,3,4,5,

C、2,2,2,2,

D、5,5,5,5,

标准答案:C

知识点解析:分析fun函数程序段,可知fun函数要实现的功能是将s中第(1+1)个

元素前面(含该元素)的元素逆置赋给数组P。由于fun函数定义了静态变量t=3,因

此,在主函数中调用函数fun(a,&x)时,就是将数组a中前4个元素逆置赋给数组

x,最后输出x数组。

35、以下函数findmin拟实现在数组中查找最小值并作为函数值返回,但程序中有

错导致不能实现预定功能。#defincMAx2147483647intfindmin(intx[],into)

finli,min;min=MAx;for(i=0;i<n;i++){iffmin<x|i])min=x|i];}retummin;}

造成错误的原因是()。

A、定义语句中mm木赋初值

B、赋值语句min=MAN;中,不应给min赋MAx值

C^语句if(min<x[i])min=x[i];中判断条件设置错误

D、赋值语句min=MAx;放错了位置

标准答案:D

知识点解析:在C语言中,一个整型变量占用4个字节的内存单元,并按整型数

的存储方式存放数据,允许存放的数值范围是:-2147483648〜2147483647。所以

在这个题目中定义的宏变量MAX的值就是整数范围内最大的数值,因而对■于任意

一个整数来说,其值都比MAX小,而判断最小值,是当找到的数比min小时,才

交换。

36、以下程序的输出结果是()。#include<stdio.h>structst{intx;int*y;)*p;

intdt[4]={1,2,3,4};structstaa[4]={2,&dt[O],3,&dt[O],4,&dt[O],5,&

dt[O],);main(){p=aa;printf(',%d\n,\++(p->x));}

A、1

B、2

C>3

D、4

标准答案:C

知识点解析:程序首先将指针p指向结构体数组aa的首地址,通过p->x引用了结

构体数组aa[0]的第一个成员2;++(p->x)是将p->x的值加1,所以输出结果为

3o

37、有以卜定义和语句:structstudents{intnum;charname[20];chare;struct

{intgradel;intgrade2;}s;};structstudentsw.*pw;*pw=w:下列赋值语句不

正确的是()。

A、w.num=1002;

B、w.gradel=85;

C>pw->num=1002;

D、w.S.grade2=85;

标准答案:B

知识点解析:本题主要考查的是结构体变量的嵌套定义,也就是说一个结构体变量

也可以是一个结构体。在本题中student这个结构体中包含了结构体s。所以对结构

体变量w中gradel成员的引用是w.s.gradel或w->s->gradeL

38、设有以下语句:charx=3,Y=6,z;z=xAy<<2;则Z的二进制值是()。

A、00010100

B、00011011

C、00011100

D、11000

标准答案:B

知识点解析:本题考查的是位运算符的应用。x和y写成二进制表示分别为

x=00000011,y=00000110,由于左移位运算符的优先级高于按位异或运算

符“A”,左移两位后yVV2=0001l000,此结果和x按位异或后x'yVV

2=0001101lo

39、有以下程序:#include<stdio.h>main(){FILE*pr;

char*sl=''China'',*s2=''Bcijing'':pf=fopcn(,,ABC.dat'\''wb+'');fwritc(s2,7,

hpD;rewind(pO;/*文件位置指针回到文件开头*/fwrile(sl,5,1,pf);

fclose(pf):)以上程序执行后ABC.dat文件的内容是()。

A^China

Chinang

C、ChinaBeijing

D^BeijingChina

标准答案:B

知识点解析:本题考查函数fwrite的使用。函数fwrite的调用形式为:

intfwrite(char*pt,unsigncdn,FILE*fp);其功能是把pt所指向的resize个字节输出

到fp所指文件中,第二次调用该函数时,从文件的第一个位置开始写入,之前已

有的会被覆盖掉,如果第二次写入的长度没有第一次的长,则后而短出的部分保留

原样。

家二级(C语言)机试模拟试卷第3

一、程序填空题(本题共7题,每题7.0分,共,分°)

1、请补充函数fun(),该函数的功能是:把字符串圻中的字符按字符的ASCII码

降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传

入。例如,如果输入“cdefgh",则输出为“hgfedc”。注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun。的横线上填入所编

写的若干表达式或语句。试题程序:#inckide<stdio.h>#defineN80voidfun

(chars[],intn){inti,j;charch;for(i=0;i<n;i++)for(j=[];j<n;j++)if(s[i]<s[j])

{ch=s|j|;[];s|i|=ch;}main(){inti=0,strlen=();charstr|N|;clrscr();printf

("\nlnputastring:\nn);gets(str);while(str[i]!=*\0*){strlen-H-;i++;}fun(str,strlen);

printf("\n***displaystring***\n");puts(str);}

标准答案:

知识点解析:第一空:本题采用选择法进行排序。选择法的算法思路是:如果有n

个数则从头到倒数的第2个数一个一个往后走动,每走动一个数总是将这个数与其

后的所有数进行两两比较,在比较时按题目要求的顺序将进行比较的这两个数排序

(即交换)。理解了选择法的思路,则此空就非常简单了,应该填i。第二空:借助

第三个变量交换两数的方法,非常重要也非常基础,必须要求掌握。

二、程序修改题(本题共1题,每题1.0分,共[分0)

2、下列给定程序中,函数fun()的功能是:求出以下分数序列的前n项之和。

2/1,3/2,5/3,8/5,13/8,21/13,……和值通过函数值返回main。函数。例如,

若输入n=5,则应输出8.391667。请改正程序中的错误,使它能得出正确的结

果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题

程序:#includc<conio.h>#includc<stdio.h>

/*******东*****found**************/fun(intn){inta=2,b=l,c,k;doubles=0.0;

b+=c;}return(s);}main(){intn=5;clrscr();printf1\nThevalueoffunction

is:%lf\n'\fun(n));}

标准答案:(I)错误:fun(intn)正确:doublefim(intn)(2)错误:c=a;a+=b;;

b+=c;正确:c=a;a+=b;b=c;

知识点解析:该题题干是著名的斐波拉契分数序列,所以循环条件应该是c=a:

a+—b;b—c。

三、程序设计题(本题共[题,每题7.0分,共7分0)

3、请编写函数fun(),该函数的功能是:删去一维数组中所有相同的数,使之只剩

一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。

例如,若一维数组中的数据是:2223445666677899101010删除后,数组

中的内容应该是:2345678910。注意:部分源程序给出如下。请勿改动主函

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

句。试题程序:#include<stdio.h>#defineN80intfun(inta[],intn)()main()

{inta[N]={2,2,2,344,5,6,6,6,6,7,7,8,9,9,10,10,10,10),i,n=20;printf("Theoriginal

data:\n");for(i=0;i<n;i++)printf("%3d",a[i|);n=fun(a,n);printf("\n\nThedata

afterdeleted:\n");for(i=0;i<n;i++)printf("%3d",a[i]);printf("\n\n");}

标准答案:inifun(inla|],intn){inti,j=l;for(i=l;i<n;i++)if(a[j-l|!=a[i])/*若该数

与前一个数不相同,则要保留*/a[j++]=a[i];returnj;/*返回不同数的个数*/)

知识点解析:本题程序的流程是:让i,j都从1开始,其中j用于控制删除后剩下

的数中的下标,i用于搜索原数组中的元素。j始终是新数组已有元素中最后一个元

素的下一个元素的下标,所以if()中的条件是其中就是新数组中

的最后一个元素,若条件成立,则表示出现了不同的值,所以a[i]要留下到新数组

中。注意本题中i,j的初值都要从1开始,该算法只能用于数组已排序的题目中。

国家二级(C语言)机试模拟试卷第4

一、程序填空题(本题共1题,每题7.0分,共2分。)

1、给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参[所

指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到则返

回-1。ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。请在程

序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:

源程序存放在考生文件夹下的BLANKI.C中。不得增行或删行,也不得更改程序

♦include<stdio.h>

2linclude<string.h>

3♦defineN5

4IdefineM8

5intfun(char(*ss)[M],char*t)

6{inti;

7found……*…/

8for(i-0;i<_1_;if)

9/*♦*♦**«***found**********/

10if(strcmp(ss(i],t)-0)return

_2_;

return-1;

12

13main()

14{charch[N][M]-{"if"r"while**,

"switch","int","for"},t[M];

15intnri;

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

17for(i«0;i<N;i++)puts(ch(i]);

printf("\n");

18printf("\nEnterastringfor

search:");gets(t);

19n-fun(ch,t);

20/……*…found………*/

21if(n«»_3_)printf("\nDon,t

found!\nM);

22elseprintf(M\nThepositionis

%d.\n"rn);

的结构!23

标准答案:⑴N(2)i(3)・l

知识点解析:本题中函数劭的功能是在形参ss所指字符串数组中查找与形参t所指

字符串相同的串,找到后返回该串在字符串数组中的位置,未找到则返回-1。

二、程序修改题(本题共I题,每题1.0分,共I分C)

2、给定程序MODIC的功能是:读入一个英文文本行,将其中每个单词的第一

个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串),例

如,若输入:Iamastudenttotaketheexamination.,则应输出:lAmAStudentTo

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

意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

1♦include<ctype.h>

2♦include<string.h>

3/*****…八**found*****

4include<stdio.h>

/…………found…*

6upfst(charp)

7{intk«0;

8for(;*p;p++)

9if(k)

10{if(*p-•k-0;)

11elseif(*p!**')

12(k-1;*p-toupper(*p);}

13)

14main()

15{charchrstr[81];

16printf("\nPleaseenteranEnglish

textline:**);gets(chrstr);

17printf(H\n\nBeforechanging:\n

%s"rchrstr);

18upfst(chrstr);

19printf(M\nAf^erchanging:\n%s\n”,

chrstr);

20

标准答案:(l)#include(2)upfst(char*p)

知识点解析:本题中函数的功能是将每个单词的第一个字母改成大写。该题的解题

思路根据题干中“这里的‘单词'是指由空格隔开的字符串”可以归纳为主要是对字符

串中空格字符的查找。

三、程序设计题(本题共[题,每题7.0分,共[分°)

3、函数Fun的功能是:将s所指字符串中除了下标为奇数、同时ASCII值也为奇

数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所

指的数组中。例如,若s所指字符串中的内容为:“ABCDEFG12345",其中字符A

的ASCH码值虽为奇数,但所在元素的下标为偶数,因此必需删除;而字符1的

ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其他依此类

推。最后t所指的数组中的内容应是:“135”。注意:部分源程序存在文件

PROGI.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的

花括号中填入你编写的若干语句。

tinclude<stdio.h>

2tinclude<string.h>

3voidfun(char*s,chart[))

4

5

6

7main()

8(

9chars(100]tt[100];voidNONO();

10printf(M\nPleaseenterstring

M

S:");scanf("%srs);

fun(s,t);

nn

12printf(\nTheresultis:%s\nrt);

13NONOO;

14;)

15;voidNONO()

16j(/*本函数用于打开文件,输入数据,调用函

!数,编出数据,关闭文件.•/

17chars[100],t[100];

18FILE*rf,*wf;

19inti;

20rf■fopen("in.dat",wrH);

21wf«fopen("out.dat",;

22for(i■0;i<10;i++)(

23fscanf(rfr"%s"rs);

24fun(s,t);

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

26)

27fclose(rf);

28fclose(wf);

29

•intI,j-0;

ifor(i-1;Kstrlen(s);i+-2)

if(i12—0“

标准答案:

知识点解析:该程序功能是将字符串中除了下标为奇数、ASCII值也为奇数的字符

外,其余的全都删除。解题过程利用if判断表达式选择符合条件的字符,然后将

符合条件的字符放入指定的字符串。

国家二级(C语言)机试模拟试卷第5

一、程序填空题(本题共I题,每题1.0分,共I分°)

1、给定程序中,函数fun的功能是:将形参s所指字符串中的所有数字字符顺序

前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。例如,s所

指字符串为:udl23fghS##43df,处理后新字符串为:123543asdfgll##df。请在程序

的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源

程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序

的结构!#inckide#include#include#includechar*fun(char*s){inti,j,k,n:

char*p,*t;n=strlcn(s)+1;t=(char*)malloc(n*sizeof(char));

p=(char*)malloc(n*sizeof(char));j=0;k=0;for(i=0;i

标准答案:(l)j(2)k(3)p

知识点解析:第一空:由审题分析可知,p字符串保存数字字符,j记录p字符串

的长度,故第一空处应填竽。第二空:“fbr(i=O;i<[2];i++)pD+i]=t[i];”是将t

字符串串里的k个字符放在p字符串后面,t字符串的长度是k,故第二空处应为

“k”。第三空:p字符串保存了按题干要求的字符内容,函数的返回值应指向字符

串地址的指针,故第三处是“p”。

二、程序修改题(本题共7题,每题7.0分,共[分0)

2、给定程序MODH.C中fun函数的功能是:分别统计字符串中大写字母和小写

字母的个数。例如,给字符串S输入:AAaaBBbl23CCceced,则应输出结果:

uppcr=6,lower=8o请改正程序中的错误,使它能计算出正确的结果。注意:不

要改动main函数,不得增行或删行,也不得更改程序的结构!include

/***********木***found***木************/voidfun(char*s,inta,intb){while(*s)

(if(*s>=,A,&&is<=,Z,)/***************R)und****************/*a=a+1;

iR*s>=,a,&&*sv=,Z,)/***************f()uf|(j************♦*♦*/*b=b+[.

s++;))main()(chars[100];intupper=O,lower=0:printf("\nPleaseastring:

");gets(s);fun(s,&upper,&lower);printf("\nupper=%dlower=%d\n".

upper,lower);)

标准答案:(l)voidfun(char*s,int*a,int*b)(2)*a=*a+l;(3)*b=*b+l;

知识点解析:(1)第一个标识卜面“voidfun(char*s,inta,intb)",因为主函数调用

fun函数第二个、第三个参数传送的是参数地址,因此定义的fun函数中的第二

个、第三个参数应是指升型。应将“voidfun(char*s,inta,intb)”改为

t4voidfun(char*s,int*a,int*b)Ho(2)第二个和第三个标识下面,因为a、b都是指

针型,将a、b中的内容加1,应为“*a=*a+l;”和“*b=*b+l;”。

三、程序设计题(本题共1题,每题1.0分,共7分0)

3、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组

s中,请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的

数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。

注意:部分源程序在文件PR0G1.C文件中。请勿改动主函数main和其他函数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论