当前位置:文档之家› 单片机C语言练习题

单片机C语言练习题

单片机C语言练习题
单片机C语言练习题

C语言习题集

习题一

一.填空题

1.C程序是由()构成的,一个C程序中至少包含()。因此,( ) 是C程序的基本单位。

2. 函数体是有符号____开始,符号____结束。函数体当中,前面是变量的____部分,后面变量的____部分。3.一个C源程序中至少应包括一个_______。

4.在一个C源程序中,注释部分两侧的分界符分别为_____和________。在C语言的每条语句后面都要有____结束

二.判断题

1.一个C程序的执行总是从该程序的main函数开始,在main函数最后结束。【】

2.main函数必须写在一个C程序的最前面。【】

3.一个C程序可以包含若干的函数。【】

4.C程序的注释部分可以出现在程序的任何位置,它对程序的编译和运行不起任何作用。但是可以增加程序的可读性。【】

5.C程序的注释只能是一行。【】

6.C程序的注释不能是中文文字信息。【】

三、选择题

1 一个C程序的执行是从________。

(A)本程序的main函数开始,到main函数结束。

(B)本程序的第一个函数开始,到本程序文件的最后一个函数结束。

(C) 本程序的main函数开始,到本程序文件的最后一个函数结束。

(D)本程序的第一个函数开始,到本程序main函数结束。

2 以下叙述不正确的是_________。

(A)一个C源程序可由一个或多个函数组成。

(B)一个C源程序必须包含一个main函数。

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

(D)在C程序中,/**/类的注释说明只能位于一条语句的后面

3 C语言规定:在一个源程序中,main函数的位置___。

(A)必须在最开始(B)必须在所有函数的后面

(C)可以任意(D)必须在最后

四.程序阅读

1、找出该程序中的错误并改正。

#include;

main();

float r,s;/*/*r is radius*/*/

r=5.0 s=3.14*r*r;

printf(“%f\n”,s)

五.编程题

1. 利用keil c 集成开发环境建立一个c语言的工程,旋转的MCU型号是STC89C52,并在工程内添加一个名为main的c文件,并在c文件中建立一个空的主函数。

习题二(第2、3节知识)

一.选择题

1、合法的用户标识符是( )

A)abc B) !a C)int D)sfr

2、合法的字符常量是( )

A)…\084?B) “a” C)…ab?D)96

3、是C语言提供的合法的数据类型关键字( )

A)Float B)unsigned int C)integer D)Char

4、在以下各组标识符中,合法的标识符是( )

(1)A)B01 B)table_1 C)0_t D)k%

(2)A)Fast_ B)void C)pbl D)

(3)A)xy_ B)longdouble C)*p D)CHAR

(4) A) sj B)Int C)_xy D)w_y23

------------------------------------------------------------------------------

5、属于合法的C语言unsigned char型常量的是( )

A)5876273 B)0 C)-20 D)58762.73

6、unsigned char a=32,char b=‘A’那么表达式a+b 的数值是( )

A)'A' B)0 C)-1 D)'a'

7、判断unsigned char x = 300;x的结果是( )

A)赋值非法B)溢出C)为300 D)为44

8、为了计算s=10!(即10的阶乘),则s变量应定义为( )

A)int B)unsigned C)long D)以上三种类型均可

9、与代数式(x*y)/(u*v) 不等价的C语言表达式是( )

A)x*y/u*v B)x*y/u/v C)x*y/(u*v) D)x/(u*v)*y

10、在C语言中,数字029是一个( )

A)八进制数B)十六进制数C)十进制数D)非法数

11、在C语言中,要求参加运算的数必须时整数的运算符是( )

A)/ B)* C)% D) =

12、假定x和y为float型,则表达式x=2,y=x+3/2的值是( )

A)3.500000 B)3 C)2.000000 D)3.000000

13、以下合法的赋值语句是( )

A)x=y=100 B)x+y=a+b C)x+y D)c=int(a+b)

14、int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b) && (n=c>d)后n的值为( )

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

15、若有定义:int a=3,b=2,c=1;并有表达式:①a%b,②a>b>c,③b&&c+1,④c+=1,则表达式值相等的是( )

A)①和②B)②和③C)①和③D)③和④

16、逻辑运算符两侧运算对象的数据类型( )

A)只能是0或1 B)只能是0或非0正数

C)只能是整型或字符型数据D)可以是任何类型的数据

二.填空题

1、在C51中,一个unsigned char数据在内存中所占字节数为,其数值范围为;一个unsigned int数据

在内存中所占字节数为,其数值范围为;

2、C语言的标识符只能由大小写字母,数字和下划线三种字符组成,而且第一个字符不能为。

4、在C语言中,不同运算符之间运算次序存在的区别

5、设x=2.5,a=7,y=4.7, 则x+a%3*(int)(x+y)%2/4为。

