C语言易错基础知识汇总 | 您所在的位置:网站首页 › 内存32767 › C语言易错基础知识汇总 |
以下整理自湖南大学考研真题。 2010年1、C语言源程序文件经过C编译程序编译连接之后生产一个后缀为“.exe”的文件
2、以下选项中不正确的整型常量是() A、12L B、-10 C、1,900 D、123U
3、表达式_____不符合C语言语法,若变量以正确定义并赋值 A、4&&3 B、+a C、a=b=5 D、int(3.14)
4、在字符数组str[]="hello\nworld\n"中,‘\n’为一个字符,该数组长度为13
5、结构体的赋值: struct node{ char s[10]; int k; }p[4];p[0]->k=2正确,p[0].s="abc"错误。
6、C语言中基本的数据类型有 整型、字符型、浮点型
7、C语言中普通整型变量的类型说明符为 int ,在内存中占 2 字节,有符号普通整型的数据范围是 -32768~32767(-2^15~2^15-1)
8、原码反码和补码:(8位,以-35为例) 原码最高位存放符号, 正数为0, 负数为1。 例:-35 --> 10100011 反码正数的反码是其本身; 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。 例: 10100011 --> 11011100 补码正数的补码就是其本身; 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。 (即在反码的基础上+1) 例:11011100 --> 11011101 注:考试给的答案是16位。
9、所谓“指针”就是 地址 ,“&”运算符的作用是 按位与或取地址 ,“*”运算符的作用是 乘积或指针
10、文件: 建立一个名为“myfile”的文件: FILE *fp; fp=fopen("myfile.txt", "w");要记住最后要关闭文件流: fclose(fp);
11、sizeof()计算当前字符数组总元素个数,包括'\0';strlen()不包括'\0': char s[9] = "computer"; printf("%d\n",sizeof(s)); printf("%d\n",strlen(s));12、从键盘读取字符串的方法: char str[100]; gets(str); puts(str);2011年 1、函数参数传递时传值与传地址的区别: 传值把实参的值赋给形参,对形参的值进行修改不会影响到实参。传地址传递的是地址,实参和形参指向同一对象,改变形参的值实参的值也会相应改变。
2、#include 和 #include "filename.h"的区别: 从标准头文件的位置引用头文件。(标准或系统提供的头文件)""引用的是用户程序目录中相对路径里面的头文件。(程序自己的头文件)
3、sizeof()的使用: 详细可参考:https://blog.csdn.net/u011677209/article/details/52837065 #include #include void fun(char str[100]){ printf("3,%d\n",sizeof(str)); } int main() { char str[]="Hello"; char *p=str; printf("1,%d\n",sizeof(str)); printf("2,%d\n",sizeof(p)); fun(str); return 0; }如上程序,在32位系统中,输出结果为: 1,6 2,4 3,4 (1)sizeof()的作用是返回一个对象或者类型所占的内存字节数,str数组中,加上结束符'\0'一共是6个字符,char类型占1个字节,因此共6字节。 (2)指针p记录了另一个对象str的地址,等于计算机内部地址总线的宽度。所以在32位计算机中 ,一个指针变量的返回值必定是4(注意结果是以字节为单位)。 (3)在fun()函数中,数组是“传址”的,只会把实参的地址传进去,而不会分配一个大小为100的数组,所以它实际上相当于是一个指针,因此结果也为4。
4、分析下面的程序: #include #include char *GetMemory(){ char p[]="hello world"; return p; } void Test(){ char *str=NULL; str=GetMemory(); printf(str); } int main() { Test(); return 0; }函数GetMemory()中返回的p是其局部变量,在该函数执行完“return p;”后p就被释放掉了,因此在Test()中str并没有获取到p的值,输出的是乱码。
5、有序数据序列的查找——二分法: #include //递归算法 int recurbinary(int *a, int key, int low, int high) { int mid; if(low > high) return -1; mid = (low + high)/2; if(a[mid] == key) return mid; else if(a[mid] > key) return recurbinary(a,key,low,mid -1); else return recurbinary(a,key,mid + 1,high); } //非递归算法 int binary( int *a, int key, int n ) { int left = 0, right = n - 1, mid = 0; mid = ( left + right ) / 2; while( left < right && a[mid] != key ) { if( a[mid] < key ) { left = mid + 1; } else if( a[mid] > key ) { right = mid; } mid = ( left + right ) / 2; } if( a[mid] == key ) return mid; return -1; } int main() { int a[] = {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677}; printf("%d\n",recurbinary(a,45,0,20)); printf("%d\n",binary(a,3,21)); return 0; }原理: (1)定义3个变量left, right, mid分别表示有序数组查找部分的起始位、结束位和中间位,若元素总个数为偶数,则中间位表示中间左边的那一位。 (2)判断mid和查找值key的大小关系,若keymid则在[mid+1,right]范围内查找。 |
CopyRight 2018-2019 实验室设备网 版权所有 |