c语言最基础知识点整理
1.数据类型
int,long,char,double,float,unsigned,long double
1.实型 小数形式和指数形式 小数型数必须有小数点,指数形式e/E后面必须是整数
2.若没初始化则给一个随机数
3.注释: /* .... ... */ // 前者可多行,后者只可一行
4.变量=变量=...=表达式
2.算数运算和表达式
- * / % = + - ++ -- define const () 数学函数
1.除法:整/整=整,浮/浮=浮,浮/整=浮
2.取余运算仅限两个整数之间
3.c语言没有幂运算符
4.++ -- 注意是前缀还是后缀
5.#define xxx 1234 定义宏常量,不是语句是一种预处理命令
6.const常量,声明为const常量后不可更改其值
7.自动转换顺序:long double>double>float>long>int>short>char 取值范围小的赋值给大的是安全的,反之不然。不同数据类型运算结果是运算类型取值较大的那个
8.强制转换:(类型)表达式 注意:未改变表达式的值
9.
| sqrt(x) | 计算平方根 |
| fabs(x) | 计算绝对值 |
| log(x) | 计算lnx的值 |
| log10(x) | 计算lgx的值 |
| exp(x) | 计算e的x次方 |
| pow(x,y) | 计算x的y次方 |
| sin(x) | 计算sinx的值,x的值为弧度值不为角度值 |
| cos(x) | 计算cosx的值,x的值为弧度值不为角度值 |
3.输出输入
转义字符 getchar() putchar() printf() scanf()
1.
| 字符 | 含义 |
| '\n' | 换行 |
| '\0' | 空字符,通常做字符串结束标志 |
| '\t' | 制表符 |
| ' \" ' | 一个双引号 |
| ' \' ' | 一个单引号 |
| '\ddd' | 1到3位8进制ASCII码值所代表的字符,‘\101’->65->A |
| '\\' | 一个反斜线 |
| '\xhh' | 1到2位16进制ASCII码值所代表的字符 |
2.字符的输入输出,getchar()回车也能识别
char ch;
ch=getchar();
putchar(ch);
3.%d,%c,%c,%f,%s,%%(输出%号)
| 符号 | 输出用法 | 输入用法 |
| l | 用于输出long 型数据 | 用于输入long型数据,用于输入double型数据 |
| L | 用于输出long double型数据 | 用于输入long double型数据 |
| h | 用于输出short型数据 | 用于输入short型数据 |
| m | 正数向右对齐,负数向左对齐,多余位补空格,若前写0,则补0.当输出实际宽度大于m,则按实际宽度输出。 | 系统自动按此宽度截取所需数据 |
| .n | 对于浮点数,指定输出的浮点数的小数位。对于字符串,用于指定从字符串左侧开始截取的子串字符个数 | 没有精度修饰符 |
| * | %*2d,丢掉2个宽度 | 对应的输入项在读入后不赋给相应的变量 |
4.scanf("%d%c",&a,&b);若%c前有空格,%c接受第一个非空格字符。
4.控制结构
关系运算符 逻辑运算符 if switch ?: for while do-while
1.==与!=比较级低于其他比较运算符
2.非0值为真,0值为假
3. ? : 优先级倒数第三
4.若没有break语句,从相应的case开始执行,一直执行到}结束。
switch(a)
{case 1: a++;case 2: a--;break;default:a+=a;
}
5.!逻辑非,优先级最高;&&逻辑与,优先级较高;||逻辑或,优先级较低
6.break;——跳出循环 continue;——结束本次循环
5.函数
标准库函数 自定义函数 变量作用域 变量存储类型
1.自定义函数:函数声明一定在其被调用之前,函数声明不包括函数体。 函数返回值只有一个,但return语句可以有很多个。
2.形参和实参占用不同的空间
3.递归函数体中,必须含有if-else结构
4.变量有全局变量和局部变量,局部变量只在定义所在的花括号里有用。
5.数据类型前未定义变量存储类型时,自动缺省为auto。static定义的变量与程序共存亡。
6.数组
一维数组 二维数组 向函数传递数组 排序查找
1.数据类型 数组名[常量表达式],常量表达式:数组元素的个数(数组的大小最好用宏定义,以适应未来可能的变化)
2.类型 数组名[行][列] 二维数组的列永远不可剩
3.用数组名做参数时,实参与形参共享空间,可以在函数中调用修改实参
4.一般函数定义形式:类型 函数名(int 数组名[],int n)n为调用时需要的元素个数
5.交换法排序 当前个与后面的比
for(i=0;i<n-1;i++)
{for(j=i+1;j<n;j++){if(a[j]>a[i]){c=a[i];a[i]=a[j];a[j]=c;}}
}
6.冒泡法排序 两个交换将大的排到最后
for(j=0;j<n-1;j++)
{for(i=0;i<n-1-j;i++){if(a[i]>a[i+1]){c=a[i];a[i]=a[i+1];a[i+1]=c;}}
}
7.选择法排序 找到最大的前排
for(i=0;i<n-1;i++)
{k=i;for(j=i+1;j<n;j++){if(a[j]>a[k])k=j;}if(k!=i){c=a[k];a[k]=a[i];a[i]=c;}
}
8.折半查找
int low=0,high=n-1,mid;
while(low<=high)
{mid=(high+low)/2;if(x>num[mid])low=mid+1;else if(x<num[mid])high=mid-1;elsereturn mid;
}
7.指针
指针定义 指针做参数 字符串 字符指针 字符串的访问 字符串输入输出 字符串处理函数
1.类型关键字 *指针变量名 int *p;p=&a;*p=1;
2.只要指明要访问的变量的内存地址就可以修改(读写) 在任何都必须知道指针的指向内容,指针只有在真正指向了一块有意义的内存后,才能访问它的内存
3.指针做参数,直接修改了地址中的值,传的是地址
4.字符串通过字符数组实现,字符串的结束标志'\0'也占一个字节的内存,但它不计入字符串的实际长度,只计入数组的长度。注意:如果没有'\0',那么数组就不代表一个字符串。
5.字符串常量本身代表的就是存放它的常量存储区的首地址,是一个地址常量。char *p="hello";p不能修改字符串常量,它是只读的。 数组名也是一个地址常量,其值不可被修改
6.scanf("%s",str); 读入一个字符串,直到遇空白字符为止. printf("%s",str);直到遇到字符串结束标志为止
7.gets,puts,基本不再用
8.
| 函数功能 | 一般形式 | 功能描述及其说明 |
| 求字符串长度 | strlen(str); | 实际长度 |
| 字符串复制 | strcpy(str1,str2); | 2复制到1,会覆盖掉从复制到的位置到最后原来的内容 |
| 字符串比较 | strcmp(str1,str2) | 1>2时,返回值大于0;1<2时,返回值小于0;相等时等于0 |
| 字符串连接 | strcat(str1,str2) | 连接到1的末尾,1的结束符被覆盖掉了,返回值为1的首地址 |
8.指针和数组及其结构体
指针与一维数组的关系 结构体
1.c语言中的数组名有特殊的含义,它代表存放数组元素的连续存储空间的首地址,即指向数组中第一个元素的指针常量。
2.地址和值的不同表示:int *pa;pa=a;地址:&a[i],&pa[i],a+i;pa+i 值:a[i],pa[i],*(a+i),*(pa+i)
3.区别p+1,p++,p++改变了指针的指向,p+1没有改变指针指向
4.结构体定义 结构体相当于一个数据类型
typedef struct student
{long id;int age;char name[10];
}stu;
5.c语言允许具有相同结构体的变量进行整体赋值
6.引用:变量名.id; stu *p; p->id;(*p).id;