【无标题】

C语言笔记

c语言基本概念

  1. 程序结构是三种: 顺序结构 、选择结构(分支结构)、循环结构

  2. 算法:可以没有输入,但是一定要有输出。

  3. 先编译,后链接,最后运行 .c—.obj—.exe

  4. C语言只有八、十、十六进制,没有二进制。但是运行时候,所有的进制都要转换成二进制来进行处理

  5. e前e后必有数,e后必为整数

  6. 赋值表达式:表达式数值是最左边的数值

  7. 强制类型转换 一定是 (int)a

  8. 大写字母和小写字母转换的方法: ‘A’+32=‘a’ 或则

  9. 一般转义字符:背诵\0、 \n、 \’、 \”、 \。

  10. 四舍五入: y=(int)(x*100+0.5)/100.0 这个保留两位,对第三位四舍五入

  11. !>&&>|| 优先的级别。 非>与>或

  12. 函数不可以嵌套定义。但是可以嵌套调用。

  13. 数组名不可以自加,他是地址常量名

  14. 算术表达式

  15. c语言简单的数据类型:整形 实行 字符型

  16. %两边必须为整型数据 A%B正负号看A

  17. 优先级:() ± 单目 * / % ± 双目

  18. float小数部分为6位数

  19. 赋值 变量名=表达式

  20. 逗号表达式: 表达式1,2,3 最后的值为最后一个

  21. 数据的输出

  22. %d十进制, %0 八进制 %x十六进制 %f小数

  23. %md 一共m位,不够的左边补空格

  24. %n1.n2 n1表示一共多少位(小数点也算一位),n2代表小数位

  25. 输出的过程 是右往左<-- eg: i=8; printf(“%d %d\n”,i,++i); 9 9

  26. 指定位宽: % * .d ,m,f 表示把*替换成 m

  27. 数据的输入

  28. scanf(“%d”,&a);

  29. 两个数值之间可以空格 制表符 回车

  30. scanf %*d 表示跳过这个数的输入

  31. 关系运算

  1. 逻辑运算: &&与 || 或 ! 非

  2. 短路现象: A && B 如果A是假的 那就不执行B 全部真才是真
    A || B 如果A是真的 那B不执行了 有一个真就是真

  3. 三目运算 表达式1 ?2:3 当1是真的执行2,假的执行3

  4. 循环结构

  5. while循环 while(表达式) 循环体; 当表达式为真执行循环体 例如 while循环求1-100

    #include<stdio.h>
    int main(){
    int s=0,n=1;
    while(n<=100) {
    s+=n; n++;
    }
    printf(“%d\n”,s);
    }

  6. do while语句

    do
    循环体
    while(条件);
    // do while求斐波那契,
    #include<stdio.h>
    int main(){
    int t,t1=0,t2=1;
    do{
    t=t1+t2;
    t1=t2;
    t2=t;
    }while(t2<=1000);
    printf(“%d\n”,t);
    }

  7. for语句

for(表达式1;2;3) 执行顺序 先初始化1,然后判断条件2 再执行循环体,最后执行表达式3

for循环使用范围:知道要循环多少次

while循环:知道结束条件

  1. break和continue
    break:终止本层循环

    #include<stdio.h>
    #include<math.h>
    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的平方根是%f\n",a,x1);
    
        return 0;
    }
    
  2. 字符型

  3. 字符常量: 单引号 ‘A’ 只能是一个字符

  4. \r 是回车不换行,\n是回车换行

  5. 字符串常量: 双引号 ”DSFSDF“ 结尾是\0

  6. 字符变量 char cj;

  7. getchar(); 可以接收键盘上面额空格和回车键

  8. 库函数

  9. 头文件

    输入输出 #include<stdio.h>
    数学 math.h
    字符 ctype.h
    字符串 string.h
    内存 stdlib.h
    -------------------------------------------------------‘
    abs()、 sqrt()、fabs()、pow()、sin() 其中pow(a,b)是重点。23是由pow(2,3)表示的。

  10. 如果把自定义函数放在main后面,则需要在头文件下面加函数声明。

素数

