C语言软件工程师笔试题精华

合集下载

C语言软件工程师笔试题大全

C语言软件工程师笔试题大全

C语言软件工程师笔试题大全1. 基础知识题1.1 变量和数据类型1.请描述int和float这两种数据类型分别在内存中所占的字节数以及其取值范围。

2.什么是变量,变量的命名规则有哪些限制?3.请简要介绍C语言中的整型常量、浮点型常量和字符常量。

1.2 运算符和表达式1.C语言中的逻辑运算符有哪些?它们的运算规则是什么?2.请解释C语言中的前缀递增和后缀递增运算符的区别。

3.下面的表达式的结果是多少?int x = 5; int y = x++;1.3 控制结构1.请解释C语言中的if-else语句的用法和语法。

2.请解释C语言中的for循环语句的用法和语法。

3.请解释C语言中的switch语句的用法和语法。

2. 中级知识题2.1 数组和字符串1.请解释C语言中的一维数组和多维数组的定义和使用方法。

2.请编写一个程序,实现对一个整型数组的冒泡排序。

3.请编写一个程序,实现两个字符串的拼接。

2.2 指针和内存管理1.请解释C语言中的指针的概念和作用,并说明指针的运算规则。

2.请编写一个程序,交换两个变量的值,使用指针作为函数的参数。

3.请解释C语言中的动态内存分配和释放的方法,并编写一个例子。

2.3 结构体和联合体1.请解释C语言中的结构体的概念和用法,并编写一个例子。

2.请解释C语言中的联合体的概念和用法,并编写一个例子。

3.请解释C语言中的位字段的概念和用法,并编写一个例子。

3. 高级知识题3.1 函数和库1.请解释C语言中的函数指针的概念和用法,并编写一个例子。

2.请解释C语言中的标准库和自定义库的区别,并说明如何使用自定义库。

3.请解释C语言中的递归函数的概念和用法,并编写一个例子。

3.2 文件操作1.请解释C语言中的文件指针的概念和用法,并说明如何打开、读取和关闭文件。

2.请编写一个程序,实现对一个文本文件的读取和统计某个字符出现的次数。

3.请编写一个程序,实现对一个文本文件的写入操作,将一个字符串写入文件。

c语言考试笔试题及答案详解

c语言考试笔试题及答案详解

c语言考试笔试题及答案详解一、选择题(每题2分,共20分)1. C语言中用于定义一个结构体的关键字是:A. structB. unionC. enumD. typedef答案:A2. 下列关于C语言中数组的描述,错误的是:A. 数组必须在编译时确定大小B. 数组可以是多维的C. 数组的元素必须是同一类型D. 数组可以动态分配答案:D3. 在C语言中,哪个函数用于将字符串复制到另一个字符串?A. strcpyB. strcatC. strncpyD. strcmp答案:A4. 下列哪个选项不是C语言中的运算符?A. %B. &&C. ::D. ||答案:C5. C语言中,用于定义一个函数的关键字是:A. functionB. defC. voidD. int答案:C6. 下列哪个选项不是C语言中的控制语句?A. ifB. switchC. caseD. for答案:C7. 在C语言中,用于声明一个指针的语法是:A. int *p;B. int p*;C. int *p = 0;D. int *p = p;答案:A8. C语言中,用于定义一个枚举类型的关键字是:A. enumB. typedefC. unionD. struct答案:A9. 下列关于C语言中指针的描述,错误的是:A. 指针可以指向任何类型的数据B. 指针可以作为函数的参数C. 指针可以作为函数的返回值D. 指针可以存储函数的地址答案:D10. C语言中,用于定义一个联合体的关键字是:A. structB. unionC. enumD. typedef答案:B二、填空题(每题3分,共15分)1. 在C语言中,使用________关键字可以定义一个变量的存储类型为静态存储。

答案:static2. C语言中,使用________运算符可以计算两个整数的和。

答案:+3. 在C语言中,使用________关键字可以定义一个函数的返回类型为无返回值。

c软件开发笔试题目

c软件开发笔试题目

c软件开发笔试题目C语言是一种底层的编程语言,广泛应用于软件开发和系统编程中。

C语言的掌握程度对于软件工程师而言是非常重要的。

为了评估应聘者对C语言的理解和编程能力,以下是一些C 语言的笔试题目。

1. 编写一个程序,计算斐波那契数列的第n项。

示例:输入: n = 6输出: 82. 编写一个程序,将字符串中的每个单词的首字母变为大写。

示例:输入: "hello world"输出: "Hello World"3. 编写一个程序,输入一个字符串并判断是否为回文字符串。

示例:输入: "racecar"输出: 是回文字符串4. 编写一个程序,输入一个整数并判断是否为素数。

示例:输出: 是素数5. 编写一个程序,输入一个字符串并统计其中每个字符出现的次数。

示例:输入: "hello"输出:h: 1e: 1l: 2o: 16. 编写一个程序,输入两个整数并计算它们的最大公约数。

示例:输入: 36, 48输出: 127. 编写一个程序,输入一个数组并逆序输出。

示例:输入: [1, 2, 3, 4, 5]输出: [5, 4, 3, 2, 1]8. 编写一个程序,实现冒泡排序算法。

输入: [5, 2, 1, 3, 4]输出: [1, 2, 3, 4, 5]9. 编写一个程序,实现选择排序算法。

示例:输入: [5, 2, 1, 3, 4]输出: [1, 2, 3, 4, 5]10. 编写一个程序,实现快速排序算法。

示例:输入: [5, 2, 1, 3, 4]输出: [1, 2, 3, 4, 5]以上是一些基础的C语言编程题目。

应聘者可以根据自己的理解和实际的编程能力,完成相应的代码实现。

除了正确的输出结果,代码的可读性、效率和健壮性也是评价标准。

在面试过程中,可以考察应聘者对于C语言的理解和应用能力,从而评估其在软件开发中的潜力和能力。

