《C程序设计》知识点整理

1.计算时转换:

   int * float ----> 均转为double计算,结果double

   char * int ----> char转为int计算,结果int

   char * double ----> char转为double计算,结果ouble

   int  ---> float  --->  double :低精度可以自然转为高精度;反之,高精度需强转为低精度;

2.定义数组:

  int a[5] = {1,2,3,4,5}

3.冒泡算法:

  思想:每次将相邻的两个数进行比较,将小的放到前面,就是沉大法。一趟下来,可将最大的/最小的沉出来。

  eg:5个数,要比较4躺,第1趟:比较4次,将大的沉下去;第2躺:比较3次;

  算法实现:

for(i=0; i<4; i++){
   for(j=0; i<4-i; j++){
       if(a[j] > a[j+1]){
           t = a[j];
           a[j] = a[j+1];
           a[j+1] = t;
       }
   } 
}

eg:n个数:

for(i=0; i<n-1; i++){
   for(j=0; i<n-1-i; j++){
       if(a[j] > a[j+1]){
           t = a[j];
           a[j] = a[j+1];
           a[j+1] = t;
       }
   } 
}

4.二维数组:

  int a[3][4] ={ {1,2,3,4}, {5,6,7,8}, {9,10,11,12} } 

 第1维的长度可以省略,第2维的长度不能省略;

 eg:int a[][4] = {}   (☑️)                        int a[4][] = {}   (❌)     

5.二维字符数组,可用于打印***

 eg:打印下面的图形:

*****         
****
***
**
*

char a[5][5] = {{'*''*''*''*''*'}, {'*''*''*''*'}, {'*''*''*'}, {'*''*'}, {'*'}}
for(i=0; i<5; i++){
    for(j=0; j<5; j++){
        printf("%c",a[i][j]);
    }
    printf("\n");          -----换行
}

6.字符串的一些函数:

    strcat (str1, str2)    将2连接到1中;

    strcpy (str1, str2)    将2复制到1中;

    strcmy (str1, str2)    将1与2比较;  1>2 :正数; 1=2 :0 ; 1<2 :负数;

    strlen (str)      str的字符长度;

7.函数使用时首先要声明:

     声明的作用:1》在主函数中调用时,能够识别那是函数名;

                           2》便于检查在调用时传递的参数类型及个数是否对;

8.递归调用: 函数中调用它本身

   ====>第1个人年龄位10岁,第2个比前一个大2岁,......第5个比前一个大2岁,求第5个人的年龄的递归;

int age(int n){
    int  score;
    if( n == 1 ){
        age = 10;
    }else{
        score = age(n-1) + 2;
    }
    return score;
}

9.递归的生活应用:   汉娜塔,移盘子问题

思路:将n个盘子从A移到C;

1》将A上n-1个盘子借C移到B;

2》将A座上剩下一个盘子移到C;

3》将n-1个借A从B移到C;

void hanoi(int n, char A, char B, char C){
    void move(char x, char y);        ----->声明函数
    if(n == 1){
        move(A, C);
    }else{
        hanoi(n-1, A, C, B);
        move(A, C);
        hanoi(n-1, B, A, C);
    }
}

move(char x, char y){
    printf(" %c ----> %c ", x, y)      ----->移动为打印
}

10.自动变量,静态局部变量区别:

     自动变量:调用后就自动释放的存储空间;

     静态局部变量:调用结束后不消失而继续保留上一次结束的值;

11.指针:

    int  *p ;

    p = &a[0] ;  将 a[0] 元素的地址赋值给p

    ===》 int  *p = &a[0] ;

    ===》 int  *p = a  ;       首地址

   指针的数据交换:

void swap(int *p1, int *p2){
    int temp;
    temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}
---》交换后,并不会改变原先指向的a,b值,只是改变了其指向的地址;

12.指针加减:

   p+1:指向同一数组的下一个元素 ;

   p-1:指向同一数组的上一个元素 ;   

13.排序:选择排序算法:

  1》 找出一个最小的数,交换到最前面;

  2》 再从剩下的里面,再找一个最小的,交换到剩下的数最前面;

 思路:1》将第1个数作为基数,命令它最小;

            2》与后面的数进行一一比较,若比基数小,那么记录下它的序号,直至比较完为止;

            3》这一趟比较完之后,将记录下最小的数的序号交换到最前面;

void select_sort(int a[], int n){
    for(int i=0; i<n-1; i++){
        int min_index = i;
        for(j=i+1; j<n; j++){
            if(a[j] < a[min_index]){
                min_index = j;
            }
        }
        if(i != min_index){    -->当min_index变了是,说明后面有比第1个基数小的数;
            int temp = a[i];
            a[i] = a[min_index];
            a[min_index] = temp;
        }
    }
}

14.优先级:

    ++  >  ||   >   =   

    eg:  int  x=1 , y=1 , c = 0 ;      c = x++ ||  y++        输出x,y,c

    先x++,再||, x = 2,c=1,y=1;

 15.引用与指针区别?

   1》初始化:引用必须初始化;指针不必;

   2》是否改变值:引用初始化以后不能被改变;指针可以改变所指的对象;

   3》能否空值:引用不能指空值;指针可以;

 16.大小写字母的ASCII码转换

    *C -= 'A' - 'a';        因为: 'A'=65       'a' = 97       'A' -'a' = -32       

    所以:*C -=  -32

             *C  =  *C -(-32) =  *C +32       即:将大写字母变成小写字母的操作

  17. extern:扩展作用,将变量的作用扩展到其他文件中使用;

  18. 运算符的优先级: 算术  >  关系运算符  >  &&  >  ||  >  赋值

  19. 大小写字母比较: 小写字母a  比大写字母A   大   32 ,即:a=97,A= 65

  20.访问字符串中的每个字符:

      1》访问:   

StringBuffer str = new StringBuffer("abcde");
Char c = str.charAt(i);

      2》判断c是不是小/大写:

Charccter.isLowerCase(c);
Charccter.isUpperCase(c);

      3》将c转换为小/大写:

Charccter.toLowerCase(c);
Charccter.toUpperCase(c);

      4》若要在内部改变字符,要用StringBuffer,不能用String

  21. final 与 static 区别:

       final:修饰变量,类,方法;  不可被修改,不能被继承;

       static:修饰变量,类,方法;可通过类名,变量名,方法名直接调用;值可被修改,修改后,其他人再使用时,为修改后的值;

  22.长度计算:

       sizeof()  :计算分配的内存长度,包含"\0"结束符;

       strlen()  :计算字符串长度;

        eg:  "one"        sizeof() = 4 ;   strlen() = 3 ;

  23.数值进制之间的转换:

       1》十进制  ---->   其他: 除基取余,从下到上;(小数:乘基取整,从上到下);

       2》二进制 ----> 八 ---> 十六  :8421码,不够补0;     

       3》十六   ---->  十   : 16的x次方      eg:3D8           111

       4》八      ---->  十   : 8的x次方       eg:92              

       5》二      ---->  十   : 2的x次方       eg:110              

   24. 原码,补码,反码:

       1》正数: 补码,反码 都是本身;

       2》负数: 反码: 除符号位外,其余位取反;

                         补码:反码+1;

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值