//如果n能被2至n-1的任意一个数整除,则n不是素数
#include<stdio.h>
int 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;
}
  1. 地址和指针

  2. 指针变量存放地址

  3. 指针赋空值
    int *p; p=NULL; p=0; p=‘\0’; NULL的值为0

  4. 指针位移
    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<a+5;p++) printf(“%d\t”,*p); //使用指针便利数组

    p=a+1 等价于 p++ 指针 元素后移一位 变成a[1]
    (*p)++ 是先取指针的内容然后内容自加1
    *(p++) 是先取原址的内容,然后指针后移

  5. 二维数组

  6. 类型名 数组名【行】【列】 ,下标可以是整形常量表达式 行可以省略

  1. 字符串

  2. 每个字符串都\0结束

//字符串的输出
1. 字符串常量: printf("%s\n","l love you");
2. 字符数组名: char str[]="l love you"; printf("%s\n",str);
3. 字符指针:   char str[]="l love you" ,*p=str;	printf("%s\n",p);

//字符串的输入
1. 字符数组名: char str[10];	scanf("%s",str);
2. gets 输入:	 char str[15]; gets(str);	//可以输入空格  puts(str); 自动换行

//字符串处理函数: #include<string.h>
1. strcpy(s1,s2);	 把s2赋值到s1里面 函数返回的是s1
2. strcat(s1,s2);	 把s2的内容连接到s1后面并且自动覆盖s1的\0,返回s1的地址值
3. strlen(s1);	计算s1字符串的长度 不包含'\0'
4. strcmp(s1,s2);	字符串比较 当s1>s2 返回大于0的数,两个相等 返回0  s1<s2返回负数
  1. 字符串求长度

    #include<stdio.h>
    int length(char *s);
    int main(){
    char s1[100]=“”;
    int len;
    puts(“请输入一串字符串:”);
    gets(s1);
    len=length(s1);
    printf(“字符串的长度为:%d\n”,len);
    return 0;
    }
    int length(char s){
    int n=0;
    while(
    (s+n)!=‘\0’) n++;
    return n;
    }

  2. 字符串复制

    /**

    • @file 字符串_复制.c
    • 不用库函数,使用指针完成字符串的复制

    */
    #include<stdio.h>
    void _copyStr(char *s1,char *s2);
    int main(){
    char s1[]=“you are very good!”;
    char s2[]=“”;
    _copyStr(s1,s2);
    printf(“复制之后的字符串为:%s\n”,s2);
    return 0;
    }
    void _copyStr(char *s1,char *s2){
    while (*s1!=‘\0’){
    *s2=*s1;
    s1++;
    s2++;
    }
    *s2=‘\0’; //在s2末尾添加结束标志
    }

  3. 编译预处理

  4. 宏定义和调用 #define N 30
    特点:原处替换,一改全改 可以嵌套定义
    宏替换不考虑数据类型

  5. 文件包含、

include<stdio.h> 包含头文件的目的是为了引用某些库函数

预处理是占用的编译时间,不是运行时间,

  1. 结构体和共用体

  2. 结构体

  3. 定义

    #include<stdio.h>
    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;
    }

  4. 引用
    变量名.成员名 指针->成员名

  5. 占用内存大小
    注意结构体的对齐,既是每次都多加3

  6. 带参数的调用

    #include<stdio.h>
    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;
    }

  7. 共用体

  8. 占内存大小

所有成员共用一个空间,大小由共用体内的最大字节 所决定

  1. typedef

功能是取别名, typedef 已有的数据类型 别名;

//typedef的意思是取别名,如果不加typedef则结构体后面的是变量
#include<stdio.h>
typedef struct stu{
    int age;
    char sex;
    float b;
}STU;

int main(){ 
	STU s1,*P;
    return 0;
} 
  1. 内存分配stdlib.h

malloc(); free()

  1. 定义

    #include<stdio.h>
    #include<stdlib.h>
    int main(){
    int *p=malloc(sizeof(int));
    if(p==NULL) printf(“内存分配失败\n”);
    if(p!=NULL) printf(“内存分配成功\n”);
    printf(“%d”,p);
    free§;
    return 0;
    }

  2. 单链表

  3. 创建

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值