11. 编写一个程序,实现链表的基本操作,包括创建链表、插入节点、删除节点以及打印链表。

软件岗位笔试题1(C语言)

软件岗位笔试题1(C语言)

软件岗位笔试题1(C语言)一、单选题(每题2分,共40分)1、一个算法应该具有“确定性”等五个特性,下面对另外4个特性的描述中错误的是() [单选题] *A、有零个或多个输入B、有零个或多个输出(正确答案)C、有穷性D、可行性2、C语言中最简单的数据类型包括() [单选题] *A、整型、实型、逻辑型B、整型、实型、字符型(正确答案)C、整型、字符型、逻辑型D、整型、实型、逻辑型、字符型3、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是()[单选题] *A、 6.500000B、 6C、 5.500000D、 6.000000(正确答案)4、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是() [单选题] *A、 INPUT x、y、z;B、 scanf("%d%d%d",&x,&y,&z);(正确答案)C、 scanf("%d%d%d",x,y,z);D、 read("%d%d%d",&x,&y,&z);5、设 int x=1, y=1; 表达式(!x||y--)的值是()。

[单选题] *A、0B、1(正确答案)C、2D、-16、对两个字符数组a和b进行初始化char a[]="ABCDEF";charb[ ]={'A','B','C','D','E','F'}; 则()。

[单选题] *A、a与b数组完全相同B、a与b长度相同C、a和b中都存放字符串D、a数组比b数组长度长(正确答案)7、为了避免在嵌套的条件语句if――else中产生二义性,c语言规定:else子句总是与() [单选题] *A、缩排位置相同的ifB、其之前最近的if(正确答案)C、其之后最近的ifD、同一行上的if8、下面不正确的字符串常量是() [单选题] *A、 'abc'(正确答案)B、 "12'12"C、 "0"D、 " "9、以下错误的if语句是()。

C笔试题目及答案c语言笔试题目及答案

C笔试题目及答案c语言笔试题目及答案

C笔试题目及答案c语言笔试题目及答案c笔试题目及答案:c语言笔试题目及答案c笔试题目汇总篇11.谋下面函数的返回值(谷歌)intfunc(x){intcountx=0;while(x){countx++;x=x&(x-1);}returncountx;}假定x=。

答案:8思路:将x转变为2十进制,看看所含的1的个数。

2.什么是“引用”?申明和使用“引用”要注意哪些问题?请问:提及就是某个目标变量的“别称”(alias),对应用领域的操作方式与对变量轻易操作方式效果完全相同。

言明一个提及的时候,切勿必须对其展开初始化。

提及声明完后,相等于目标局部变量存有两个名称,即为该目标原名称和提及名,无法再把该提及名做为其他局部变量的别称。

声明一个提及,不是崭新定义了一个变量,它只则表示该提及名就是目标局部变量的一个别称,它本身不是一种数据类型,因此提及本身不占到存储单元,系统也不给提及分配存储单元。

无法创建数组的提及。

3.将“引用”作为函数参数有哪些特点?(1)传达提及给函数与传达指针的效果就是一样的。

这时,被调函数的形参就沦为原来主调函数中的实参变量或对象的一个别称去采用,所以在被调函数中对形参变量的操作方式就是对其适当的目标对象(在主调函数中)的操作方式。

(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。

因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。

(3)采用指针做为函数的参数虽然也能够达至与采用提及的效果,但是,在被调函数中同样必须给形参分配存储单元,且须要重复使用"*指针局部变量"的形式展开运算,这很难产生错误且程序的写作性极差;另一方面,在主调函数的调用点处,必须用变量的地址做为实参。

100条经典C语言笔试题目(全)

100条经典C语言笔试题目(全)

100条经典C语言笔试题目1、请填写bool , float, 指针变量与“零值”比较的if 语句。

提示:这里“零值”可以是0, 0.0 , FALSE 或者“空指针”。

例如int 变量n 与“零值”比较的if 语句为:if ( n == 0 )if ( n != 0 )以此类推。

(1)请写出bool flag 与“零值”比较的if 语句:【标准答案】if ( flag ) if ( !flag )(2)请写出float x 与“零值”比较的if 语句:【标准答案】const float EPSINON = 0.00001; if ((x >= - EPSINON) && (x <= EPSINON) 不可将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”此类形式。

(3)请写出char *p 与“零值”比较的if 语句【标准答案】if (p == NULL) if (p != NULL)2、以下为Linux下的32 位C程序,请计算sizeof 的值。

char str[] = “Hello” ; char *p = str ; int n = 10;请计算(1)sizeof (str ) = (2)sizeof ( p ) = (3)sizeof ( n ) =【标准答案】(1)6、(2)4、(3)4(4)void Func ( char str[100]) { ……;}请计算sizeof( str ) =(5)void *p = malloc( 100 ); 请计算sizeof ( p ) =【标准答案】(4)4、(5)43、long a=0x801010;a+5=?【标准答案】0x801010用二进制表示为:“1000 0000 0001 0000 0001 0000”,十进制的值为8392720,再加上5就是8392725。

4、用变量a给出下面的定义e) 一个有10个指针的数组,该指针是指向一个整型数的;f) 一个指向有10个整型数数组的指针;g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数;h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数;【标准答案】e)int * a[10]; f)int (*a)[10]g)int (*a)(int); h) int (*a[10])(int)5、设有以下说明和定义:typedef union {long i; int k[5]; char c;} DATE;struct data { int cat; DATE cow; double dog;} too;DATE max;则语句printf("%d",sizeof(struct date)+sizeof(max));的执行结果是:_____【标准答案】DATE是一个union, 变量公用空间. 里面最大的变量类型是int[5], 占用20个字节. 所以它的大小是20data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.所以结果是20 + 32 = 52.当然...在某些16位编辑器下, int可能是2字节,那么结果是int2 + DATE10 + double8 = 20 6、请问以下代码有什么问题:int main(){char a;char *str=&a;strcpy(str,"hello");printf(str);return 0;}【标准答案】没有为str分配内存空间,将会发生异常问题出在将一个字符串复制进一个字符变量指针所指地址。

