C语言程序设计---考试模拟试卷及解析

  • 格式:doc
  • 大小:691.00 KB
  • 文档页数:120

第十三章 考试模拟试卷及解析

13.1 模拟试卷1及解析

一、单项向选择题(每小题1.5分,共30分)

1. 关于C语言的叙述,不正确的是( )。

A) C程序必须包含一个main()函数

B) C程序可由一个或多个函数组成

C) C程序的基本组成单位是函数

D) 注释说明只能位于一条语句的后面

分析:注释可以出现在语句的前面、后面或中间。例如,

#include

void main(void){ /*计算1+2+3+4+„100的值 */

int i;

long s=0;

for( i=1; i<= /* 不要丢掉'='号!*/ 100; i++)

s+=i;

/* 注意以下输出语句中long int 数据的输出控制格式”%ld” */

printf("s=%ld\n",s);

}

答案选D。

2.以下( )是正确的字符常量。

A) "c" B) '\t' C) '12' D) "\\"

分析:A)中的"c"为字符串常量,B)中的'\t'为转义字符,请大家注意常用转义字符的表示方法(参见教材),C)中'12'表示错误,因为单引号里面只能含有1个字符。 D)中表示的是一个字符串(双引号),尽管这个字符串中只含有一个转义字符'\\'。答案选B。

3.设char ch='c';,则表达式ch+1的值为( )。

A) 97 B) 98 C) 99 D) 100

分析:字符变量存储的是所对应字符的ASCII值,26个字母之间的ASCII值按字母顺序是连续的,即字母'a'的ASCII值为十进制的97,字母'b'的ASCII值为十进制的98,依次类推。大家应记住常用字符的ASCII值,如,'A'为65,'0'为48等。答案选D。

4.下面关于算术运算符的叙述,错误的是( )。

A) 其运算对象不包含函数表达式

B) 运算符%的运算对象只能为整型

C) 算术运算符的结合方向是"自左至右"

D) 自加和自减运算符的结合方向是"自右至左"

分析:运算符的运算对象可以是一个函数表达式,如sin(x)+10。答案选A 。

5.getchar()函数的功能是从终端输入( )。

A) 一个整型变量值 B) 一个实型变量值

C) 多个字符 D) 一个字符

答案选D。

6.若有定义:int i=7,j=8;,则表达式 i>=j||i

A) 1 B) 变量i的值 C) 0 D) 变量j的值

分析:表达式i>=j||i=j)||(i

7.已知int a='R'; 则正确的表达式是( )。A

A) a%10 B) a=int(3e2) C) 2*a=a++ D) a=a+a=a+3

分析:B错误,应在转换目标的类型两边加上括号,即(int)(3e2),C表达式错误,因为赋值等号的左边不是“左值”,D的错误类似于C。答案选A。

8.设有定义int x=5;,则以下语句执行后,变量x值为6的是( )。

A) printf("%d",x++); B) if(x=0) x=6;

C) 2==1? x++:x--; D) if(x++<6) x++;

分析:执行A语句,输出表达式x++的值5,变量x的值变为6。B语句中条件表达式为假,不执行赋值操作,变量x的值为0。C为条件表达式,由于表达式2==1的值为假,故执行表达式 x--,使得变量x的值为4。D语句中条件表达式x++<6的值为真,x变量的值自增了两次,即x值变为7。答案选A。

9. 在c语言中while循环和do~while循环的主要区别是( )。

A) do~while循环体内可以使用break语句,while循环体内不能使用break语句

B) do~while的循环体至少无条件执行一次,while的循环体不是

C) do~while循环体内可以使用continue语句,while循环体内不能使用continue语句

D) while的循环体至少无条件执行一次,do~while的循环体不是 答案选B。

10. 以下能对一维数组a进行正确初始化的语句是( )。

A) int a[5]=(0,0,0,0,0); B) int a[5]=[0];

C) int a[5]={1,2,3,4,5,6,7}; D) int a[]={0};

分析:A中的(0,0,0,0,0)应为{0,0,0,0,0};B中的[0]应为{0};C中提供的初始值超过了数组的长度。答案选D。

11.设有如下程序段

int a[3][3]={1,0,2,1,0,2,1,0,1},i,j,s=0;

for(i=0;i<3;i++)

for(j=0;j

s=s+a[i][j];

则执行该程序段后,s的值是( )。

A) 0 B) 1 C) 2 D) 3

