C语言-学习总结
侧边栏壁纸
  • 累计撰写 53 篇文章
  • 累计收到 92 条评论

C语言-学习总结

白羊
2024-12-15 / 0 评论 / 196 阅读 / 正在检测是否收录...
#include <stdio.h>
#include <string.h>
#include <math.h>
void unit_1();
void unit_3();
void unit_4();

void unit_1(){
    printf("单元一:\n"); 
    /*
    数值转化:
    二,八,十六-->十进制:
    十进制-->二,八,十六:
    二进制-->八,十六:
     
    
    */ 
    
    /*
    原码:最高位符合位:0:正,1:负
    数值存储:正数原码存储。负数补码存储
    补码:除符号位,其他位原码求反+1;
    考点:数值溢出问题 
    */
    short int a=32767;
    a+=2;
    printf("数值溢出:%d\n",a);
    printf("test:%d",-32768) ;
    /*
    -32767
    解析:原码:0111 1111 1111 1111
                                 10
            +1:1000 0000 0000 0001
        符号位为1,为负数,需要按照补码->原码,算出 十进制
        补码:1000 0000 0000 0001  -1
        反码:1000 0000 0000 0000   
        原码:1111 1111 1111 1111 -32767
    */
}
void unit_3(){
    /*
        易错点:但判断语句遇到:||和&& 满足短路原则。||前满足后 后面不在计算。&&前不满足后边不计算 
    */
    int a,b; //定义时不能连续赋值; 除非 int b;int a=b=1;这样可以 
    a=b=0;
    if(++a||++b){
        printf("或短路:a=%d,b=%d\n",a,b);
    }
    a=b=0; 
    if(a--&&b--){
    }
    printf("与短路:a=%d,b=%d\n",a,b);
    /*
    易错点:switch多分支时
         case:没有break;时 将会从此处结束到末尾,包括default
         但没有匹配到值时,会执行default:但default 不在末尾,且没有break;会从此处运行到末尾; 
    */
    int ab=1;
    switch(ab){
        case 1: printf("switch->1\n");
        case 2: printf("2\n");
        default: printf("default\n");
    } 
    switch(ab){
        default: printf("switch->default\n");
        case 3: printf("1\n");
        case 2: printf("2\n");
        
    } 
    /*
        易错点:if,else if else 没有缩进:记住一个原则:else 只与最近一个if匹配。 
        ++i:前加一后在参与运算,和i++ :先参与运算后加一。 
        记住运算优先级 ,编写代码中不确定可以使用()提高优先级 
    */
    int sa=1,sb=0;
    sb=sa++*5+sa++;
    printf("自增后:运算中出现多个。%d\n,sa的值:%d",sb,sa);
    //上述可以证明,并不是整个运算结束后自增,而是参与后自增, 
    
}
void unit_4(){
    /*
        while(x):先判断条件:真:执行函数体。
        do{}while(x):至少执行一次函数体:在进行条件判断。
        上面两种。记得在函数体改变 判断条件。否则可能导致死循环
        for(int x;x<y;x++):括号中可以为空,但必须有两个 分号。
         break:结束本层循环。
         continue:进行下一次循环。 
    */
    /*
        递归思想:可以拆分出多个事件,并且每个事件的做法相同 
        条件:要有递归出口 
    */ 

    printf("递归求和:%d\n",sum(100));
} 
//递归求和 
int sum(x) {
    if(x==0){
        return 0;
    }
    return x+sum(x-1);
}
//数组 
void unit_5(){
    /*
        易错点:定义数组后,本能给数组名重新赋值
        数组名:为数组第一个元素的地址
        一维数组:在定义时初始化,可以不用指定数组长度
        二维数组:在定义时初始化,一维长度可以不用指定,二维一定要指定数组长度 
        当数组作为函数参数传入,在函数中修改值,原数组会被修改。因为数组名就是地址。不是值传递 
    */ 
    int a[]={1,2,3};
    ahcddd(a);
    printf("数组传入:%d\n",a[0]);
    /*
        易考点:字符串函数
        字符串连接:strcat(数组1,数组2);把数组2连接到数组1,并删除数组1 最后\0 
        字符串拷贝:strcpy(数组1,数组2);把数组2赋值到数组1中,
        字符串比较:strcmp(s数组1,数组2);相等0,1>2 >0 1<0 <0 前大即正,前小即负,相等即0
        字符串长度:strlen(数组),不包括\0
        字符串大写:strlwr() 
        符串大写:strupr() 
    
    */ 
    char sa[]="A",sb[]="b";
    printf("字符串连接:%s\n",strcat(sa,sb));
    printf("字符串拷贝:%s\n",strcpy(sa,sb));
    printf("字符串比较:%d\n",strcmp(sa,sb));
    printf("字符串长度:%d\n",strlen(sa));
    printf("字符串大写:%s\n",strlwr(sb));
    printf("符串大写:%s\n",strupr(sb));
} 
void ahcddd(int a[]){
    a[0]=1000;
}
//函数 
void unit_6(){
    /*
        存储方式
        auto:动态分配空间
        static:静态存储空间,在函数中使用,运行结束后。不消失,下次调用还是此空间的值
        
        extern:声明外部变量,扩展外部变量作用域。
         
    
    
    */ 
    
} 
void unit_7(){
    
    
} 
//union
//enum
//typedef
//struct
//malloc

void main(){
    printf("开始复习!\n"); 
//    unit_1();
//    unit_3();
//    unit_4();
    unit_5();
}
18

评论 (0)

取消
歌曲封面
0:00