C#软件工程师笔试题_笔试题目

C#软件工程师笔试题_笔试题目

C#软件工程师笔试题C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。

它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。

下面就由小编为大家介绍一下C#软件工程师笔试题的文章,欢迎阅读。

C#软件工程师笔试题篇11. 使用白盒测试方法时,确定测试数据应根据( )和指定的覆盖标准A. 程序的内部逻辑B. 程序的复杂结构C. 使用说明书D. 程序的功能2.在XML中,DTD文件如下配置其中的*号,表示的意思是( )A. EMAIL出现一次 ?B. EMAIL不出现C. EMAIL不出现或出现多次D. EMAIL不出现或出现一次3.在一个DTD声明中定义了一个元素为那么如下的XML文档片段中合法的是( )A. <联系人><姓名>saB. <联系人><姓名>saC. <联系人><姓名><姓>sa<名>saD. <联系人><姓名value = “sa”>4.在C#中,以下哪些变量的命名是错误的( )A. int i ?B. int No.1 ?C. int Int ?D. int @int5. 在.NET中,以下关于命名空间描述正确的是( )A. 命名空间不可以进行嵌套B. 在一个.CS文件中,只能存在一个命名空间C. 使用private修饰的命名空间,其内部的类也不许访问D. 命名空间可以使用别名,例如using C1=N16.关于C#中继承的概念,下列说法错误的是( )A. 构造函数和析构函数都不能被继承B. 除了构造析构函数,其他成员无论访问方式,都能被继承C. 派生类如果定义了与继承下来成员同名的新成员,可以覆盖已继承的成员D. 派生类不能重载基类的虚属性、虚方法7. 阅读以下C#代码,将在控制台窗口输出( )using System;public class Test{static void F{try{ G;}catch(Exception e){Console.WriteLine(“Exception in F:” + e.Message);e = new Ex ception(“F”);throw;}}static void G{ throw new Exception(“G”);}static void Main(string args){try{ F;}catch(Exception e){Console.WriteLine(“Exception in Main:” + e.Message);}}}A. Exception in F:GB. Exception in F:GException in Main:G Exception in Main:FC. Exception in F:FD. Exception in F:FException in Main:G Exception in Main:F8.阅读以下C#代码,将在控制台窗口输出( )class A{ public A{ Console.WriteLine(“A”);}}class B : A{ public B{ Console.WriteLine(“B”);}}class App{ static void Main(string args){ B b = new B;}}A. A ?B. B ?C. ABD. BA9. 关于以下C#代码,下列说法正确的是( )static void Main(string args){Console.WriteLine(“运行结果:{0}”,Console.ReadLine);}A. 在控制台窗口显示”运行结果:”B. 在控制台窗口显示”运行结果:{0}”C. 在控制台窗口显示”运行结果:,Console.ReadLine”D. 如果用户在控制台输入”A”,那么程序将在控制台显示”运行结果:A”10. 关于以下C#程序,下列说法正确的是( )public interface IAccount{void PostInterest;void DeductFees(int feeSchedule);}class BussinessAccount : IAccount{int A;public static void Main{BussinessAccount B = new BussinessAccount;Console.WriteLine(B.A);Console.ReadLine;}public void IAccount.PostInterest{A = A + 1;}public void IAccount.DeductFees(int feeSchedule){A = A + feeSchedule;}}A. 程序将出现编译错误,指示不能实现接口的类BussinessAccount中定义成员AB. 程序将出现编译错误,指示public关键字对接口项无效C. 程序编译正常,但出现运行时错误,指示变量A没有初始化D. 程序正常运行,输出为0C#软件工程师笔试题篇21.阅读下列代码,编译时会出错的是哪一行( )class Test{int x;static int y;void F{x = 1;? //1y = 1;? //2}static void G{x = 1;? //3y = 1;? //4}}A. (1) ?B. (2) ?C. (3) ?D. (4)2.Session对象的作用是存储特定用户的信息,Web应用程序会为每个会话建立一个Session对象,下列关于Session对象的方法与属性描述不正确的是( )A. Abandon方法可以结束当前的会话B. Clear方法清除会话状态中的所有信息,结束会话C. IsNewSession属性判定当前会话是否是一个新的会话D. Add方法向Session对象添加额外信息3.如果要制作一个网站流量的计数器应该使用以下哪个对象( )A. Application ?B. session ?C. Response ?D. Cookie4.在Web页面中使用RegularExpressionValidator控件用来检查一个控件输入信息格式是否规范,若要求输入的信息符合email的格式规范,其ValidationExpression属性应如何设置( )A. ValidationExpression = “.+@.+”B. ValidationExpression = “[a-Z].+@.+[0-9]{a,Z}”C. ValidationExpression = “[a-z][A-Z]{0-9}.@.[a-z][A-Z][0-9]”D. ValidationExpression = “[a-zA-Z0-9].@.[a-zA-Z0-9]”5. 除了C#语言能使用try/catch进行异常捕捉,也提供其他的方法处理错误,下面不是提供处理错误的方法是( )A. 在页面级错误事件中,处理单独页面上的错误事件B. 在会话级的错误事件中,处理会话中的错误事件C. 在应用程序级的错误事件中,处理应用程序中的错误事件D. 在应用程序配置文件中,为应用程序执行声明错误处理6.在页面中有如下的代码:void Button_Click(Object src,EventArgs e){Response.Write(“A”);}void Click(Object src,EventArgs e){Response.Write(“B”);}命令按钮的代码:则页面运行时,点Button按钮,将( )A. 页面输出一个字符A ?B. 页面输出一个字符BC. 页面输出字符ABD. 不会在页面输出任何字符7. 在一个开发的图书销售系统中,有一个Web窗体,窗体中有个名为DropDownListBookName的DropDownList控件,以及一个名为btn的Button控件,在btn控件的Click事件中有如下代码,点击Button按钮后,下列说法正确( )private void btn_Click(object sender,System EventArgs){string bookname = {“.NET基础:C#语言上”,”.NET基础:C#语言中”,”.NET基础:C#语言下”};ArrayList bookname Arr = new ArrayList;for(int i = 0;i < bookname.length;i++){booknameArr.Add(bookname[i].Replace(“中”,”下”));}this.DropDownListBook.DataSource = booknameArr;this.DropDownListBook.DataBind;}A. 在DropDownListBookName控件中Items集合中有两项,分别为”.NET基础:C#语言上、”.NET基础:C#语言下”B. 在DropDownListBookName控件中Items集合中有三项,分别为”.NET基础:C#语言上、”.NET基础:C#语言下、”.NET基础:C#语言下”C. 在DropDownListBookName控件中Items集合中有三项,分别为”.NET基础:C#语言上、”.NET基础:C#语言中、”.NET基础:C#语言下”D. 在DropDownListBookName控件中没有任何项8. 在.net中,Graphics对象的( )方法可以绘制直线A. DrawArc ?B. DrawLine ?C. DrawCurve ?D. DrawEllips9. 在命令行工具中执行如下语句的目的是( )WSDLA. 创建exam.asmx的WSDL文件B. 查看exam.asmx相关的WSDL文件C. 创建名为exam.cs的代理类D. 调用exam.asmx服务10. 有关托管代码描述正确的是( )A. 托管代码的执行对.NET的CLR没有依赖B. 托管代码的执行依赖.NET的CLRC. 托管代码组件调用前要先注册D. 托管代码是二进制文件C#软件工程师笔试题篇3设学生数据库中有3个关系学生关系 S(SNO,SNAME,AGE,SEX)学习关系SC(SNO,CNO,GRADE)课程关系 C(CNO,CNAME,TEACHER)以SQL Server 20xx为数据库,设计E-R图,并完成以下SQL语句:(1) 创建数据库中相关数据表(2) 编写SQL语句实现数据查询。

