C语言习题

更新时间:2024-06-21 03:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

(一) 一、判断题

( )1、开发C语言程序通常要经过编辑、预处理、编译、连接、装入和执行6个阶段。 ( )2、C语言程序由一个或多个函数组成,其中有且只有一个main函数。

( )3、C语言中,所有标识符必须由一个字母 ( a ~ z , A ~ Z ) 或下划线 ( _ )开头。

( )4、同一程序的各函数中定义的局部变量不可以同名。

( )5、C语言中,主函数main中定义的变量称为全局变量,在整个文件中有效。 ( )6、C语言中,函数重载常用于设计多个进行类似任务而处理不同数据类型的同名函数。 ( )7、C语言中,数组名的值就是数组中第一个元素的值。

( )8、在C++中,指针的作用是用来表示一个变量指向另一个变量这样的指向关系。 ( )9、C语言中,定义结构时,结构体中的成员名不能与程序中的其它变量重名。 ( )10、C语言中,声明一个结构并不分配内存,只有在定义结构变量时,才分配内存。

二、填空题

1、在C语言中,定义double类型数组arr, 数组大小为20, 应写为( )。

22

2、写出公式S=a+b+2ab的C语言赋值语句:( )。

3、定义a为长度为10的字符串、并为字符串赋初值\的语句为( )。

4、设ch是字符变量,则判断ch是小写英文字母的逻辑表达式为( )。

5、函数的返回值也叫函数值,函数值是通过函数中的( )语句获得的。

6、链表是一种非常有用的动态数据结构,只有一个指针链的链表称为( )。

7、对数组a[]进行初始化的数据为{2,4,6,8,10,12,14},则a[3]被初始化为( )。 8、对于 int *p, i = 5, j = 6; 执行 p = &i; p = &j; 后(*p)的值为( )。 9、执行完下列语句段后, i的值为:( )。

int a[3][4]={{1,2,3},{4,5,6}}, i; i= a[1][2];

10、有语句struct point{int x;int y;}; point pExample; 则将pExample的成员x初始化为8的语句是( )。

三、单选题

1、int i=10; float x; 执行x=8.0/i; 后x的值为( )。 ① 0.8 ② 0 ③ 0.0 ④ 1.0

2、下列变量名,( )是合法的

① 1x ② Stu_No ③ int ④ A-1

