C语言经典笔试题目
1.bool,float,指针变量 与 “零值” 比较的if语句
注意点:c语言中bool类型采用整数存储,0为false,非0均为true; float类型采用IEEE754标准,第一位符号位,中间8位阶数,最后23位为尾数(1.尾数),有精度问题。
bool flag 与零值比较:
标准答案:if(flag) if(!flag) ;
不良风格:if(flag == TRUE) if(flag ==1 ) if(flag == FALSE) if(flag == 0)
float f 与零值比较:
标准答案:
if( f < -0.000001 && f > 0.000001) // !=0
if( f > -0.000001 && f < 0.000001)// =0
错误写法:
if( f = 0 )
if( f = 0.0)
指针变量与零值比较:if(p == NULL) if(p != NULL)
2.数组int c[3][3]; 为什么c ,*c的值相等, (c+1), (*c+1)的值不等,c,*c,**c代表什么意思?
c是第一个元素的地址,*c是第一行元素的首地址,其实第一行元素的地址就是第一个元素的地址,**c是第一行一个元素。为什么c,*c的值相等?c:数组名;是一个二维指针,他的值就是数组的首地址,即第一行元素的首地址(等于*c),也等于第一行第一个元素的地址(&c[0][0]);可以说成是二维数组的行指针。
*c: 第一行元素的首地址;是一个一维指针,可以说成是二维数组的列指针。
**c:二维数组中的第一个元素的值;即:c[0][0]
所以:c和*c的值是相等的,但他们两者不能相互赋值(类型不同)
3.float a,b,c,问:等式(a+b)+c==(b+a)+c 和 (a+b)+c==(a+c)+b能否成立?
两者都不行。在比较float和double时,不能简单的比较。由于计算误差,相等的概率很低。应判断两数之间是否落在区间(-e,e)内。这个e应比浮点数的精度大一个数量级。
4.处理器标识#error的目的是什么?
主要考点:预处理指令。(预处理→编译→汇编→链接)
预处理指令在预处理阶段全部被替换,不带分号
参考答案:编译时输出一条错误信息,并中止继续编译。一般情况下和#if 一起使用
5.语句for( ; 1 ; )有什么问题?它是什么意思?
无限循环,等价于for(; ;) , while(1)
6.strcpy()和memcpy()的区别
字符串和内存的操作函数,都在string.h中,strcpy()在遇到'\0'就停止copy(包含'\0'),而memcpy()必须指定copy多少字节。
7.do...while 和 while...有什么区别?
前者至少执行一次,后者可能一次都不执行(直到型循环和当型循环)
8.怎样用C编写死循环
for(;;) while(1)
9.用变量a给出下面的定义
①一个有10个指针的数组,该指针是指向一个整型数的 // int* a[10]
②一个指向有10个整形数组的指针 // int (*a)[10]
③一个指向函数的指针,该函数有一个整形参数并返回整型值 // int (*a)(int)
④一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整形值 // int (*a[10])(int)
10.请问以下代码有什么问题:
char* s = "AAA";
printf("%s",s);
s[]='B';
printf("%s",s);
考点:字符串常量问题。C语言中双引号部门内容称为字符串常量,其值不允许被更改。本题中,s指向了AAA,用s[0]试图更改常量值会出错。
若用char s[] = "AAA",再利用s[0]='B'更改则不会报错
11.C和C++中struct有什么不同
c中的struct不可以含有成员函数,而c++中的struct可以;C++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private
12.const 与 #define的比较 ,const有什么优点?
const常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查,而对后者只进行字符替换,没有类型安全检查,并且在字符替换时可能产生意料不到的错误(边际效应)。
有些集成化的调试工具可以对const常量进行调试,但是不能对宏常量进行调试、
13.引用和指针的区别。
①引用被创建的同时必须被初始化,指针则可在任何时候被初始化
②不能有NULL引用,引用必须与合法的存储单元关联(指针则可以是NULL)
③一旦引用被初始化,就不能改变引用关系,指针则可以随时改变所指对象。
14.以下代码有什么问题?
void getmemory(char* p){
p = (char*)malloc();
strcpy(p,"hello world");
}
int main(){
char* str = NULL;
getmemory(str);
printf("%s\n",str);
free(str);
return ;
}
程序崩溃!getmemory中的malloc不能返回动态内存,free()对str操作很危险
15.以下代码产生什么结果?为什么?
char szstr[];
strcpy(szstr,"");
长度不一样 出现段错误,操作了不属于自己的空间
引申考点:"0123456789ABCDEF"[i] 这种写法也可以,得到指向第一个元素的地址值
16.数组和链表的区别
数组:数据顺序存储,固定大小;链表:数据可以随机存储,大小可动态改变
17.以下代码会出现什么问题?打印结果是多少?
void main(){
char aa[];
printf("%d",strlen(aa));
}//输出结果在不同编译器下结果会不一样
sizeof()返回值和是否初始化无关,但strlen()返回值与是否初始化有关,打印结果未知。
18.给定结构struct A,问sizeof(A)=?
struct A{
char t:;
char k:;
unsigned short i:;
unsigned long m;
};
答案 : 8 (考虑字节对齐)
19.给定结构struct name1,问sizeof(name1)=?
struct name1{
char str;
short x;
int num;
};
答案:8
20.int a,b,c 请写函数实现c = a+b,不可以改变数据类型,如将c改为long int,判断是否溢出?
bool add(int a,int b,int* c){
*c = a+b;
return (a> && b> && (*c < a || *c < b) || (a< && b< && (*c > a) || *c >b)));
}
C语言经典笔试题目的更多相关文章
- C语言经典面试题目(转的,不过写的的确好!)
第一部分:基本概念及其它问答题 1.关键字static的作用是什么? 这个简单的问题很少有人能回答完全.在C语言中,关键字static有三个明显的作用: 1). 在函数体,一个被声明为静态的变量在这一 ...
- 嵌入式软件工程师C语言经典笔试1
一. 预处理器(Preprocessor) 1.1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (60 * 6 ...
- 嵌入式软件工程师C语言经典笔试2
1. 使用宏定义swap函数,不使用中间变量 #define swap(x,y) {(x) = (x) + (y);(y) = (x) - (y);(x) = (x) - (y)} 2. 实现字符串的 ...
- 几道经典的SQL笔试题目
几道经典的SQL笔试题目(有答案) (1)表名:购物信息 购物人 商品名称 数量 A 甲 2 B 乙 ...
- C语言经典例题100
C语言经典例题100 来源 http://www.fishc.com 适合初学者 ----------------------------------------------------------- ...
- # C/C++的笔试题目
p,li { white-space: pre-wrap } # C/C++的笔试题目 + include<> 和include"" 的区别 + sizeof操作符与字 ...
- 33条C#、.Net经典面试题目及答案
33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如".NET中类和结构的区别"."ASP.NET页面之间传递值的几种方式? ...
- 33条C#、.Net经典面试题目及答案[zt]
33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如“.NET中类和结构的区别”.“ASP.NET页面之间传递值的几种方式?”,并简明扼要的给出了答案,希 ...
- C/C++笔试题目
1. C语言中无符号数与有符号数 unsigned ; ; printf( printf( ? 有符号数和无符号数在进行比较运算时(==,>=,<=,>,<),有符号数隐式的转 ...
随机推荐
- 【深入AQS原理】我画了35张图就是为了让你深入 AQS
申明 本文首发自公众号:程序员cxuan,此文章为本人投稿文章.已经和cxuan沟通,文章投递公众号,博客平台我自己发布可标记为原创. 此文章肝了很久,图片较多,希望大家喜欢. 另外,感兴趣的小伙伴可 ...
- 【linux题目】第二关
1.创建目录/data/oldboy,并且在该目录下创建文件oldboy.txt,然后在文件oldboy.txt里写入内容”inet addr:10.0.0.8 Bcast:10.0.0.255 Ma ...
- 再也不用c刷题了!!——c++刷题必备
致读者: 博主是一名数据科学与大数据专业大二的学生,真正的一个互联网萌新,写博客一方面是为了记录自己的学习历程,一方面是希望能够帮助到很多和自己一样处于困惑的读者.由于水平有限,博客中难免会有一些错误 ...
- idea jdk版本切换
为什么80%的码农都做不了架构师?>>> 打开file-peoject structure,或者 改完project后,点击models里面的sources 和dependenc ...
- Unity(GameObject)
####1. 这个方法用于发送一个数据到指定的方法中,第三个参数是是否强制接收 以下三种方法发送消息的形式,各有不同的效果,可以通过第一个参数指定要发送的方法名名,第二个是发送的参数值,第三个参数是是 ...
- C#时间与时间戳格式互相转化
C#时间格式转换为时间戳(互转) 时间戳定义为从格林威治时间 1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. using UnityEn ...
- KNN (K近邻算法) - 识别手写数字
KNN项目实战——手写数字识别 1. 介绍 k近邻法(k-nearest neighbor, k-NN)是1967年由Cover T和Hart P提出的一种基本分类与回归方法.它的工作原理是:存在一个 ...
- IDEA 打可执行jar包(maven项目)
1. Ctrl+Shift+Alt+S 打开 Project Structure 2.选择要执行的文件, 依次选择 项目, 方法所在文件(必须有main方法), 保存 3.如果之前路径下曾经打过 ...
- 最长递增子序列(Longest increasing subsequence)
问题定义: 给定一个长度为N的数组A,找出一个最长的单调递增子序列(不要求连续). 这道题共3种解法. 1. 动态规划 动态规划的核心是状态的定义和状态转移方程.定义lis(i),表示前i个数中以A[ ...
- CTF-Reverse-[GXYCTF2019]luck_guy
CTF-Reverse-[GXYCTF2019]luck_guy 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与 ...