c语言经典笔试题(非常全)

c语言经典笔试题(非常全)

1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B) ((A) <= (B) (A) : (B))4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢?这个问题用几个解决方案。

我首选的方案是:while(1){}一些程序员更喜欢如下方案:for(;;){}第三个方案是用gotoLoop:...goto Loop;5. 用变量a给出下面的定义a) 一个整型数(An integer)b) 一个指向整型数的指针(A pointer to an integer)c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)d) 一个有10个整型数的数组(An array of 10 integers)e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数(An array of ten pointers to functions that take an integer argument and return an integer )答案是:a) int a; // An integerb) int *a; // A pointer to an integerc) int **a; // A pointer to a pointer to an integerd) int a[10]; // An array of 10 integerse) int *a[10]; // An array of 10 pointers to integersf) int (*a)[10]; // A pointer to an array of 10 integersg) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integerh) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer6. 关键字static的作用是什么?这个简单的问题很少有人能回答完全。

软件工程c语言试题及答案详解

软件工程c语言试题及答案详解

软件工程c语言试题及答案详解1. 题目一:编写一个C语言函数,实现字符串的反转。

答案详解:```c#include <stdio.h>#include <string.h>void reverseString(char *str) {int len = strlen(str);char temp;for (int i = 0; i < len / 2; i++) {temp = str[i];str[i] = str[len - i - 1];str[len - i - 1] = temp;}}int main() {char str[] = "Hello World";reverseString(str);printf("Reversed String: %s\n", str);return 0;}```2. 题目二:编写一个C语言程序,计算并输出100以内所有整数的平方。

答案详解:```c#include <stdio.h>int main() {for (int i = 1; i <= 100; i++) {printf("%d squared is %d\n", i, i * i);}return 0;}```3. 题目三:编写一个C语言函数,判断一个整数是否为素数。

答案详解:```c#include <stdio.h>#include <stdbool.h>bool isPrime(int num) {if (num <= 1) return false;for (int i = 2; i * i <= num; i++) {if (num % i == 0) return false;}return true;}int main() {int num = 29;if (isPrime(num)) {printf("%d is a prime number.\n", num);} else {printf("%d is not a prime number.\n", num); }return 0;}```4. 题目四:编写一个C语言程序,实现数组的排序。

c 笔试题及答案详解

c 笔试题及答案详解

c 笔试题及答案详解C笔试题及答案详解一、判断题1. c答案:正确解析:根据题目给出的信息,对于C语言开发环境搭建的目的是为了方便进行C语言的学习和开发工作,因此判断为正确。

2. c答案:错误解析:C语言是一种面向过程的程序设计语言,不具备垃圾回收机制,需要手动管理内存。

3. c答案:错误解析:C语言的注释分为单行注释和多行注释两种形式,而不是只有单行注释。

4. c答案:正确解析:C语言中的表达式可以包含常量、变量、运算符和函数调用等。

5. c答案:错误解析:C语言中的数据类型包括基本数据类型(如整型、字符型、浮点型等)和构造数据类型(如结构体、枚举等)。

二、选择题1. c答案:B解析:对于sizeof算符,它的作用是获取变量或类型的字节大小。

sizeof(char)返回值为1,因为char类型占用一个字节。

2. c答案:C解析:C语言中的switch语句只能用于排斥某个值的情况。

对于范围的判断需要借助if语句完成。

3. c答案:D解析:在C语言中,数组是一种顺序存储的数据结构,可以通过下标来访问数组中的元素。

4. c答案:A解析:对于逻辑运算符&&,它的左右两个操作数都为真时结果才为真,否则结果为假。

5. c答案:C解析:在C语言中,结构体是一种自定义的数据类型,可以包含多个不同类型的成员。