6、数学表达式1<=a<=3 的C语言表达式为。

7、已知:char a=?a?,b=?b?,c=?c?,unsigned int i;则表达式i=a+b+c的数值为。

8、已知int a=12,n=5;则:表达式运算后a的值各为。

a+=a

a-=2

a*=2+3

a/=a+a

n%=(n%=2)

a+=a-=a*=a

9、设int a; float f; 则表达式10+?a?+9*f值的数据类型是。

10、已知a,b,c是一个整数的百位,十位,个位,则该数的表达式是。

11、若a是int变量,则执行表达式a=25/3%3后,a的值是。

12、能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是。

A)(x>=1) && (x<=10) && (x>=200) && (x<=210)

B)(x>=1) | | (x<=10) | | (x>=200) | | (x<=210)

C)(x>=1) && (x<=10) | | (x>=200) && (x<=210)

D)(x>=1) | | (x<=10) && (x>=200) | | (x<=210)

13、C语言提供6种关系运算符,按优先级高低它们分别是,,,,,等。

14、C语言提供三种逻辑运算符,按优先级高低它们分别是,,。

15、设a=3,b=4,c=5,写出下面各逻辑表达式的值。

表达式表达式运算后的值

a+b>c && b==c

!(a>b) && !c || 1

!(a+b) + c –1 && b + c/2

16、将条件“y能被4整除但不能被100整除,或y能被400整除”写成逻辑表达式。

17、已知A=7.5,B=2,C=3.6,表达式A>B && C>A || AB的值是。

三.程序阅读题

1.写出以下程序的输出结果。

main ( )

{ int y=3,x=3,z=1;

printf(“%d %d\n”,(++x,y++),z+2);

}

四.程序填空题

1.下列程序的输出结果是16.00,请填(1)空使程序完整。

main ( )

{ int a=9,b=2;

float x=[ 1 ] , y=1.1 , z;

z=a/2+b*x/y+1/2;

printf(“%5.2f\n”,z);

}

五.编程题

1.已知a,b均是无符号整型变量,写出将a,b两个变量中的值互换的程序来。

习题三(第4、5节知识)

一.选择题

1、C语言对嵌套if语句的规定是:else总是与( )

A)其之前最近的if配对B)第一个if配对

C)缩进位置相同的if配对D)其之前最近的且尚未配对的if配对2.下面是错误的if语句(设int x,a,b;)

A)if (a=b) x++; B)if (a=

C)if (a-b) x++; D)if ( x ) x++;

3.以下程序片段( )

main ( )

{ int x=0,y=0,z=0;

if (x=y+z)

printf(“***”);

else

printf(“###”);

}

A)有语法错误,不能通过编译B)输出:***

C)可以编译,但不能通过连接,所以不能运行D)输出:###

4.对下述程序,是正确的判断。

main ( )

{ int x,y;

scanf(“%d,%d”,&x,&y);

if (x>y)

x=y;y=x;

else

x++;y++;

printf(“%d,%d”,x,y);

}

A)有语法错误,不能通过编译B)若输入3和4,则输出4和5

C)若输入4和3,则输出3和4 D)若输入4和3,则输出4和5 5.下述程序的输出结果是。

main ( )

{ int a=0,b=0,c=0;

if (++a>0 | | ++b>0)

++c;

printf(“%d,%d,%d”,a,b,c);

}

A)0,0,0 B)1,1,1 C)1,0,1 D)0,1,1

6.以下程序输出结果是。

main ( )

{ int x=1,y=0,a=0,b=0;

switch(x) {

case 1:switch (y) {

case 0 : a++ ; break ;

case 2:a++; b++; break;

case 3:a++; b++;

}

printf(“a=%d,b=%d”,a,b);

}

A)a=1,b=0 B)a=2,b=1 C)a=1,b=1 D)a=2,b=2

7.当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是。

if (a

if (c

else

if (a

if (b

else x=3;

else x=6;

else x=7;

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

8.若int i=0;执行下列程序后,变量i的正确结果是。

switch (i) {

case 9: i+=1 ;

case 10: i+=1 ;

case 11: i+=1 ;

default : i+=1 ;

}

A)10 B)11 C)12 D)13

二.填空题

1.一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译命令:。

2.C语句可以分为,,,和等5种类型。

3.C语句的基本结构有种,分别是_______ __________ __________

4.一个表达式要构成一个C语句,必须。

5.复合语句是用一对界定的语句块。

三.判断题

1.if语句中的表达式不限于逻辑表达式,可以是任意的数值类型。【】

2.switch语句的case表达式必须是常量表达式。【】

3.if语句,switch语句可以嵌套,而且嵌套的层数没有限制。【】

4.switch语句的各个case和default的出现次序不影响执行结果。【】

5.多个case可以执行相同的程序段。【】

