C笔试题及答案
C笔试题及答案
C语言的简洁性与其丰富的运算符相结合,使其可能会编写出极难理解的代码。下面就由范文网小编为大家介绍一下C笔试题及答案的文章,欢迎阅读。
C笔试题及答案篇1
(1)算法的时间复杂度是指_______。
A)执行算法程序所需要的时间
B)算法程序的长度
C)算法执行过程中所需要的基本运算次数
D)算法程序中的指令条数
答案:C
评析:所谓算法的时间复杂度,是指执行算法所需要的计算工作量。
(2)下列叙述中正确的是________。
A)线性表是线性结构 B)栈与队列是非线性结构
C)线性链表是非线性结构 D)二叉树是线性结构
答案:A
评析:一般将数据结构分为两大类型:线性结构与非线性结构。线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。
(3)下面关于完全二叉树的叙述中,错误的是_________。
A)除了最后一层外,每一层上的结点数均达到最大值
B)可能缺少若干个左右叶子结点
C)完全二叉树一般不是满二叉树
D)具有结点的完全二叉树的深度为[log2n]+1
答案:B
评析:满二叉树指除最后一层外每一层上所有结点都有两个子结点的二叉树。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干子结点(叶子结点)的二叉树。
(4)结构化程序设计主要强调的是_________。
A)程序的规模 B)程序的易读性
C)程序的执行效率 D)程序的可移植性
答案:B
评析:结构化程序设计主要强调的是结构化程序清晰易读,可理解性好,程序员能够进行逐步求精、程序证明和测试,以保证程序的正确性。
(5)在软件生命周期中,能准确地确定软件系统必须做什么和必须具备哪些功能的阶段是________。
A)概要设计 B)详细设计 C)可行性分析 D)需求分析
答案:D
评析:需求分析是对待开发软件提出的需求进行分析并给出详细定义,即准确地确定软件系统的功能。编写软件规格说明书及初步的用户手册,提交评审。
(6)数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列 图符名标识的图符不属于数据流图合法图符的是_________。
A)控制流 B)加工 C)数据存储 D)源和潭
答案:A
评析:数据流图从数据传递和加工的角度,来刻画数据流从输入到输出的移动变换过程。数据流图中的主要图形元素有:加工(转换)、数据流、存储文件(数据源)、源和潭。
(7)软件需求分析一般应确定的是用户对软件的__________。
A)功能需求 B)非功能需求 C)性能需求 D)功能需求和非功能需求
答案:D
评析:软件需求分析中需要构造一个完全的系统逻辑模型,理解用户提出的每一功能与性能要求,是用户明确自己的任务。因此,需求分析应确定用户对软件的功能需求和非功能需求。
(8)下述关于数据库系统的叙述中正确的是________。
A)数据库系统减少了数据冗余
B)数据库系统避免了一切冗余
C)数据库系统中数据的一致性是指数据类型的一致
D)数据库系统比文件系统能管理更多的数据
答案:A
评析:由数据的共享自身又可极大地减少数据冗余性,不仅减少了不必要的存储空间,更为重要的是可以避免数据的不一致性。所谓数据的一致性是指在系统中同一数据的不同出现应保持相同的值。
(9)关系表中的每一横行称为一个________。
A)元组 B)字段 C)属性 D)码
答案:A
评析:在关系数据库中,关系模型采用二维表来表示,简称“表”。二维表是由表框架及表元组组成。在表框架中,按行可以存放数据,每行数据称为元组。
(10)数据库设计包括两个方面的设计内容,它们是________。
A)概念设计和逻辑设计 B)模式设计和内模式设计
C)内模式设计和物理设计 D)结构特性设计和行为特性设计
答案:A
评析:数据库设计可分为概念设计与逻辑设计。概念设计的目的是分析数据间内在语义关联,在此基础上建立一个数据的抽象模型。逻辑设计的主要工作是将ER图转换为指定的RDBMS中的关系模型。
C笔试题及答案篇2
(1)请读程序:
#include
main
{
int a;float b,c;
scanf(“%2d%3P%4f’,&a,&b,&C);
printf(”\na=%d,b=%ec。%f\n”,a,b,C);
}
若运行时从键盘上输入9876543210l,则上面程序的输出结果是________。
A)a=98,b=765,c=432 1
B)a=1 0,b=432,c=8765
C)a=98,b=765.000000,c=432 1.000000
D)a=98,b=765.0,c=432 1.0
答案:C
评析:scanf把用户从键盘录入的数字的第1、2位存入整型变量a;把第3、4、5位存入单精度实型变量b,把第6、7、8、9位存入单精度实型变量c,用户录入的第10位被scanf遗弃。这时变量a、b、c的值分别为:98、765.000000、4321.000000。
(2)一个良好的算法由下面的基本结构组成,但不包括__________。
A)顺序结构 B)选择结构 C)循环结构 D)跳转结构
答案:D
评析:1966年,Bohra和Jacopini提出了以下三种基本结构,用这三种基本结构作为表示一个良好算法的基本单元:1、顺序结构;2、选择结构;3、循环结构。
(3)请选出以下程序的输出结果________。
#include
sub(x,y,z)
int x,y,*z:
{*z=y-x;}
main{
int a,b,c;
sub(10,5,&a);sub(7,a,&b);sub(a,b,&C);
printf(”%d,%d,%d\n”,a,b,C);
}
A)5,2,3 B)-5,-12,-7 C)-5,-12,-17 D)5,-2,-7
答案:B
评析:sub函数的作用是将形参y和x的差赋给了z指向的那个内存地址,所以在sub(10,5,&a/I,10和5属于值传递,a是属于地址传递,也就是a与z指向了同一个存储单元,在执行函数后,a的值随*z变化,所以此次函数被调用后,a的值为y-x=-5,同理可知,在sub(7,a,&b)后,b的值发生变化,其值为-5-7=-12,在sub(a,b,&C)后,c的值发生变化,其值为-12-(-5)=-7。
(4)下面程序在屏幕上的输出是________。
main
{
printf(”ab\b\b c”);
}
A)ab\b\b c B)a c C)abc D)ab c
答案:B
评析:c语言中允许使用一种特殊形式的字符常量,、就是以一个“\”开头的字符序列,这样的字符称为“转义字符”。常用的转义字符有:\n,换行;\t,水平制表;\b,退格;\r,回车。
(5)若x是整型变量,pb是基类型为整型的指针变量,则正确的赋值表达式是_______。
A)pb=&x; B)pb=x; C)*pb=&x; D)*pb=
答案:A
评析:选项A将变量x的地址赋给指针变量pb,使pb指向x‘选项B是将x的值当作地址赋给指针pb,Db指向一个地址等于x值的内存单元;选项c将x的地址赋给指针pb指向的地址等于x的内存单元。
(6)设整型数i=5,则printf(“%d”,i+++++i);的输出为________。
A)10 B)1l C)12 D)语法错误
答案:D
评析:c语言中有基本的算术运算符(+、-、*、/)还包括自增自减运算符(++、–),在c语言解析表达式时,它总是进行贪婪咀嚼,这样,该表达式就被解析为i++ ++ +i,显然该表达式不合c语言语法。
(7)若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元
int *p;
p=___________malloc(sizeof(im));
则应填入__________。
A)int B)int C)(*int) D)(int*)
答案:D
评析:不论p是指向什么类型的指针变量,都可以通过强制类型转换的方法使之类型一致,强制类型转换的格式为(数据类型+)。
(8)下面程序输出的结果是__________。
main
{
int i=5,J=9,x;
x=(I==j?i:(j=7));
printf(”\n%d,%d”,I,J);
}
A)5,7 B)5,5 C)语法错误 D)7,5
答案:A
评析:条件表达式的一般形式为:表达式I?表达式2:表达式3;先求解表达式1,若为真则求解表达式2;若表达式l的值为假,则求解表达式3。本题中先判断i==j,不等,执行j=7;然后执行x=7。故本题为A。
(9)若执行下面程序时从键盘上输入5,
main
{
int x:
scanf(”%d”,&x);
if(x++>5)printf(”%d\n”,x);
else printf(”%d\n”,x–);
}
则输出是________。
A)7 B)6 C)5 D)4
答案:B
评析:根据c语言的语法,x++是在使用x之后,再将x的值加1,在if语句中,x的值为5,条件不成立,执行else后面的语句,因为x的值已经加1,为6,所以打印结果为6。
(10)若有以下定义和语句:
int a={l,2,3,4,5,6,7,8,9,10},*p=a;
则值为3的表达式是_________。
A)p+=2,*(p++) B)p+=2,*++p
C)p+=3,*p++ D)p+=2,++*p
答案:A
评析:引用一个数组元素,可以用:(1)下标法,如a[i]形式;(2)指针法,如*(a+i)或*(p+i)。数组的下标从0开始,值为3的数组元素是a[2]。B、c的内容为a[3],D将a[2]前自加,结果为4。
C笔试题及答案篇3
(1)设a、b和c都是int型变量,且a=3、b=4、c=5,则下面的表达式中,值为0的表
达式是___________。
A)’a’&&’b’ B)a<=b C)a‖+c&&b-c D)!((a
答案:D
评析z选项A:‘a’&&‘b’是字符a与b的相与,不为0;选项B:a<=b,由题中变量赋值可知,结果为1。选项c:a‖+c&&b-c,结果为1;选项D:!((a
(2)以下程序运行后,输出结果是_________。
main
{
char*d。{“ab”,”cde”};
printf(”%x”,d[1]);
}
A)cde B)字符c的ASCII码值
C)字符c的地址 D)出错
答案:C
评析:指针数组中的每一个元素都相当于一个指针变量。一维指针数组的定义形式为:类型名+数组名[数组长度],在本题main函数中定义指针数组d,它有两个元素,其初值分别是“ab”、“cde”的首地址。dB]的值为”cde”的首地址。%x是指以十六进制数形式输出整数。
(3)设有如下程序
#include
main
{
intk,*j,i=100;
j=&i; k=&j;
printf(”%d\n”,k);
}
上述程序的输出结果是________。
A)运行错误 B)100 C)i的地址 D)j的地址
答案:B
评析:j=&i,j的值就是i的地址,*j=100,将j的地址赋给k,这时*k=j,那么,k=*j,而1=100,所以k=100,最后的打印结果应当为100。
(4)设有以下语句,其中不是对a数组元素的正确引用的是:_______(其中O≤i<10)
int a=[10]={0,1,2,3,4,5,6,7,8,9,},*p=a;
A)a[p-a] B)。(&a[i]) C)p[I] D)*(*(a+i))
答案:D
评析:观察程序可知,a实际上就是数组a的首地址,所以“+(a+i)”表示的就是数组a中的第i个元素的值,进而,我们可以知道+(t(a+i))必然不是对a数组元素的正确引用。
(5)以下程序运行后,输出结果为________。
main
{
int a[2][3]={1,3,5,7,9,1 1},*s[2],**pp,*p;
s[0]=a[0],s[1]=a[1];
pp=s;
p=(int*)malloc(sizeof(int));
**pp=s[1][1];
p=*PP;
printf(”%d\n”,*p);
}
A)l B)7 C)9 D)1l
答案:C
评析:s是一个含有两个元素的指针数组,pp是一个指向指针变量的指针,s[O]是指向二维数组a行下标为0的元素的首地址,即a[0儿0]的地址,s[1]为a[1][0]的地址。pp的值为s[O]的地址。**pp=s[1][l]后,a[0][0]的值将被赋值为all][l]的值,执行p=*pp;后,p中将是s[0]的值,最后的输出语句将输出地址s[0]所指向的数据,即a[0][O]。
(6)有以下程序:
#include
main{
char c[6];
int I=0:
for(;i<6;c[-]=getchar,i++);
for(I=0;i<6;i++)putchar(c[i]);
primf(”\n”);
}
如果从键盘上输入:
ab
c
def
则输出结果为_________.
A)a B)a C)ab D)abcdef
b b c
c c d
d d
e
f
答案:C
评析:1.getchar:此函数的作用是从终端(或系统隐含指定的输入设备)输入一个字符。
2.putchar:此函数的作用是向终端输出一个字符,也可以输出控制字符。
本题在输入字符时,ab和c后面的回车符分别赋给了c[2]和e[4],所以,正确答案为c。
(7)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是_______。
A)地址传递 B)单向值传递
C)由实参传递给形参,再由形参传递给实参
D)传递方式由用户指定
答案:B
评析:c语言规定,实参变量对形参变量的数据传递是“单向值传递”,只由实参传给形参。在内存中,实参单元与形参单元是不同的单元。调用结束后,实参单元仍保留并维持原值。
(8)下面程序
#include
#include
main
{ char*p1=”abc”,*p2=”ABC”,str[50]=”xyz”;
strcpy(str+2,strcat(p1,p2));
printf(”%s\n”,str);
}
的输出是_________。
A)xyzabcABC B)zabcABC
C)yzabcABC D)xyabcABC
答案:D
评析:strcat(pl,p2)将字符串abcABC放到了*pl所指向的存储单元中;strcpy在本题将abcABC复制到str+2所指向的存储单元中,即覆盖原str数组中的字符z及其后的所有字符,故str的值为”xyabcABC”。
(9)下面程序
int aa[3][3]:{{2},{4},{6}};
main
{ int i,*p:&aa[0][0];
for(I=0;i<2;i++){
if(i==0)aa[I][i+l]=*p+1;
else++p;
printf(”%d’.,。p);
}
}
的输出是__________。
A)23 B)26 C)33 D)36
答案:A
评析:观察题目,可以发现,*p=&aa[01[o]语句实际是将数组aa的首地址赋给了指针变量p,将i的值带入for循环中,i=0时,aa[0][1]=3,+p=2;*p输出的是指针所指向的数组值,此时p所指向的是aa[O][O],输出2,而i=l时执行了++p操作使指针向后移动指向了aa[O儿1],所以在输出*p时应为3。
(10)以下程序的输出结果是_________。
#include
#include
fun(char*w,int n)
{
char t,*s1,*s2;
s1=w;s2=w+n-l:
while(s1
{
t=*s1++:
*sl=*s2–;
*s2=t;
}
}
main
{
char*p;
p=”1234567″;
fun(p,strlen(p));
puts(p);
}
A)1234567 B)7654321 C)1711717 D)717717l
答案:C
评析:在子函数fun中,sl为字符串w的起始地址,s2为字符串的结束地址(字符‘\O’除外),当执行循环结束循环,w=“1711717”。