三、编程题代码如下:```c#include <stdio.h>void printStars(int n) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= i; j++) {printf("* ");}printf("\n");}}int main() {int n;printf("请输入要打印的行数:");scanf("%d", &n);printStars(n);return 0;}```解析:上述代码实现了一个功能,根据用户输入的行数,打印相应行数的星号图案。

c c 笔试题及答案详解

c c 笔试题及答案详解

c c 笔试题及答案详解C C笔试题及答案详解C C是一种通用的编程语言,广泛用于系统软件和应用程序开发。

在程序员面试和招聘过程中,C C笔试题是常见的一部分。

本文将详细解析几道经典的C C笔试题及其答案,帮助读者对C C语言的使用和理解有更深入的认识。

题目一:请编写一个C C程序,将一个整数数组中的元素按照从小到大的顺序进行排序。

答案详解:```c#include <stdio.h>int main() {int arr[] = {50, 20, 40, 10, 30};int n = sizeof(arr)/sizeof(arr[0]);int i, j, temp;for (i = 0; i < n-1; i++) {for (j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}printf("排序后的数组:");for(i = 0; i < n; i++) {printf("%d ", arr[i]);}return 0;}```题目二:请编写一个C C程序,计算并输出斐波那契数列的前20个数字。

答案详解:```c#include <stdio.h>int main() {int n = 20;int fib[n];int i;fib[0] = 0;fib[1] = 1;for(i = 2; i < n; i++) {fib[i] = fib[i-1] + fib[i-2];}printf("斐波那契数列的前20个数字:");for(i = 0; i < n; i++) {printf("%d ", fib[i]);}return 0;}```题目三:请编写一个C C程序,将一个字符串中的所有小写字母转换为大写字母。

C语言软件工程师笔试题精华

C语言软件工程师笔试题精华

网络安全应具有以下五个方面的特征:保密性:信息不泄露给非授权用户、实体或过程,或供其利用的特性。

完整性:数据未经授权不能进行改变的特性。

即信息在存储或传输过程中保持不被修改、不被破坏和丢失的特性。

可用性:可被授权实体访问并按需求使用的特性。

即当需要时能否存取所需的信息。

例如网络环境下拒绝服务、破坏网络和有关系统的正常运行等都属于对可用性的攻击;可控性:对信息的传播及内容具有控制能力。

可审查性:出现安全问题时提供依据与手段第一部分:基本概念及其它问答题1、关键字static的作用是什么?这个简单的问题很少有人能回答完全。

在C语言中,关键字static有三个明显的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。

它是一个本地的全局变量。

3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。

那就是,这个函数被限制在声明它的模块的本地范围内使用。

(本地化数据和代码范围的好处和重要性)。

2、“引用”与指针的区别是什么?答、1) 引用必须被初始化,指针不必。

2) 引用初始化以后不能被改变,指针可以改变所指的对象。

3) 不存在指向空值的引用,但是存在指向空值的指针。

指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。

程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。

流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。

3、.h头文件中的ifndef/define/endif 的作用?答:防止该头文件被重复引用。

4、#include 与#include “file.h”的区别?答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。

c语言经典笔试题(非常全)

c语言经典笔试题(非常全)

1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B) ((A) <= (B) (A) : (B))4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢这个问题用几个解决方案。

我首选的方案是:while(1){}一些程序员更喜欢如下方案:for(;;){}第三个方案是用 gotoLoop:...goto Loop;5. 用变量a给出下面的定义a) 一个整型数(An integer)b) 一个指向整型数的指针(A pointer to an integer)c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)d) 一个有10个整型数的数组(An array of 10 integers)e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )答案是:a) int a; 关键字static的作用是什么这个简单的问题很少有人能回答完全。

c语言经典笔试题(非常全)

c语言经典笔试题(非常全)

c语言经典笔试题(非常全)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL2. 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个。

#define MIN(A,B) ((A) <= (B) (A) : (B))4. 嵌入式系统中经常要用到无限循环,你怎么样用C编写死循环呢这个问题用几个解决方案。

我首选的方案是:while(1){}一些程序员更喜欢如下方案:for(;;){}第三个方案是用 gotoLoop:...goto Loop;5. 用变量a给出下面的定义a) 一个整型数(An integer)b) 一个指向整型数的指针(A pointer to an integer)c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)d) 一个有10个整型数的数组(An array of 10 integers)e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)f) 一个指向有10个整型数数组的指针(A pointer to an array of10 integers)g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )答案是:a) int a; 关键字static的作用是什么这个简单的问题很少有人能回答完全。

c语言笔试题目100及最佳答案

c语言笔试题目100及最佳答案

c语言笔试题目100及最佳答案1. 以下哪个关键字用于定义一个结构体?A. structB. unionC. enumD. typedef答案:A2. 在C语言中,以下哪种数据类型是用于存储字符的?A. intB. charC. floatD. double答案:B3. 以下哪个选项不是C语言中的控制语句?A. ifB. whileC. forD. switch答案:D4. 在C语言中,以下哪个运算符用于执行算术运算?A. %B. &&C. ==D. +答案:D5. 如何定义一个具有10个元素的整型数组?A. int array[10];B. int array(10);C. int array[10] = {0};D. int array = 10;答案:A6. 在C语言中,以下哪个函数用于将字符串转换为浮点数?A. atoiB. atofC. itoaD. sprintf答案:B7. 在C语言中,以下哪个函数用于计算数组中元素的数量?A. sizeofB. lengthC. countD. size答案:A8. 在C语言中,以下哪个关键字用于定义一个函数?A. functionB. defC. voidD. int答案:C9. 在C语言中,以下哪个关键字用于声明一个全局变量?A. externB. staticC. globalD. local答案:A10. 在C语言中,以下哪个函数用于打开一个文件?A. fopenB. openC. readD. write答案:A11. 在C语言中,以下哪个函数用于关闭一个文件?A. fcloseB. closeC. endD. finish答案:A12. 在C语言中,以下哪个函数用于读取一个字符?A. getcharB. getcC. fgetcD. scanf答案:A13. 在C语言中,以下哪个函数用于写入一个字符?A. putcharB. putcC. fputcD. printf答案:A14. 在C语言中,以下哪个函数用于格式化输出?A. printfB. sprintfC. fprintfD. all of the above答案:D15. 在C语言中,以下哪个函数用于格式化输入?A. scanfB. sscanfC. fscanfD. all of the above答案:D16. 在C语言中,以下哪个函数用于计算字符串的长度?A. strlenB. lengthC. sizeD. count答案:A17. 在C语言中,以下哪个函数用于连接两个字符串?A. strcatB. strncatC. strcpyD. strncpy答案:A18. 在C语言中,以下哪个函数用于复制一个字符串?A. strcatB. strncatC. strcpyD. strncpy答案:C19. 在C语言中,以下哪个函数用于比较两个字符串?A. strcmpB. strcpyC. strcatD. strncpy答案:A20. 在C语言中,以下哪个函数用于查找字符串中子串的位置?A. strstrB. strchrC. strrchrD. strcspn答案:A。

