The C Programming Language Learning

1.編寫函數 reverse(s),將字符串 s 中的字符順序顛倒過來。

int reserve(char s[]){
    int i,j;
    char temp;
    i=0;
    while(s[i]!='\0')
      ++i;//find the end of string

    --i;//back off from '\0'
    j=0;
    while(j<i){
        temp = s[j];
        s[j] = s[i];
        s[i] = temp;
        --i;
        ++j;
    }

    return 0;
}

2.統計輸入數字字符出現的次數

#include <stdio.h>
main(){
    int ndigit[10];
    int space,others;
    int i,c;
    for(i=0;i<10;i++)
      ndigit[i]=0;

    while((c=getchar())!='\n'){
        if(c>='0'&& c<='9')
          ndigit[c-'0']++;
    }
    for(i=0;i<10;i++)
    printf("%d %d次\n",i, ndigit[i]);
}

3.char對象佔用8位,unsigned char的範圍是2的8次方0到255 singed char爲-128到127

4.編寫一個程序以確定分別由 signed 及 unsigned 限定的 char、short、int 與 long 類型變量的取值範圍。

#include <stdio.h>
#include <limits.h>
int main(){

    printf("singed char %d%d\n",SCHAR_MIN, SCHAR_MAX);
    printf("singed short %d%d\n",SHRT_MIN, SHRT_MAX);
    printf("singed int %d%d\n",INT_MIN, INT_MAX);
    printf("singed long %ld%ld\n",LONG_MIN, LONG_MAX);

    printf("unsigned char max:%u\n",UCHAR_MAX);
    printf("unsigned short max:%u\n",USHRT_MAX);
    printf("unsigned int max:%u\n",UINT_MAX);
    printf("unsigned long max:%lu\n",ULONG_MAX);

    return 0;
}
不同的機器值可能不同
singed char -128127
singed short -3276832767
singed int -21474836482147483647
singed long -92233720368547758089223372036854775807
unsigned char max:255
unsigned short max:65535
unsigned int max:4294967295
unsigned long max:18446744073709551615

5.標準庫函數 strlen(s)可以返回字符串參數 s 的長度,但長度不包括末尾的’\0’

#include <stdio.h>
#include <string.h>
int main(){
    char name[] = "I like linux c";

    int l = mystrlen(name);
    printf("len:%d\n", l);


    return 0;
}
int mystrlen(char s[]){
    int len=0;
    while(s[++len]!='\0')
      ;
    return len;

}

6.算術運算符,整數除法會截斷結果中的小數部分

9/4=2 9/10=0
取模運算符%:x%y的結果是 x 除以 y 的餘數
9%10=9 9%3=0

7.如果某一年的年份能被 4整除但不能被 100 整除,那麼這一年就是閏年,此外,能被 400 整除的年份也是閏年

/**
 *返回值1爲閏年,0不是閏年
 */
int years(int year){

    if((year%4==0) && (year%100!=0)|| (year%400==0))
      return 1;
    else 
      return 0;

}

8.刪除字符串s中出現的所有字符c

void squeeze(char s[], int c){

int i,j=0;
for(i=0;s[i]!='\0';i++){
    if(s[i]!=c)
      s[j++] = s[i];
}
s[j] = '\0';

}
表達式++n 先將 n 的值遞增 1,然後再使用變量 n 的值,而表達式 n++則是先使用變量 n 的值,然後再將 n 的值遞增 1。
也就是說,對於使用變量 n 的值的上下文來說,++n 和 n++的效果是不同的
“`

9.按位運算符

C 語言提供了 6 個位操作運算符。這些運算符只能作用於整型操作數,
即只能作用於帶符號或無符號 char、short、int、long 類型:
& 按位與(AND)
| 按位或(OR)
^ 按位異或(XOR)
<< 左移
(>>) 右移
~ 按位求反(一元運算符)
按位與運算符&經常用於屏蔽某些二進制位,置0
按位或運算符|常用於將某些二進制位置爲 1

10.編寫一個函數 invert(x, p, n),該函數返回對 x 執行下列操作後的結果值:將 x 中從第 p 位開始的 n 個(二進制)位求反(即,1 變成 0,0 變成 1) 的其餘各,x位保持不變。

這裏寫圖片描述

11.函數trim用於刪除字符串尾部的空格符,製表符與換行符

這裏寫圖片描述

12.在一個源程序的所有源文件中,一個外部變量只能在某個文件中定義一次,而其它文件可以通過 extern 聲明來訪問它(定義外部變量的源文件中也可以包含對該外部變量的extern 聲明)外部變量的定義中必須指定數組的長度,但 extern 聲明則不一定要指定數組的長度。外部變量的初始化只能出現在其定義中。

13.指針是一種保存變量地址的變量

這裏寫圖片描述
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章