C语言练习题-陈树振

更新时间:2023-11-13 09:47:01 阅读量: 教育文库 文档下载

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

海南大学应用科技学院

C语言练习题

陈树振 2012/3/19

第1部分 数据类型、运算符和表达式

【1】C语言变量名的第一个字符( ) A. 必须为字母 B. 必须为下划线 C. 必须为字母或下划线 D. 可以是字母、数字和下划线中的任意一种 【2】请选出均可作C语言用户标识符的一组( )

A. int float aaa B. a_b _ab ab_ C. 2ab a2b ab2 D.a+b ab aa_bb

【3】C语言中,要求运算量必须是整型的运算符是( )。 A. + B. / C. % D. * 【4】以下说法错误的是( ) A.同一种符号作为运算符出现在不同场合可以有不同含义 B.某些不同数据类型的数据可以出现在同一表达式中 C.赋值运算符的左边和右边的变量的类型有时可以不同 D.任何不同数据类型的数据都不可相互转换 【6】以下选项不是C语言常量的是( ) A. ‘\\n’ B. e-2 C. -256至255 D. “ok” 【7】执行以下程序后,c3的值是( ) int c1=1, c2=2, c3; c3=c1/c2; A.0 B.1/2 C. 0.5 D.1

【8】设x为int型变量,则执行以下语句后,x的值为( ) x=10; x+=x-=x-x; A. 10 B. 20 C. 40 D. 30 【10】下列可以正确表示字符型常量的是( ) A. \ B. '\\t' C. \ D. 65 【13】已知int i; float f; 以下正确的是( ) A.(int f)%i B.double(f)%i C.int(f%i) D.(int)f%i

【14】已知:char a; int b; float c; double d; 表达式a+b+c+d运算结果的数据类型是(C ) A. int B. char C. float D.double 【16】字符串:\的长度是( )

A. 8 B.7 C.6 D.5

【20】已知float x=3, y; 则y=++x+1的结果为( ) A. 5 B.6 C.3 D.表达式语法是错误的 【23】设有如下的变量定义:

int i=8, a, b;

double x=1.42, y=5.2;

则以下符合C语言语法的表达式是( )。 A. a+=a-=(b=4)*(a=3) B. x%(-3) C. a=a*3=2 D.(int) y=i

1

【11】以下错误的转义形式的字符类型数据是( ) A. '\\\\' B.' \\' ' C.'\\' D.'\\0'

*【26】设x和y均为int型变量,则以下语句:x+=y; y=x-y; x-=y; 的功能是( ) A. 把x和y按从大到小排序 B. 把x和y按从小到大排序 C. 无确定结果 D. 交换x和y中的值

【15】已知 int i, a; 执行语句:i=(a=2*3, a*5), a+6; 后,变量i的值是( )

【28】已知在字母A的ASCII代码为65,以下程序的输出结果是( )

#include int main() { char c1='A', c2='D'; printf(\ return 0; }

【29】下面程序的输出是( ) #include int main() { int x=10, y=10; printf(\ printf(\ return 0; } *【22】sizeof(double)是( )。

第2部分 C语句

【4.1】以下选项中不是C语句的是( )