c语言笔试100经典题目

c语言笔试100经典题目

1、C语言程序的基本单位是____ A) 程序行B) 语句C) 函数D) 字符、C、12、C语言程序的三种基本结构是____ A、顺序结构,选择结构,循环结构B、递归结构,循环结构,转移结构C、嵌套结构,递归结构,顺序结构D、循环结构,转移结构,顺序结构、A、13、C语言规定,程序中各函数之间A) 既允许直接递归调用也允许间接递归调用B) 不允许直接递归调用也不允许间接递归调用C) 允许直接递归调用不允许间接递归调用D) 不允许直接递归调用允许间接递归调用、A、14、C语言中可处理的文件类型是( ) A) 文本文件和数据文件B)文本文件和二进制文件C)数据文件和二进制文件D)数据代码文件、B、15、C语言可执行程序的开始执行点是( ) A) 程序中第一条可执行语句B) 程序中第一个函数C) 程序中的main函数D) 包含文件中的第一个函数、C、16、C语言提供的合法的数据类型关键字是A)double B) short C) integer D) char、B、17、C语言中,运算对象必须是整型数的运算符是A) % B) \ C) %和\ D) * *、A、18、C语言中函数返回值的类型是由( )决定。

A) return语句中的表达式类型B) 调用函数的主调函数类型C) 调用函数时临时D) 定义函数时所指定的函数类型、D、19、C语言中数组名作为参数传递给函数,作为实在参数的数组名被处理为_____。

A、该数组的长度。

B、该数组的元素个数。

C、该数组中各元素的值。

D、该数组的首地址。

、D、110、C语言中数组下标的下限是________。

A、1 B、0 C、视具体情况D、无固定下限、B、111、C语言中提供的合法关键字是____ A、swith B、cher C、caseD、default、D、112、C语言中文件的存取方式是________。

A、顺序存取B、随机存取C、顺序存取、随机存取均可D、顺序存取、随机存取均不可、C、113、C语言中最简单的数据类型包括A) 整型、实型、逻辑型B) 整型、实型、字符型C) 整型、字符型、逻辑型D) 整型、实型、逻辑型、字符型、B、114、sizeof(float)是( ) A) 一种函数调用B) 一个不合法的表示形式C) 一个整型表达式D) 一个浮点表达式、C、115、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是A) input x,y,z; B) scanf("%d%d%d",&x,&y,&z);C) scanf("%d%d%d",x,y,z); D) read("%d%d%d",&x,&y,&z);、B、116、表达式:10!=9的值是A) true B) 非零值C) 0 D) 1、D、117、表示关系x<=y<=z的c语言表达式为A) (X<=Y)&&(Y<=Z)B) (X<=Y)AND(Y<=Z) C) (X<=Y<=Z) D) (X<=Y)&(Y<=Z)、A、118、程序片段:在TC20中, int i=65536; printf("%d\n",i);的输出结果是____ A) 65536 B) 0 C) 有语法错误,无输出结果D) -1、B、119、当调用函数时,实参是一个数组名,则向函数传送的是____A) 数组的长度B) 数组的首地址C) 数组每一个元素的地址D) 数组每个元素中的值、B、120、对嵌套子程序调用说法正确的是____。

C软件工程师入职笔试题及答案

C软件工程师入职笔试题及答案

一、简答题(共50分)1.你常用的主机、OS、编译工具和调试工具是什么。

如何查看系统进程信息,(10分)你常用的进程管理命令有哪些?(问题尽量基于你常用的Unix环境作答)。

答:我常用的是Sun主机,操作系统一般是Solaris8或Solaris10。

编译工具包括:g++,gcc,cc等。

调试工具包括:gdb。

(该项了解应聘者对编程环境的偏好,无标准答案。

)常用的进程管理命令是:查看:prstat -a 或top管理:pldd pid 显示链接到每个进程的动态链接库pstack pid 显示十六进制与符号堆跟踪信息fuser filespwdx pid 查看进程运行目录ptree pid 查看进程树信息2.C中的malloc和C++中的new有什么区别。

(10分)答:malloc和new有以下不同:(1)new、delete 是操作符,可以重载,只能在C++中使用。

(2)malloc、free是函数,可以覆盖,C、C++中都可以使用。

(3)new 可以调用对象的构造函数,对应的delete调用相应的析构函数。

(4)malloc仅仅分配内存,free仅仅回收内存,并不执行构造和析构函数。

(5)new、delete返回的是某种数据类型指针,malloc、free返回的是void指针。

注意:malloc申请的内存空间要用free释放,而new申请的内存空间要用delete 释放,不要混用。

因为两者实现的机理不同。

3、简述结构化的程序设计、面向对象的程序设计的基本思想。

(10分)答:结构化的程序设计将数据和对数据的操作分离,程序是由一个个的函数组成的,面向对象的程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,它能够较好地支持程序代码的复用。

