欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    C语言试题及答案.docx

    • 资源ID:7329147       资源大小:37.63KB        全文页数:41页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言试题及答案.docx

    1、C语言试题及答案试题一一、问答题1. 请简述static的作用? 32. 请简述volatile的作用? 33 头文件中ifndef / define / endif 是做什么用的? 34. #include 和 #include “filename.h” 有什么区别? 35. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)。 36. 写一个标准宏MIN ,这个宏输入两个参数并返回较小的一个。 47. 下面的代码输出是什么,为什么? 5void foo(void)unsigned int a = 6;int b = -20;(a+b 6) ? puts( 6)

    2、 : puts(= 6);8. 请问以下程序的运行结果?是否能满足真实要求呢?如果不能请修改?5swap(int a ,int b) int temp; temp=a;a=b;b=temp;main()int a=1,b=2;swap(a,b);printf(“%d,%d”,a,b);9. 假设机器是WIN32的系统。51)char str = “Hello” ; char *p = str ; int n = 10;请计算sizeof (str ) = sizeof ( p ) = sizeof ( n ) =2)void Func ( char str100)请计算 sizeof( str

    3、 ) = 3) void *p = malloc( 100 );请计算sizeof ( p ) =10. 请仔细分析以下程序并回答问题。161)void GetMemory(char *p)p = (char *)malloc(100);void Test(void) char *str = NULL;GetMemory(str); strcpy(str, hello world);printf(str);请问运行Test函数会有什么样的结果? 2)char *GetMemory(void) char p = hello world;return p;void Test(void)char *

    4、str = NULL;str = GetMemory(); printf(str);请问运行Test函数会有什么样的结果?3) Void GetMemory2(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100);strcpy(str, hello); printf(str); 请问运行Test函数会有什么样的结果? 4) void Test(void)char *str = (char *) malloc(100); strcpy(str, “hello”)

    5、; free(str); if(str != NULL) strcpy(str, “world”); printf(str);请问运行Test函数会有什么样的结果?二、编程题 第一组:请在以下三到题中任意选一道做101. 请编写程序,把文件a.txt和文件b.txt的内容都拷贝到文件c.txt中。2. 请编写一个程序,在一个升序的整形数组中是否有一个需要找的数,用折半查找法?3. 请编写一个程序,输出一个short类型数的镜像。(既:假如一个unsigned short类型的数的二进制码是1111 1111 0000 0000 那输出应为 0000 0000 1111 1111)。第二组:请在

    6、以下三到题中任意选一道做(如果选题3做,加5分)101. 请编写程序,将一个有数字组成的字符串转化为整数。(不允许使用库函数atoi()2. 已知strcpy函数的原型是char *strcpy(char *strDest, const char *strSrc);其中strDest是目的字符串,strSrc是源字符串。不调用C+/C的字符串库函数,请编写函数 strcpy。3. 请编写一个程序,用递归的算法,来实现10!?第三组:请在以下三到题中任意选一道做(如果选题3做,加5分)151. 请编写一个程序,输出显示如下图形。1 1 1 1 11 2 2 2 11 2 3 2 11 2 2 2

    7、 11 1 1 1 12. 设编号为1,2, n的17个人围坐一圈,从1开始报数,数到3 的那个人出列,它的下一位又从1开始报数,数到3的那个人又出列,依次类推,请编写一个程序,来得到最后留下来的那个人的编号。 . 请编写一个程序,实现一个二叉树中序的遍历。第四组 该组是必须做题151.请编写一个程序,实现以下功能。 1)创建一棵链表,该链表的每个节点有来存放一个整形的数。(提示:在创建链表时可以用输入0来结束创建)2)查找一个数是否是该链表的一个节点。3)如果这个数是在这个链表中,那么就删除该节点。请自己定义相关数据结构。试题一参考答案一、问答题1. 答:在函数体,一个被声明为静态的变量在这

    8、一函数被调用过程中维持其值不。在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是这个函数被限制在声明它的模块的本地范围内使用。(考生可以自己的话总结,只要符合要求,就给分)2. 答:不会在两个操作之间把volatile变量缓存在寄存器中。在多任务、中断、甚至setjmp环境下,变量可能被其他的程序改变,编译器自己无法知道,volatile就是告诉编译器这种情况。不做常量合并、常量传播等优化。对volatile变量的读写不会被优化掉。如果你对一个变量赋

    9、值但后面没用到,编译器常常可以省略那个赋值操作,然而对Memory Mapped IO的处理是不能这样优化的。(考生可以自己的话总结,只要符合要求,就给分) 3. 答:防止该头文件被重复引用。4. 答:对于#include ,编译器从标准库路径开始搜索 filename.h,对于#include “filename.h” ,编译器从用户的工作路径开始搜索 filename.h。5. 答:#define SECONDS_PER_YEAR (365*24*60*60)UL6. 答:#define MIN(A,B) (A)6。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号

    10、类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。8. 答:输出是 1,2 。不能满足真实的要求。 程序应该为 swap(int *p1 ,int *p2) int temp; temp=*p1;*p1=*p2;*p2=temp;main()int a=1,b=2;swap(&a,&b);printf(“%d,%d”,a,b);9. 答:6 4 4 4 410.1)答:程序崩溃。因为GetMemory并不能传递动态内存,Test函数中的 str一直都是 NULL。strcpy(str, hello world);将使程序崩溃。2)答:可能是乱码。因为GetMemory返

    11、回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。3)答:能够输出hello。会有内存泄漏的情况。4)答:篡改动态内存区的内容,后果难以预料,非常危险。因为free(str);之后,str成为野指针,if(str != NULL)语句不起作用。二、编程题(注:编程题主要考察考生的思路,考生的回答不一定会和参考答案一样) 第一组:1. 答:#include void mian(void) FILE *fp1,*fp2,*fp3; char ch; fp1=fopen(a.txt,r); fp2=fopen(b.txt,r); fp3=fopen(c.

    12、txt,w); ch=fgetc(fp1); while(ch!=EOF) fwrite(&ch,1,1,fp3); ch=fgetc(fp1); ch=fgetc(fp2); while(ch!=EOF) fwrite(&ch,1,1,fp3); ch=fgetc(fp2); fclose(fp1); fclose(fp2); fclose(fp3);2. 答:#includeint find_number(int num,int need_num,int size) int low,high,middle; low=0; high=size-1; while(high=low) middl

    13、e=(low+high)/2; if(need_numnummiddle) low=middle+1; else if(need_numnummiddle) high=middle-1; else if(need_num=nummiddle) return 1; return 0;/*用来测试的*/void main(void) int a=1,2,3,4,5,6,7,8,9,10; int flag=0; flag=find_number(a,3,10); if(flag) printf(existn); else printf(no existn);/*/3. 答:void image(u

    14、nsigned short src) int i; unsigned short dest=0; printf(%xn,src);for(i=0;ii)&1)(15-i)|dest); printf(%xn,dest); 第二组:1. 答:int my_atoi(char *pnum) char *ptemp=pnum; int i=0; int data=0; while(*ptemp+!=0) i+; ptemp=pnum; while(i) data=data*10+*ptemp+-0; i-; return data;2. 答:char *strcpy(char *strDest, c

    15、onst char *strSrc); assert(strDest!=NULL) & (strSrc !=NULL); char *address = strDest; while( (*strDest+ = * strSrc+) != 0 ) return address ;3. 答:int mul(long n) int result; if(n=1|n=0) result=1; else result=n*mul(n-1); return result;第三组:1. 答:#include#includevoid main(void) int x,y,result; for(y=-2;y

    16、3;y+) for(x=-2;xfabs(y) result=3-fabs(x); printf(%d,result); else result=3-fabs(y); printf(%d,result); printf(n); 2. 答:#include #include #define null 0struct node int data; struct node *next;void main(void) int i; struct node *p,*tmp,*head; p=head=(struct node *)malloc(sizeof(struct node); head-data

    17、=1; head-next=null; for(i=2;idata=i; tmp-next=null; head-next=tmp; head=head-next; head-next=p; while(p!=p-next) p-next-next=p-next-next-next; p=p-next-next; printf(%dn,p-data);3. 答:typedef struct tree /*定义树结点结构*/ struct tree *child; struct tree *rchild; int data;treenode,*bintree;bintree create_tre

    18、e(int data,int len) /*利用插入算法创建二叉树*/ bintree root; int i; root=NULL; for(i=0;ilchild); printf(%d,root-data); inorder(root-rchild); 第四组: 1答:#include #include #define NULL 0#define LEN sizeof(struct data)struct data int num; struct data *next; ;int n=0;struct data *creat(void) struct data *head; struct

    19、 data *p1,*p2; n=0; p1=p2=(struct data *)malloc(LEN); scanf(%d,&p1-num); head=NULL; if(p1-num=0) free(p1); while(p1-num!=0) n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(struct data *)malloc(LEN); scanf(%d,&p1-num); p2-next=NULL; return head;int find(struct data *head,int findnum) struct data

    20、*p1; p1=head; while(p1!=NULL) if(p1-num!=findnum) p1=p1-next; else return findnum; if(p1=NULL) return 0;struct data *del(struct data *head,int neednum) struct data *p1,*p2; if(head=NULL) return head; p1=head; while(neednum!=p1-num&p1-next!=NULL) p2=p1; p1=p1-next; if(neednum=p1-num) if(p1=head) head

    21、=p1-next; else p2-next=p1-next; free(p1); return head;void print(struct data *head) struct data *p1; p1=head; while(p1!=NULL) printf(%dn,p1-num); p1=p1-next; void main(void) struct data *head; int findnum=5; int flag; head=creat(); print(head); flag=find(head,findnum); if(flag) head=del(head,flag);

    22、print(head);试题二问答题1、局部变量能否和全局变量重名?2、如何引用一个已经定义过的全局变量?3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?4、动态连接库的两种方式?5、 int i=10, j=10, k=3; k*=i+j; k最后的值是?6、C+中什么数据分配在栈或堆中,New分配数据是在近堆还是远堆中?7、 什么是“引用”?申明和使用“引用”要注意哪些问题?8、 将“引用”作为函数参数有哪些特点?9、在什么时候需要使用“常引用”?10、static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数

    23、有什么区别?11、 结构与联合有和区别?12、程序的局部变量存在于()中,全局变量存在于()中,动态申请数据存在于( )中?13、队列和栈有什么区别?14、为什么标准头文件都有类似以下的结构? 15、 include 与 include file.h的区别?16、面向对象的三个基本特征,并简单叙述之?17、 多态:是将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。18、请说出static和const关键字尽可能多的作用19、New delete 与mallo

    24、c free 的联系与区别?20、#define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?21、 有哪几种情况只能用intialization list 而不能用assignment?22、C+是不是类型安全的?23、main 函数执行以前,还会执行什么代码?24、描述内存分配方式以及它们的区别?25、Heap与stack的差别?26、 在8086 汇编下,逻辑地址和物理地址是怎样转换的?27、C和C+有什么不同?28、 “& ”“|” 和 “&” “|”的区别?29、假设你有8个球,其中一个略微重一些,但是找出这个球的惟一方法是将两个球放在天平上对比。最少

    25、要称多少次才能找出这个较重的球?30、进程和线程的差别? 试题二参考答案问答题1:能,局部会屏蔽全局。要用全局变量,需要使用:,局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。问答题2:Extern,可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个函数名写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误

    26、,那么在编译期间不会报错,而在连接期间报错。问答题3:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错问答题4:调用一个DLL中的函数有两种方法:1载入时动态链接(load-time dynamic linking),模块非常明确调用某个导出函数,使得他们就像本地函数一样。这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位。2运行时动态链接(run-time dynamic linking),运行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL。DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了。如此即可避免导入库文件了。问答题5:60,此题考察优先级,实际写成: k*=(i+j)


    注意事项

    本文(C语言试题及答案.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开