6.内层break语句可以终止嵌套的switch,使最外层的switch结束。【】

7.switch语句的case分支可以使用{ }复合语句,多个语句序列。【】

8.switch语句的表达式与case表达式的类型必须一致。【】

四.简答题

1.C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?

2.请将以下语句改成switch语句。

if ((s>0) && (s<=10))

if ((s>=3) && (s<=6)) x=2;

else x=0;

五.程序阅读题

1.写出以下程序的运行结果。

main ( )

{ int a=2,b=7,c=5;

switch (a>0) {

case 1: switch (b<0) {

case 1: printf(“@”); break ;

case 2: printf(“!”); break ;

}

case 0: switch (c==5) {

case 1: pritnf(“*”) ; break ;

case 2: printf(“#”) ; break ;

default : printf(“#”) ; break ;

}

default : printf(“&”);

}

printf(“\n”);

}

六.程序判断题

1.下面程序输入两个运算数x,y和一个运算符号op,然后输出该运算结果的值,例如输入3+5↙得到结果8;请判断下面程序的正误,如果错误请改正过来。

main ( )

{

float x,y,r;

char op ;

scanf(“%f%c%f”,&x,&op,&y);

switch (op) {

case …+? : r=x+y ;

case …-? : r=x+y ;

case …*? : r=x+y ;

case …/? : r=x+y ;

}

printf(“%f”,r);

}

七.编程题

1.有三个整数a,b,c,由键盘输入,输出其中最大的数。

2.给出一百分制成绩,要求输出成绩等级?A?,?B?,?C?,?D?,?E?。90分以上为?A?,80-89分为?B?,70-79分为?C?,60-69分为?D?,60分以下为?E?。

3.给一个不多于5位的正整数,要求分别输出每一位数字.

习题五

一.选择题

1.下面程序段

int k=2;

while (k=0) {printf(“%d”,k);k--;}

则下面描述中正确的是。

A)while循环执行10次B)循环是无限循环

C)循环题语句一次也不执行D)循环体语句执行一次

2.以下程序段的循环次数是。

for (i=2; i==0; )

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

A)无限次B)0次C)1次D)2次

3.以下不是死循环的程序段是。

A)int i=100; B)for ( ; ; ) ;

while (1) {

i=i%100+1 ;

if (i>100) break ;

}

C)int k=0; D)int s=36;

do { ++k; } while (k>=0); while (s) ; --s ;

4.下述语句执行后,变量k的值是。

int k=1;

while (k++<10);

A)10 B)11 C)9 D)无限循环,值不定

5.下面程序的输出结果是( )

main ( )

{ int k=0,m=0,i,j;

for (i=0; i<2; i++) {

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

k++ ;

k-=j ;

}

m = i+j ;

printf(“k=%d,m=%d”,k,m) ;

}

A)k=0,m=3 B)k=0,m=5 C)k=1,m=3 D)k=1,m=5

6.语句while (!E); 括号中的表达式!E等价于。

A)E==0 B)E!=1 C)E!=0 D)E==1

7.下述程序段的运行结果是。

int a=1,b=2, c=3, t;

while (a

printf(“%d,%d,%d”,a,b,c);

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

8.以下for循环的执行次数是。

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

A)无限循环B)循环次数不定C)4次D)3次

9.下面for循环语句。

int i,k;

for (i=0, k=-1; k=1; i++, k++)

printf(“***”);

A)判断循环结束的条件非法B)是无限循环

C)只循环一次D)一次也不循环

10.执行语句for (i=1;i++<4;) ; 后变量i的值是。

A)3 B)4 C)5 D)不定

二.填空题

1.C语言三个循环语句分别是语句,语句和语句。

2.至少执行一次循环体的循环语句是。

三.判断题

1.在while循环中允许使用嵌套循环,但只能是嵌套while循环。【】

2.在实际编程中,do-while循环完全可以用for循环替换。【】

3.continue语句只能用于三个循环语句中。【】

4.do-while循环的while后的分号可以省略。【】

四.程序阅读题

1.写出下面程序运行的结果。

main ( )