4、一个oracle实例是由SGA和哪几个后台进程组成的?SGA有哪些组成部分及简述它们的作用?PGA是什么??(10分)答:后台进程:系统监控和进程监控进程(SMON和PMON)、数据库写进程(DBWR)、日志写进程(LGWR)、归档进程(ARCH)、检查点(CKPT);其它可选进程:调度进程(Dnnn)、恢复进程(RECO)、快照进程(SNPn)、锁进程(LCKn)、并行查询进程(Pnnn)。

c语言笔试题(答案)

c语言笔试题(答案)

c语⾔笔试题(答案)笔试题⼀、填空题(每个空4分,共28分)1)struct tagABC{char name[10];char sex;long sno;float score[4];}*pAbc;(四字节对齐)pAbc=NULL;那么,执⾏pAbc+=2;之后pAbc的值为(64 )2)如下代码,最终value的值是(8)int *p1,*p2;int value;p1=(int*)0×400;p2=(int*)0×408;value = p2-p1;3)如下代码,printf的结果为(2)#include〈stdio.h〉#include〈string.h〉void main(void){char acNew[20]= “\\0\0”;printf(“%d\n”,strlen(acNew));}4) 有如下程序段,运⾏该程序的输出结果是(33)main (){int y=3,x=3,z=1;printf(“%d%d\n”,(++x,y++),z+2);}5)设有:int a=1,b=2,c=3,d=4,m=2,n=2;执⾏(m=a>b)&&(n=c>d)后,n的值为(2)6)struct tagAAAUnsigned char ucPara0:2;Unsigned char ucState:6;Unsigned char ucTail:4;Unsigned char ucAvail;Unsigned char unTail2:4;Unsigned long ulData;}AAA_S问:AAA_S在字节对齐分别为1,4情况下,占⽤的空间⼤⼩分别是多少?( 9)(12 )⼆、选择题(每题2分,共34分)1)若有说明int(*p)[3];以下叙述正确的是( D )A:p是指针数组B:(*p)[3]和*p[3]等价C:p是指向⼀维数组中任何⼀个元素的指针D:p是指向含有3个整型元素的⼀维数组的指针2)以下关于单元测试的描述,哪些是对的?(D)A:⿊盒测试针对软件的功能,不考虑功能的实现细节;B:⽩盒测试针对源代码的测试,从程序功能的具体实现上找错;C:路径覆盖是⿊盒测试的⼀种⽅法,编写测试⽤例使程序的每条语句都能⾛到;D:条件覆盖是百盒测试的⼀种⽅法, 编写测试⽤例使程序的每个判断的各种情况都能到3)以下可以⽤于任务间通信的有(ABCD)A:共享内存 B:信号量C:消息队列和管道 D:socket调⽤4)有关结构,以下哪些描述是对的?(BC)A:为了测试⽅便,尽量把⼀个结构的功能设计得多⼀些B:不同结构间的关系不要过于复杂C:结构中的各元素应代表同⼀事务的不同侧⾯,⽽不应把描述没有关系或关系很弱的不同事务的元素放到同⼀结构中D:结构中元素的布局与排列顺序可以随意设计5)关于强制类型转化,下⾯说法正确的是(ABCD)A:当⽬的结构的空间⼤于源结构的空间时,要重点关注内存访问超过源结构范围的情形,可能越界;B:当⽬的结构的空间⼩于源结构的空间时,要重点关注对⽬的结构赋值不能完全覆盖源结构范围的情形,可能遗漏;C:结构体之间的强制类型转换时,其成员字段的数据类型的差异也是要格外⼩⼼的; D:与结构体之间的强制类型转换相⽐,基本数据结构的强制类型转换更容易出现上⾯描述的情况,使⽤的时候,⼀定要慎之⼜慎;6)正确的使⽤assert,软件系统不会对⼈为原因造成的错误进⾏处理。

c语言经典笔试题及答案详解

c语言经典笔试题及答案详解

c语言经典笔试题及答案详解1. 题目:以下代码的输出是什么?```c#include <stdio.h>int main() {int a = 1;int b = 2;int c = a + b;printf("%d", c);return 0;}```答案:输出是3。

2. 题目:如何使用指针交换两个变量的值?答案:可以使用以下代码:```c#include <stdio.h>void swap(int *x, int *y) {int temp = *x;*x = *y;*y = temp;}int main() {int a = 10;int b = 20;swap(&a, &b);printf("a = %d, b = %d\n", a, b); return 0;}```输出将是:a = 20, b = 10。

3. 题目:以下代码的输出是什么?```c#include <stdio.h>int main() {char *str = "Hello, World!";printf("%c", *(str + 7));return 0;}```答案:输出是W。

4. 题目:以下代码段的输出是什么?```c#include <stdio.h>int main() {int x = 10;if (x = 20)printf("x is 20\n");elseprintf("x is not 20\n");return 0;```答案:输出是x is 20。

注意这里if语句中使用了赋值运算符(=)而不是比较运算符(==),因此x被赋值为20,条件判断为真。

5. 题目:以下代码的输出是什么?```c#include <stdio.h>int main() {int a = 2;int b = 4;int c = a & b;printf("%d", c);return 0;}```答案:输出是0。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网络安全应具有以下五个方面的特征:保密性:信息不泄露给非授权用户、实体或过程,或供其利用的特性。

完整性:数据未经授权不能进行改变的特性。

即信息在存储或传输过程中保持不被修改、不被破坏和丢失的特性。

可用性:可被授权实体访问并按需求使用的特性。

即当需要时能否存取所需的信息。

例如网络环境下拒绝服务、破坏网络和有关系统的正常运行等都属于对可用性的攻击;可控性:对信息的传播及内容具有控制能力。

可审查性:出现安全问题时提供依据与手段第一部分:基本概念及其它问答题1、关键字static的作用是什么?这个简单的问题很少有人能回答完全。

在C语言中,关键字static有三个明显的作用:1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。

