ImageVerifierCode 换一换
格式:DOCX , 页数:48 ,大小:31.83KB ,
资源ID:10357478      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10357478.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

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

C语言题库含答案.docx

1、C语言题库含答案一、 简答题。 ( 共14题 ,共0分,每题0分 )1.inti=10,j=10,k=3;k*=i+j;k最后的值是?答:k = 60ok2.写出程序结果:voidFunc(charstr100)printf(%dn,sizeof(str);答:4或者8(如果操作系统为32位则为4,64位则为8)是地址吗3.写出sizeof(struct name2)的结果struct name2 char str; int num; short x;不会!看结构答:此题考察结构对齐的知识,结果为124.写出sizeof(struct name1)的结果struct name1 char st

2、r; short x; int num;不会!答:同样考察的是结构对齐的知识,结果为85.A.c和B.c两个c文件中使用了两个相同名字的static变量,编译的时候会不会有问题?这两个static变量会保存到哪里(栈还是堆或者其他的)?答:没有问题,static变量只在当前文件中有效,也就是说static变量的作用域属于所在的文件域。static变量保存在全局/静态区6.(void *)ptr和(*(void*)ptr的结果是否相同?答:相同。首先第一个(void *)ptr将ptr转换为空指针类型(一级指针),(*(void*)ptr相当于先将ptr转换为空类型指针(二级指针)。二级指针是指

3、向指针的指针,在前面加上*(解指针),也就是空类型指针了(一级指针)。7.#define DOUBLE(x) x+x,i = 5*DOUBLE(5);i是多少?答: i = 5 * 5+5 = 30;看书上的结构理解下意思8.下面的声明都是什么意思?const int a;int const a;const int *a;int * const a;int const * const a ;答:第一个定义常量a,第二个也是定义常量a,第三个定义常量指针a,第四个定义指针常量a,第五个定义指向常量的指针常量(相当于const引用)。9.关键字const是什么含意?答:1.const修饰基本类型,

4、比如int类型为常量。2.const修饰指针分为两种情况:指针常量或者常量指针。3.const修饰类的成员函数,则在此函数中无法修改类中数据成员的值。?4.const修饰返回值意味着返回值不可被改变5.const修饰函数参数,意味着函数参数不能被有意或者无意修改。10.dowhile和whiledo有什么区别?答:dowhile先执行循环再判断条件,whiledo先进行判断再执行循环。11.语句for(;1;)有什么问题?它是什么意思?他的意思是循环条件永远为真,不停地进行循环操作,除非循环体中有强制退出循环的语句才能终止循环,其实功能就相当于while(1)答:无限循环12.如何引用一个已经

5、定义过的全局变量?答:题目说的有点不太清楚,如果是引用其它文件中定义的全局变量用extern,如果是在本文件中引用的话用作用域运算符: 是在c+中的13.switch()结构中条件表达式的类型可以是什么类型?答:整型,字符型,常量,枚举类型14.h头文件中的ifndef/define/endif的作用?答:预编译命令,一般是用来防止头文件多重包含 结构?二、 问答题。 ( 共63题 ,共0分,每题0分 )1.关键字static的作用是什么?第一:隐藏。static全局变量只在本文件中可访问,其它文件无法访问。第二:持久保存变量的内容。static变量一经初始化便到程序运行结束后才会被释放。第三

6、:默认初始化为0.static变量会被编译器默认初始化为02.int a3;a0=0; a1=1; a2=2;int *p, *q;p=a;q=&a2;则aq-p=a2这段程序执行完之后数组中元素的值分别是什么?q-p=2答:0, 1, 23.根据a的值,完成b的初始化,并将b的值返回int func(float a) int b; switch(a) case 1: 30; break; case 2: 20; case 3: 16; default: 0 return b;此程序段有什么错误,如果有请指出答:1.switch只能用整型或者字符型或者枚举类型,float类型不正确。2.cas

7、e后面没有加break4.写出程序运行结果int sum(int a)auto int c=0;static int b=3; c+=1;b+=2;return(a+b+c);void main()int I;int a=2;for(I=0;I5;I+)printf(%d, sum(a);答:8,10,12,14,165.写出输出结果void g(int*);int main()int line10,i;int *p=line;for (i=0;i10;i+)*p=i;g(&p);for(i=0;ij+)&(i+=j)i+=j;答:511.写一个“标准”宏1输入两个参数,输出较小的一个2表明1

8、年中有多少秒(忽略闰年问题)答:此题的考察点是防止数据太大int类型表示不了,现在不用担心(int占4个字节)1.#define Min(a, b) (a) = (b) ? (a): (b)2.#define SECONDS_PER_YEAR (60 * 60 * 24 * 365UL 考察内容:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 意识到这个表达式将使一个16位机的整型数溢出-因此要用到长整型符号L,告诉编译器这个常数是的长整型数。3). 如果你在你的表达式中用到UL(表示无符号长整型),那么你有了一个好的起点。12.什么是预编译,何时需要预

9、编译?答:预编译又称为预处理,主要做一些文本的替换工作。比如#include包含文件代码,#define宏定义的替换,条件编译等等。预编译代码有助于在开发周期中缩短编译时间,特别是在以下的情况中:1.总是使用不经常改动的大型代码体2.程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下可以将所有包含文件编译为一个预编译头。用于创建预编译头文件的第一次编译所花费的时间比后面的编译稍长一些,通过包含预编译代码可以加快后面的编译速度。13.阐述堆和栈的区别答:1.申请方式。栈由编译器自动申请空间,堆需要程序员手动申请空间。2.申请后的系统响应。栈的剩余空间大于所申请的空

10、间,系统为程序提供内存,否则退出。堆申请方式是链表式申请,遍历空闲内存链表,找到大于申请空间的内存,从空闲内存链表中删除,分配给程序。3.申请大小的限制。栈在windows下是向低地址扩展的数据结构,是一块连续的内存区域,大小是固定的。(一般是2m)堆是向高地址扩展的数据结构,是不连续的内存区域。4.申请效率,栈分配速度较快,堆分配速度较慢,容易产生内存碎片。还有其它的一些区别,课下大家自己去学习一下。14.简要描述c程序的内存分配答:C语言内存分配主要分为5块1.栈。存放局部变量,函数参数等。由编译器自动申请空间,自动释放。2.堆。由程序员手动申请、释放空间。3.常量存储区。一般是常量字符串

11、4.静态/全局区。存储的是静态变量或者全局变量。初始化后等到程序结束后内存才会被释放5.程序代码区。存放函数体的二进制代码。15.static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?答:1.static全局变量只能在本文件中访问,而全局变量可以通过extern在其它文件中访问2.static局部变量存储在全局/静态区中,一经初始化直到程序结束后才会被释放。普通的局部变量存储在栈中。3.static函数只能在本文件中访问,普通函数可以在其它文件中访问。16.局部变量能否和全局变量重名,如果可以,请说明原因?答:可以。

12、局部变量会屏蔽全局变量17.使用枚举的好处?答:代码的可读性就好一些18.全局变量和局部变量在内存中的存储是否有区别?如果有,是什么区别?答:全局变量存储在全局数据区,初始化后直到程序运行结束后才会释放内存。局部变量存储在栈上,作用域在其被定义的函数或者块中,出了这个作用域就会被释放。19.#include与#include file.h的区别?答:一般用来引用系统定义的头文件,“”一般用来引用自定义头文件。20.“引用”与指针的区别是什么?答:引用是变量的别名,指针保存的是变量的地址。也就是说引用是直接操作变量本身,而指针是间接操作变量。21.已知strcpy函数的原型是:char * st

13、rcpy(char * strDest,const char * strSrc);1.不调用库函数,实现strcpy函数。2.解释为什么要返回char *。答:1. char *strcpy(char *strDest, const char *strSrc) char *strDestCopy = strDest; if(strDest = NULL | strSrc = NULL) throw(invalid arguments); while (*strDestCopy+ = *strSrc+) != 0); return strDest;2.支持链式表达式22.判断一个字符串是不是回文

14、,当字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no。所谓回文即正向与反向的拼写都一样,例如:adgda。答:#include #include #define N 100char *judgeStrings(char *str);int main() char aN; printf(请输入要判断的回文字符串:); scanf(%s, a); printf(%sn, judgeStrings(a); return 0;char *judgeStrings(char *str) if(str = NULL) throw error: str is NULL; int len =

15、 strlen(str); for(int i=0; ilen/2; i+) if(stri != strlen - i - 1) return no; return yes!;23.递规反向输出字符串的例子,可谓是反序的经典例程,那么任意输入一字符串,利用递归将其反向输出.#include #define N 20void getReverseChar(char *str);int main() char aN; printf(请输入要反序的字符串:); scanf(%s, a); getReverseChar(a); printf(n); return 0;void getReverseC

16、har(char *str) if(*str = 0) return; else getReverseChar(str+1); printf(%c, *str); 24.用指针的方法,将字符串“ABCD1234efgh”前后对调显示#include #include int main() char a = ABCD1234efgh; char *p = a; int len = strlen(a); for(int i = 0; i len/2; i+) char temp = ai; ai = alen - i - 1; alen - i - 1 = temp; printf(%sn, a)

17、; return 0;25.两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串答:#include #include #define N 100int main() char sN = HelloWorld; char *t = welcome to Beijing; int sLen = strlen(s); int tLen = strlen(t); int pos; printf(请输入要插入的位置:); scanf(%d, &pos); if(pos sLen | pos 0) return 0; /先将s字符数组后面的字符放到后面(采用前插法,从0开始)

18、 for (int i = 0; i sLen - pos; i+) spos + tLen + i = spos + i; /再放心的插入t字符数组 for (int i = 0; i tLen; i+) spos+i = ti; ssLen + tLen = 0; printf(%sn, s); return 0;26.已知strcmp的原型是int strcmp(const char *str1, const char *str2),不调用库函数,实现strcmp函数答:#include #include #define N 100int strcmp(const char *str1,

19、 const char *str2);int main() char sN; char tN; printf(请输入要比较的一个字符串:); scanf(%s, s); printf(请输入要比较的另一个字符串:); scanf(%s, t); printf(%dn, strcmp1(s, t); return 0;int strcmp(const char *str1, const char *str2) int len1 = strlen(str1); int len2 = strlen(str2); int maxLen = len1 len2 ? len1 : len2; for (i

20、nt i = 0; i str2i) return 1; else if(str1i str2i) return -1; return 0;27.找出错误#include“string.h”void main(void) char *src=hello,world;char *dest=NULL;dest=(char *)malloc(strlen(src);int len=strlen(str);char *d=dest;char *s=srclen;while(len-!=0)d+=s-;printf(%s,dest);答:1.string.h用括起来。2.dest = (char *)m

21、alloc(strlen(src);申请的空间不够,需要改为dest = (char *)malloc(strlen(src)+1);3.int len = strlen(str);改为int len = strlen(src);4.char *s = srclen;改为char *s = srclen -1;5.d+ = s-;改为 *d+ = *s-;6.需要在printf(“%s”, dest);上面加上一行代码:*d = 0;28.写出输出结果#include void foo(int m, int n) printf(m=%d, n=%dn, m, n);int main() int

22、 b = 3; foo(b+=3, +b); printf(b=%dn, b); return 0;答:此题考察的有一些难度,深入到了编译器级别。编译器实现的不一样,那么结果也是不一样的。在vc6.0下面,结果为:7 4 7 在vs2012结果为 7 7 7 。在xcode下面是 6 7 7.29.分析:int arr = 6,7,8,9,10;int *ptr = arr;*(ptr+)+=123;printf(“%d %d”, *ptr, *(+ptr);答:此题和上一题目类似,考察的是printf()函数的参数入栈顺序,从右往左的运算。所以结果为: 8 830.对下面程序进行分析,若有错

23、误,请写出一个正确的程序段void test2() char string10, str110; int i; for(i=0; i10; i+) str1i = a; strcpy( string, str1 );答:错误,主要是str110字符数组没哟0。所以应该如下修改:for(i=0; i 9; i+) stri = a;stri = 0;31.请问一下程序将输出什么结果?char *RetMemory(void) char p =“hellow world”; return p;void Test(void) char *str = NULL; str = RetMemory();

24、printf(str);答:此程序存在的问题是RetMemory(void)函数返回的是局部变量的地址,然后str指向这个地址,但是实际上这块地址已经让编译器给释放,编译器有可能把这块内存分配给其它的变量。所以如果内存没有被修改的话输出结果为hello world,如果被修改则输出结果未知。32.分析下面的程序:void GetMemory(char *p,int num) *p=(char *)malloc(num);int main() char *str=NULL; GetMemory(&str,100); strcpy(str,hello); free(str); if(str!=NULL) strcpy(str,world); printf(n str is %s,str); getchar();答:程序存在的问题是:GetMemory函数成功的为str分配了一块堆上的内存,但是后来被释放掉了。由于释放后没有将指针置为空,故str肯定不会为NULL。接着调用strcpy()函数为str指向的空间赋值。这是非法的,str指向的是已经被释放的内存,故拷贝会失败。33.下面的语句会出

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1