《c语言笔试模拟题以及答案.docx》由会员分享,可在线阅读,更多相关《c语言笔试模拟题以及答案.docx(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1. 一、单选题:(每题1.5分,共60分) 1、 C语言程序的基本单位是_.A. 语句B. 函数C. 程序行D. 字符答案: B2、 C语言程序由( )组成A. 子程序B. 过程C. 函数D. 主程序段程序答案: C3、 算法的表示方法有_。A. 自然语言,传统流程图,N-S流程图,伪代码,计算机语言B. 高级语言,汇编语言,机器语言C. C语言,QBASIC语言,InterDevD. 图形图像法,描述法,编程法E. 计算机语言答案: A4、 以下程序的输出结果是main( ) int k=17;printf(“%d,%o,%x n”,k,k,k);A. 17,021,011B. 17,17
2、,17C. 17,011,021D. 17,21,11答案: D5、 下列变量定义中合法的是A. short _a=1-.le-1;B. double b=1+5e2.5;C. long do=0xfdaL;D. float 2_and=1-e-3;答案: A6、 C语言中合法的字符常量是_A. 084B. X43C. abD. “0答案: B7、 下面说法中正确的是()A. int型和long型运算先将int型转换成unsigned型,再转换B. 两个float型运算结果为double型C. 只要表达式中存在double型,所有其他类型数据都必须转D. 表达式中的类型转换与运算顺序有关答案:
3、 C8、 以下不正确的叙述是A. 在C程序中,逗号运算符的优先级最低B. 在C程序中,APH和aph是两个不同的变量C. 若a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值不变D. 当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值答案: D9、 设变量n为float类型,m为int类型,则以下能实现将n中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是A. n=(n*100+0.5)/100.0B. m=n*100+0.5,n=m/100.0C. n=n*100+0.5/100.0D. n=(n/100+0.5)*100.0答案:
4、B10、 下列运算符中优先级最高的是A. =A&CH 答案: B15、 以下说法中正确的是A. #define和printf都是C语句B. #define是C语句,而printf不是C. printf是C语句,但#define不是D. #define和printf都不是C语句答案: D16、 下面程序的输出是main()int a=-1,b=4,k;k=(a+=0)&(!(b b)&(n=c d)后n的值是A. 1B. 2C. 3D. 4答案: B18、 若有条件表达式 (exp)?a+:b,则以下表达式中能完全等价于表达式(exp)的是A. (exp=0B. (exp!=0)C. (exp=
5、1)D. (exp!=1)答案: B19、 为表示关系XYZ应使用C语言表达式:_A. ( =)&( =)B. ( =)and( =)C. ( )D. ( )&( )答案: A20、 能正确表示逻辑关系:”a =10或a 0的C语言表达式是A. a =10 or a =0|a =10 & a =0D. a =10答案: D21、 下面的程序是_main() int x=3,y=0,z=0;if (x=y+z) printf(“*”);else printf(“#”);A. 有语法错误不能过通过编译B. 输出*C. 可能通过编译,但是不能通过连接,因而不能运行D. 输出#答案: D22、 执行下
6、面语句后的输出为( )int i= -1;if (i =0)printf(“*n”)else printf(“%n”)A. *B. %C. %CD. 有语法错,不能执行答案: D23、 若运行以下程序时,从键盘输入 ADescriptor ( 表示回车),则下面程序的运行结果是#include main()char c;int v0=0,v1=0,v2=0;doswitch(c=getchar()case a:case A:case e:case E:case i:case I:case o:case O:case u:case U:v1+=1;default:v0+=1;v2+=1;whil
7、e(c!=n);printf(“v0=%d,v1=%d,v2=%dn”,v0,v1,v2);A. v0=7,v1=4,v2=7B. v0=8,v1=4,v2=8C. v0=11,v1=4,v2=11D. v0=12,v1=4,v2=12答案: D24、 以下程序的输出结果是main()int n=4;while(n)printf(“%d “,n);A. 2 0B. 3 1C. 3 2 1D. 2 1 0答案: A25、 有一堆零件(100到200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。下面程序是求这堆零件总数,请选
8、择填空。#include main()int i;for(i=100;i200;i+)if(i-2)%4=0)if(!(i-3)%7)if( _ )printf(“%d”,i);A. i%9=5B. i%9!=5C. (i-5)%9!=0D. i%9=5答案: D26、 以下程序的输出结果是 int i,j,x=0;for(i=0;i 2;i+) x+;for(j=0;j 3;j+) if(j%2) continue;x+;x+printf(“x=%dn”,x);A. x=4B. x=8C. x=6D. x=12答案: B27、 以下程序的输出结果是#include #include main
9、() char b18=”abcdefg”,b28,*pb=b1+3;while (pb = b1) strcpy(b2,pb);printf(“%dn”,strlen(b2);A. 8B. 3C. 1D. 7答案: D28、 下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相等数时结束循环,请选择填空#include main()int a,b,t;scanf(“%d%d”,&a,&b);while( _ )if(a b)t=a;a=b;b=t;printf(“%d,%dn”,a,b);scanf(“%d%d”,&a,&b);A. !a=bB. a!=bC. a=bD. a
10、=b答案: B29、 下面程序的输出结果是()。#includemain()int x=10,y=10,i;for(i=0;x8;y=+i)printf(”dd”,x,y);A. 10 1 9 2B. 9 8 7 6C. 10 9 9 0D. 10 10 91答案: D30、 以下程序的输出结果是main() inti,x33=9,8,7,6,5,4,3,2,1;for(i=0;i4;i+=2)printf(“%d”,x);A. 5 2B. 9 1C. 5 3D. 9 7答案: B31、 若有说明: int a34=0;则下面正确的叙述是A. 只有元素a00可得到初值0B. 此说明语句不正确C
11、. 数组a中各元素都可得到初值,但其值不一定为0D. 数组a中每个元素均可得到初值0答案: D32、 以下程序的输出结果是main( ) char a10=1,2,3,4,5,6,7,8,9,0,*p;int i;i=8;p=a+i;printf(“%sn”,p-3);A. 6B. 6789C. 6D. 789答案: B33、 以下程序的输出结果是#definef(x) x*xmain() int a=6,b=2,c;c=f(a) / f(b);printf(“%d n”,c);A. 9B. 6C. 36D. 18答案: C34、 若有说明语句char a=”It is mine”;char
12、*p=”It is mine”;则以下不正确的叙述是A. a+1表示的是字符t的地址B. p指向另外的字符串时,字符串的长度不受限制C. p变量中存放的地址值可以改变D. a中只能存放10个字符答案: D35、 请选出正确的程序段A) int *p;B) int *s, k;scanf(“%d”,p);*s=100;C) int *s, k; D) int *s, k;char *p, c; char *p, e;s=&k; s=&k;p=&c; p=&c;A.B.C.D.答案: C36、 在位运算中,操作数每右移一位,其结果相当于A. 操作数乘以2B. 操作数除以2C. 操作数乘以4D. 操
13、作数除以4答案: B37、 请读程序:#includevoid FUN(int S) staticint J=0;doSJ +=SJ+1;while( +J2);main() intK, A10= 1,2,3,4,5;for( K=1;K3;K+) FUN(A);for (K=0;K5;K+)printf(“%d”,AK);上面程序输出结果是A. 34756B. 23445C. 35745D. 12345答案: C38、 下列程序段的输出结果是()。#includevoid fun(int *x,int *Y)printf(”dd”,*X,*Y);*X=3;*Y=4;main()int X=1
14、,Y=2;fun(y,&x);prinff(”dd”,x,Y);A. 2 1 4 3B. 1 2 1 2C. 2 1 2 1D. 2 1 3 4答案: A39、 下面程序的输出结果是()。#includemain()int a=1,2,3,4,5,6,7,8,9,0,*p;P=a:printf(”dn”,*P+9);A. 0B. 1C. 10D. 9答案: C40、 分析以下程序的运行结果()。#includefunc(int a,int b)int c;e=a+b;retum c;main()。int x=6,r;r=func(x,x+=2);printf(”dn”,r);A. 14B. 1
15、5C. 16D. 17答案: C填空题:(每题1.5分,共24分)1、 在C语言中(以16位PC机为例),一个char型数据在内存中所占的字节数为_;一个int型数据在内存中所占的字节数为_答案: 1,22、 设有以下变量定义,并已赋确定的值char w; int x; float y; double z;则表达式:w*x+z-y所求得的数据类型为_。答案: double3、 若x和n均是int型变量,且x和n的初值均为5,则计算表达式后x的值为_,n的值为_x+=n+答案: 10,64、 若有定义:int b=7;float a=2.5,c=4.7;则下面表达式的值为_a+(int)(b/3
16、*(int)(a+c)/2)%4答案: 5.5、 若有定义:int a=8,b=5,C;,执行语句C=a/b+0.4;后,c的值为答案: 16、 以下程序不用第三个变量,实现将两个数进行对调操作:#includemain() int a , b ;scanf (“%d%d” , &a , &b);printf(“a=%d b=%dn” , a , b );a=a+b;b=(_);a=a-b;printf(“a=%d b=%dn”,a,b);答案: a-b7、 直接使用printf()的格式符输出十六进制数。本题程序如下:include stdio.h void main()int I;scan
17、f(”%d”,&I);printf(”%d(10) = % x(16)n”,I,I );输入100的执行结果为_。答案: 100(10) 64(16)8、 在c语言中,关系运算符的优先级别是。答案: ,=,=,!=9、 表示“整数x的绝对值大于5”时值为“真”的C语言表达式是。答案: x5|x =0&c =913、 以下程序的运行结果是 _main() static char a=*,*,*,*,*;int i,j,k;for(i=0;i 5;i+)printf(“n”);for(j=0;j i;j+) printf(“%c”, );for(k=0;k 5;k+) printf(“%c”,ak
18、);答案: *14、 若有定义:int a34=1,2,0,4,6,8,10;则初始化后,a12得到的初值是_,a21得到的初值是_。答案: 0615、 若有定义语句:char s100,d100; int j=0, i=0;,且s中已赋字符串,请填空以实现字符串拷贝。(注:不得使用逗号表达式)while() dj= _;j+;i+;dj=0;答案: si+16、 以下函数用以求x的y次方,请填空。double fun(double x,int y)int i:double z=10:for(i-1;i_;i+)z=_;return z:答案: =y z*x程序设计题:(请在以下3题中任选2题
19、作答,若3道全部解答,以前2道为准,每题8分,共16分)1、 设某国今年的国民生产总值为45600亿元,若今后每年以8%的增长率增长,计算多少年后能实现国民生产总值翻两番?答案: main()int n;float a,s;for(s=0,n=0,a=45600.0;s=3*45600.0;n+)a=a+a*0.08;s=a;printf(“%dn”,n);本题参考答案:152、 编程序求1+3+5+7+9+这样的数之和。如果累加数大于900时,则程序终止并输出结果。答案: main()int i=1,sum=0;while(sum =900)sum=sum+i;i=i+2;printf(“n
20、%d”,sum);参考答案: 9363、 编程序求1125的平方根的和并输出结果。(保留小数点两位)答案: include “math.h”main()float a,s=0;clrscr();for(a=1;a =125;a+)s=s+sqrt(a);printf(“%.2f”,s);飞漫软件MiniGUI面试题,主要是C和C+方面的,请在一个小时内完成。 C语言 -1、完成字符串拷贝可以使用 sprintf、strcpy 及 memcpy 函数,请问这些函数有什么区别,你喜欢使用哪个,为什么?2、变量的声明和定义有什么区别?3、请写出下面代码在 32 位平台上的运行结果,并说明 sizeo
21、f 的性质:#include #include int main(void)char a30;char *b = (char *)malloc(20 * sizeof(char);printf(“%dn”, sizeof(a);printf(“%dn”, sizeof(b);printf(“%dn”, sizeof(a3);printf(“%dn”, sizeof(b+3);printf(“%dn”, sizeof(*(b+4);return 0 ;4、请完成以下题目。注意,请勿直接调用 ANSI C 函数库中的函数实现。a)请编写一个 C 函数,该函数给出一个字节中被置 1 的位的个数,并请
22、给出该题的至少一个不同解法。b)请编写一个 C 函数,该函数将给定的一个字符串转换成整数。c)请编写一个 C 函数,该函数将给定的一个整数转换成字符串。d)请编写一个 C 函数,该函数将一个字符串逆序。e)请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。f)请编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,该字符串是由同一字符组成的。5、给出演示上述函数功能的一个简单程序,并请编写对应的 Makefile 文件。若应聘嵌入式软件高级工程师,请作答以下题目:6、我们需要编写一个图形相关的应用程序,需要处理大量图形(Shape)信息,图形有
23、矩形(Rectangle),正方形(Square),圆形 (Circle)等种类,应用需要计算这些图形的面积,并且可能需要在某个设备上进行显示(使用在标准输出上打印信息的方式做为示意)。a)请用面向对象的方法对以上应用进行设计,编写可能需要的类b)请给出实现以上应用功能的示例性代码,从某处获取图形信息,并且进行计算和绘制c)如果你的Square继承自Rectangle,请给出理由,如果不是,请给出理由,并且请比较两种方式的优劣d)请问你所编写的类,在如下代码中会有何表现,请解释void test_rectangle_area(Rectangle& r)r.set_width(10);r.set
24、_height(15);assert(r.area() = 150);1. 一、选择题 1. 以下叙述正确的是_C_。A. 在C程序中main函数必须位于程序的最前面B. C程序的每行中只能写一条语句C. C语言本身没有输入输出语句D. 在对一个C程序进行编译的过程中,可发现注释中的错误2. 下列四组字符串中都可以用作语言程序标识符的一组是( A ) 。A. print _3d oodb aBcB. iam one_half start$it 3paiC. Pxq My-book line# His.ageD. str_l Cpp pow while3. 逗号表达式”(a=3*5,a*4),a
25、+15的值是_C_。A. 15B. 60C. 30D. 不确定4. 语句 printf(“%d”,(a=2)&(b= -2);的输出结果是_D_A. 无输出B. 结果不确定C. 0D. 15. 若变量已正确说明为float类型,要通过语句scanf(“%f%f %f “,&a,&b,&c);给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是BA. 10 22 33B. 10.0,22.0,33.0C. 10.0 22.0 33.0D. 10 22 336. 下列程序的运行结果是:Cmain()int y=-5;while (y+) ;printf(“y=%dn”,y);A.
26、y=0B. y= -1C. y=1D. while构成无限循环7. 以下函数调用语句不正确的是:DA. x=(int) power(b);B. x=power (a+b);C. x=power(a);D. x=float power( a );8. 以下不正确定义一维数组的选项是( D )A. int num3;B. #define N 100 int numN;C. int num2*3;D. int N=100; int numN;9. 以下程序的输出结果是 ( B )main( ) int a33=1,2,3,4,5,6,7,8,9,i,j,s=0;for(i=1;i3;i+)for(j
27、=0;ji;j+) s+=aj;printf (“%dn”,s);A. 18B. 19C. 20D. 2110. 有下面的程序段char a3,b=”china”;a=b;printf(“%s”,a);则( D )A. 运行后将输出chinaB. 运行后将输出chC. 运行后将输出chiD. 编译出错11. 在C语言中,以下说法正确的是:AA. 普通实参和与其对应的形参各占用独立的存储单元B. 实参和与其对应的形参共占用一个存储单元C. 只有当实参和与其对应的形参同名时才共占用存储单元D. 形参在函数调用前它就占用存储单元12. 以下叙述中不正确的是_D_A. 在不同的函数中可以使用相同名字的
28、变量B. 函数中的形式参数是局部变量C. 在一个函数内定义的变量只在本函数范围内有效D. 在一个函数内的复合语句中定义的变量在本函数范围内有效13. 以下程序的输出结果是 Amain()int a=10,b=20;int *p=&a;*p=100;printf(“a=%d”,*p+1);A. 101B. 11C. 20D. 无 结果14. 以下程序运行后的输出结果是: Amain() char s =”9876,*p;for ( p=s ; p5) printf(“%dn”,m);else printf(“%dn”,m);A. 4B. 5C. 6D. 720. 下面程序段的运行结果是:Bint
29、 n=2;while(n=0)n=n-1;printf(“%d”,n);A. -2B. -1C. 0D. 有语法错误21. 有函数int max(int a,int b),则以下调用语句正确的是:CA. int max(a,b);B. int max(3,4);C. max(a,b);D. max( );22. 有以下程序:main( ) intaa4=0,2,3,4;int i,s=1;for(i=1;i4;i+) s*=aa;printf(“%dn”,s);程序运行后的输出结果是( D )A. 0B. 6C. 12D. 2423. 以下不能正确定义二维数组的是( D )A. int a23
30、;B. int a23=1,2,3,4,5,6;C. int a 3=1,2,3;D. int a23=1,2,3,4;24. 把字串b连接到字串a后面,应当使用( C )A. strcpy(a,b);B. strcpy(b,a);C. strcat(a,b);D. strcat(b,a);25. 若调用一个函数,且此函数中没有return语句,则关于该函数正确的说法是 AA. 没有返回值B. 返回若干个系统默认值C. 能返回一个用户所希望的函数值D. 返回一个不确定的值26. 如果使用一个宏 tri(x+y+z) 来表示算式(x+y+z)*(x+y+z)*(x+y+z),则应如何定义 CA.
31、 #define tri(x) x*x*xB. #define tri(x) (x*x*x)C. #define tri(x) (x)*(x)*(x)D. #define tri(x) (x+y+z)*(x+y+z)*(x+y+z)27. 以下程序的输出结果是 Cmain()int a5=1,2,3,4,5;int *p=a;printf(“a=%d”,*(p+3);A. 2B. 3C. 4D. 528. 以下程序的输出结果为( A )main( ) void sub (int *, int *);int x=100, y=200;sub (&x, &y);printf(“ %d , %d n
32、 ” , x , y);void sub( int *px , int *py) *px=10; *py=20; A. 10,20B. 20,10C. 100,200D. 200,100二、操作题1. 将11000中所有21的倍数存到一个一维数组中,并输出该数组的所有数据。要求将该程序以文件名test1.c或test1.cpp保存到K盘根目录。参考答案:#include #define N 1000main()int i,j=0,n,szN=0;for(i=1;i=1000;i+)if(i%21=0)szj+=i;n=j;for(j=0;jn;j+)printf(“%dt”,szj);prin
33、tf(“n”);2. 写一个函数判断一个正整数是否为偶数,在主函数中用scanf输入正整数m,调用函数后,根据函数返回值判断这个正整数是否为偶数,若是则输出“yes”,否则输出“no” 。要求将该程序以文件名test2.c或test2.cpp保存到K盘根目录。参考答案:#include main()int m,flag;printf(“请输入一个正整数mn”);scanf(“%d”,&m);int ifou(int);flag=ifou(m);if(flag) printf(“yesn”);else printf(“non”);int ifou(int k)if(k%2=0) return 1
34、;else return 0;3. 输入一个M*N二维数组,求该二维数组所有靠外侧的元素之和。要求M和N用#define 进行定义。要求将该程序以文件名test1.c或test1.cpp保存到K盘根目录。参考答案:#define M 4#define N 3#include main()int i,j;int aa N,sum=0; for(i=0;iM;i+)for(j=0;jN;j+)scanf(“%d”,&aaj);if(i=0|i=(M-1)|j=1|j=(N-1)sum=sum+aaj;for(i=0;iM;i+)for(j=0;jN;j+)printf(“%dt”,aaj);pri
35、ntf(“n”);printf(“外侧元素之和为%dn”,sum);4. 写一个函数计算两个正整数的最小公倍数,在主函数中用scanf输入m,n两个正整数,调用函数后,打印这两个正整数的最小公倍数。要求将该程序以文件名test2.c或test2.cpp保存到K盘根目录。参考答案:#include void main()int m,n;int zxgbs;int mmin(int,int);scanf(“%d%d”,&m,&n);zxgbs=mmin(m,n);printf(“%d和%d的最小公倍数为%dn”,m,n,zxgbs);int mmin(int m,int n)int i;for(i=(mn?m:n);i=1;i)if(m%i=0&n%i=0)break;returnm*n/i;