A. {int i; i++; printf(\ B.; C.a=5,c=10; D.{;} E.{}

【4.2】下列属于C语句的是( )。 A. printf(\ B. #include C. {a=b; b=c; c=a;} D. /* this is a program */

【4.8】{a=3;c+=a-b;} 在语法上被认为是

条语句。空语句的形式是 。

2

第3部分 printf和scanf

【4.3】若int a,b,c;则为它们输入数据的正确输入语句是( ) A.read(a, b, c); B.scanf(\ C.scanf(\ D.scanf(\

【4.4】若float a, b, c; 要通过语句:scanf(\分别为a,b c 输入10,22,33。以下不正确的输入形式是( ) A.10 B.10.0,22.0,33.0 C.10.0 D.10 22 22 22.0 33.0 33 33

第4部分 关系运算和逻辑运算及选择运算符

填空题

【27】关系运算的运算结果是( )

【21】已知:int a=4, b=5; 则执行表达式:a=a>b 后,变量a的值是( ) A.0 B.1 C.4 D.5

【17】已知:char c='A'; int i=1,j; 执行语句 j=!c&&i++; 后,i和j的值是( ) A. 1,1 B. 1,0 C. 2,1 D. 2,0 【5.2】对于逻辑表达式:1<=x<=2 A. 当x的值大于等于1同时小于等于2时,表达式的值为真。 B. x的值为任何值,表达式的值均为真。 C. x的值为任何值,表达式的值均为假。 D. 此表达式非法。

【5.3】设a为int 型变量,则不能表示数学关系|a|>10 的表达式是( ) A. a>10||a<-10 B. a>10|a<-10 C. !(a>=-10&&a<=10) D. !(a<=10)||a<-10 【5.4】分析下面程序执行的结果: main() { int a=3, b=7;

printf(\ /*输出为: */ printf(\ /*输出为: */ printf(\ /*输出为: */ printf(\ /*输出为: */ }

【5.5】要判断char型变量m是否是数字字符,可以使用下列表达式( ) A. 0<=m&&m<=9 B. '0'<=m&&m<='9' C. \D. 前面三个答案都是错误的 【24】下列运算符中,运算优先级最高的是( ) A. == B. % C) ? : D. ++

【18】已知:int x=1, y=2,z; 则执行:z=x>y? ++x:++y; 后,z的值为( ) A. 1 B. 2 C. 3 D.4

3

*【25】运行下面的程序后,a的值是( int a,x=10,y=9;

a=(--x==y)? x+1: y+2;

)

第5部分 选择结构程序设计

【5.6】if语句的控制条件( A.只能用关系表达式 C.只能用逻辑表达

) B.只能用关系表达式或逻辑表达式 D.可以用任何表达式

【5.7】执行下列程序段后,x、y、z的值分别是( )

#include int main()

{ int x=10,y=20,z=30; if(x>y) { z=x;x=y;y=z; } return 0; }

【5.8】若执行以下程序时从键盘输入3,4,则输出结果是( ) int a,b,s; scanf(\ s=a; if(a

【5.9】若a和b均是整型变量,以下语法正确的switch语句是( ) A.switch(a/b) B.switch(a*a+b*b); { case 1:case 3.2: y=a+b;break; { case 3: case 0:case 5: y=a-b; case a: y=a+b;break; } case 0: y=b-a;break;}

C. switch a D.switch (a+b) { default: x=a+b; break; { case 10: y=a+b; break; case 10: y=a-b; break; case 11: y=a-b; break; case 11: y=a*b; break;} }

填空题

【5.11】if语句的表达式只有其值为 时表示逻辑“真”,其值为 时表示逻辑“假”

【5.13】用逻辑表达式表示数学中的:|x|>4 ,其表达式应为__________________

4

第9部分 编译预处理

【9.1】完成编译预处理的工作是在( )完成的。 A. 编译时 B. 编译前 C. 编译后 D. 执行时

【9.2】下列属于C语句的是( ) A.10>=x&&x>=-10 B. #include C. {a=b; b=c; c=a;} D. /* this is a program */

第10部分 指针

【10.1】若定义 int i, *p; 使p指向i的赋值语句是( ) A. p=&i; B. *p=&i; C. *p=i; D. p=*&i;

【10.3】有以下程序 int fun(int x, int y, int *cp, int *dp) { *cp=x+y; *dp=x-y; } main() { int a, b, c, d; a=30; b=50; fun(a, b, &c, &d); printf(\ }

输出结果为( )

【10.4】运行以下程序段的输出结果是( )。 char s[10]=\ *p; p=s; p++; printf(\ A. abcdefg

B. bcdefg C. cdefg D. 编译不能通过

【10.5】若有程序段: int **pp, *p, a=100, b=200; p=&b; pp=&p; printf(\ 则输出结果为( )

填空题

【10.6】若有以下定义和语句:

10

int array[10]={23,54,10,33,47,98,72,80,61}, *p; p=array;

则p[5]的值是 98 。

【10.7】下面程序的输出结果是 。 char b[]=\ char *p; for(p=b; *p; p+=2) printf(\【10.8】下面程序的输出结果是___ _____。 int a[10]={19,23,44,17,37,28,49,36}, *p; p=a; printf(\【10.9】下面程序的输出结果是___ ___。 int i=3, j=1; char *a=\ printf(\

【10.10】以下函数的功能是:把两个整数型指针所指向的存储单元中的内容进行交换。请填空。 exchange(int *x, int *y) { int t; t=*y; *y=_______; *x=_______; }

*【10.11】以下fun函数的功能是:累加数组元素中的值,n为数组中元素的个数。累加的和放入x所指向的存储单元中,请填空。 #include

void fun(int b[], int n, int *x) { int k,r=0; for(k=0;k

int main()

{ int a[]={1,2,3,4},sum=0; fun(a, 4, &sum); cout<

*【10.12】说明语句:int(*p)(); 的含义是( )

11

A.p是一个指向一维数组的指针变量 B.p是一个指针变量,指向一个整型数据

C.p是一个指向函数的指针,该函数的返回值是一个整数 D.以上都不对

*【10.13】设有说明int(*ptr)[M];其中的标识符是( ) A.M个指向整型变量的指针 B.指向M个整型变量的函数指针 C.一个指向具有M个整型元素的一维数组的指针 D.具有M个指针元素的一维指针数组,每个元素都只能指向整型变量

*【10.14】已知:double *p[6];它的含义是( ) A.p是指向double型变量的指针 B.p是double型数组 C.p是指针数组 D.p是数组指针

*【10.15】已知函数说明语句:void *f();则它的含义是( )

A.函数f的返回值是一个通用型的指针 B.函数f 的返回值可以是任意的数据类型 C.函数f无返回值 D.指针f指向一个函数,该函数无返回值

【10.16】已知:char s[10],*p=s; 则在下列语句中,错误的语句是( ) A.p=s+5; B.s=p+s; C.s[2]=p[4]; D.*p=s[0];

*【10.17】已知:char b[5], *p=b;则正确的赋值语句是( ) A.b=\ B.*b=\ C.p=\D.*p=\

*【10.18】下列对字符串的定义中,错误的是( ) A.char str[7]=\B.char str[ ]=\C.char *str=\D.char str[ ]={'F','O','R','T','R','O','N',0};

*【10.19】已知:char **s;正确的语句是( ) A.s=\ B.*s=\ C.**s=\D.*s='c';

【10.20】已知:char c[8]=\ *s=c; int i;则下面的输出语句中,错误的是( A.printf(\ B.printf(\ C.for(i=0;i<7;i++) D.for(i=0;i<7;i++) printf(\ printf(\

【10.21】已知:int i=0, j=1, *p=&i, *q=&j;错误的语句是( ) A.i=*&j; B.p=&*&i; C.*p+=3; D.p+=q;

【10.22】已知:char *p,*q; 以下语法正确的语句是( ) A.p*=3; B.p/=q; C.p+=3; D.p+=q;

12

【10.23】已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int (*ptr)[3]=a, *p=a[0]; 则以下能正确 表示数组数组元素a[1][2]的表达式是( ) A. *((ptr+1)[2]) B.*(*(p+5)) C.(*ptr+1)+2 D.*(*(a+1)+2) 提示:有两个选项明显不对,不符合降阶原则

【10.24】下面的函数是求两个整数之和,并通过形参传回结果 int add(int x, int y,____ ___z) { _____z______=x+y; }

*【10.25】下面的程序实现从10个数中找出最大值和最小值 #include int max,min;

void find(int *p, int n) { int *q; max=min=*p; for(q= ; ; q++) { if( ) max=*q; else if( ) min=*q; } }

int main()

{ int i, num[10]; printf(\ for(i=0; i<10; i++) scanf(\ find(num, 10); printf(\ return 0; }

【10.2】若有说明 int i=2,j=3,a[5][4]={1,2,3,4,5,6,7,8,9},*p=a[0]; 则对数组元素a[i][j]之值的正确引用为( )

A. *(a[i]+j) B. *((p+i)+j) C. *(p[i]+j)

第11部分 结构体与共用体

【11.1】下面的四个运算符中,优先级最低的是( ) A. () B. . C. -> D. ++

D. (a+i)[j] 13

【11.2】定义以下结构体类型 struct s {

short int a; float f; };

语句printf(\的输出结果为( )

*【11.4】定义联合数据类型 union { int a; int b; int c; int d; }x;

执行语句 x.a=2; x.b=3; x.c=4; x.d=5;后,x.b的值为( ) A. 2 B. 3 C. 4 D. 5

【11.6】定义以下结构体数组 struct date { int year; int month; int day; }; struct s { struct date birth; char name[20];

}x[4]={{1977,8,7,\

语句printf(\的输出结果为( )。 A. hangzhou,1977,8,7 B. hangzhou,1975,9,5 C. Tianjin,1977,8,7 D. Tianjin,1975,9,5

【11.7】已知: struct sk { int a; float b; }data,*p; 若有p=&data,则对data中的成员a的正确引用是( ) A. (*p).data.a B. (*p).a C. p->data.a D. p.data.a

*【11.8】已知函数定义如下: struct data * f(void) {.......}

14

则函数f( ) A.没有参数,返回值是一个结构 B.有一个参数void,返回值是一个结构 C.没有参数,返回值是一个结构指针 D.有一个参数void,返回值是一个结构

填空题

【11.9】在visualC++6.0环境下,若有以下定义和语句,则sizeof(a)的值是___ ____, 而sizeof(b)的值是_______。 struct { int day; char month[2]; int year; }a, *b; b=&a;

注意:按说sizeof(a)的值应该是10,但是在visualC++6.0环境下运行结果却是12,这里面有一个与机器的字有关的原因,有的书里讲过这个问题。 【11.9】用typedef定义整型一维数组: typedef int ARRAY[10];

则对整型数组a[10]、b[10]、c[10]可以定义为( )

【11.10】已知: struct

{ int x, y;

}s[2]={{1,2},{3,4}},*p=s; 则:表达式++p->x的值为(

),表达式(++p)->x的值为(

【11.11】已知学生的属性有学号(整型)、姓名(字符串)、年龄(整型)和一门成绩。现

有1名学生。请编一个程序。其功能有输入这位学生的数据并输出这位学生的数据。。

【11.12】已知学生的属性有学号(整型)、姓名(字符串)、年龄(整型)和一门成绩。现有5名学生。请编一个程序。其功能有输入这些学生的数据并输出这些学生的数据及其最高分。

【11.13】已知学生的属性有学号(整型)、姓名(字符串)、年龄(整型)和一门成绩。现有5名学生。请编一个程序。其功能有输入这些学生的数据并输出这些学生的数据及其最高分和最低分。

【11.14】已知学生的属性有学号(整型)、姓名(字符串)、年龄(整型)和一门成绩。现有5名学生。请编一个程序。其功能有输入这些学生的数据并输出这些学生的数据及其平均分。

15

第12部分 位运算

【12.1】执行下面程序后x的值为( D )

int a=14, b=15, x; char c='A';

x=((a&b)&&(c<'a')); A.TRUE B.FALSE C.0 D.1

【12.2】执行下面程序后x的值为( D )

int a=14, b=15, x; char c='A';

x=((a|b)&&(c<'a')); A.TRUE B.FALSE C.0 D.1

【12.3】执行下面程序后x的值为( D )

int a=14, b=8, x; char c='A';

x=((a<

【12.4】执行下面程序后x的值为( C )

int a=14, b=8, x; char c='A';

x=((a>>b)&&(c<'a')); A.TRUE B.FALSE C.0 D.1

第13部分 文件

【13.1】在进行文件操作时,写文件的一般含义是( ) A.将计算机内存中的信息存入磁盘 B.将磁盘中的信息存入计算机内存 C.将计算机CPU中的信息存入磁盘 D.将磁盘中的信息存入计算机CPU

【13.2】C语言中的标准输入文件stdin是指( ) A.键盘 B.显示器 C.鼠标 D.硬盘

【13.3】C语言中的标准输出文件stdout是指( ) A.键盘 B.显示器 C.软盘 D.硬盘

【13.4】对文件操作的一般步骤是( ) A.打开文件-操作文件-关闭文件 B.操作文件-修改文件-关闭文件

16

C.读写文件-打开文件-关闭文件 D.读文件-写文件-关闭文件

【13.5】C语言可以处理的文件类型是( ) A.文本文件和数据文件 B.文本文件和二进制文件 C.数据文件和二进制文件 D.以上答案都不完全

【13.6】要打开一个已存在的非空文件fl并用于修改,正确的语句是( ) A.fp=fopen(\ B.fp=fopen(\ C.fp=fopen(\ D.fp=fopen(\

【13.7】以下可作为函数fopen中第一个参数的正确格式是( A. c:user\\text.txt B. c:\%user\\text.txt C. \ D. \

【13.8】若执行fopen函数时发生错误,则函数的返回值是( A.地址值 B.0 C.1 D.EOF

【13.9】为了读取一个已存在的文本文件,在打开文件时,文件的打开方式应当为( ) A.\B.\ C.\ D.\

【13.10】为了向一个尚未存在的二进制文件写内容,在打开文件时,文件的打开方式应当为( ) A.\B.\ C.\ D.\ 填空题

【13.11】下面程序把从终端读入的10个整数以二进制方式写到一个名为bi.dat的新文件中。请填空

#include int main()

{ FILE *fp; int i,j; fp=fopen( ,\ for(i=0;i<10;i++) { scanf(\ fwrite(&j,sizeof(int),1, ); } fclose(fp); return 0; }

17

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

Top