




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2021年湖南省郴州市全国计算机等级考试C语言程序设计真题一卷(含答案)学校:________班级:________姓名:________考号:________
一、单选题(12题)1.
2.
3.若有定义“intw[3][5];”,则以下不能正确表示该数组元素的表达式是()。
A.*(&w[0][0]+1)B.*(*w+3)C.*(*(w+1))D.*(w+1)[4]
4.在结构化方法中,软件功能分解属于下列软件开发中的阶段是______。
A.详细设计B.需求分析C.总体设计D.编程调试
5.若有定义和语句:int**pp),*P,a=20,b=10;pp=&p;p=&a;p=&b;printf("%d,%d\n",*P,*PP);则输出结果是()。A.20,10B.20,20C.10,20D.10,10
6.设有二维数组A7×8,每个数据元素占8个字节存储单元,顺序存放,A第一个元素A0,0的存储地址为1000,按行优先存放时,元素A3,4的地址为()。
A.1224B.1208C.1200D.1216
7.设s1="Good",s2="",s3="Bye",则s1、s2和s3连接后的结果是()。
A.GoodB.GoodByeC.GoodByeD.Bye
8.设文件指针fp已定义,执行语句“fP=foPen(“file”,“w”);”后,下列针对文本文件file操作叙述的选项中正确的是()。
A.只能写,不能读B.写操作结束后可以从头开始读C.可以在原有内容后追加写D.可以随意读和写
9.有下列程序:程序执行后的输出结果是()。
A.0,-1,-1,-1
B.0,-1,-1,0
C.0,-1,-1,0,-1,0
D.0,-1,-1,-1,-1,-1
10.若有说明:inta[][3]={0,0};则不正确的叙述是()。
A.数组a的每个元素的初值都是0
B.数组a的第一维大小为1
C.数组a的行数为1
D.只有元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0
11.数据在计算机存储器内表示时,如果元素在存储器中的相对位置能反映数据元素之间的逻辑关系,则称这种存储结构为()。
A.存储结构B.逻辑结构C.顺序存储结构D.链式存储结构
12.以下不能定义为用户标识符的是()。
A.scanfB.VoidC.3comD.int
二、2.填空题(12题)13.以下程序中,for循环体执行的次数是【】。
#defineN2
#defineMN+1
#defineKM+1*M/2
main()
{
inti;
for(i=1;i<K;i++)
{…}
…
}
14.若有定义:inta[4][4]={{1,2,3,4},{0},{4,6,8,10},{1,3,5,7}},则初始化后,a[2][2]得到的初值是______。
15.下述函数统计字符串中的单词个数,单词是指处在空格之间的字符序列,请填空。
intword(char*s)
{intnum=0,flag=0;
while(*s)
{if(【】=")flag=0;
elseif【】{flag=1;num++}
}
return【】;}
16.下列程序的运行结果是______。
#definePOW(r)(r)*(r)
main()
{intx=3,y=2,t;
t=POW(x+y);
printf("%d\n",t);
}
17.关系模型的数据操纵即是建立在关系上的数据操纵,一般有______、增加、删除和修改四种操作。
18.以下程序用来输出结构体变量ex所占存储单元的字节数,请填空。
structst
{charname[20];doublescore;};
main()
{structstex;
pfintf("exsize:%d\n",sizeof(______));}
19.以下程序运行后,若输入:3,abcde<回车>,则输出结果是【】。
#include<stdio.h>
#include<string.h>
move(char*str,intn)
{chartemp;inti;
temp=str[n-1];
for(i=n-1;i>0;i--)str[i]=str[i-1];
str[0]=temp;
}
main()
{chars[50];intn,i,z;
scanf("%d,%s",&n,s);
z=strlen(s);
for(i=1;i<=n;i++)move(s,z);
printf("%s\n",s);
}
20.有以下定义和语句,则sizeof(a)的值是【】,而sizeof(a.share)的值是【】。
structdate
{intday;
intmouth;
intyear;
union{intshare1;
floatshare2;
}share;
}a;
21.以下程序运行后的输出结果是______。
inta=5;
fun(intB)
{staticinta=10;
a+=b++;
printf("%d",A);
}
main()
{intc=20;
fun(C),
a+=C++;
printf("%d\n",A);
}
22.下面程序的运行结果是【】。
main()
{inty,a;
y=2,a=1;
while(y--!=-1)
{do{a*=y;a++;}while(y--);}
printf("%d,%d",a,y);}
23.设Y是int型变量,请写出判断Y为奇数的关系表达式【】。
24.结构化程序设计的3种基本结构分别是顺序、选择和______。
三、3.程序设计题(10题)25.请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,则函数求出w的后n-1位的数作为函数值返回。
例如:w值为5923,则函数返回923;若w值为923,则函数返回23。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
unsignedfun(unsignedw)
{
}
main()
{
unsignedx;
clrscr();
printf("Enteraunsignedinteger
number:");
scanf("%u",&x);
printf("Theoriginaldatais:%u\n",x);
if(x<10)
printf("Dataerror!");
else
printf("Theresult:%u\n",fun(x));
}
26.下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(inta[][N],intn),该函数的功能是:使数字右上半三角元素中的值乘以m。
例如,若m的值为2,a数组中的值为
a=19
27
则返回主程序后a数组的值应为
218
214
注意:部分源程序给出如下.
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#defineN5
intfun(inta[][N],intm)
{
}
main()
{
inta[N][N],m,i,j;
clrscr();
printf{"*****Thearray*****\n");
for(i=O;i<N;i++)
/*输出一个随机的5×5矩阵*/
{for(j=0;j<N;j++)
{a[i][j]=rand()%20;
printf("%4d",a[i][j]);
}
printf("\n");
}
do
m=rand()%10;
while(m>=3);/*产生一个上于3的随机数*/
printf("m=%4d\n",m);
fun(a,m);
printf("THERESULT\n");
for(i=0;i<N;i++)
{for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
27.请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。
例如:二维数组中的值为:
13579
29994
69998
13570
则函数值为61。
注意:部分源程序存在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
28.假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。
例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。
注意:部分源程序在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
29.函数fun的功能是:将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一含新串放在t所指的数组中。
例如,若s所指字符串中的内容为:“ABCDEFGl23456”,其中字符A的ASCII码值为奇数,因此应当删除:其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是:“246”。
注意:部分源程序存在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
30.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。
例如,若学生的成绩是:85,76,69,85,91,72,64,87,则平均分应当是:78.625。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
31.请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。
主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
注意:部分源程序存在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
32.请编写函数fun(),它的功能是计算:s=(1-In(1)-In(2)-In(3)-…-1n(m))2
s作为函数值返回。
在C语言中可调用log(n)函数求In(n)。log函数的引用说明是doublelog(doublex)。
例如,若m的值为15,则fun()函数值为723.570801。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<math.h>
doublefun(intm)
{
}
main()
{
clrscr();
printf("%f\n",fun(15));
}
33.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。
注意:部分源程序存在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的莅括号中填入你编写的若干语句。
34.下列程序定义了N×N的二维数组,并在主函数中赋值。请编写一个函数fun(),函数的功能是:求数组周边元素的平方和,并作为函数值返回给主函数。例如,若数组a中的值为
01279
1112155
2216111
979102
54141
则返回主程序后s的值应为310。
[注意]部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
[试题源程序]
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#defineN5
intfun(intw[][N])
{
}
main()
{
inta[N][N]=(0,1,2,7,9,1,11,21,5,5,2,21,6,11,1,9,7,9,10,2,5,4,1,4,1);
inti,j;
ints;
clrscr()
printf("*****Thearray*****\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
s=fun(a);
printf("*****THERESULT*****\n");
printf("Thesumis:%d\n",s);
}
四、单选题(0题)35.则以下函数调用语句错误的是()。#include<stdio.h>intadd(inta,intb){return(a+b)}main(){intk,(*f)(),a=5,b=10;f=add;...}A.k=f(a,b);B.k=add(a,b);C.k=(*f(a,b);D.k=*f(a,b);
五、单选题(0题)36.有以下程序:main{inti,j;for(j=10;j<11;j++){for(i=9;i<j;i++)if(!(j%i))break;if(i==j-1)printf("%d",j);}}输出结果是()。A.11B.10C.9D.1011
六、单选题(0题)37.有以下程序:#include<stdio.h>voidsort(inta[],intn){inti,j,t;for(i=0;i<n-1;i+=2)for(j=i+2;j<n;j+=2)if(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}}main(){intaa[10]={1,2,3,4,5,6,7,8,9,10},i;sort(aa,10);for(i=0;i<10;i++)printf("%d.",aa[i]);printf("\n");}其输出结果是()。
A.1,2,3,4,5,6,7,8,9,10,
B.10,9,8,7,6,5,4,3,2,1,
C.9,2,7,4,5,6,3,8,1,10,
D.1,10,3,8,5,6,7,4,9,2,
参考答案
1.D
2.D
3.DA选项中,“*(&w[0][0]+1)”表示“w[0][1]”;B选项中,“*(*w+3)”表示“w[0][3]”;C选项中,“*(*(w+1))”表示“w[1][0]”;D选项中,“*(w+1)[4]”的正确写法是“(*(w+1))[4]”,表示“w[1][4]”。故本题答案为D选项。
4.C解析:软件系统结构的总体设计包括:基于功能层次结构建立系统、按功能划分成模块的层次结构、确定每个模块的功能、建立与已确定的软件需求的对应关系、确定模块间的调用关系和模块间的接口、评估模块划分的质量等方面。详细设计的任务是:在使用程序设计语言编制程序以前,对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。需求分析是指用户对目标软件系统在功能、行为、性能、设计约束等方面的期望。需求分析的任务是发现需求、求精、建模和定义需求,通常包括:功能需求、性能需求、环境需求、可靠性需求、安全保密要求、用户界面需求、资源使用需求、成本消耗需求、开发进度需求等。编程调试的任务是诊断和改正程序中潜在的错误。综上所述。软件功能分解只能发生在总体设计阶段。
5.D本题考查指针变量的赋值。**PP是定义一个指针变量,语句pp=&p是将pp指向指针P,*P和**PP都是指针P所指的内存空间的内容,即b的值。
6.A
7.C
8.A以“w”方式打开文件时只能写,不能读。故本题答案为A选项。
9.A程序定义整型变量a和b,初值分别是1,-2。for语句中循环条件式为“a--&&b++”,因为--和++的优先级高于逻辑与运算符&&,所以循环条件式等价于“(a--)&&(b++)”,自左向右运算。第1轮循环,a、b的值为1,-2,首先执行a--,a--的值为1,执行完后a的值为0;继续执行b++,b++的值为-2,执行完后b的值为-1。整个表达式“a--&&b++”的值为真,程序输出0,-1。第2轮循环,a、b的值分别为0,-1,首先执行a--,a--的值为0,执行完后a的值为-1,由于a--的值为0,根据逻辑与运算的短路原则,表达式“a--&&b++”的值一定为假,表达式b++不再执行,循环结束,执行循环体外的printf语句,输出a、b的值分别为:-1,-1。所以本题输出结果为:0,-1,-1,-1。本题答案为A选项。
10.D解析:本题考查给二维数组元素赋值。给二维数组元素赋值时应注意下列两点:①在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0。②二维数组第一维的大小由下列规则确定;当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小;当初值的个数不能被第二维的常量表达式的值除尽时,第一维的大小等于所得商数加1。
11.C
12.D解析:标识符是C语言中用来表示变量名、数组名、函数名、指针名、结构名、联合名、枚举常数名、用户定义的数据类型名、语句标号等用途的字符序列。标识符由1~32个字符组成,第一个字符必须是字母或下划线,后面的字符可以是字母、数字或下划线。标识符不能与C关键字相同,并区分大小写。选项D)错误,因为int是C语言中的关键字。
13.44解析:将程序中所有的宏替换掉可得:M=2+1,K=2+1*2+1/2=4,所以for循环共循环了K-1+1次,即4-1+1共4次。
14.88解析:二维数组可以看成是按矩阵形式排列的,题目中给二维数组赋初值是按行分段赋值的,a[4][4]可以分解为4个一维数组,其数组名分别为a[0]、a[1]、a[2]、a[3],这4个一维数组都有4个元素,a[0]的元素为ap[0][0]、a[0][1]、a[0][2]、a[0][3]。
15.*s++flag=0或*(s-1)=''num*s++\r\nflag=0或*(s-1)=''\r\nnum解析:在统计字符串单词个数的算法中,本题的flag是为了记录一个单词是否结束。第13空应填*s++;如果某个字符不是空格,则必须判断它是否是单词,如是,则使得flag的标志为1,num的值加1。本题判断方法是:先判断s所指向的字符是否为空恪,如果是则使得flag=0,否则判断前一个字符是否是空格,如果是则说明这个字符是—个单词的开始,将flag标志为1,num的值加1,如果不是,则不必记录。故第14空应填flag=0或*(s-1);最后一个空格需填写的是返回的单词的个数,即num。
16.2525解析:本题考查带参数的宏的定义及相关运算。运算过程为:t=POW(x+y)=(2+3)*(2+3)=25。
17.查询查询
18.
19.cdeabcdeab解析:程序中的move函数的作用是保存输入数组中的最后一个元素,然后从最后一个数组元素开始,依次向后移动一个位置,再把保存的最后一个元素置于首位,循环次数由n控制。输入3,abcde<回车>后主函数开始执行,其中n=3,s[50]={'abcde'},z=5。第一次循环,i=1时,调用move(s,5)函数,temp=str[4]语句把数组中最后一个元素\'e\'保存在temp中,然后i从4开始循环,将str[3](字符\'d\')赋给str[4],str[2](字符\'c\')赋给str[3],……,循环结束时str所指字符串为'aabcd',再将保存在temp中的\'e\'置于首位,字符串变为'eabcd';i=2时,调用move函数,字符串为'deabc';i=3时,调用move函数,字符串为'cdeab'。最后输出结果为'cdeab'。
20.10410\r\n4解析:结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。int占2个字节,float占4个字节,共用体变量所占的内存长度等于最长的成员的长度。所以,sizeof(a.share)的值是4,sizeof(a)的值是2+2+2+4=10。
21.30253025解析:本题考核的知识点是变量的存储属性和算术运算的应用。本题涉及了自动变量、静态变量和外部变量。外部变量是定义在所有函数之外的变量,本题中inta=5定义了一个外部变量a,它是一个全局变量,即作用域是从定义的位置开始到本文件的结束;静态变量的存储空间在程序的整个运行期间是固定的(static),本题函数fun()中staticinta=10定义个一个静态变量a,此静态变量a是个静态的局部变量,即它的值只能在本函数中使用;自动变量是C程序中使用最多的一种变量,它的建立和撤消都是由系统在程序执行过程中自动进行的,auto是自动变量的存储类别标识符,如果省略auto,系统隐含认为此变量为auto,本题中main()中intc=20定义了一个自动变量c,此自动变量c是个静态的局部变量.算术运算中a+=b++相当于a=a+b,b=b+1.所以,在第一个ptine('%d',a)中a=a+b=10+20=30,第二个printf('%d',a)中a=a+c=5+20=25,即输出3025。
22.1-21,-2解析:题中外层while循环的循环条件是y--!=-1,即y>=0;内层do…while循环的循环条件是y--即y-->0,y>=1。注意:break和continue语句在循体中的作用。
23.Y%2=1或Y%2!=0Y%2=1或Y%2!=0解析:判断变量是否为奇数可以用变量与2取模,判断结果是为1或下为0。本题具体做法如下:Y%2=1或Y%2!=0。
24.重复(循环)重复(循环)解析:结构化程序设计包括3种基本的结构:顺序结构、选择结构和重复结构(循环结构),利用这3种结构就足以表达出各种其他形式结构的程序设计方法。其中利用循环结构,可以简化大量的程序执行。
25.unsignedfun(unsignedw){if(w>=10000)returnw%10000;/*求出n位整数w的后n-1位的数*/if(w>=1000)returnw%1000;if(w>=100)returnw%100;if(w>=10)returnw%10;}unsignedfun(unsignedw)\r\n{\r\nif(w>=10000)\r\nreturnw%10000;/*求出n位整数w的后n-1位的数*/\r\nif(w>=1000)\r\nreturnw%1000;\r\nif(w>=100)\r\nreturnw%100;\r\nif(w>=10)\r\nreturnw%10;\r\n}解析:我们首先应该明白无符号整数的定义形式,若它大于10000(5位)时,将10000对它求余则结果为后4位;当它大于1000(4位)时,将1000对它求余则结果为后3位,花此类推。特别注意这里所有if()的顺序不能颠倒。
26.intfun(inta[][N]intm){intij;for(i=0;i<N;i++)for(j=i;j<N;j++)a[i][j]=a[i][j]*m;/*右上半三角元素中的值乘以m*/}intfun(inta[][N],intm)\r\n{\r\ninti,j;\r\nfor(i=0;i<N;i++)\r\nfor(j=i;j<N;j++)\r\na[i][j]=a[i][j]*m;/*右上半三角元素中的值乘以m*/\r\n}解析:本题考查表示右上关三角元素的算法。行下标肯定是从0到N-1,而列下标要根据行下标来定,当到第i行时列下标要从第i列开始,所以我们在编写程序时,第2个for()中有j=i(不是1);若要表示左下半三角元素时,行下标也是从0到N-1,列下标也是从0开始,但当到第i行时列只到i。所以要把上述的第2个for()改成for(j=0;j<=i;++)。
27.
解析:该程序功能是求出二维数组周边元素之和。其中周边元素是指数组的最上和最下的两行,最左和最右的两列。数组第一行元素的行下标为0,最后一行元素的行下标为M-1,第一列的列下标为0,最后一列的列下标为N-1。
28.
解析:该程序功能是将字符串尾部的“*”号全部删除,前面和中间的“*”号不删除。本题的解题过程首先确定由串尾开始的第一个非“*”位置,将由头开始到此位置的字符拷贝到字符串。
29.
解析:该程序功能是将字符串中除了下标为偶数、ASCII值也为偶数的字符外,其余的全都删除。解题过程利用if条件判断表达式选择符合条件的字符,然后将符合条件的字符放入指定的字符串。
30.
解析:该程序功能是求出存储在带头节点的链表结构中成绩的平均分。解题思路是,首先对单链表中存储的所有成绩求总分,然后对总
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年软件专业技术资格初级重要试题及答案
- 茶道中的哲学思考考题及答案
- 企业战略与人力资源对接考题试题及答案
- 2025年软件技术专业资格初级试题及答案解读
- 妇幼保健员应急处理试题及答案
- 计算机与软件专业基础知识试题及答案
- 2025年茶艺师行业标准分析试题及答案
- 备受瞩目健康管理师试题及答案
- 二零二五年度儿童托管班教师专业发展协议
- 二零二五年度期权交易风险管理合同字模板
- 2025年高考数学二级结论篇(核心知识背记手册)-专项训练
- 2025年人物精神创作指南:展现独特个性和价值观
- 《1844年经济学哲学手稿》原文
- 医药行业扭亏专项措施方案
- 2025年重庆市安全员《B证》考试题库及答案
- 《脑出血》课件完整版
- 《锂离子电池用二氟草酸硼酸锂》
- 全国第三届职业技能大赛(数字孪生应用技术)选拔赛理论考试题及答案
- 小学一年级上册数学课件专题一 数与代数
- 2024-2030年中国软水机行业竞争力策略及发展潜力分析报告版
- 议论文及其结构+课件统编版高中语文必修上册
评论
0/150
提交评论