




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2022-2023学年江西省吉安市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________
一、单选题(12题)1.已知有double型变量x=2.5,y=4.7,整型变量a=7,则表达式x+a%3*(int)(x+y)%2/4的值是()。
A.2.4B.2.5C.2.75D.0
2.下列数据结构中,能够按照“先进后出”原则存取数据的是()。
A.循环队列B.栈C.队列D.二叉树
3.
4.有以下程序:intfun(intn){if(n==l)returnl;elsereturn(n+fun(n一1)):}main{intx;scanf("%d",&x);x=fun(x);printf("%d\n",x):}执行程序时,给变量X输入10,程序的输出结果是()。A.55B.54C.65D.45
5.语句int(*ptr)的含义是()。
A.ptr是一个返回值为int的函数
B.ptr是指向int型数据的指针变量
C.ptr是指向函数的指针,该函数返回一个int型数据
D.ptr是一个函数名,该函数的返回值是指向int型数据的指针
6.请选出正确的程序段
A.int*p;scanf("%d",p);…
B.int*s,k;*s=100;…
C.int*s,k;char*p,c;s=&k;p=&c;*p='a';…
D.int*s,k;char*p,e;s=&k;p=&c;s=p;*s=1;…
7.
8.一个有8个顶点的有向图,所有顶点的入度出度之和与所有顶点的出度之和的差是()
A.16B.4C.0D.2
9.单链表中,增加一个头结点的目的是为了()。
A.使单链表至少有一个结点B.标识表结点中首结点的位置C.方面运算的实现D.说明单链表是线性表的链式存储
10.以下选项中非法的字符常量是A.A.'\101'
B.'\65'
C.”\xff'
D.'\019'
11.有以下程序
include<stdio.h>
main()
{chara[30],b[30];
scanf(“%s”,a);
gets(b);
printf(“%s\n%s\n”,a,b);
}
程序运行时若输入:
howareyou?Iamfine<回车>
则输出结果是A.howareyou?Iamfine
B.howareyou?1amfine
C.howareyou?Iamfine
D.howareyou?
12.以下选项中非法的表达式是()。
A.a+1=a+1
B.a=b==0
C.(Char.(100+100.
D.7<=X<60
二、2.填空题(12题)13.在面向对象方法中,属性与操作相似的一组对象称为【】。
14.以下程序用来输出结构体变量student所占存储单元的字节数,请填空。
structst
{charname[20];doublescore;
};
main()
{structststudent;
printf("studentsize:%d\n",sizeof(【】));
}
15.以下程序的运行结果是【】。
#include<string.h>
typedefstructstudent{
charname[10];
longsno);
floatscore
}STU;
main()
{STUa={"zhangsan",2001,95},b={"Shangxian",2002,90}
c={"Anhua",2003,95},d,*p=&d;
d=a;
if(strcmp(,)>0)d=b;
if(strcmp(,)>0)d=c;
printf("%1d%s\n",d.sno,p->name);
}
16.用树型结构表示实体类型及实体间联系的数据模型称为【】。
17.有如下图所示的双链表结构,请根据图示完成结构体的定义:
structaa
{intdata;
【】}node;
18.下面程序运行后的输出结果是()。
#include<stdio.h>
main()
{inta[]={1,2,3,4,5,6},*k[3],i=1;
while(i<4)
{k[i-1]=&a[2*i-1];
printf("%d",*k[i-1]);
i++;
}
}
19.有以下程序:
voidfun(int*a,inti,intj)
{intt;
if(i<j)
{t=a[i];a[i]=a[j];a[j]=t;
i++;j--;
fun(a,i,j);
}
}
main()
{intx[]=(2,6,1,8),i;
fun(x,0,3);
for(i=0;i<4;i++)printf("%2d",x[i]);
}
程序运行后的输出结果是【】。
20.数据结构包括数据的逻辑结构、数据的【】以及对数据的操作运算。
21.下面的if语句与y=(x>=10)?3*x-11:(x<1)?x:2*x-1;的功能相同,请补充完整。
if(______)
if(______)y=2*x-1;
elsey=x;
elsey=3*x-11;
22.以下程序输出的结果是#include<stdio.h>#include<string.h>main(){charw[][10]={"ABCD","EFGH","IJKL","MNOP"}1,k;for(k=1;k<3;k++)printf("%s\n",&w[k][k]);}
23.对于图书管理数据库,将图书表中"人民邮电出版社"的图书的单价涨价5%。请对下面的SQL语句填空:UPDATE图书【】WHERE出版单位="人民邮电出版社"
24.树中度为零的结点称为______。
三、3.程序设计题(10题)25.请编写一个函数voidfun(cbara[],charb[],intn),其功能是:删除一个字符申中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。
例如,输入一个字符串world,然后输入3,则调用该函数后的结果为word。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#defineLEN20
voidfun(chara[],charb[],intn)
{
}
main()
{
charstr1[LEN],str2[LEN];
intn;
clrscr();
printf("Enterthestring:\n");
gets(str1);
printf("Enterthepositionofthestring
deleted:");
scanf("%d",&n);
fun(str1,str2,n);
printf("Thenewstringis:%s\n",
str2);
}
26.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为asdasasdfgasdaszx67asdmklo,子字符串为as,则应当输出6。
注意:部分源程序给出如下。
请勿改动主函数main和具他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
intfun(char*str,char*substr)
{
}
main()
{
charstr[81],substr[3];
intn;
clrscr();
printf("输入主字符串");
gets(str);
printf("输入子字符串");
gets(substr);
puts(str);
puts(substr);
n=fun(shr,substr);
printf("n=%d\n",n);
}
27.请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。
S=1-x+x2(上标)/2!-x3(上标)/3!+…+(-1*x)n(上标)/n!
例如,当n=15,x=0.5时,函数值为0.606531。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<math.h>
doublefun(doublex,intn)
{
}
main()
{
clrscr();
printf("%f",fun(0.5,15));
}
28.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。
例如,输入如下整数:
234345753134436458100321135760
则输出结果为6,100。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
intfun(int*s,intt,int*k)
{
}
main()
{
inta[10]={234,345,753,134,436,458,
100,321,
135,760),k;
clrscr();
fun(a,10,&k);
printf("%dr%d\n",k,a[k]);
}
29.请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。
例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
30.请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。
例如,输入如下整数:87667589610l30l401980431451777则输出结果为:6,980
注意:部分源程序在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
31.请编写一个函数,用来删除字符串中的所有空格。
例如:输入asdafaaz67,则输出为asdafaz67。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
intfun(char*str)
{
}
main()
{
charstr[81];
intn;
clrscr();
printf("Inputastring:");
gets(str);
puts(str);
fun(str);
printf("***Str:%s\n",str);
}
32.N名学生的成绩己在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:求出平均分,由函数值返回。
例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。
注童:部分源程序给出如下.
请勿改动主函数main和其他函数中的任何内容,仅在函数6m的花括号中填入所编写的若干语句。
试题程序:
#include<stdlib.h>
#include<stdio.h>
#defineN8
structslist
{doubles;
structslist*next;
};
typedefstructslistSTREC;
doublefun(STREC*h)
{
}
STREC*creat(double*s)/*创建链表*/
{
STREC*h,*p,*q;
inti=0;
h=p=(STREC*)malloc(sizeof(STREC));
p->s=0;
while(i<N)
{q=(STREC*)malloc(sizeof(STREC));
q->s=sIi];i++;p->next=q;p=q;
}
p->next=0;
returnh;
}
outlist(STREC*h)
{
STREC*p;
p=h->next;
printf("head");
do
{printf("->%4.if",p->s);
p=p->next;/*输出各成绩*/
}
while(p!=0)
}
main()
{
doubles[N]={85,76,69,85,91,72,64,
87},ave;
STREC*h;
h=creat(s);
outlist(h);
ave=fun(h);
printf("ave=%6.3f\n",ave);
}
33.请编写函数fun(),它的功能是计算:
s=(ln(1)+ln(2)+ln(3)+…+ln(m))0.5
在C语言中可调用log(n)函数求ln(n)。
例如,若m的值为20,则fun()函数值为6.506583。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<math.h>
doublefun(intm)
{
}
main()
{
clrscr();
printf("%f\n",fun(20));
}
34.请编写一个函数fun(),它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。
例如,若输入abc4Efg,则应输出aBc4EFg。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidfun(char*ss)
{
}
main()
{
chartt[81];
clrscr();
printf("\nPleaseenteranstringwithin80characters:\n");
gets(tt);
printf("\n\nAfterchanging,thestring\n\%s",tt);
fun(tt);
printf("\nbecomes\n\%s\n",tt);
}
四、单选题(0题)35.使用深度优先算法遍历下图,遍历的顺序为()A.ABCDEFGB.ABDCFEGC.ABDECFGD.ABCDFEG
五、单选题(0题)36.以下语句定义正确的是()A.A.inta[1][4]-{1,2,3,4,5};
B.floata[3][]={{1},{2},{3}};
C.longa[2][3]={{1},{1,2},{1,2,3},{0,0)};
D.doublea[][3]={O);
六、单选题(0题)37.有以下程序:#include<stdio.h>intf1(inta){returna*3;}intf2(int*b){return*b*5;}main(){intx=3,y=5;printf(“%d,%d\n”,f1(x),f2(&y));}程序的运行结果是()。
A.9,125B.9,25C.3,15D.3,45
参考答案
1.B
2.BB。【解析】在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照“先进后出”或“后进先出”的原则组织数据的。
3.C
4.A函数intfun(intn)的功能是求1+2+…+n的值并返回。所以执行程序时,给变量x输入10后,执行语句“x=fun(x);”,X的值将变为1到10中10个整数的累加和,即55。
5.C本题考查的是指向函数的指针。函数指针定义的基本格式为:类型标识符(*指针变量名)()。“类型标识符”为函数返回值的类型。
6.C解析:本题的选项A)和B)犯了同样的错误,即指针变量在定义后并没有指向具体的变量。也就是说,指针变量中没有确定的地址值,它的值是不可预见的,所指的单元也是不可预见的,因此不能进行赋值操作。另外,在选项D)中,s是int型指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变量s。
7.A
8.C
9.C
10.D【答案】D
【知识点】字符常量的考察
【解析】在C语言中要求八进制字符常量的表示为\\ddd形式,但是八进制中只有0~7,7个数字,没有9这个数字,所以选择D。
11.B
12.A赋值运算符的左边只能是变量,而不能是常量或表达式。
13.类类解析:在面向对象方法中,类描述的是具有相似性质的一组对象。所以,属性与操作相似的一组对象称为类。
14.structst或studentstructst或student
15.2002shangxian2002shangxian解析:\'B\'的ASCII值是66。本题中指针变量p指向d,执行第一个if语句时,条件成立,d=b;执行第二个if语句时,条件不成立,故d=b,所以d.sno=2002,p->name'Shangxian'。
16.层次模型用树型结构表示实体类型及实体间联系的数据模型称为层次模型,用有向图结构表示实体类型及实体间联系的数据模型称为网状模型,用二维表格结构表示实体及其联系的数据模型称为关系模型。
17.structaa*lhead*rchild;structaa*lhead,*rchild;解析:结构体对链表的定义。
18.246
19.81628162解析:第一次调用函数fun时,x[0]=2、xL1]=6、x[2]=1、x[3]=8,执行完函数fun后,x[0]与x[3]的值互换,即x[0]=8、x[1]=6、x[2]=1、x[3]=2;第二次调用函数fun时,i=1、j=2,故将x[1]与x[2]的值互换,即得x[0]=8、x[1]=1、x[2]=6、x[3]=2。
20.存储结构数据结构包括3个方面,即数据的逻辑结构、数据的存储结构及对数据的操作运算。
21.x<10x>=1
22.D
23.SET单价=单价*1.05SET单价=单价*1.05解析:更新表中元组的值,使用UPDATE命令,一次可以更新表中的一个或多个属性值。UPDATE短语之后指定更新数据所属的表,将新的属性值或表达式赋值给对应的属性名(SET单价=单价*1.05),并置于SET短语之后。要求对人民邮电出版社的图书涨5%,需要用WHERE短语对元组进行限制,即对符合条件的元组进行更新。
24.叶子结点叶子结点解析:树中度为零的结点,也就是没有后件的结点,称为叶子结点。
25.voidfun{chara[]charb[]intn){intik=0;for(i=0;a[i]!=‘\0’;i++)if(i!=n)/*将不是指定下标的字符存入数组b中*/b[k++]=a[i];b[k]=‘\0’;/*在字符串最后加上结束标记*/}voidfun{chara[],charb[],intn)\r\n{\r\ninti,k=0;\r\nfor(i=0;a[i]!=‘\\0’;i++)\r\nif(i!=n)/*将不是指定下标的字符存入数组b中*/\r\nb[k++]=a[i];\r\nb[k]=‘\\0’;/*在字符串最后加上结束标记*/\r\n}解析:本题要求删除字符串中指定下标的字符,即相当于把不是指定下标的字符留下。所以要用if(i!=n),注意不能写成“=”运算。
26.intfun(char*strchar*substr){intij=0;for(i=0;str[i+1]!='\0';i++)/*如果一个长度为2的子字符串在主字符串中出现一次则j+1如此循环*/if(str[i]==substr[0]&&str[i+1]==substr[1])j++;returnj;/*返回子字符串在主字符串中出现的次数*/}intfun(char*str,char*substr)\r\n{\r\ninti,j=0;\r\nfor(i=0;str[i+1]!='\\0';i++)/*如果一个长度为2的子字符串在主字符串中出现一次,则j+1,如此\r\n循环*/\r\nif(str[i]==substr[0]&&str[i+1]==substr[1])\r\nj++;\r\nreturnj;/*返回子字符串在主字符串中出现的次数*/\r\n}解析:该题中subsu只有两个字符,所以可以用if语句来直接进行判断。要注意if())中str组的下标为i和i+1,即比较当前字符及其以后的一个字符是否分别与substr中的字符对应相同,若都相同则表示出现了一次。
27.doublefun(doublexintn){intij=1;doubles=1.0s1=1.0;for(i=1;i<=n;i++){j=-1*j;s1=s1*i/*各项中的阶乘*/s=s+j*pow(xi)/s1;/*按公式求出*/}returns;}doublefun(doublex,intn)\r\n{\r\ninti,j=1;\r\ndoubles=1.0,s1=1.0;\r\nfor(i=1;i<=n;i++)\r\n{\r\nj=-1*j;\r\ns1=s1*i/*各项中的阶乘*/\r\ns=s+j*pow(x,i)/s1;/*按公式求出*/\r\n}\r\nreturns;\r\n}解析:本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。注意到本题的公式中是加减相间的,这里要学会使用语句j=-1*j来实现。
28.intfun(int*sinttint*k){inti;*k=0/*k所指的数是数组的下标值*/for(i=0;i<t;i++)if(s[*k]>s[i])*k=i;/*找到数组的最小元素把该元素的下标赋给k所指的数*/returns[*k];/*返回数组的最小元素*/}intfun(int*s,intt,int*k)\r\n{\r\ninti;\r\n*k=0/*k所指的数是数组的下标值*/\r\nfor(i=0;i<t;i++)\r\nif(s[*k]>s[i])\r\n*k=i;/*找到数组的最小元素,把该元素的下标赋给k所指的数*/\r\nreturns[*k];/*返回数组的最小元素*/\r\n}解析:本题中直接使用指针变量k,但在使用时要注意对k的指针运算,此外,一开始应让*k的值为数组中的某一下标值勤,即*k=0。
29.
解析:该程序功能是计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。在循环中,首先确定相邻元素之间的关系,然后对其进行平均值平方根之和的操作。
30.
解析:(1)该程序功能是求最大元素在数组中的下标。它的解题思路是,用最大值变量max标记第一个待找数据,逐个把所有待找数据和max进行比较,并用pos标记其当前最大值所在位置,从而找出最大值。(2)从已给部分源程序的main主函数开始入手,核心函数“fun(a,10,&k);”中的参数a存放着给出的整数,fun函数实现查找最大元素的下标。
31.intfun(char*str){intij=0;for(i=0;str[i]!='\0';i++)if(str[i]!='')/*将字符串中的空格删去*/str[j++]=str[i];/*注意该程序中空格字符的表达方法*/str[j]='\0';/*在字符串最后加上结束标记符*/}intfun(char*str)\r\n{\r\ninti,j=0;\r\nfor(i=0;str[i]!='\\0';i++)\r\nif(str[i]!='')/*将字符串中的空格删去*/\r\nstr[j++]=str[i];/*注意该程序中空格字符的表达方法*/\r\nstr[j]='\\0';/*在字符串最后加上结束标记符*/\r\n}解析:前面我们接触到的题是删除字符,但本题要求删除所有空格,即除了空格以外的其他所有字符都要留下。由于C语言中没有直接删除字符的操作,所以我们对于删除字符的操作都是采用“留下”字符的算法,以前的题目亦是如此。用str[i]从串头到串尾逐一走动,每走到一个字符都判断其是否为空格,若不是空格(注意在if()的单引号之间有一个空格),则将其保存str[j]中。注意j的下标变化、初值及最后加串结束符'\\0'。
32.doublefun(STREC*h){doubleav=0.0;STREC*p-h->next;/*p直接指向“头结点”的下一个结点即第—个成绩*/while(p!=NULL){aY=ay+p->s;/*求总分数*/p=p->next;}returnay/N;/*返回平均值*/}doublefun(STREC*h)\r\n{\r\ndoubleav=0.0;\r\nSTREC*p-h->next;/*p直接指向“头结点”的下一个结点,即第—个成绩*/\r\nwhile(p!=NULL)\r\n{aY=ay+p->s;/*求总分数*/\r\np=p->next;\r\n}\r\nreturnay/N;/*返回平均值*/\r\n}解析:本题是关于链表问题,所以,一定要弄清表示出使指针变量p指向下一个“结点”的方法及表示结束的判断,本题中,因为“头结点”中没有数值,所以程序中让p直接指向“头结点”的下一个结点,使用语句STREC*p=h->next,当然也可将p一开始就指向“头结点”。
33.doublefun(intm){inti;doubles=0.0;for(i=1;i<=m;i++)s=s+log(i);/*计算s=ln(1)+ln(2)+ln(3)+…+in(m)*/returnsort(s);/*对s求平方根并返回*/}doublefun(intm)\r\n{\r\ninti;\r\ndoubles=0.0;\r\nfor(i=1;i<=m;i++)\r\ns=s+log(i);/*计算s=ln(1)+ln(2)+ln(3)+…+in(m)*/\r\nreturnsort(s);/*对s求平方根并返回*/\r\n}解析:首先,题目要求计算从1到m的对数的和,可用从1到m的循环,每次循环都累加求和。该题需要注意之处是,log()函数的形式参数应当为double型变量,而用于循环的基数变量为整数,需要进行强制转换。在返回的时候求小平方根。
34.voidfun(char*ss){inti;for(i=0;ss[i]!='\0';i++)/*将ss所指字符串中所有下标为奇数位置的字母转换为大写*/if(i%2==1&&ss[i]>='a'&&SS[i]<='z')ss[i]=ss[i]-32;}voidfun(char*ss)\r\n{\r\ninti;\r\nfor(i=0;ss[i]!='\\0';i++)/*将ss所指字符串中所有下标为奇数位置的字母转换为大写*/\r\nif(i%2==1&&ss[i]>='a'&&SS[i]<='z')\r\nss[i]=ss[i]-32;\r\n}解析:从C语言的学习中我们知道,只要将小写字母减去32则转成大写字母,将大写字母加上32则转成小写字母。该程序是用if语句实现该功能转化的。
35.C
36.D本题考查的是如何对二维数组进行赋值。选项A)中数组第二维的大小是4,但却给赋了5个元素;选项B)中C语言规定,对于二维数组,只可以省略第一个方括号中的常量表达式而不可以省略第二个方括号中的常量表达式:选项c)中数组第一维的大小是2,但是赋值却超过了2;选项D)中在对二维数组元素赋初值时,可以只对部分元素赋初值,未赋初值的元素自动取0。
37.Bf1函数接收整型数a,将a的值乘以3,结果作为函数返回值返回;f2接收整型变量的地址,将地址中的值取出后乘以5,结果作为返回值返回;main函数定义两个变量x、y,初值分别是3和5,所以调用f1(x)返回值为9,调用f2(&y)返回值为25。故本题答案为B选项。2022-2023学年江西省吉安市全国计算机等级考试C语言程序设计模拟考试(含答案)学校:________班级:________姓名:________考号:________
一、单选题(12题)1.已知有double型变量x=2.5,y=4.7,整型变量a=7,则表达式x+a%3*(int)(x+y)%2/4的值是()。
A.2.4B.2.5C.2.75D.0
2.下列数据结构中,能够按照“先进后出”原则存取数据的是()。
A.循环队列B.栈C.队列D.二叉树
3.
4.有以下程序:intfun(intn){if(n==l)returnl;elsereturn(n+fun(n一1)):}main{intx;scanf("%d",&x);x=fun(x);printf("%d\n",x):}执行程序时,给变量X输入10,程序的输出结果是()。A.55B.54C.65D.45
5.语句int(*ptr)的含义是()。
A.ptr是一个返回值为int的函数
B.ptr是指向int型数据的指针变量
C.ptr是指向函数的指针,该函数返回一个int型数据
D.ptr是一个函数名,该函数的返回值是指向int型数据的指针
6.请选出正确的程序段
A.int*p;scanf("%d",p);…
B.int*s,k;*s=100;…
C.int*s,k;char*p,c;s=&k;p=&c;*p='a';…
D.int*s,k;char*p,e;s=&k;p=&c;s=p;*s=1;…
7.
8.一个有8个顶点的有向图,所有顶点的入度出度之和与所有顶点的出度之和的差是()
A.16B.4C.0D.2
9.单链表中,增加一个头结点的目的是为了()。
A.使单链表至少有一个结点B.标识表结点中首结点的位置C.方面运算的实现D.说明单链表是线性表的链式存储
10.以下选项中非法的字符常量是A.A.'\101'
B.'\65'
C.”\xff'
D.'\019'
11.有以下程序
include<stdio.h>
main()
{chara[30],b[30];
scanf(“%s”,a);
gets(b);
printf(“%s\n%s\n”,a,b);
}
程序运行时若输入:
howareyou?Iamfine<回车>
则输出结果是A.howareyou?Iamfine
B.howareyou?1amfine
C.howareyou?Iamfine
D.howareyou?
12.以下选项中非法的表达式是()。
A.a+1=a+1
B.a=b==0
C.(Char.(100+100.
D.7<=X<60
二、2.填空题(12题)13.在面向对象方法中,属性与操作相似的一组对象称为【】。
14.以下程序用来输出结构体变量student所占存储单元的字节数,请填空。
structst
{charname[20];doublescore;
};
main()
{structststudent;
printf("studentsize:%d\n",sizeof(【】));
}
15.以下程序的运行结果是【】。
#include<string.h>
typedefstructstudent{
charname[10];
longsno);
floatscore
}STU;
main()
{STUa={"zhangsan",2001,95},b={"Shangxian",2002,90}
c={"Anhua",2003,95},d,*p=&d;
d=a;
if(strcmp(,)>0)d=b;
if(strcmp(,)>0)d=c;
printf("%1d%s\n",d.sno,p->name);
}
16.用树型结构表示实体类型及实体间联系的数据模型称为【】。
17.有如下图所示的双链表结构,请根据图示完成结构体的定义:
structaa
{intdata;
【】}node;
18.下面程序运行后的输出结果是()。
#include<stdio.h>
main()
{inta[]={1,2,3,4,5,6},*k[3],i=1;
while(i<4)
{k[i-1]=&a[2*i-1];
printf("%d",*k[i-1]);
i++;
}
}
19.有以下程序:
voidfun(int*a,inti,intj)
{intt;
if(i<j)
{t=a[i];a[i]=a[j];a[j]=t;
i++;j--;
fun(a,i,j);
}
}
main()
{intx[]=(2,6,1,8),i;
fun(x,0,3);
for(i=0;i<4;i++)printf("%2d",x[i]);
}
程序运行后的输出结果是【】。
20.数据结构包括数据的逻辑结构、数据的【】以及对数据的操作运算。
21.下面的if语句与y=(x>=10)?3*x-11:(x<1)?x:2*x-1;的功能相同,请补充完整。
if(______)
if(______)y=2*x-1;
elsey=x;
elsey=3*x-11;
22.以下程序输出的结果是#include<stdio.h>#include<string.h>main(){charw[][10]={"ABCD","EFGH","IJKL","MNOP"}1,k;for(k=1;k<3;k++)printf("%s\n",&w[k][k]);}
23.对于图书管理数据库,将图书表中"人民邮电出版社"的图书的单价涨价5%。请对下面的SQL语句填空:UPDATE图书【】WHERE出版单位="人民邮电出版社"
24.树中度为零的结点称为______。
三、3.程序设计题(10题)25.请编写一个函数voidfun(cbara[],charb[],intn),其功能是:删除一个字符申中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。
例如,输入一个字符串world,然后输入3,则调用该函数后的结果为word。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#defineLEN20
voidfun(chara[],charb[],intn)
{
}
main()
{
charstr1[LEN],str2[LEN];
intn;
clrscr();
printf("Enterthestring:\n");
gets(str1);
printf("Enterthepositionofthestring
deleted:");
scanf("%d",&n);
fun(str1,str2,n);
printf("Thenewstringis:%s\n",
str2);
}
26.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为asdasasdfgasdaszx67asdmklo,子字符串为as,则应当输出6。
注意:部分源程序给出如下。
请勿改动主函数main和具他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
intfun(char*str,char*substr)
{
}
main()
{
charstr[81],substr[3];
intn;
clrscr();
printf("输入主字符串");
gets(str);
printf("输入子字符串");
gets(substr);
puts(str);
puts(substr);
n=fun(shr,substr);
printf("n=%d\n",n);
}
27.请编写函数fun(),它的功能是计算下列级数和,和值由函数值返回。
S=1-x+x2(上标)/2!-x3(上标)/3!+…+(-1*x)n(上标)/n!
例如,当n=15,x=0.5时,函数值为0.606531。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<math.h>
doublefun(doublex,intn)
{
}
main()
{
clrscr();
printf("%f",fun(0.5,15));
}
28.请编写一个函数intfun(int*s,intt,int*k),用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。
例如,输入如下整数:
234345753134436458100321135760
则输出结果为6,100。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
intfun(int*s,intt,int*k)
{
}
main()
{
inta[10]={234,345,753,134,436,458,
100,321,
135,760),k;
clrscr();
fun(a,10,&k);
printf("%dr%d\n",k,a[k]);
}
29.请编写函数fun,其功能是:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方根之和。
例如,给定数组中的9个元素依次为12.0、34.0、4.0、23.0、34.0、45.0、18.0、3.0、11.0,输出应为:s=35.951014。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
30.请编写函数fun,其功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。
例如,输入如下整数:87667589610l30l401980431451777则输出结果为:6,980
注意:部分源程序在文件PROGl.C文件中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
31.请编写一个函数,用来删除字符串中的所有空格。
例如:输入asdafaaz67,则输出为asdafaz67。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<stdio.h>
#include<ctype.h>
#include<conio.h>
intfun(char*str)
{
}
main()
{
charstr[81];
intn;
clrscr();
printf("Inputastring:");
gets(str);
puts(str);
fun(str);
printf("***Str:%s\n",str);
}
32.N名学生的成绩己在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:求出平均分,由函数值返回。
例如,若学生的成绩是85,76,69,91,72,64,87,则平均分应当是78.625。
注童:部分源程序给出如下.
请勿改动主函数main和其他函数中的任何内容,仅在函数6m的花括号中填入所编写的若干语句。
试题程序:
#include<stdlib.h>
#include<stdio.h>
#defineN8
structslist
{doubles;
structslist*next;
};
typedefstructslistSTREC;
doublefun(STREC*h)
{
}
STREC*creat(double*s)/*创建链表*/
{
STREC*h,*p,*q;
inti=0;
h=p=(STREC*)malloc(sizeof(STREC));
p->s=0;
while(i<N)
{q=(STREC*)malloc(sizeof(STREC));
q->s=sIi];i++;p->next=q;p=q;
}
p->next=0;
returnh;
}
outlist(STREC*h)
{
STREC*p;
p=h->next;
printf("head");
do
{printf("->%4.if",p->s);
p=p->next;/*输出各成绩*/
}
while(p!=0)
}
main()
{
doubles[N]={85,76,69,85,91,72,64,
87},ave;
STREC*h;
h=creat(s);
outlist(h);
ave=fun(h);
printf("ave=%6.3f\n",ave);
}
33.请编写函数fun(),它的功能是计算:
s=(ln(1)+ln(2)+ln(3)+…+ln(m))0.5
在C语言中可调用log(n)函数求ln(n)。
例如,若m的值为20,则fun()函数值为6.506583。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<math.h>
doublefun(intm)
{
}
main()
{
clrscr();
printf("%f\n",fun(20));
}
34.请编写一个函数fun(),它的功能是:将ss所指字符串中所有下标为奇数位置的字母转换为大写(若该位置上不是字母,则不转换)。
例如,若输入abc4Efg,则应输出aBc4EFg。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
试题程序:
#include<conio.h>
#include<stdio.h>
#include<string.h>
voidfun(char*ss)
{
}
main()
{
chartt[81];
clrscr();
printf("\nPleaseenteranstringwithin80characters:\n");
gets(tt);
printf("\n\nAfterchanging,thestring\n\%s",tt);
fun(tt);
printf("\nbecomes\n\%s\n",tt);
}
四、单选题(0题)35.使用深度优先算法遍历下图,遍历的顺序为()A.ABCDEFGB.ABDCFEGC.ABDECFGD.ABCDFEG
五、单选题(0题)36.以下语句定义正确的是()A.A.inta[1][4]-{1,2,3,4,5};
B.floata[3][]={{1},{2},{3}};
C.longa[2][3]={{1},{1,2},{1,2,3},{0,0)};
D.doublea[][3]={O);
六、单选题(0题)37.有以下程序:#include<stdio.h>intf1(inta){returna*3;}intf2(int*b){return*b*5;}main(){intx=3,y=5;printf(“%d,%d\n”,f1(x),f2(&y));}程序的运行结果是()。
A.9,125B.9,25C.3,15D.3,45
参考答案
1.B
2.BB。【解析】在栈中,允许插入与删除的一端称为栈顶,而不允许插入与删除的另一端称为栈底。栈顶元素总是最后被插入的元素,从而也是最先能被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。即栈是按照“先进后出”或“后进先出”的原则组织数据的。
3.C
4.A函数intfun(intn)的功能是求1+2+…+n的值并返回。所以执行程序时,给变量x输入10后,执行语句“x=fun(x);”,X的值将变为1到10中10个整数的累加和,即55。
5.C本题考查的是指向函数的指针。函数指针定义的基本格式为:类型标识符(*指针变量名)()。“类型标识符”为函数返回值的类型。
6.C解析:本题的选项A)和B)犯了同样的错误,即指针变量在定义后并没有指向具体的变量。也就是说,指针变量中没有确定的地址值,它的值是不可预见的,所指的单元也是不可预见的,因此不能进行赋值操作。另外,在选项D)中,s是int型指针变量,p是char型指针变量,所指向的内存单元所占用的字节数是不同的,因而不能将字符指针变量p的值赋给整型指针变量s。
7.A
8.C
9.C
10.D【答案】D
【知识点】字符常量的考察
【解析】在C语言中要求八进制字符常量的表示为\\ddd形式,但是八进制中只有0~7,7个数字,没有9这个数字,所以选择D。
11.B
12.A赋值运算符的左边只能是变量,而不能是常量或表达式。
13.类类解析:在面向对象方法中,类描述的是具有相似性质的一组对象。所以,属性与操作相似的一组对象称为类。
14.structst或studentstructst或student
15.2002shangxian2002shangxian解析:\'B\'的ASCII值是66。本题中指针变量p指向d,执行第一个if语句时,条件成立,d=b;执行第二个if语句时,条件不成立,故d=b,所以d.sno=2002,p->name'Shangxian'。
16.层次模型用树型结构表示实体类型及实体间联系的数据模型称为层次模型,用有向图结构表示实体类型及实体间联系的数据模型称为网状模型,用二维表格结构表示实体及其联系的数据模型称为关系模型。
17.structaa*lhead*rchild;structaa*lhead,*rchild;解析:结构体对链表的定义。
18.246
19.81628162解析:第一次调用函数fun时,x[0]=2、xL1]=6、x[2]=1、x[3]=8,执行完函数fun后,x[0]与x[3]的值互换,即x[0]=8、x[1]=6、x[2]=1、x[3]=2;第二次调用函数fun时,i=1、j=2,故将x[1]与x[2]的值互换,即得x[0]=8、x[1]=1、x[2]=6、x[3]=2。
20.存储结构数据结构包括3个方面,即数据的逻辑结构、数据的存储结构及对数据的操作运算。
21.x<10x>=1
22.D
23.SET单价=单价*1.05SET单价=单价*1.05解析:更新表中元组的值,使用UPDATE命令,一次可以更新表中的一个或多个属性值。UPDATE短语之后指定更新数据所属的表,将新的属性值或表达式赋值给对应的属性名(SET单价=单价*1.05),并置于SET短语之后。要求对人民邮电出版社的图书涨5%,需要用WHERE短语对元组进行限制,即对符合条件的元组进行更新。
24.叶子结点叶子结点解析:树中度为零的结点,也就是没有后件的结点,称为叶子结点。
25.voidfun{chara[]charb[]intn){intik=0;for(i=0;a[i]!=‘\0’;i++)if(i!=n)/*将不是指定下标的字符存入数组b中*/b[k++]=a[i];b[k]=‘\0’;/*在字符串最后加上结束标记*/}voidfun{chara[],charb[],intn)\r\n{\r\ninti,k=0;\r\nfor(i=0;a[i]!=‘\\0’;i++)\r\nif(i!=n)/*将不是指定下标的字符存入数组b中*/\r\nb[k++]=a[i];\r\nb[k]=‘\\0’;/*在字符串最后加上结束标记*/\r\n}解析:本题要求删除字符串中指定下标的字符,即相当于把不是指定下标的字符留下。所以要用if(i!=n),注意不能写成“=”运算。
26.intfun(char*strchar*substr){intij=0;for(i=0;str[i+1]!='\0';i++)/*如果一个长度为2的子字符串在主字符串中出现一次则j+1如此循环*/if(str[i]==substr[0]&&str[i+1]==substr[1])j++;returnj;/*返回子字符串在主字符串中出现的次数*/}intfun(char*str,char*substr)\r\n{\r\ninti,j=0;\r\nfor(i=0;str[i+1]!='\\0';i++)/*如果一个长度为2的子字符串在主字符串中出现一次,则j+1,如此\r\n循环*/\r\nif(str[i]==substr[0]&&str[i+1]==substr[1])\r\nj++;\r\nreturnj;/*返回子字符串在主字符串中出现的次数*/\r\n}解析:该题中subsu只有两个字符,所以可以用if语句来直接进行判断。要注意if())中str组的下标为i和i+1,即比较当前字符及其以后的一个字符是否分别与substr中的字符对应相同,若都相同则表示出现了一次。
27.doublefun(doublexintn){intij=1;doubles=1.0s1=1.0;for(i=1;i<=n;i++){j=-1*j;s1=s1*i/*各项中的阶乘*/s=s+j*pow(xi)/s1;/*按公式求出*/}returns;}doublefun(doublex,intn)\r\n{\r\ninti,j=1;\r\ndoubles=1.0,s1=1.0;\r\nfor(i=1;i<=n;i++)\r\n{\r\nj=-1*j;\r\ns1=s1*i/*各项中的阶乘*/\r\ns=s+j*pow(x,i)/s1;/*按公式求出*/\r\n}\r\nreturns;\r\n}解析:本程序中用s1来表示每项的分母(即各项中的阶乘),要注意本程序中s和s1的初值都为1。注意到本题的公式中是加减相间的,这里要学会使用语句j=-1*j来实现。
28.intfun(int*sinttint*k){inti;*k=0/*k所指的数是数组的下标值*/for(i=0;i<t;i++)if(s[*k]>s[i])*k=i;/*找到数组的最小元素把该元素的下标赋给k所指的数*/returns[*k];/*返回数组的最小元素*/}intfun(int*s,intt,int*k)\r\n{\r\ninti;\r\n*k=0/*k所指的数是数组的下标值*/\r\nfor(i=0;i<t;i++)\r\nif(s[*k]>s[i])\r\n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025合同样本:小额贷款公司借款合同范本
- 2025中外设备租赁合同模板(或范文)
- 2025劳动法试用合同协议
- 语句鉴赏课件
- 红楼梦赏析课件
- 商业大楼停车场管理规定及协议
- 农村水产养殖渔业经营合同
- 合同管理与审核标准化流程工具
- 红楼梦彭丹课件
- 红楼梦导读课件
- 中华人民共和国史马工程课件02第二章
- 《股骨颈骨折》课件
- GB/T 28749-2012企业能量平衡网络图绘制方法
- GB/T 9113-2010整体钢制管法兰
- 膜性肾病治疗指南课件
- 海姆立克急救法完整版本课件
- 部编版六年级上册语文全册课件-002
- 简介肾移植课件
- 发展社会学课件
- 【完整版】锁骨骨折护理查房课件
- 浅谈黄河三角洲生物多样性特点及保护对策
评论
0/150
提交评论