{ int x,i ;

for (i=1 ; i<=100 ; i++) {

x=i;

if (++x%2==0)

if (++x%3==0)

if(++x%7==0)

printf(“%d ”,x) ;

}

2.写出下面程序运行的结果。

main ( )

{ int k=1,n=263 ;

do { k*= n%10 ; n/=10 ; } while (n) ;

printf(“%d\n”,k);

}

3.写出下面程序运行的结果。

main ( )

{ int y=2,a=1;

while (y--!=-1)

do {

a*=y ;

a++ ;

} while (y--) ;

printf(“%d,%d\n”,a,y);

}

六.程序填空题

1.下面程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,请填(3)空使程序完整。main ( )

{ int n,k=1,s=0,m ;

for (n=1 ; n<=100 ; n++) {

k=1 ; s=0 ;

【1 】;

while (【2 】) {

k*=m%10;

s+=m%10;

【3 】;

}

if (k>s) printf(“%dd”,n);

}

}

2.下面程序按公式求和并输出结果,请填(3)空使程序完整。

main ( )

{

【1 】;

int k ;

for (k=1 ; k<=100 ; k++)

s+=k ;

for (k=1 ; k<=50 ; k++)

for (k=1 ; k<=10 ; k++)

s+=【2 】;

printf(“sum=【3 】”,s);

}

七.编程题

1.求(即求1!+2!+3!+…+19!+20!)。

习题七

一.选择题

1.以下正确的说法是。

A)用户若需要调用标准库函数,调用前必须重新定义

B)用户可以重新定义标准库函数,如若此,该函数将失去原有定义

C)系统不允许用户重新定义标准库函数

D)用户若需要使用标准库函数,调用前不必使用预处理命令将该函数所在的头文件包含编译,系统会自动调用。

2.以下正确的函数定义是。

A)double fun(int x, int y) B)double fun(int x,y)

{ z=x+y ; return z ; } { int z ; return z ;}

C)fun (x,y) D)double fun (int x, int y)

z=x+y ; return z ; } return z ; }

3.以下正确的说法是。

A)实参和与其对应的形参各占用独立的存储单元

B)实参和与其对应的形参共占用一个存储单元

C)只有当实参和与其对应的形参同名时才共占用相同的存储单元

D)形参时虚拟的,不占用存储单元

4.以下正确的函数定义是。

A)double fun(int x , int y) B)double fun(int x ; int y)

C)double fun(int x , int y) ; D)double fun(int x,y)

5.若调用一个有返回值的函数,且此函数中没有return语句,则正确的说法是。A)该函数没有返回值

B)该函数返回若干个系统默认值

C)能返回一个用户所希望的函数值

D)返回一个不确定的整数值

6.C语言规定,简单变量做实参时,它和对应的形参之间的数据传递方式是。A)地址传递

B)值传递

C)有实参传给形参,再由形参传给实参

D)由用户指定传递方式

7.C语言规定,函数返回值的类型是由决定的。

A)return语句中的表达式类型B)调用该函数时的主调函数类型

C)调用该函数时由系统临时D)在定义函数时所指定的函数类型

8.如果在一个函数中定义了一个变量,则该变量。

A)只在本文件中有定义B)在该函数中有定义

C)在本程序范围内有定义D)为非法变量

9.以下不正确的说法是。

A)在不同函数中可以使用相同名字的变量

B)形式参数是局部变量

C)在函数内定义的变量只在本函数范围内有定义

D)在函数内的复合语句中定义的变量在本函数范围内有定义

10.下面程序的输出是。

int i=2 ;

printf(“%d%d%d”,i*=2,++i,i++) ;

三.程序阅读题

1.写出下面程序的功能。

func (int n)

{ int i,j,k;

i=n/100; j=n/10-i*10 ; k=n%10 ;

if (i*100+j*10+k) == i*i*i+j*j*j+k*k*k) return n ;

return 0;

}

main ( )

{ int n,k ;

for (n=100; n<1000 ; n++)

if (k=func(n)) printf(“%d”,k) ;

}

四.程序判断题

1.下面add函数求两个参数的和;判断下面程序的正误,如果错误请改正过来。

void add(int a,int b)

{ int c ;

c = a + b;

return (c) ;

}

2.下面函数fun的功能是:将长整型数中偶数位置上的数依次取出,构成一个新数返回,例如,当s中的数为:87653142时,则返回的数为:8642;判断下面程序的正误,如果错误请改正过来。

long fun(long s)

{ long t , sl=1;

int d ;

t = 0 ;

while ( s > 0 ) {

d = s%10;

if (d%2=0) {

t=d* sl+ t;

sl *= 10;

}

s \= 10;

}

return (t);

}

习题六

一.选择题

1.在C语言中,引用数组元素时,其数组下标的数据类型允许是。A)整型常量B)整型表达式

C)整形常量或整形表达式C)任何类型的表达式

3.若有定义:int a[10],则对数组a元素的正确引用是。

A)a[10] B)a[3.5] C)a(5) D)a[10-10]

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

A)int a[10]={0,0,0,0,0}; B)int a[10]={} ;

C)int a[ ] = {0} ; D)int a[10]={10*1} ;

12.以下不正确的定义语句是。

A)double x[5]={2.0,4.0,6.0,8.0,10.0};

B)int y[5]={0,1,3,5,7,9} ;

C)char c1[ ]={…1?,?2?,?3?,?4?,?5?} ;

D)char c2[ ]={…\x10?,?\xa?,?\x8?} ;

相关主题
文本预览