C语言笔记
c语言基本概念
-
程序结构是三种: 顺序结构 、选择结构(分支结构)、循环结构
-
算法:可以没有输入,但是一定要有输出。
-
先编译,后链接,最后运行 .c—.obj—.exe
-
C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理
-
e前e后必有数,e后必为整数
-
赋值表达式:表达式数值是最左边的数值
-
强制类型转换 一定是 (int)a
-
大写字母和小写字母转换的方法: ‘A’+32=‘a’ 或则
-
一般转义字符:背诵 、 n、 ’、 ”、 。
-
四舍五入: y=(int)(x*100+0.5)/100.0 这个保留两位,对第三位四舍五入
-
!>&&>|| 优先的级别。 非>与>或
-
函数不可以嵌套定义。但是可以嵌套调用。
-
数组名不可以自加,他是地址常量名
-
算术表达式
-
c语言简单的数据类型:整形 实行 字符型
-
%两边必须为整型数据 A%B正负号看A
-
优先级:() ± 单目 * / % ± 双目
-
float小数部分为6位数
-
赋值 变量名=表达式
-
逗号表达式: 表达式1,2,3 最后的值为最后一个
-
数据的输出
-
%d十进制, %0 八进制 %x十六进制 %f小数
-
%md 一共m位,不够的左边补空格
-
%n1.n2 n1表示一共多少位(小数点也算一位),n2代表小数位
-
输出的过程 是右往左<-- eg: i=8; printf(“%d %dn”,i,++i); 9 9
-
指定位宽: % * .d ,m,f 表示把*替换成 m
-
数据的输入
-
scanf(“%d”,&a);
-
两个数值之间可以空格 制表符 回车
-
scanf %*d 表示跳过这个数的输入
-
关系运算
-
逻辑运算: &&与 || 或 ! 非
-
短路现象: A && B 如果A是假的 那就不执行B 全部真才是真
A || B 如果A是真的 那B不执行了 有一个真就是真 -
三目运算 表达式1 ?2:3 当1是真的执行2,假的执行3
-
循环结构
-
while循环 while(表达式) 循环体; 当表达式为真执行循环体 例如 while循环求1-100
#include
int main(){
int s=0,n=1;
while(n<=100) {
s+=n; n++;
}
printf(“%dn”,s);
} -
do while语句
do
循环体
while(条件);
// do while求斐波那契,
#include
int main(){
int t,t1=0,t2=1;
do{
t=t1+t2;
t1=t2;
t2=t;
}while(t2<=1000);
printf(“%dn”,t);
} -
for语句
for(表达式1;2;3) 执行顺序 先初始化1,然后判断条件2 再执行循环体,最后执行表达式3
for循环使用范围:知道要循环多少次
while循环:知道结束条件
-
break和continue
break:终止本层循环#include
#include int main(){ double a,x0,x1; scanf("%lf",&a); //2.计算x0和x1 x0=a/2; x1=(x0+a/x0)/2; //3.判断条件 while(fabs(x0-x1) >= 1e-5){ x0=x1; x1=(x0+a/x0)/2; } printf("%f的平方根是%fn",a,x1); return 0; } -
字符型
-
字符常量: 单引号 ‘A’ 只能是一个字符
-
r 是回车不换行,n是回车换行
-
字符串常量: 双引号 ”DSFSDF“ 结尾是
-
字符变量 char cj;
-
getchar(); 可以接收键盘上面额空格和回车键
-
库函数
-
头文件
输入输出 #include
数学 math.h
字符 ctype.h
字符串 string.h
内存 stdlib.h
-------------------------------------------------------‘
abs()、 sqrt()、fabs()、pow()、sin() 其中pow(a,b)是重点。23是由pow(2,3)表示的。 -
如果把自定义函数放在main后面,则需要在头文件下面加函数声明。
素数
//如果n能被2至n-1的任意一个数整除,则n不是素数 #includeint fun(int); int main(){ if(fun(9)){ printf("素数n"); }else printf("不是素数"); return 0; } int fun(int n){ int k,y; for(k=2;k<=n/2;k++){ if(n%k==0) { y=0; break; } else y=1; } return y; }
-
地址和指针
-
指针变量存放地址
-
指针赋空值
int *p; p=NULL; p=0; p=‘ ’; NULL的值为0 -
指针位移
J = *P+1 = K+1 ; 给变量加1
++*P <—> ++K
(*P)+1 <-----> K++;
*P++ <-----> *(P++) 原址int a[]={10,20,30,40,50},*p,i;
p=a;
当指针不移动情况下,数组任意一个元素如下表示:a[i] *(a+i) p[i] *(p+i)
移动情况下,数组名是地址常量,数组名不能自增减操作。指针的移动:p++ p–
for(p=a;p
p=a+1 等价于 p++ 指针 元素后移一位 变成a[1]
(*p)++ 是先取指针的内容然后内容自加1
*(p++) 是先取原址的内容,然后指针后移 -
二维数组
-
类型名 数组名【行】【列】 ,下标可以是整形常量表达式 行可以省略
-
字符串
-
每个字符串都 结束
//字符串的输出
1. 字符串常量: printf("%sn","l love you");
2. 字符数组名: char str[]="l love you"; printf("%sn",str);
3. 字符指针: char str[]="l love you" ,*p=str; printf("%sn",p);
//字符串的输入
1. 字符数组名: char str[10]; scanf("%s",str);
2. gets 输入: char str[15]; gets(str); //可以输入空格 puts(str); 自动换行
//字符串处理函数: #include
1. strcpy(s1,s2); 把s2赋值到s1里面 函数返回的是s1
2. strcat(s1,s2); 把s2的内容连接到s1后面并且自动覆盖s1的 ,返回s1的地址值
3. strlen(s1); 计算s1字符串的长度 不包含' '
4. strcmp(s1,s2); 字符串比较 当s1>s2 返回大于0的数,两个相等 返回0 s1
-
字符串求长度
#include
int length(char *s);
int main(){
char s1[100]=“”;
int len;
puts(“请输入一串字符串:”);
gets(s1);
len=length(s1);
printf(“字符串的长度为:%dn”,len);
return 0;
}
int length(char s){
int n=0;
while((s+n)!=‘ ’) n++;
return n;
}
-
字符串复制
#include
void _copyStr(char *s1,char *s2);
int main(){
char s1[]=“you are very good!”;
char s2[]=“”;
_copyStr(s1,s2);
printf(“复制之后的字符串为:%sn”,s2);
return 0;
}
void _copyStr(char *s1,char *s2){
while (*s1!=‘ ’){
*s2=*s1;
s1++;
s2++;
}
*s2=‘ ’; //在s2末尾添加结束标志
}
-
编译预处理
-
宏定义和调用 #define N 30
特点:原处替换,一改全改 可以嵌套定义
宏替换不考虑数据类型
-
文件包含、
include 包含头文件的目的是为了引用某些库函数
预处理是占用的编译时间,不是运行时间,
-
结构体和共用体
-
结构体
-
定义
#include
struct stu{
int age;
int sex;
char name;
}*p;
int main(){
struct stu x={1,‘s’,21.0};
p=&x;
printf(“%d”,x.age);
printf(“%d”,p->age);
return 0;
}
-
引用
变量名.成员名 指针->成员名
-
占用内存大小
注意结构体的对齐,既是每次都多加3
-
带参数的调用
#include
struct stu{
int age;
char sex;
float b;
};
void stu(struct stu s){
printf(“%d”,s.age);
}
void point(struct stu *p){
printf(“%d”,p->age);
}
int main(){
struct stu x={1,‘s’,21.0};
struct stu *p=&x;
stu(x);
point§;
return 0;
}
-
共用体
-
占内存大小
所有成员共用一个空间,大小由共用体内的最大字节 所决定
- typedef
功能是取别名, typedef 已有的数据类型 别名;
//typedef的意思是取别名,如果不加typedef则结构体后面的是变量
#include
typedef struct stu{
int age;
char sex;
float b;
}STU;
int main(){
STU s1,*P;
return 0;
}
- 内存分配stdlib.h
malloc(); free()
-
定义
#include
#include
int main(){
int *p=malloc(sizeof(int));
if(p==NULL) printf(“内存分配失败n”);
if(p!=NULL) printf(“内存分配成功n”);
printf(“%d”,p);
free§;
return 0;
}
-
单链表
-
创建