3、若i是int型变量,则程序段:i=322; if(i%2==0)printf(“####”); else printf(“****”); 的输出结果是( )

① #### ② **** ③ ####**** ④ 语法错误

4、函数中的形式参数是( )。

① 全局变量 ② 局部变量 ③ 静态变量 ④ 函数

5、已定义x和y为double类型,则表达式:x=2,y=x+3/2的值是( ) ① 1 ② 3.0 ③ 2.0 ④ 2.5

6、语句:

for (int k = -90; k; k--)

printf (\ ( )

① 编译通不过 ② 能运行, 但会死循环 ③ 能运行, 且不会死循环 ④ 以上说法都不对

7、定义在函数外的变量具有( )

① 函数作用域 ② 文件作用域 ③ 块作用域 ④ 函数原型作用域

8、下列说法中不正确的是( )

① 指针变量的存储空间的大小是一定的 ② 指针中存放的是地址值 ③ 指针可以进行加、减等算术运算 ④ 指针变量不占用存储空间

9、有如下程序

main() {

int n=9; while(n>5)

{ n--; printf(“%d”,n); } }

该程序段的输出结果是( ) ① 987 ② 876 ③ 8765

④ 9876

10、在下面的一维数组定义中,哪一个有语法错误。( ) ① int a[ ]={0,1,2,3,4}; ② int a[5]={0,1,2,3,4}; ③ int a[]; ④ int a[5];

11、按位或运算:int a = 5, b = 7, c = a | b; 变量c的值是( )

① 2 ② 5 ③ 7 ④ 12

12、c语言中,while于do~while语句的主要区别是( ) ① while的循环体至少无条件执行1次 ② while的循环控制条件比do~while的严格 ③ do~while的循环体至少无条件执行1次 ④ do~while允许从外部跳到循环体内

13、若已定义short a[2]={8,10},*p=&a[0];假设a[0]的地址为2000,short int 字长为2字节,

则执行p++后,指针p的值为( )

① 2000 ② 2001 ③ 2002 ④ 2003

14、设有如下的程序段:char str[]=\( )

① `H` ② `e` ③ ’l’

15、结构体类型变量在程序执行期间( ) ① 所有成员驻留在内存中 ② 只有一个成员驻留在内存中 ③ 部分成员驻留在内存中 ④ 没有成员驻留在内存中

一、判断题 1~5 √、√、√、×、× 6~10 √、×、√、×、√

二、填空题

1、double arr[20]; 2、s=a*a+b*b+2*a*b;

3、char a[10]=”continue“; 4、ch>=’a’&&ch<=’z’ 5、return 6、单向链表 7、8 8、6 9、6

10、 pExample.x=8

三、单选题 1~5 ①、②、①、②、② 6~10 ②、②、④、③、③ 11~15 ③、③、③、②、①

则*(ptr+1)的值为 ④ ’\\0’ (二)

一、判断题

( )1、使用C语言语言编写的程序可以直接在计算机上执行,无需编译。 ( )2、任何一个C语言程序都是从函数main开始执行的。 ( )3、C语言中,用户定义的标识符可以与C语言的关键字相同。

( )4、C语言中,调用重载函数时,C语言编译器通过检查调用中的实在参数个数、类型和顺序来确定相应的被调用函数。

( )5、在C程序中,使用条件编译命令可以使目标程序更短。

( )6、C语言中,语句int a[10];声明了一个整型数组,它有10个整型元素,下标的变化范围是1~10。

( )7、C语言中,数组作为函数参数进行传递时,传递的是数组第一个元素的地址。 ( )8、C语言中,函数中的形式参数是局部变量。

( )9、C语言中,指针所对应的存储单元存放的是另一个变量的地址。 ( )10、C语言规定,结构体类型中的成员只能是基本数据类型。

二、填空题

1、在C语言中,定义字符指针数组arr, 数组大小为20, 应写为( )。

2

2、写出公式S=(a+b)的C语言语言赋值语句:( )。 3、描述命题“A小于B且B大于C”的表达式为( )。

4、设ch是字符变量,则判断ch是大写英文字母的逻辑表达式为( )。

5、为字符数组a赋值\的语句为( )。 6、执行完下列语句段后, i值为:( )。 static int a[3][4]={{1,2,3},{4,5,6},{7,8,9}}, i; i= a[2][2];

7、对数组a[]进行初始化的数据为{1,3,5,7,9,11,13},则a[5]被初始化为( )。

8、假定p所指对象的值为25,p+1所指对象的值为46,则执行“(*p)++;”语句后,p所指对象的值为( )。

9、链表是一种非常有用的动态数据结构,有两个指针链的链表称为( )。

10、有语句struct student{int no;char name[10];}; student stu; 则将stu的成员no初始化为8的语句是( )。

三、单选题

1、C语言语言函数的默认返回类型是( )

① 无 ② void ③ int ④ char

2、下列字符串不是标识符的是:( )

① _above ② all ③ _end ④ #eng

3、若x和y都是float型变量,x = 3.6,y = 5.8,则语句printf(“%f”, (x,y)); 的输出结果是( )

① 3.6 ② 5.8 ③ 3.6 5.8 ④ 语法错误

4、假设一个C语言的表达式中包含有int、short、double、char类型的变量和数据,则表达式最后的运算结果是( )类型数据。

① int ② long ③ double ④ char

5、若有说明int a[3][4];则对a数组元素的正确引用是:( )

① a[2][4] ② a[1,3] ③ a[1+1][0] ④ a(2)(1)

6、定义在函数原型参数列表中的变量具有( )

① 函数作用域 ② 文件作用域 ③ 块作用域 ④ 函数原型作用域

7、以下程序段运行后i值为( )

int i=0, a=1; switch (a) {

case 1: i+=1; break; case 2: i+=2; break; default: i+=3; break; }

① 1 ② 3 ③ 6 ④ 上述程序有语法错误

8、下列while循环,将执行几次( )

i= 4;

while (--i) printf(“%d ”, i);

① 3次

② 4次 ③ 0次

④ 无限次

9、下列说法中不正确的是:( ) ① 指针是一个变量

② 指针中存放的是地址值

③ 指针可以进行加、减等算术运算 ④ 指针变量不占用存储空间

10、若有int *p, a[10]; p=a; 则下列写法不正确的是:( ) ① p=a+2 ② a++ ③ *(a+2) ④ p++

11、设有说明语句int a = 6, b = 8, c = a | b;

变量c的值是( )

① 12 ② 14 ③ 48 ④ -2

12、指向变量的指针,其含义是指该变量的( )

① 值 ② 地址 ③ 名 ④ 一个标志

13、执行int a=5,*p=&a;后,*p的值是什么?( )

① 变量a的地址值 ②无意义 ③ 变量p的地址 ④ 5

14、有类型定义 char s[3] = \char *p; 执行语句p=s;之后,*(p+1)的值为(① ‘B’ ② ‘\\0’ ③ 不确定 ④ 字符’B’的地址

15、联合体类型变量在程序执行期间的某一时刻( ) ① 所有成员驻留在内存中

② 只有一个成员驻留在内存中 ③ 部分成员驻留在内存中 ④ 没有成员驻留在内存中

四、程序填空题

1、以下函数求x的y次方,补足所缺语句,以实现函数的功能。

double fun(double x, int y) { int i;

double z = 1;

for (i=1; ; i++) z = ; return z; }

五、程序阅读

1.下列函数实现的功能是( )。 long fun(int i) { long t=1;

for(int j=1;j<=i;j++) t=t*j; return t; }

2.下列程序的运行结果是( )。 #include

int b[]={-3, 2, 0, 1, -2} ; int f(int *a, int x) {

int s=0;

for(int n=3; n>=0; n--) s += x+a[n]; return s; }

main() {

printf(\ printf(\ printf(\ return 0; }

一、判断题(每题 1 分,共 10 分) 1~5 ×、√、×、√、√ 6~10 ×、√、√、√、×

二、填空题(每题1分,共10分) 1、char arr[20]; 2、s=(a+b)*(a+b); 3、AC;

4、ch>=’A’&&ch<=’Z’ 5、char a[]=”abc”; 6、9 7、11 8、26

9、双向链表 10、 stu.no=8

三、单选题(每题 2 分,共 30 分) 1~5 ③、④、②、③、③ 6~10 ④、①、①、④、② 11~15 ②、②、④、①、②

四、程序填空题(每题5分,共15分)

1、i<=y (2.5分) z=z*x (2.5分)

五、程序阅读(每题5分,共15分) 1、求整数的阶乘 2、4 8 12

(三)

一、判断题

( )1、C语言中,函数是程序的基本单位,一个程序可以由若干个main函数和其它函数组成。

( )2、C语言规定标识符只能由字母和数字组成,且第一个字符必须为字母。

( )3、若有int a,b,t; b=1; 请判断以下语句是否符合C语言语法规则:if ( (a=b)>0) t=a;

( )4、C语言中,有调用关系的所有函数必须放在同一个源程序文件中。 ( )5、定义函数时指定的形参变量,函数调用结束后将释放所占内存单元。 ( )6、C语言中,函数的定义可以嵌套,但函数调用不能嵌套。

( )7、C语言中,数组名作为参数传递给函数,作为实在参数的数组名被处理为该数组的

首地址。

( )8、在C++中,指针变量可用于保存同类型变量的地址值。

( )9、C语言中,char *cptr[3]定义了一个一维指针数组,它有3个元素,每个元素都是指向字符数据的指针型数据。

( )10、C语言中,可以把一个结构体变量作为一个整体赋值给另一个具有相同类型的结构体变量。

二、填空题

1、在C语言中,已知:char ch=’A’; 则下列表达式的值是( )。 ch = (ch>=’A’&&ch<=’Z’)?(ch+32):ch; 2、在C语言中,若a=1,b=2,c=3,则执行表达式(a>b)&&(C语言)后,c的值为( )。 3、在C语言中,下面的for循环语句最多可执行( )次。

for(x=0,y=0;(x<4)&&(y!=99);x++)

4、在C语言中,凡在函数中未指定存储类别的变量,其隐含的存储类别为( )。 5、链表是一种非常有用的动态数据结构,只有一个指针链的链表称为( )。 6、在C语言中,字符串不存放在一个变量中,而是存放在一个( )中。

7、对数组a[]进行初始化的数据为{2,4,6,8,10,12,14},则a[1]被初始化为( )。 8、若有语句int a=3,*p=&a;,则*p的值是( )。 9、&后跟简单变量名,表示该变量的( ),&后跟指针变量名,表示该指针变量的( )。

10、有语句struct point{int x;int y;}; point s,*p=&s; 则对结构体成员x的引用方法可以是s.x和( )。

三、选择题

1、int a=12;则执行语句a*=2+3后,a的值为( )。 ① 27 ② 60 ③ 38 ④ 0

2、下列变量名,( )是合法的

① my_car ② my-car ③ my.car ④ my&car

3、若a,b均为int型变量,x,y 均为float型变量,正确的输入函数调用是( ) ① scanf(“%d%f”,&a,&b); ② scanf(“%d%f”,&a,&x); ③ scanf(“%d%d”, a, b); ④ scanf(“%f%f”,x,y);

4、若a,b均为int型变量且有值,要输出a,b的值,正确的输出函数调用是( )。 ① printf(“%d%d”,&a,&b); ② printf(“%f%f”,a,b); ③ printf(“%f%d”, a,b); ④ printf(“%d%d”,a,b);

5、在下列的表达式中,能正确表示”a>=10或a<=0“的是 ( ) ① a>=10 or a<=0 ② a>=10 | a<=0 ③ a>=10 || a<=0 ④ a>=10 && a<=0

6、语句:

for (int k = 10; k>=0; k++)

cout<

① 编译通不过 ② 能运行, 但会死循环 ③ 能运行, 且不会死循环 ④ 以上说法都不对

7、定义在函数体内的变量具有( )

① 函数作用域 ② 文件作用域 ③ 块作用域 ④ 函数原型作用域

8、下列说法中正确的是( )

① 调用函数时,实参的类型、个数及顺序必须与函数定义时形参的类型、个数及顺序完全一致

② 函数可以嵌套定义

③ 函数必须有返回值,否则不能正确使用

④ C语言中,有调用关系的所有函数必须放在同一个源程序文件中

9、设c为char型变量,输入以下数据:right? <回车>

以下程序段的输出结果是( ) while((c=getchar())!=’?’) putchar(c);

① right? ② right ③ right; ④ righ

10、若有说明:int a[20];则可以正确引用数组元素的表达式是:( ) ① a[20] ② a[3.5] ③ a(3) ④ a[1+2]

11、若程序中定义了以下函数 double add(double a,double b) {

return (a+b); }

并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是( )

① double add(double a,b); ② double add(double,double);

③ double add(double b,double a); ④ double add(double x,double y);

12、以下关于数组的描述中,正确的是( )

① 数组的大小是固定的,但可以有不同类型的数组元素 ② 数组的大小是可变的,但所有数组元素的类型必须相同 ③ 数组的大小是固定的,所有数组元素的类型必须相同 ④ 数组的大小是可变的,可以有不同类型的数组元素

13、设有语句:int a[10],*p=a;则下面的语句中,不正确的是( ) ① p++ ② (*p)++ ③ a[0]++ ④ a++

14、执行下面的程序段后,*p等于( ) int a[5]={1,3,5,7,9},*p=a; p++;

① 1 ② 3 ③ 5 ④ 7

15、当说明一个结构体变量时,系统分配给它的内存是( ) ① 各成员所需内存量的总和 ② 结构体中第一个成员所需内存量 ③ 成员中占内存量最大者所需的容量 ④ 结构体中最后一个成员所需内存量

一、判断题(每题 1 分,共 10 分)

B. int a[]=(0,1,2,3,4,5);

C. char a={'A','B','C'};

D. char a[5]=\

20,与定义char c[]={\不等价的是

A. char c[]=\

B. char c[]={'G','O','D','\\0'};

C. char c[5]={'G','O','D','\\0'};

D. char c[3]={\

21,对于下面程序段,执行的结果是 char c[5]={?a?,?b?,?\\0?,?c?,?\\0?}; printf(“%s”,c);

A. ?a??b?

B. ab

C. ab c

D. a,b

22,设char Q='a', *p=&Q;下面说法中错误的是

A. *p='a'

B. &*p=&Q

C. &p=&Q

D. *&Q='a' 23,有以下程序 main()

{int a[]={1,2,3,4,5,6,7,8,9,0},*p; for(p=a;p<=a+9;p++)printf(\)

程序运行后的输出结果是

A. 1,2,3,4,5,6,7,8,9,0,

B. 2,3,4,5,6,7,8,9,10,1,

C. 0,1,2,3,4,5,6,7,8,9,

D. 1,1,1,1,1,1,1,1,1,1,

24,若有语句:int a=4, *p=&a;,下面均代表地址的一组选项是

A. a,p,&*a

B. *&a,&a,*p

C. &a,p,&*p

D. *&p,*p,&a

25,设有语句:int a[10],*p =a;,则下面的语句中,不正确的是

A. p=p+1;

B. *p=*p+1;

C. a[0]=a[0]+1;

D. a=a+1;

26,当int类型长度为2字节时,则类型unsigned int的值域范围为

A. 0至255

B. -256至255

C. -32768至32676

D. 0至65535 27,有如下程序: #include int b; void f()

{ int t2; t2=b*3; b=100; } void main() { int a=2; b=4; f1(); }

叙述正确的是:

A. a和b都是静态变量。

B. a是静态变量,b是动态变量。

C. a和b都是全局变量。

D. a是局部变量,b是全局变量。

28,下面的for循环最多可执行________次。 for(x=0,y=0;(y!=99)&&(x<4);x++);

A. 4次

B. 5次

C. 99次

D. 0次

29,下列判断char类型变量C1是否为数字的表达式中,哪个表达式最简单且正确。

A. '0'<=C1<='9'

B. (C1>='0')&&(C1<='9')

C. (C1>=0)&&(C1<=9)

D. ('0'<=C1)||('9'>=C1)

30,若有以下的说明,则对初值中字符'a'的引用方式为________。 static struct { char ch; double x; char t;

}c[2][2]={{{'a',35,'b'},{'c',45,'d'},{'a',86, 'm'}}};

A. c.ch

B. c[0][1].ch

C. c[1][1].ch

D. c[0][0].ch

二,改错。

1,在C程序中,注释部分从/*开始,到*/结束。

2,switch语句中,case后面既可以跟常量,也可以跟已赋值的变量。

3,一个C语言程序中包含有多个函数时,按书写顺序从上到下执行各函数。 4,若一个函数的返回类型为void,则表示其没有返回值

5,student_name、_name、name8和name_8都是合法标识符。

6,不对自动(auto)数组进行初始化,数值型数组隐含初值为0,字符数组隐含初值空字符'\\0'

7,假设int型数组a的起始地址为2000,则元素a[3]的地址为:2000+4×2=2008。 8,结构化程序设计认为一个\好\程序主要应该是:程序短而紧凑。

9,如果知道整型变量a的地址是2000,可以直接用 int *pa=2000; 给指针变量pa赋值,使其指向变量a。

10,在C语言的if语句中,用作判断的表达式只能为逻辑表达式和关系表达式。 三,综合。 1,注意: 注意:

1.该源程序放在: d:\\ExamProg\\002\\test1.c

2.编译该程序时,请首先将程序中开头的功能说明注释掉或删除! 3.程序功能说明及源程序如下:

/*下面程序的功能是:计算并输出500以内的最大的10个能被13或者17整除的自然数之和。请改正程序中的错误,并运行,最后给出程序运行的正确结果。(注:只有一处错误!)*/

#include void main() {

int total=0, mc=1, k=500; int pm[10],count=0;

while( (k>=2) && mc<=10 ) {

if ((k==0) || (k==0)) {

pm[mc] = k; mc++; } k--; }

for( k=1;k<=10;k++ ) total += pm[k-1]; printf(\ }

(如果文本被遮住,请移动右边的滚动条。) 2,注意:

1.该源程序放在: d:\\ExamProg\\002\\test2.c

2.编译该程序时,请首先将程序中开头的功能说明注释掉或删除! 3.程序功能说明及源程序如下:

/*求200到1000之间的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。例如227和229是一对双胞胎数,它们都是素数且差为2。*/ #include

int prime(int x) {

int k;

for(k=2;k

if(__________) break; if(k==x) return 1; else return 0; }

void main( ) { int a,b,n=0;

int prime(int x); for(a=200;a<=998;a++) {

if(prime(a)==1) { b=a+2;

if(__________) n++; } }

printf(\}

(如果文本被遮住,请移动右边的滚动条。)

3,计算下面公式的值。T=1/1!+1/2!+1/3!+??+1/m! 当m=10时的结果(按四舍五入保留3位小数)。(注:所有变量用float数据类型定义!)

本文来源:https://www.bwwdw.com/article/ghj3.html

Top