(中职)C语言程序设计练习题3及答案.doc
练习题3一、 单项选择第一章 C语言概述(1) 一个C程序的执行是从 A、本程序的MAIN函数开始,到MAIN 函数结束。B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束。C、本程序的MAIN函数开始,到本程序的最后一个函数结束。D、本程序文件的第一个函数开始,到本程序的MAIN函数结束。(2) 以下叙述正确的是 A、 在C程序中,MAIN函数必须位于程序的最前面。B、 C程序的每行中只能写一条语句。C、 C语言本身没有输入输出语句。D、 在对一个C程序进行编译的过程中,可发现注释中的拼写错误。(3) C语言规定,在一个源程序中,MAIN主函数的位置是在: A、 必须在最前面。B、 必须在系统调用的库函数的后面C、 可以在任意位置。D、 必须在最后面(4) 一个C程序是由: A、 一个主程序和若干子程序组成B、 函数组成C、 若干过程组成D、 若干子程序组成(5) 以下叙述不正确的是: A、 一个C源程序可由一个或多个函数组成B、 一个C源程序必须包含一个MAIN函数C、 C程序的基本组成单位是函数D、 在C程序中,注释说明只能位于一条语句的后面第二章 数据类型、运算符与表达式() 若x, i, j, k都是int型变量,则计算下面表达式后,x的值为 x( i, j, k)、 、() 下列四组选项中,均不是语言键字的选项是 、define , IF, typeB、getc, char, printfC、include, scanf, caseE、 if, struct, type() 下面四个选项中,均是不合法的用户标识符的选项是 、,_,do 、float,1a0, _A、b-a, goto, intD、_123, temp, INT() 若有代数式ae/bc,则正确的语言表达式是 、a/b/c*e*3、3*a*e/bc、3*a*e/b*c、a*e/c/b*3(5) 已知各变量的类型说明如下:int k, a, b;unsinged long w=5;double x=1.42;则以下不符合语言语法的表达式是 、x%(-3)、w+=-2;、k=(a=2,b=3,a+b)、a+=a-=(b=4)*(a=3)第三章 简单C程序设计()putchar函数可以向终端输出一个 、整型变量表达式值、实型变量值、字符串、字符或字符型变量值()若x,y均定义为int型,z定义为double 型,以下合法的scanf函数调用语句是 、scanf(“%d%lx,%le”,&x,&y,&z);、scanf(“%2d*%d%lf”,&x,&y,&z);、scanf(“%x%*d%o”,&x,&y,&z);、scanf(“%x%o%6.2f”,&x,&y,&z);(3)当输入数据的形式为:,<回车>时,以下程序的输出结果为 main()int x,y,z; scanf(“%d%d%d”,&x,&y,&z); printf(“x+y+z=%dn”,x+y+z);、x+y+z=48、x+y+z=35、x+z=35、不确定值(4) 以下能正确的定义整型变量a,b和c,并对它们赋初值为的语句是 、int a=b=c=5;、int a, b, c=5;、a=5, b=5, c=5;、a=b=c=5;(5) 若有以下定义,则正确的赋值语句是 int a,b; float x;、a=1, b=2;、b+;、a=b=5;、b=int(x);第四章 选择结构程序设计(1)能正确表示“当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)(2)以下程序的运行结果是 #include “stdio.h”main()int a,b,d=241; a=d/100%9;b=(-1)&&(-1);printf(“%d,%d”,a,b);A、6,1 B、2,1C、6,0D、2,0(3)请阅读以下程序:main() int a=5 , b=0 , c=0; if (a+b+c) printf(“* * *n”); else printf(“$ $ $n”);以上程序 。A) 有语法错误不能通过编译B) 可以通过编译但不能直接通过连接C) 输出* * *D) 输出$ $ $(4)以下程序的运行结果是 。main()int m=5;if(m+>5)printf(“%dn”,m);else printf(“%dn”,m);A) 4B) 5C) 6D) 7 () 为了避免在嵌套的条件语句中if-else中产生二义性,c语言规定:else子句总是与 相配对。A)缩排位置相同的ifB)其之前最近的ifC)其之后最近的ifD)同一行上的if第五章 循环控制(1)设有程序段 int k=10while (k=0) k=k-1则下面描叙正确的是 。A) while (k=0) k=k-1;B) 循环是无限循环C) 循环体语句一次也不执行D) 循环体语句执行一次(2)下面程序段的运行结果是 。int n=0;while(n+<=2); printf(“%d”,n);A) 2B) 3C) 4D) 有语法错(3)C语言中while和do-while循环的主要区别是 。A) do-while的循环体至少无条件执行一次B) while 的循环控制条件比do-while的循环控制条件严格C) do-while允许从外部转到循环体内D) do-while允许从外部转到循环体内(4)以下能正确计算1*2*3*10的程序段是 。A) do i=1;s=1;s=s*i;i+;while(I<=10);B) do i=1;s=0;s=s*i;i+;while(I<=10);C) i=1;s=1;do s=s*i;i+;while(I<=10);D) i=1;s=0;do s=s*i;i+;while(I<=10);第六章 数组(1)在c语言中,引用数组元素时,其数组下标的数据类型允许是。A) 整型常量B) 整型表达式C) 整型常量或整型表达式D) 任何类型的表达式(2)以下能对二维数组a进行正确初始化的语句是。A) int a2 =1,0,1,5,2,3,;B) int a 3=1,2,3,4,5,6;C) int a24=1,2,3,4,5,6;D) int a 3=1,0,1,1,1;)(3)若有说明:int a34=0;则下面正确的叙述是。A) 只有元素a00可得到初值0B) 此说明语句不正确C) 数组a中各元素都可得到初值,但其值不一定为0D) 数组a中每个元素均可得到初值0(4)下面程序(每行程序前面的数字表示行号)。1 main()2 3 float a10=0;4 int i5 for(i=0;i<3;i+) scanf(“%d”,&ai;6 for(i=1;i<10;i+) a0=a0+ai;7 printf(“%fn”,a0);8 A) 没有错误B) 第3行有错误C) 第5行有错误D) 第7行有错误(5)若二维数组a有m列,则计算机一元素aij在数组中位置的公式为。(假设a00位于数组的第一个位置上。)A) i*m+jB) j*m+iC) i*m+j-1D) i*m+j+1第七章 函数(1)以下正确的函数定义形式是 。A)double fun(int x,int y)C) double fun(int x;int y)D) double fun(int x,int y)E) double fun(int x,y);(2) 以下正确的函数形式是 。A) double fun(int x,int y)z=x+y; return z;B) fun(int x,y)int z; return z;C) fun(x,y)int x,y; double z;z=x+y;return z;D) double fun(int x,int y)double z; z=x+y;return z;(3) C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是A)地址传递B)单向值传递C)由实参传给形参,再由形参传回给实参D)传递方式(4)C语言允许函数值型缺省定义,此时该函数值隐含的类型是 。A)float型B)int型C)long型D)double型(5)下面函数调用语句含有实参的个数为 。 func(exp1,exp2),(exp3,exp4,exp5);A)1B)2C)4D)5第八章 编译预处理命令(1)请读程序:#define ADD(x) x+xmain()int m=1,n=2,k=3;int sum=ADD(m+n)*k;printf(“sum=%d”,sum);上面程序的运行结果是 。A) sum=9B) sum=10C) sum=12D) sum=18(2) 以下程序的运行结果是 。#define MIN(x,y) (x)<(y)? (x)+(y)main()int I=10,j=15,k;k=10*MIN(I,j);printf(“%dn”,k);A)10 B)15 C)100D)150(3) 在宏定义#define PI 3.14159中,用宏名PI代替一个 。A) 常量B) 单精度数C) 双精度数D) 字符串(4) 若有宏定义如下:#define X 5#define Y X+1#define Z Y*x/2则执行以下printf语句后,输出结果是 。int a; a=Y;printf(“%dn”,Z);printf(“%dn”,-a);A)7 B)12 C)12 D)76 6 5 5(5) 若有以下宏定义:#define N 2#define Y(n) (N+1)*n)则执行语句z=2*(N+Y(5);后的结果是 。A) 语句有错误B) z=34C) z=70D) z无定值第九章 指针(1) 以下程有错误,错误原因是main()int *p,I; char *q,ch;p=&I;q=&ch;*p=40;*p=*q;.A) p和q的类型不一致,不能执行*P=*Q;语句B) P中存放的是地址值,因此不能执行*P=40;语句C) Q没有指向具体的存储单元,所以*Q没有实际意义D) Q虽然指向了具体的存储单元,但该单元中没有确定值,所以不能执行*P=*Q;语句 (2)已有定义int k=2; int *ptr1, *ptr2;且ptr1和ptr2均已指向变量K,下面不能正确执行的赋值语句是 .A)k=*ptr1+*ptr2; B)ptr2=K;C)ptr1=ptr2; D)k=*ptr1*(*ptr2);(3)变量的指针,其含义是指该变量的_.A)值 B)地址 C)名 D)一个标志(4)若有语句int*point,a=4;和ponit=&a; 下面均代表地址的一组选项是_.A) a,point,*&a B)&*a,&a,*pointC)*&point,*point,&aD)&a,&*point,point(5)下面能正确进行字符串赋值操作的是_.A) char s5=“ABCDE”;B) char s5=A,B,C,D,E;C) char *S; s=”ABCDE”;D) char *S; scanf(“%s”,s);(6) 若有以下定义,则对A数组元素的正确引用是_.A)*&a5 B)*a+2C)*(P+5)D)*(a+2)(7) 若有以下定义,则对a数组元素地址的正确引用是_>A) p+5B) *a+1C) &a+1D) &a0(8) 若有定义:int a23;则对a数组的第I行第J列(假设I,J已正确说明并赋值)元素值的正确引用为_.A)*(*(a+I)+J)B)(a+I)jC)*(a+I+j)D)*(a+I)+j(9)若有定义:int a23;则对a数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的正确引用为_.A)*(ai+j)B)(a+i)C)*(a+j)E) ai+j(10)若有以下定义和语句,则对a数组元素地址的正确引用为_.Int a23,(*p)3P=a;A)*(p+2)B) p2C) p1+1D) (p+1)+2第十章 结构体与共用体(1) 以下对结构体类型变量的定义中不正确的是_. A)#define STUDENT struct studentSTUDENTint num;float age;std1; B)struct studentint num; float age;std1; C)struct int num; float age; std1; D)structint num; float age;student;struct student std1;(2) 设有以下语句(3) struct stuint a; float b;stutype;则下面叙述正确的是_.A)struct是结构体类型的关键字B)struct stu是用户定义的结构体类型C)stutype是用户定义的结构体类型名D)a和b都是结构体成员名(4) 设有以下定义:struct sk int n; float x; data,*p; 若要使p指向data中的n域,正确的赋值语句是_A) p=&data.n;B) *p=data.n;C) p=(struct sk *)&data.n;D) p=(struct sk *) data.n;(5) 设有以下语句:struct st int n;struct st *next; static struct st a3=5,&a1,7,&a2,9,0,*p; p=&a0;则以下表达式的值为6的是_.A) p+->nB) p->n+C) (*p).n+D) +p->n第十一章 位运算(1)以下运算符中优先级最低的是 优先级最高的是 。A)&&B) &C) |D) |(2)若有运算符<<,sixeof,&= 则它们按优先级按由高到低的正确排列次序是 。A) sizeof,&=,<<,B) sizeof,<<,&=C) ,<<,sizeof,&=D) <<,&=,sizeof(3)在C语言中,要求运算数必须是整型的运算符是 。A)B)%C)!D)>(4) 在C语言中,要求运算数必须是整型或字符型的运算符是 。A) &&B) &C) !D) |(5)sozeof(float)是 。A)一种函数调用B)一种不合法的表示形式C)一个整型表达式D)一个浮点表达式第十二章 文件(!)系统的标准输入文件是指 。A)键盘B)显示器C)软盘D)硬盘(2)以下可作为函数fopen中第一个参数的正确格式是 。A) c:usertext.txtB) c:usertext.txtC) c:usertext.txtD) c:usertext.txt()若执行fopen函数时发生错误,则函数的返回值是)地址值)()若要用fopen函数打开一个新的二进制文件,该文件要既能读又能写,则文件方式字符串应是。A)ab+B) wb+C) rb+D)ab(5)当顺利执行了文件关闭操作时,fclose函数的返回值是。A)-1B)TUREC)0D)1二、 填空第一章 C语言概述(1) C源程序的基本单位是( )(2) 一个C源程序至少应包括一个( )(3) 在一个C源程序中,注释部分两侧的分界符分别为( )和( )(4) 在C语言中,输入操作是由库函数( )完成的,输出操作是由库函数( )完成的。第二章 数据类型、运算符与表达式(1) 在语言中(以位机为例),一个char型数据在内存中所占的字节数为( ),一个int 型数据在内存中所占的字节数为( )。(2) 在语言中,实型变量分为两种类型,它们是( )和( )。(3) 若a是int型变量,则计算表达式a=25/3%3后,a的值为( )。(4) 语言中的标识符只能由三种字符组成,它们是( ),( )和( )(5) 表达式8/4*(int)2.5/(int)(1.25*3.7+2.3)值的数据类型为( )。第三章 简单C程序设计(1)以下程序的输出结果是( )。main()int x=1,y=2;printf(“x=%d y=%d *sum*=%dn”,x,y,x+y);printf(“10 squared is :%dn”,10*10);(2)以下程序的输出结果是( )。#include <studo.h>main()int a=325;double x=3.1415926; printf(“a=%+06d x=%+en”,a,x,);(3)假设变量a和b均为整型,以下语句可以下借助任何变量把a、b中的值进行交换。请填空。 a+=( );b=a-( );a-=( ); (4)设x,y和z都是int型变量,m为long型变量,则在16位微型机上执行下面的赋值语句后,x值为( ),y值为( ),z值为( )。 y=(x=32767,x=-1); z=m=0xFFFF(5)若x为int型变量,则执行以下语句后x的值是( )x=7;x+=x-=x+x;第四章 选择结构程序设计(1)当a=3,b=2,c=1时,表达式 f=a>b>c的值是( )。(2)在C语言中表示逻辑“真”值用( )。(3)设x,y,z均为int 型变量,请写出描述“x 或y中有一个小于z”的表达式( ).(4)当m=2,n=1,a=1,b=2,c=3时,执行完 d=(m=a!=b)&&(n=b>c)后;n的值为( ),m的值为( )。(5)有int a=3,b=4,c=5;则表达式a|b+c&&b= =c的值为( )。第五章 循环控制(1) 执行下面程序段后,K值是( )。K=1; n=263;Do k*=n%10 ; n/=10 while(n);(2)下面程序段中循环体的执行次数是( )。 A =10; B=0; Do b+=2; a-=2+b; while(a>=0);(3) 下面程序段的运行结果是( )。 X=2Do printf (“*”); x-; while (! x= =0);(4) 下面程序段的运行结果是( )。 I=1; a=0; s=1; Do a=a+s*i; s=-s; i+; while(i<=10) Printf (“a=%d, a”);(5)鸡兔共有30只,脚共有90 个,下面程序段是计算鸡兔各有多少只,请填空。For(x=1;x<=29;x+)y=30-x;if( ) printf (“%d, %dn ”, x , y) ;第六章 数组(1)在C语言中,二维数组的定义方式为:类型说明符 数组名( ) ( );(2)在C语言中,二维数组元素在内存中的存放顺序是( )。(3)若有定义:double x35;则x数组中行下标的下限为( ),列下标的上限为( )。(4)若二维数组a有m列,则计算机任一元素a ij在数组中位置的公式为:( ).(假设a00位于数组的第一个位置上。)(5)若有定义:int a34=1,2,0,4,6,8,10;则初始化后,a12得到的初值是( ),a21得到初值是( )。第七章 函数(1)C语言规定,可执行程序的开始执行点是( )。(2)在C语言中,一个函数一般由两个部分组成,它们是( )和( )。(3)下面add函数的功能是求两个参数的和,并将和值返回调用函数。函数中错误的部分是( );改正后为( )。Void add(float a,float b)float c;c=a+b;return c(4)以下程序的运行结果是( )。 main() increment(); increment(); increment(); increment();int x=0;x+=1;printf(“%d”,x);(5)以下Check函数的功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示“WELL DONE!”,否则显示计算后的值。已有函数调用语句Check (ponse,value);请填空。Void Check (int ponse,value)int val; val=( );printf(“计算后的值:%d”,val);if( ) printf(“Nwell DNOE! n”);else printf)”nSorry the correct answer is %dn”,val);第八章 编译预处理命令(1)设有以下宏定义:#define WIDTH 80#define LENGTH WIDTH+40 则执行赋值语句:v=LENGTH*20;(V为int型变量)后,v的值是( )。(2)设有以下宏定义:#define WIDTH 80#define LENGTH (WIDTH+40) 则执行赋值语句:k=LENGTH*20;(K为int型变量)后,k的值是( )。(3)下面程序的运行结果是( )。 #define DOUBLE(r) r*r main() int x=1,y=2, t; t=DOBLE(x+y); printf(“%dn”,t); (4)下面程序的运行结果是( )。 #define MUL(z) (z)*(z) main() printf(“%dn”,MUL(1+2)+3); (5) 下面程序的运行结果是( )。 #define POWER(x) (x)*(x) main() int I=1; while (I<=4) printf(“%dt”,POWER(I+); printf(“n”); 第九章 指针(1)下面程序段的运行结果是()char s80,*sp=”HELLO!”;sp=strcpy(s,sp);s0=h;puts(sp);(2)下面程序段的运行结果是()chara=”123456789”,*p;int I=0;p=a;while(*p)if(I%2=0) p=*;p+;I+;puts(a);(3)若有以下语句和定义:int a4=0,1,2,3,*p;p=&a1;则+(*p)的值是()(4)若有定义:int a23=2,4,6,8,10,12;则(&a00+282+1的值是(),*(a1+2)的值是()。第十章 结构体与共用体(1)以下程序用以输出结构体变量bt所占内存单元的字节数,请在()内填上适当的内容。 Struct ps double I;char arr20;main()struct ps bt;ptintf(“bt size :%dn:,( ); (2)设有三人的姓名和年龄存在结构数组中,以下程序输出三人中年龄居中者的姓名和年龄,请在()内填上正确的内容。 Static struct man char name20int age;person“liming”,18, “wanghua”,19, “zhangping”,20 ;main()int i, j, max, min; max=min=person0.age; for( i=1; i<3; i+) if (personi.age>max) ( ); else if (personi.age<min) ( );for(i=0;i<3;i+) if(personi.age!=max( )personi.age!=min) printf(“%s %dn”,personi.name,personi.age); break; (3)若以定义:struct num int a; int b; float f; n=1, 3, 5.0;struct num *pn=&n;则表达式pn->b/n.a*+pn->b的值是( ),表达式(*pn).a+pn->f的值是( )。 (4)以下程序的功能是计算并打印复数的差。请在( )内填入正确的内容。 Struct compfloat re; float im;struct comp *m(x,y) struct comp *x, *y; ( ); z=(struct comp *)malloc(sizeof(struct comp); z->re=x->re-y->re; z->im=x->im-y->im; return( ( ) ); main() struct comp *t; struct xomp a,b;a.re=1; a.im=2;b.re=3; b.im=4;t=m( );printf(“z.re=%f, z.im=%f”, t->re,t->im); (5)以下程序的运行结果是()struct ksint a; int *b;s4,*p;main() int n=1, i; printf(“n”); for(i=0; i<4;i+) si.a=n; si.b=&si.a;n=n+2; p=&s0;p+;printf(“%d, %dn”, (+p)>a, (p+)->a);第十一章 位运算(1)在语言中,&运算符作为单目运算符时表示的是()运算;作为双目运算符时表示的是()运算。()与表达式a&=b等价的另一书写形式是()。(3)设有char a, b;若要通过a&b运算屏蔽掉a中的其它位,只保留第2和第8位(右起为第位),则b的二进制数是( ).(4)测试char型变量a 第六位是否为1的表达式是( )(设最右位是第一位)。(5)设二进制数x的值是11001101,若想通过x&y 运算使x中的低4位不变,高4位清零,则y的二进制数为( )。第十二章 文件()在程序中,文件可以用()方式存取,也可以用()方式存取。()在程序中,数据可以用()和()两种代码形式存放。()在程序中,文件的存取是以()为单位的,这种文件被称作()文件。()函数调用语句:fgets(buf,n,fp);从fp指向的文件中读入( )个字符放到buf字符数组中。函数值为()。()feof(fp)函数用来判断文件是否结束,如果遇到文件结束,函数值为(),否则为()。三、 判断第一章 C语言概述第二章 数据类型、运算符与表达式(1) C语言所提供的基本数据类型包括:整型、实型和字符型。(2) 在C程序中,逗号运算符的优先级最低。(3) 当从键盘输入数据时,对整型变量只能输入整型数据,对实型变量只能输入实型数据。(4) C语言中的标识符只能由字母、数字和下划线三种字符组成。(5) 在C语言中,char型的数据在内存中的存储形式是原码形式。第三章 简单C程序设计() 当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(“%4.2f”,&f)。() 整型变量的输出格式控制符只有%d一种。() putchar函数可以向终端输出一个字符串。() pirntf函数中用到格式符%5s,其中数字5表示输出的字符串占5列,如果字符串长度大于5,则输出按原字符长度从左向右全部输出。() 输入项可以是一个实型常量,如scanf(“%f”,2.3)。第四章 选择结构程序设计() 逻辑运算符两侧的运算对象可以是任何基本类型的数据。() C语言中只提供了三种逻辑运算符:&&, |,和!。() 若a=6,b=4,c=3则表达式a&&b+c|b-c的值是0。() 关系运算式的结果都是逻辑值。() 若a=1,b=2,则表达式a>b?a:b+1的值是3。第五章 循环控制() 设有以下程序段: int x=0,s=0;while(!x!=0) s+=+x;printf(“%d”,s);则运行该程序段后输出为:0() for循环只能应用于循环次数已经确定的情况。() goto语句只能用于退出多层循环。() switch语句中不能出现continue语句。() 只能用continue语句终止本次循环。第六章 数组() 两个字符串中所包含的字符个数相同时,才能比较字符串。() 字符数组可以存放字符串。() 不能用关系运算符对字符数组中的字符串进行比较。() 如果定义了一个指向数组的指针,则该指针可以相当于数组名使用。() 如果没有给一个整型数组的元素赋初值,则其元素的缺省初值全部为0。第七章 函数() C语言中,用户若需调用标准库函数,在调用前必须重新定义。() C语言中不允许用户重新定义标准库函数。() 在C程序中,函数的定义和调用都不允许嵌套。() 如果用数组名作为函数调用的实际参数,则传递给形参的是数组的首地址。() 形式能参数也是一种局部变量。第八章 编译预处理命令() 预处理命令行都必须以#号