它是一个本地的全局变量。

3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。

那就是,这个函数被限制在声明它的模块的本地范围内使用。

(本地化数据和代码范围的好处和重要性)。

2、“引用”与指针的区别是什么?答、1) 引用必须被初始化,指针不必。

2) 引用初始化以后不能被改变,指针可以改变所指的对象。

3) 不存在指向空值的引用,但是存在指向空值的指针。

指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。

程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。

流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。

3、.h头文件中的ifndef/define/endif 的作用?答:防止该头文件被重复引用。

4、#include 与#include “file.h”的区别?答:前者是从Standard Library的路径寻找和引用file.h,而后者是从当前工作路径搜寻并引用file.h。

5、描述实时系统的基本特性答:在特定时间内完成特定的任务,实时性与可靠性。

6、全局变量和局部变量在内存中是否有区别?如果有,是什么区别?答:全局变量储存在静态数据区,局部变量在堆栈中。

7、什么是平衡二叉树?答:左右子树都是平衡二叉树且左右子树的深度差值的绝对值不大于1。

8、堆栈溢出一般是由什么原因导致的?答:1.没有回收垃圾资源2.层次太深的递归调用9、冒泡排序算法的时间复杂度是什么?答:O(n^2)10、什么函数不能声明为虚函数?答:constructor11、队列和栈有什么区别?答:队列先进先出,栈后进先出12、不能做switch()的参数类型答:switch的参数不能为实型。

13、局部变量能否和全局变量重名?答:能,局部会屏蔽全局。

要用全局变量,需要使用”::”局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。

对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内14、如何引用一个已经定义过的全局变量?答、可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

15、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?答、可以,在不同的C文件中以static形式来声明同名全局变量。

可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

16、语句for( ;1 ;)有什么问题?它是什么意思?答、和while(1)相同,无限循环。

17、do……while和while……do有什么区别?答、前一个循环一遍再判断,后一个判断以后再循环。

18、statac 全局变量、局部变量、函数与普通全局变量、局部变量、函数答、全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。

全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。

这两者在存储方式上并无不同。

这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。

而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。

由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

从以上分析可以看出,把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。

把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围。

static函数与普通函数作用域不同。

仅在本文件。

只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。

对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用; static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝19、程序的内存分配答:一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。

其操作方式类似于数据结构中的栈。

2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。

注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。

3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

程序结束后由系统释放。

4、文字常量区—常量字符串就是放在这里的。

程序结束后由系统释放。

5、程序代码区—存放函数体的二进制代码例子程序这是一个前辈写的,非常详细//main.cppint a=0; //全局初始化区char *p1; //全局未初始化区main(){intb;栈char s[]=”abc”; //栈char *p2; //栈char *p3=”123456″; //123456\0在常量区,p3在栈上。

static int c=0; //全局(静态)初始化区p1 = (char*)malloc(10);p2 = (char*)malloc(20); //分配得来得10和20字节的区域就在堆区。

strcpy(p1,”123456″); //123456\0放在常量区,编译器可能会将它与p3所向”123456″优化成一个地方。

}20、解释堆和栈的区别答:堆(heap)和栈(stack)的区别(1)申请方式stack:由系统自动分配。

例如,声明在函数中一个局部变量int b;系统自动在栈中为b开辟空间heap:需要程序员自己申请,并指明大小,在c中malloc函数如p1=(char*)malloc(10);在C++中用new运算符,如p2=(char*)malloc(10);但是注意p1、p2本身是在栈中的。

(2)申请后系统的响应栈:只要栈的剩余空间大于所申请空间,系统将为程序提供内存,否则将报异常提示栈溢出。

堆:首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序,另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的delete语句才能正确的释放本内存空间。

另外,由于找到的堆结点的大小不一定正好等于申请的大小,系统会自动的将多余的那部分重新放入空闲链表中。

(3)申请大小的限制栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。

这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。

因此,能从栈获得的空间较小。

堆:堆是向高地址扩展的数据结构,是不连续的内存区域。

这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。

堆的大小受限于计算机系统中有效的虚拟内存。

由此可见,堆获得的空间比较灵活,也比较大。

(4)申请效率的比较:栈:由系统自动分配,速度较快。

但程序员是无法控制的。

堆:是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便.另外,在WINDOWS下,最好的方式是用Virtual Alloc分配内存,他不是在堆,也不是在栈,而是直接在进程的地址空间中保留一块内存,虽然用起来最不方便。

但是速度快,也最灵活。

(5)堆和栈中的存储内容栈:在函数调用时,第一个进栈的是主函数中后的下一条指令(函数调用语句的下一条可执行语句)的地址,然后是函数的各个参数,在大多数的C编译器中,参数是由右往左入栈的,然后是函数中的局部变量。

注意静态变量是不入栈的。

当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。

堆:一般是在堆的头部用一个字节存放堆的大小。

堆中的具体内容由程序员安排。

(6)存取效率的比较char s1[]=”aaaaaaaaaaaaaaa”; aaaaaaaaaaa是在运行时刻赋值的;char *s2=”bbbbbbbbbbbbbbbbb”; 而bbbbbbbbbbb是在编译时就确定的;但是,在以后的存取中,在栈上的数组比指针所指向的字符串(例如堆)快。

比如:#includevoidmain(){char a=1;char c[]=”1234567890″;char *p=”1234567890″;a = c[1];a = p[1];return;}对应的汇编代码10:a=c[1];004010678A4DF1movcl,byteptr[ebp-0Fh]0040106A884DFCmovbyteptr[ebp-4],cl11:a=p[1];0040106D8B55ECmovedx,dwordptr[ebp-14h]004010708A4201moval,byteptr[edx+1]004010738845FCmovbyteptr[ebp-4],al第一种在读取时直接就把字符串中的元素读到寄存器cl中,而第二种则要先把指针值读到edx中,在根据edx读取字符,显然慢了。

相关文档
最新文档