分析:对二维数组中的“下三角元素”(不包括对角线)求和。答案选C。

12. 若有定义:int a=2;,则语句a=strcmp("miss","miss");运行后a的值为( )。

A) 1 B) 0 C) -1 D) 2

分析:函数strcmp(s1,s2)返回两个字符串s1所指向的字符串和s2所指向的字符串内容的比较(依据对应位置各个字符的ASCII值)结果。若s1>s2,返回1,若s1

13. 以下程序的运行结果是( )。

void fun(int array[4][4]){

int j;

for(j=0;j<4;j++) printf("%-2d",array[2][j]);

printf("\n");

}

void main(void){

int a[4][4]={0,1,2,0,1,0,0,4,2,0,0,5,0,4,5,0};

fun(a);

}

A) 2 0 0 5 B) 1 0 0 4 C) 0 1 2 0 D) 0 4 5 0

答案选A。 14. 若有以下宏定义:

#define MOD(x,y) x%y

则执行以下程序段后,z的值是( )。

int z,a=15,b=100;

z=MOD(b,a);

A)100 B)15 C)11 D)10

分析:#define MOD(x,y) x%y是带参数的宏定义,注意表达式中括号的使用。答案选D。

15. 以下程序段运行后*(++p)的值为( )。

char a[5]="work";

char *p;

p=a;

A)'w' B)存放'w'的地址 C)'o' D)存放'o'的地址

分析:p=a;使得指针p指向数组a的首元素,即指向字符'w',++p后使p增1,指向了下一个字符'o'。答案选C。

16. 若函数fun的函数原型为:int fun(int i, int j);

函数指针变量p定义为:int (*p)(int i, int j);

则要使指针p指向函数fun的赋值语句是( )。

A)p=*fun; B)p=fun; C)p=fun(i,j); D) p=&fun;

分析:函数名就是一个指向函数的指针,可以将函数名直接赋给一个指向函数的指针变量。答案选B。

17. 若有定义:

struct teacher{

int num;

char sex;

int age;

}teacher1;

则下列叙述不正确的是( )。

A) struct是结构体类型的关键字

B) struct teacher是用户定义的结构体类型

C) num,sex,age都是结构体变量teacher1的成员

D) teacher1是结构体类型名 分析:teacher1是一个结构体类型的变量。答案选D。

18. 若有定义:

struct node{

int data;

struct node *next;

};

及函数:

void fun(struct node *head){

struct node *p=head;

while(p){

struct node *q=p->next;

free(p);

p=q;

}

}

调用时head是指向链表首结点的指针,整个链表的结构如下所示:

则函数fun()的功能是( )。

A)删除整个单向链表

B)删除单向链表中的一个结点

C)显示单向链表中的所有数据

D)创建单向链表

分析:开始时,p指向单链表中的第一个结点,q指向第二个结点,删除p所指结点后,p再指向第二个结点,q指向第三个结点,再删除p所指结点,如此下去,直到所有的结点删除完为止。答案选A。

19. 在对于无符号数的位运算中,操作数右移一位相当于( )。

A)操作数除以2 B)操作数乘以2

C)操作数除以4 D)操作数乘以4

答案选A。 head … 1 2 27 ∧ 20. 以下程序的可执行文件名为tt.exe,若程序运行后屏幕显示:3, We are,则在DOS提示符下输入的命令是( )。

void main(int argc, char * argv[]){

int i;

printf("%d,",argc);

for(i=1;i

printf("%s ",argv[i]);

}

A. tt B. tt We C. tt We are D.tt We are happy!

分析:使用命令行参数时,argc表示命令行中参数的个数(包括程序名),argv[]是一个指针数组,它的每一个元素argv[0]~argv[argc-1]分别指向命令行中的各个字符串。答案选C。

二、改错题(每小题8分,共16分)

说明:

(1) 修改程序中每对“/**/”之间存在的错误;

(2) 不得删改程序中的“/**/”注释和其它代码。

1. 以下程序的功能是从键盘输入三角形的三边长,求其面积,若三个边长不能构成三角形,则提示。

如 输入:6 9 11

输出:26.98

#include

#include

void main(void){

float a,b,c;

double s,area;

printf("Please input 3 numbers:\n");

/**/ scanf("%f%f%f",a,b,c); /**/

/**/ if( a+b>c || b+c>a|| a+c>b ) /**/

{

s = (a+b+c)/2;