一、单选题(每题2分,共60分)
1.C语言源程序扩展名是()。
A、cB、objC、exeD、h
2.算法的空间复杂度是指()。
A、算法在执行过程中所需要的计算机存储空间
B、算法所处理的数据量
C、算法程序中的语句或指令条数
D、算法在执行过程中所需要的临时工作单元数
3.系统的标准输入文件是指()。
A、显示器B、硬盘C、键盘D、软盘
4.判断char型变量ch是否为大写字母的正确表达式是()。
A、’A’=ch=’Z’
B、(ch=’A’)
(ch=’Z’)
C、(ch=’A’)(ch=’Z’)
D、(’A’=ch)
5.对for(表达式1;;表达式3),可理解为()。
A、for(表达式1;0;表达式3)B、for(表达式1;1;表达式3)
C、语法错误D、仅执行循环一次
6.有以下程序段
intk=0,a=1,b=2,c=3;k=ab?b:a;k=kc?c:k;
执行该程序段后,k的值是()。
A、3B、2C、1D、0
7.以下描述中正确的是()。
A、由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B、do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
C、在do-while循环体中,是先执行一次循环,再进行判断
D、do-while循环中,根据情况可以省略while
8.C源程序中不能表示的数制是()。
A、二进制B、八进制C、十进制D、十六进制
9.关于C语言的数据类型,下列说法不正确的是()。
A、C语言包含基本数据类型B、C语言包含指针类型
C、C语言包含字符串类型D、C语言包含结构体类型
10.C语言中的标识符只能由字母,数字和下划线三种字符组成,且第一个字符()。
A、必须为字母B、必须为下划线
C、必须为字母或下划线D、可以是字母,数字和下划线中任一字符
11.下面有关C程序书写风格的说法中,错误的是()。
A、每一对{}上下对齐B、每一行的C语句尽可能长度一致
C、每一对{}内的语句左对齐D、不同语句段采用缩进格式以示区别
12.下列四组选项中,正确的C语言标识符是()。
A、%xB、a+bC、aD、
13.计算机能直接执行的程序是()。
A、源程序B、目标程序C、汇编程序D、可执行程序
14.break语句不能出现在()语句中
A、switchB、forC、whileD、if…else
15.以下关于简单程序设计的步骤和顺序的说法中正确的是()。
A、确定算法后,整理并写出文档,最后进行编码和上机调试
B、首先确定数据结构,然后确定算法,再编码,并上机调试,最后整理文档
C、先编码和上机调试,在编码过程中确定算法和数据结构,最后整理文档
D、先写好文档,再根据文档进行编码和上机调试,最后确定算法和数据结构
16.执行下面的程序段后,变量k中的值为()。
intk=3,s[2];
s[0]=k;
k=s[0]*10;
A、不定值B、33C、30D、10
17.已知对学生记录的描述为:
structteacher
{
intsex;
charname[20];
intage;
struct{
intyear,month,day;
}birthday;
};
structteacherli;
设变量li中的“生日”是“年3月3日”,对“birthday”正确赋值的程序是()。
A、year=;month=3;day=3;
B、li.year=;li.month=3;il.day=3;
C、birthday.year=;birthday.month=3;birthday.day=3;
D、li.birthday.year=;li.birthday.month=3;li.birthday.day=3;
18.有以下程序
#include
#definePT3.5;
#defineS(x)PT*x*x;
main()
{inta=1,b=2;printf(%4.1f\n,S(a+b));}
程序运行后输出的结果是()。
A、14.0B、31.5
C、7.5D、程序有错无输出结果
19.下列命令或语句中,正确的是()。
A、#defineMYNAME=”ABC”
B、#includestdio.h
C、for(i=0;i10;i++);
D、structintstu{intname};
20.已知枚举类型定义语句为:
enumToken{NAME,NUMBER,PLUS=5,MINUS,PRINT=10};
则下列叙述中错误的是()。
A、枚举常量MINUS的值为6B、枚举常量PRINT的值为10
C、枚举常量NUMBER的值为1D、枚举常量NAME的值为1
21.设有以下说明语句:
typedefstruct
intn;
charch[8];
}PER;
则下面叙述中正确的是()。
A、PER是结构体变量名
B、PER是结构体类型名
C、typedefstruct是结构体类型
D、struct是结构体类型名
22.以下函数的功能是:求x的y次方,请填空()。
#includestdio.h/stdio.h
voidmain()
{inti,x,y;
doublez;
scanf(%d%d,x,y);
for(i=1,z=x;iy;i++)
z=z*______;
printf(x^y=%e\n,z);
}
A、i++B、x++C、xD、i
23.若要求定义具有10个int型元素的一维数组a,则以下定义语句中错误的是()。
A、#defineN10
inta[N];
B、#definen5
inta[2*n];
C、inta[5+5];
D、intn=10,a[n];
24.若有以下语句
typedefstructS
{intg;charh;}T;
以下叙述中正确的是()。
A、可用S定义结构体变量B、可用T定义结构体变量
C、S是struct类型的变量D、T是structS类型的变量
25.若有定义语句:chars[10]=4567\0\0;,则strlen(s)的值是()。
A、7B、8C、9D、10
26.若有定义:inta[5],*p=a;,则对a数组元素的正确引用是()。
A、*a[5]B、a+2
C、*(p+5)D、*(a+2)
27.若有以下函数首部
intfun(doublex[10],int*n)
则下面针对此函数的函数声明语句中正确的是()。
A、intfun(doublex,int*n);
B、intfun(double,int);
C、intfun(double*x,intn);
D、intfun(double*,int*);
28.若有定义:inta[2][3];则对a数组的第i行第j列元素地址的正确引用是()。
A、*(a+j)B、(a+i)
C、*(a+j)D、a+j
29.若有定义语句:intk[2][3],*pk[3];,则以下语句中正确的是()。
A、pk=k;B、pk[0]=k[1][2];
C、pk=k[0];D、pk[1]=k;
30.程序段char*s=abcde;s+=2;printf(%d,s);的运行结果是()。
A、cdeB、字符c
C、字符c的地址D、无确定的输出结果
二、是非题(每题1分,共10分)
1.一维数组在定义时进行初始化,也必须指名数组大小。()
2.C语言中的字符常量可以像整数一样在程序中参与运算。()
3.break;语句执行时退出到包含该break;语句的所有循环外。()
4.有参的宏,其参数参与运算,宏替换要先完成参数的计算,然后再执行替换。()
5.在C程序中,数据只能用二进制的形式进行存放。()
6.指针可以加上或减去一个整数。()
7.在switch语句中必须使用default。()
8.C语言的特点是简洁,编译程序小、效率高。()
9.字符数组中的字符串可以直接进行比较。()
10.C程序通过编译之后会产生一个扩展名为exe的可执行程序。()
三、问答题(每题10分,共30分)
1.请写出实现选择结构的三种语句。写出关键字,表达式和语句用“表达式”和“语句i”(i=1,2,…)。
2.请将以下程序中的数组改写成指针形式,并将用户输入的字符串按照单词进行分割后再输出。提示:单词是指用空格、\t或\n分割的部分,同时用二维数组来储存单词。#includestdio.h
chartext[],ch;
inti,j;
for(i=0;i;i++)
text=\0;
for(i=0;(ch=getchar())!=#;i++)
text=ch;
for(i=0,j=0;text!=\0;i++)
if(text==
text==\t
text==\n)
printf();
else
printf(%c,text);
3.阅读以下程序,并写出和的罗马表示及运算步骤。
intn,i,j,k;
char*roman[4][10]={,I,II,III,IV,V,VI,VII,VIII,IX,
,X,XX,XXX,XL,L,LX,LXX,LXXX,XC,
,C,CC,CCC,CD,D,DC,DCC,DCCC,CM,
,M,MM,MMM};
scanf(%d,n);
printf(%d=,n);
for(j=0,i=00;j4;j++,i/=10)
k=(n%i)/(i/10);
printf(%s,roman[3-j][k]);
printf(\n);
三、问答题(每题10分,共30分)
答案:
单分支if选择结构,一般格式为:
if(表达式)
{语句;}(2分)
双分支if-else选择结构,一般格式为:
{语句1;}
{语句2;}(3分)
多分支switch选择结构,一般格式为:
switch(表达式)
case常量表达式1:[语句序列1;][break;]
case常量表达式2:[语句序列2;][break;]
……
case常量表达式n:[语句序列n;][break;]
default:语句序列n+1;
}(5分)
#includestdio.h
chartext[],words[][20],*t=text,(*w)[20]=words;(2分)
inti,j=0,n=0;
for(i=0;(*(t+i)=getchar())!=#;i++);(2分)
for(i=0;*(t+i)!=#;i++)
if(*(t+i)!=*(t+i)!=\t*(t+i)!=\n)
*(*(w+n)+j++)=*(t+i);(2分)
n++;
j=0;(2分)
for(i=0;i=n;i++)
printf(%s,*(w+i));(2分)
k=(%00)/(00/10)=0j=0roman[3][0]---(空)(1分)
k=(%0)/(0/10)=9j=1roman[2][9]---CM(1分)
k=(%)/(/10)=0j=2roman[1][0]---(空)(1分)
k=(%10)/(10/10)=0j=3roman[0][0]---(空)(1分)
故的罗马数字表示为CM(1分)
k=(%00)/(00/10)=1j=0roman[3][1]---M(1分)
k=(%0)/(0/10)=2j=1roman[2][2]---CC(1分)
k=(%)/(/10)=5j=2roman[1][5]---L(1分)
k=(%10)/(10/10)=0j=3roman[0][0]---(空)(1分)
故的罗马数字表示为MCCL(1分)