C_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个字节. 所以它的大小是20.data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.所以结果是 20 + 32 = 52。
标准c语言笔试题精华(完结版)
C试题讲解问答题部分:(面试中问到的内容)1.局部变量能否和全局变量重名?(华为)解析:能,局部会屏蔽全局。
要用全局变量,需要使用"::"局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。
对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量.比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
3.如何引用一个已经定义过的全局变量?(华为)解析:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。
4.static全局变量与普通的全局变量有什么区别?解析:1)全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式从以上分析可以看出,static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝5.进程和线程的差别(微软亚洲)解析:答:线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销6.用宏定义写出swap(x,y)(思科)解析:#define swap(x,y)x=x+y;y=x - y;x=x - y7.什么是预编译,何时需要预编译:(思科)解析:就是指程序执行前的一些预处理工作,主要指#表示的.何时需要预编译?1)、总是使用不经常改动的大型代码体。
C_C语言笔试面试题目含答案
C语言试题一:单项选择题1.void Example(char acHello[]){printf("%d", sizeof(acHello));return;}void main(){char acHello[] = "hello";Example(acHello);return;}的输出是( )A 4B 5C 6 D不确定2.网络上传输的字节序默认是大字节的,如果主机是小字节序,在网络通信时则须进行字节序转换;如果主机是大字节序,为了程序的一致性及可移植性,最好也在程序中加上字节序转换的操作(空操作)。
( )A. 正确B.错误3. int *(*ptr)();则以下叙述中正确的是( )A) ptr是指向一维组数的指针变量B) ptr是指向int型数据的指针变量C) ptr是指向函数的指针,该函数返回一个int型数据D) ptr是指向函数的指针,该函数的返回值是指向int型数据的指针4.此函数实现把32位IP地址(网络序)以字符串的方式打印出来:char *IpAddr2Str(unsigned long ulIpAddr){char szIpAddr[32];unsigned long ulLocIpAddr = ntohl(ulIpAddr);//把网络序转话为主机序(void)VOS_sprintf(szIpAddr, "%d.%d.%d.%d", ulLocIpAddr >> 24,(ulLocIpAddr >> 16) & 0xff, (ulLocIpAddr >> 8) & 0xff, ulLocIpAddr & 0xff);return szIpAddr;}下面描述正确的是():A、数组szIpAddr空间不够;B、函数返回局部数组szIpAddr变量地址;C、输出的IP地址次序颠倒;5.#define OK 0#define ERR 1#define ERROR (-1)#define BUFFER_SIZE 256char *GetMemory(unsigned long ulSize){char *pcBuf = NULL;pcBuf = (char *)malloc(ulSize);if(NULL == pcBuf){return ERROR;}return pcBuf;}void Test(void){char *pszBuf = NULL;pszBuf = GetMemory(BUFFER_SIZE);if(NULL != pszBuf){strcpy(pszBuf, "Hello World!\r\n");printf(pszBuf);free(pszBuf);}return;}如下描述正确的是:A、pszBuf指向的内存不能超过255B、GetMemory函数的异常分支返回了-1,是一个非法地址C、GetMemory中异常分支没有释放空间;D、pcBuf为局部指针,指向的内存将在GetMemory被调用后释放6、#include "stdio.h"unsigned short *Sum(unsigned char a, unsigned char b){unsigned short s = 0;s = a + b;return &s;}int main(){unsigned short *p = NULL;unsigned char a = 1, b = 2;p = Sum(a, b);printf("%u+%u", a, b);printf("=%u\n", *p);return 0;}程序执行结果是()A.1+2=0B.1+2=3C.1+2=NULLD.不可预测7、设有如下定义:BOOL gStatusA = FALSE;BOOL gStatusB = TRUE;int gVarA = 100;int gVarB = 100;则执行main函数后gVarA和gVarB的值分别为( )BOOL CheckA(){if(gStatusA){gVarA++;}else{gVarA--;}return gStatusA;}BOOL CheckB(){if(gStatusB){gVarB++;}else{gVarB--;}return gStatusB;}int main(int argc, char* argv[]){if(CheckA() && CheckB() ){printf(“Status OK”);}return 0;}A, 99和100 B, 99和101 C 99和99 D 101和998.下面的代码中,函数Test执行完毕后,希望输出无符号长整型的1。
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)采用指针做为函数的参数虽然也能够达至与采用提及的效果,但是,在被调函数中同样必须给形参分配存储单元,且须要重复使用"*指针局部变量"的形式展开运算,这很难产生错误且程序的写作性极差;另一方面,在主调函数的调用点处,必须用变量的地址做为实参。
c c笔试题及答案
c c笔试题及答案C C语言是一种广泛应用于系统开发和嵌入式设备的程序设计语言。
在这篇文章中,我们将为大家提供一些C C笔试题及其答案,帮助大家更好地理解和掌握这门语言。
题目一:下面的代码段有什么问题,如何解决?```c#include <stdio.h>int main(){int num1 = 5;int num2;printf("请输入一个整数:");scanf("%d", &num2);int sum = num1 + num2;printf("两个整数的和为:%d\n", sum);return 0;}```答案一:这段代码有一个问题,即没有对输入的整数进行验证。
当我们输入非整数时,程序将会出现错误。
为了解决这个问题,我们可以使用条件语句来判断输入是否为整数,并进行相应的处理。
以下是修复后的代码:```c#include <stdio.h>int main(){int num1 = 5;int num2;printf("请输入一个整数:");if (scanf("%d", &num2) != 1){printf("输入错误,请重新输入一个整数。
\n");return 1;}int sum = num1 + num2;printf("两个整数的和为:%d\n", sum);return 0;}```题目二:请解释下面代码的输出结果,并给出原因。
```c#include <stdio.h>int main(){int x = 5;int y = x++;printf("x = %d\n", x);printf("y = %d\n", y);return 0;}```答案二:这段代码的输出结果为:```x = 6y = 5```原因是在表达式`int y = x++;`中,先将x的值赋给y,然后再对x进行自增操作。
c语言笔试题和答案
c语言笔试题和答案C语言是计算机编程领域中的基础语言之一,广泛应用于系统编程、嵌入式开发等领域。
以下是一套C语言的笔试题和答案,旨在帮助考生复习和测试自己的C语言知识。
C语言笔试题一、选择题(每题2分,共20分)1. 下列哪个选项是C语言中的合法变量名?A. 2variableB. variable-nameC. variable_nameD. variable-name22. C语言中,哪个关键字用于定义一个函数?A. defineB. functionC. voidD. int3. 在C语言中,以下哪个表达式的结果为真?A. 5 > 3 && 3 < 2B. 5 > 3 || 3 < 4C. 5 > 3 && 3 < 4D. 5 == 5 || 3 < 24. 下列哪个语句用于在C语言中进行循环控制?A. ifB. switchC. forD. while5. 在C语言中,数组的索引是从哪个数字开始的?A. 0B. 1C. -1D. 根据数组类型而定6. 下列哪个函数可以用于计算两个数的最大值?A. max()B. min()C. abs()D. pow()7. C语言中,哪个预处理指令用于文件包含?A. #includeB. #importC. #defineD. #require8. 下列哪个选项是C语言中的一个标准库函数?A. printf()B. print()C. display()D. show()9. 在C语言中,哪个关键字用于声明一个指针变量?A. varB. pointerC. ptrD. int*10. 下列哪个语句可以用于在C语言中定义一个结构体?A. structB. defineC. typeD. class二、简答题(每题5分,共30分)1. 解释C语言中数组和指针的区别。
2. 描述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语言笔试题目
以下是一些C语言笔试题目:
1. 什么是C语言?C语言有哪些特点?
2. C语言程序的基本结构是什么?
3. 什么是数据类型?C语言中有哪些常见的数据类型?
4. 什么是变量?变量在C语言中的作用是什么?
5. C语言中的运算符有哪些?它们的优先级和结合性是如何的?
6. 写出C语言中常用的控制结构,如if语句、for循环、while循环等。
7. 什么是函数?函数在C语言中的作用是什么?如何定义和调用函数?
8. 什么是数组?数组在C语言中的作用是什么?如何定义和初始化数组?
9. 什么是指针?指针在C语言中的作用是什么?如何定义和初始化指针?
10. 什么是结构体?结构体在C语言中的作用是什么?如何定义和初始化结构体?
11. C语言中如何进行文件操作,如文件的打开、读写和关闭等?
12. C语言中的内存管理是如何进行的?什么是动态内存分配和释放?
13. C语言中的位运算有哪些?它们的作用是什么?
14. C语言中的预处理器指令有哪些?它们的作用是什么?
15. C语言中的错误处理机制是如何的?如何进行错误处理?
以上是一些常见的C语言笔试题目,希望对你有所帮助。
c语言常见笔试题
C语言常见笔试题
以下是一些常见的C语言笔试题,这些题目涵盖了基本的语法、数据类型、流程控制等方面。
请注意,这只是一小部分可能出现在C 语言笔试中的题目,实际的笔试可能会根据岗位的不同涵盖更广泛的主题。
基本语法:
编写一个程序,输出"Hello,World!"。
变量与数据类型:
声明一个整数变量并初始化为10,输出该变量的值。
运算符:
编写一个程序,计算并输出两个整数的和、差、积、商和余数。
条件语句:
编写一个程序,输入一个整数,判断它是否是正数、负数还是零,并输出相应的提示信息。
循环结构:
使用循环结构输出1到10的所有偶数。
数组:
声明一个整数数组,存储5个成绩,并计算平均值。
字符串处理:
编写一个程序,输入一个字符串,然后输出字符串的长度。
函数:
编写一个函数,接受两个整数参数,返回它们的和。
指针:
声明一个整数变量,然后声明一个指向该变量的指针,并通过指针修改变量的值。
结构体:
声明一个表示学生的结构体,包括学生的姓名、学号和成绩,并输出这些信息。
文件操作:
编写一个程序,打开一个文件,读取文件中的内容并输出到屏幕上。
这些问题涵盖了C语言中的一些基本概念,包括语法、数据类型、流程控制、函数、指针等。
在准备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及最佳答案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 c 笔试试题及答案
c c 笔试试题及答案c c 笔试试题及答案1. 选择题:1) 下列哪个不是计算机科学中常用的数据结构?A. 数组B. 队列C. 链表D. 山脉2) 在C语言中,以下哪个选项用于定义常量?A. varB. letC. constD. def3) 以下哪个算法用于对数据进行排序?A. 哈希算法B. 深度优先搜索算法C. 广度优先搜索算法D. 快速排序算法4) 以下哪个不属于计算机网络中的应用层协议?A. HTTPB. FTPC. TCPD. DNS5) 在数据库中,以下哪个关键字用于查询数据?A. UPDATEB. DELETEC. SELECTD. INSERT2. 判断题:1) 在C++中,函数重载允许使用相同的函数名,但是参数列表必须不同。
( )2) HTML是一种编程语言。
( )3) 二叉搜索树中,左子树的值小于根节点,右子树的值大于根节点。
( )4) CSS用于描述网页的结构和布局。
( )5) Java是一种强类型语言,不允许隐式类型转换。
( )3. 填空题:1) 在计算机科学中,缩写ALU代表着____________。
2) 二进制数101011的十进制表示是______________。
3) CSS中,用于设置文本颜色的属性是______________。
4) 数据库中用于删除表的操作是______________。
5) 在Java中,用于创建对象的关键字是______________。
4. 简答题:1) 请简要解释什么是操作系统,并列举几种常见的操作系统类型。
2) 什么是前端开发,与后端开发有何区别?3) 数据库中索引的作用是什么?请举例说明。
4) 请解释什么是递归,并提供一个递归函数的示例。
5) 提供一个代码实例,说明如何使用for循环来计算1到10的阶乘。
5. 答案:1) D2) C3) D4) C5) C判断题:1) √2) ×3) √4) √5) √填空题:1) 算术逻辑单元2) 433) color4) DROP TABLE5) new简答题:1) 操作系统是位于硬件与用户之间的一个软件层,负责协调与管理计算机系统的各种资源。
c c 笔试试题及答案
c c 笔试试题及答案1. 选择题(每小题2分,共40分)1) 下列哪个选项不是计算机科学的基本原理?A. 算法B. 数据结构C. 程序设计D. 物理学2) 在C语言中,下列哪个选项不属于逻辑运算符?A. &&B. ||C. !D. ==3) 哪个存储器层次结构中存取速度最快?A. 寄存器B. 缓存C. 主存D. 辅助存储器4) 在面向对象编程中,继承关系中的"父类"和"子类"分别对应什么?A. 接口、实现类B. 派生类、基类C. 子类、父类D. 父类、子类5) 下列哪个排序算法的时间复杂度最好?A. 冒泡排序B. 插入排序C. 堆排序D. 快速排序2. 编程题(共40分)题目:编写一个Python程序,它接受用户输入的一个数字n,并计算出n的阶乘。
```pythondef factorial(n):if n == 0 or n == 1:return 1else:return n * factorial(n-1)n = int(input("请输入一个数字:"))result = factorial(n)print("{}的阶乘是:{}".format(n, result))```3. 简答题(每小题10分,共20分)题目:简述什么是机器学习,并举例说明。
机器学习是一种利用计算机技术和统计方法来使计算机能够从数据中自动学习并改善性能的方法。
它通过训练模型来对未知数据进行预测和决策。
机器学习可以分为监督学习和无监督学习两种类型。
举例说明:假设我们要训练一个垃圾邮件过滤器。
我们可以使用监督学习算法,提供一些已标记为垃圾邮件和非垃圾邮件的样本数据作为训练集,然后让算法学习识别垃圾邮件和非垃圾邮件的特征。
之后,当我们将新的邮件输入到模型中时,模型可以自动进行分类,将其标记为垃圾邮件或非垃圾邮件。
这就是机器学习在实际问题中的应用之一。
C和C经典笔试题及答案
C和C经典笔试题及答案C语言和C++语言是计算机科学中非常常见的编程语言,常被用于算法实现、系统开发以及游戏开发等方面。
下面是一些经典的C和C++笔试题及其答案,希望能对大家的学习和面试有所帮助。
题目一:交换两个变量的值请编写一个C函数,能够交换两个整型变量的值,并在调用函数之后打印交换后的结果。
```c#include <stdio.h>void swap(int* a, int* b) {int temp;temp = *a;*a = *b;*b = temp;}int main() {int x = 10;int y = 20;printf("交换前:x = %d, y = %d\n", x, y);swap(&x, &y);printf("交换后:x = %d, y = %d\n", x, y);return 0;}```题目二:查找数组中的最大值请编写一个C函数,接收一个整型数组和该数组的长度作为参数,返回数组中的最大值。
```c#include <stdio.h>int findMax(int arr[], int n) {int max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] > max) {max = arr[i];}}return max;}int main() {int arr[] = {1, 3, 5, 2, 4};int n = sizeof(arr) / sizeof(arr[0]);int maxValue = findMax(arr, n);printf("数组中的最大值为: %d\n", maxValue);return 0;}```题目三:字符串反转请编写一个C函数,接收一个字符串作为参数,将其反转并返回。
C语言笔试题
C语言笔试题C语言笔试题集锦1、编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的.,。
char * search(char *cpSource, char ch){char *cpT emp=NULL, *cpDest=NULL;int iTemp, iCount=0;while(*cpSource){if(*cpSource == ch){iTemp = 0;cpTemp = cpSource;while(*cpSource == ch)++iTemp, ++cpSource;if(iTemp > iCount)iCount = iTemp, cpDest = cpTemp;if(!*cpSource)break;}++cpSource;}return cpDest;}2、请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值。
int search(char *cpSource, int n, char ch){int i;for(i=0; i return i;}一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点,#includevoid foo(int m, int n){printf(“m=%d, n=%d\n”, m, n);}int main(){int b = 3;foo(b+=3, ++b);printf(“b=%d\n”, b);return 0;}输出:m=7,n=4,b=7(VC6.0)这种方式和编译器中得函数调用关系相关即先后入栈顺序。
不过不同编译器得处理不同。
也是因为C标准中对这种方式说明为未定义,所以各个编译器厂商都有自己得理解,所以最后产生得结果完全不同。
C常见笔试题及答案精编版
C常见笔试题及答案集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-C++面试题1#include“filename.h”和#include<filename.h>的区别答:对于#include<filename.h>编译器从标准库开始搜索filename.h对于#include“filename.h”编译器从用户工作路径开始搜索filename.h2头文件的作用是什么答:一、通过头文件来调用库功能。
在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。
用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。
编译器会从库中提取相应的代码。
二、头文件能加强类型安全检查。
如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则,能大大减轻程序员调试、改错的负担。
3C++函数中值的传递方式有哪几种答:C++函数的三种传递方式为:值传递、指针传递和引用传递。
4内存的分配方式有几种答:一、从静态存储区域分配。
内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。
例如全局变量。
二、在栈上创建。
在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。
栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
三、从堆上分配,亦称动态内存分配。
程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。
动态内存的生存期由我们决定,使用非常灵活,但问题也最多。
5实现双向链表删除一个节点P,在节点P后插入一个节点,写出这两个函数;答:双向链表删除一个节点Ptemplate<classtype>voidlist<type>::delnode(intp){intk=1;listnode<type>*ptr,*t;ptr=first;while(ptr->next!=NULL&&k!=p){ptr=ptr->next;k++;}t=ptr->next;cout<<"你已经将数据项"<<t->data<<"删除"<<endl;ptr->next=ptr->next->next;length--;deletet;}在节点P后插入一个节点:template<classtype>boollist<type>::insert(typet,intp) {listnode<type>*ptr;ptr=first;intk=1;while(ptr!=NULL&&k<p){ptr=ptr->next;k++;}if(ptr==NULL&&k!=p)returnfalse;else{listnode<type>*tp;tp=newlistnode<type>;tp->data=t;tp->next=ptr->next;ptr->next=tp;length++;returntrue;}}6写一个函数,将其中的\t都转换成4个空格。
C语言笔试题带答案8.doc
C语言笔试题带答案8.doc2021-09-2506:30:01阅读(82)1525人收藏本页标签:c语言面试题一、选择题((1)~(10)每小题2分,(11)~(50)每小题1分,共60分)以下各题a)、b)、c)、d)四个选项中,只有一个选项就是恰当的,恳请将恰当的挑选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)数据的存储结构就是指________。
a)存储在外存中的数据b)数据所占的存储空间量c)数据在计算机中的顺序存储方式d)数据的逻辑结构在计算机中的则表示答案:d评析:数据的逻辑结构在计算机存储空间中的存放形式形式称为数据的存储结构(也称数据的物理结构)。
(2)以下关于栈的叙述中错误的就是________。
a)栈是先进后出的线性表b)栈就可以顺序存储c)栈具有记忆作用d)对栈的填入与删掉操作方式中,不须要发生改变栈底指针答案:b评析:栈是一种特殊的线性表,又称先进后出表(filo―firstinlastout)。
(3)对于长度为n的线性表,在最坏情况下,以下各排序法所对应的比较次数中恰当的就是________。
a)冒泡排序为n2b)冒泡排序为nc)快速排序为nd)快速排序为n(n一1)/2答案:d评析:假设线性表的长度为n,则在最坏情况下,冒泡排序须要经过n/2遍的从前往后读取和n/2遍的从后往前读取,须要比较次数为n(n-1)/2。
快速排序法的最坏情况比较次数也就是n(n-1)/2。
(4)对长度为n的线性表进行顺序查找,在最坏情况下所需要的比较次数为________。
a)log2nb)n/2c)nd)n+l答案:c评析:顺序查找过程中,如果被查找的元素是线性表中的最后一个元素,或者元素不在线性表中,则需要与线性表中所有的元素进行比较。
对长度为n的线性表进行顺序查找,在最坏情况下需要比较n次。
(5)以下对于线性链表的叙述中恰当的就是________。
a)存储空间不一定是连续,且各元素的存储顺序是任意的b)存储空间不一定就是已连续,且前件元素一定存储在后件元素的前面c)存储空间必须连续,且前件元素一定存储在后件元素的前面d)存储空间必须已连续,且各元素的存储顺序就是任一的答案:a评析:在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.求下面函数的返回值(微软)int func(x){int countx = 0;while(x){countx ++;x = x&(x-1);}return countx;}假定x = 9999。
答案:8思路:将x转化为2进制,看含有的1的个数。
2. 什么是“引用”?申明和使用“引用”要注意哪些问题?答:引用就是某个目标变量的“别名”(alias),对引用的操作与对变量直接操作效果完全相同。
申明一个引用的时候,切记要对其进行初始化。
引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名的别名。
声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。
不能建立数组的引用。
3. 将“引用”作为函数参数有哪些特点?(1)传递引用给函数与传递指针的效果是一样的。
这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。
因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。
而引用更容易使用,更清晰。
4. 在什么时候需要使用“常引用”?如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。
常引用声明方式:const 类型标识符&引用名=目标变量名;例1int a ;const int &ra=a;ra=1; //错误a=1; //正确例2void bar(string & s);那么下面的表达式将是非法的:bar(foo( ));bar("hello world");原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。
因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。
引用型参数应该在能被定义为const的情况下,尽量定义为const。
5. 将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?格式:类型标识符&函数名(形参列表及类型说明){ //函数体}好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。
因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error!注意事项:(1)不能返回局部变量的引用。
这条可以参照Effective C++[1]的Item 31。
主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
(2)不能返回函数内部new分配的内存的引用。
这条可以参照Effective C++[1]的Item 31。
虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。
例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
(3)可以返回类成员的引用,但最好是const。
这条原则可以参照Effective C++[1]的Item 30。
主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。
如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。
(4)流操作符重载返回值申明为“引用”的作用:流操作符<<和>>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl;因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。
可选的其它方案包括:返回一个流对象和返回一个流对象指针。
但是对于返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连续的两个<<操作符实际上是针对不同对象的!这无法让人接受。
对于返回一个流指针则不能连续使用<<操作符。
因此,返回一个流对象引用是惟一选择。
这个唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因吧。
赋值操作符=。
这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。
因此引用成了这个操作符的惟一返回值选择。
例3#i nclude <iostream.h>int &put(int n);int vals[10];int error=-1;{put(0)=10; //以put(0)函数值作为左值,等价于vals[0]=10;put(9)=20; //以put(9)函数值作为左值,等价于vals[9]=20;cout<<vals[0];cout<<vals[9];}int &put(int n){if (n>=0 && n<=9 ) return vals[n];else { cout<<"subscript error"; return error; }}(5)在另外的一些操作符中,却千万不能返回引用:+-*/ 四则运算符。
它们不能返回引用,Effective C++[1]的Item23详细的讨论了这个问题。
主要原因是这四个操作符没有side effect,因此,它们必须构造一个对象作为返回值,可选的方案包括:返回一个对象、返回一个局部变量的引用,返回一个new分配的对象的引用、返回一个静态对象引用。
根据前面提到的引用作为返回值的三个规则,第2、3两个方案都被否决了。
静态对象的引用又因为((a+b) == (c+d))会永远为true而导致错误。
所以可选的只剩下返回一个对象了。
6. “引用”与多态的关系?引用是除指针外另一个可以产生多态效果的手段。
这意味着,一个基类的引用可以指向它的派生类实例。
例4Class A; Class B : Class A{...}; B b; A& ref = b;7. “引用”与指针的区别是什么?指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作。
程序中使用指针,程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
此外,就是上面提到的对函数传ref和pointer的区别。
8. 什么时候需要“引用”?流操作符<<和>>、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、其它情况都推荐使用引用。
以上2-8 参考:/wfwd/archive/2006/05/30/763551.aspx9. 结构与联合有何区别?1. 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。
2. 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。
10. 写出下面关于“联合”的题目的输出?a)#i nclude <stdio.h>union{int i;char x[2];}a;void main(){a.x[0] = 10;a.x[1] = 1;printf("%d",a.i);}答案:266 (低位低地址,高位高地址,内存占用情况是Ox010A)b)main(){union{ /*定义一个联合*/int i;struct{ /*在联合中定义一个结构*/char first;char second;}half;}number;number.i=0x4241; /*联合成员赋值*/printf("%c%c\n", number.half.first, mumber.half.second);number.half.first='a'; /*联合中结构成员赋值*/number.half.second='b';printf("%x\n", number.i);getch();}答案:AB (0x41对应'A',是低位;Ox42对应'B',是高位)6261 (number.i和number.half共用一块地址空间)11. 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。
不调用C++/C 的字符串库函数,请编写函数strcpy。
答案:char *strcpy(char *strDest, const char *strSrc){if ( strDest == NULL || strSrc == NULL)return NULL ;if ( strDest == strSrc)return strDest ;char *tempptr = strDest ;while( (*strDest++ = *strSrc++) != …\0‟);return tempptr ;}12. 已知String类定义如下:class String{public:String(const char *str = NULL); // 通用构造函数String(const String &another); // 拷贝构造函数~ String(); // 析构函数String & operater =(const String &rhs); // 赋值函数private:char *m_data; // 用于保存字符串};尝试写出类的成员函数实现。