第二章 C語言概述


第二章 C語言概述

1. 簡單的C程序示例

cat first.c
#include <stdio.h>
int main(void)
{
    
    int num;
    num = 1;

    printf("I am a simple ");
    printf("Computer. \n");
    printf("My favorite number is %d besause it is first.\n",num);

    return 0;
}

編譯執行:

[root@hans ~]# gcc -o first first.c 
[root@hans ~]# ls -rlt first
-rwxr-xr-x 1 root root 8536 Aug  5 08:30 first
[root@hans ~]# ./first 
I am a simple Computer. 
My favorite number is 1 besause it is first.

C程序剖析

image

2. 程序剖析

​ C程序包含一個或多個函數,它們是C程序的基本模塊。

​ /* */ C語言中的注釋,/* 和*/之間是注釋的內容。注釋只是為了幫助讀者理解程序,編譯器會忽略它們。

#include <stdio.h>   /*這是程序的第1行,把stdio.h文件中的所有內容都輸入該行所在的位置,#include這行代碼是一條C預處理器指令(preprocessor directive).所有的C編譯器都提供stdio.h文件,該文件包含了供編譯器使用的輸入和輸出函數,該文件名的含義是標准輸入輸出頭文件。*/
int main(void)  /*主函數,C程序一定是從main()函數開始執行,除了main函數外還可以隨意命名其他函數,但main()函數必須是開始函數
int是main()函數返回類型,表明main()函數返回的值是整數。函數名后面的圓括號中包含一些傳入函數的信息,本例中沒有傳遞任何信息。因此為void。*/
{   /*花括號里面是函數體,所有的C函數都使用花括號標記函數整體的開始和結束,不能省略,而且必須是成對出現,這是開始*/
    
    int num; /*變量聲明,表示設置一個變量num,它是int類型。
    int是C語言中的一個關鍵字(keyword),表示C語言中數據類型,在C語言中所有的有變量都必須先聲明才能使用,變量命名時要使用有意義的變量名或標識符。
    C99和C11允許使用更長的標識符名,但是編譯器只識別前63個字符。對於外部標識符只允許使用31個字符。
    可以用小寫字母、大寫字母、數字和下划線(_)來命名,而且第一個字符必須是字符或下划線,不能是數字。*/
    num = 1;/*賦值,可以給num賦不同的值,但是賦得值必須都是int類型。賦值表達式語句從右側把值賦到左側*/

    printf("I am a simple ");/*printf函數,利用printf函數把傳遞給printf函數的信息輸出。()內的內容為參數,這種有特定值的為實參,形參是函數中用於保存值的變量*/
    printf("Computer. \n");
    printf("My favorite number is %d besause it is first.\n",num);/*%d為占位符,表明要在這里打印一個變量,d表明變量為十進制整數*/

    return 0; /*int main(void) 表明main()函數執行完后返回一個整數,有返回值的C函數要有return語句,該語句以return為關鍵字開始,后面是待返回的值。並以分號結尾*/
} /*函數結束*/

聲明變量的4個理由:

  • 把所有的變量放在一處,方便讀者查找和理解程序的用途
  • 聲明變量會促使你在編寫程序之前做一些計划
  • 聲明變量有助於發現隱藏在程序中的小錯誤,如變量名拼寫錯誤。
  • 如果事先未聲明變量,C程序將無法通過編譯。

C99之前的標准要求把聲明都置於塊的頂部,好處是把聲明放在一起更容易理解程序的用途。C99允許在需要時才聲明變量,好處是在給變量賦值之前聲明變量就不會忘記給變量賦值。

2.1 提高程序可讀性的技巧

  1. 選擇有意義的函數名
  2. 程序要寫注釋
  3. 在函數中用空行分隔概念上的多個部分。
  4. 每條語句各占一行。

2.3 打印多個值

#include <stdio.h>
int main(void){
	printf("There are %d feet in %d fathoms\n", 12, 2);
	return 0;
}

2.4 多個函數

#two_func.c
#include <stdio.h>
void butler(void); /*函數原型,C90標准新增。*/
int main(void){
	printf("I will summon the butler function.\n");
    butler();
    printf("Yes. Bring me some tea and writeable DVDs.\n");
    
    return 0;
}
void butler(void){  /*沒有返回值也沒有任何參數*/
    printf("You rang, sir?\n")
}
/* 
butler()函數的執行主要看在main()中什么位置調用,而不是butler()函數在什么位置.
如果寫了函數原型:void butler(void),則butler()函數放在什么位置都可以。如果沒有寫,則butler()函數的定義一定要在調用它的函數的前面。
如果程序這樣寫則會在編譯時報錯:
#include <stdio.h>
/*void butler(void); 把這個函數原型注釋掉*/
int main(void){
	printf("I will summon the butler function.\n");
    butler();
    printf("Yes. Bring me some tea and writeable DVDs.\n");
    
    return 0;
}
void butler(void){  /*沒有返回值也沒有任何參數*/
    printf("You rang, sir?\n")
}
*/

2.5 關鍵字和保留標識符

ISO C關鍵字

auto extern short while
break float signed _Alignas
case for sizeof _Alignof
char goto static _Atomic
const if struct _Bool
continue inline switch _Complex
default int typedef _Generic
do long unio _Imaginary
double register unsigned _Noreturn
else restrict void _Static_assert
enum return volatile _Thread_local

如果使用關鍵字不當,編譯器會將其視為語法錯誤。這些都不要用來做變量名。

3 編程練習

  1. 按格式打印名字

    #include <stdio.h>
    
    int main(void){
        printf("Hans Wang\n");
        printf("Hans\nWang\n");
        printf("Hans");
        printf(" Wang\n");
    }
    
    #gcc -o name name.c
    #./name
    Hans Wang
    Hans
    Wang
    Hans Wang
    
  2. 打印姓名和地址

    #include <stdio.h>
    int main(void){
        printf("name: Hans Wang\n");
        printf("address: ShanDong HeZe\n");
        
        return 0;
    }
    
  3. 把年齡轉換成天數,並顯示這兩個值,不考慮閏年

    #include <stdio.h>
    
    int main(void){
        int age;
        int day = 365;
        int days;
    
        printf("Please input your age:");
        scanf("%d", &age);
    
        days = age * day;
    
        printf("Your age is %d,equel %d days.\n",age,days);
    
        return 0;
    }
    
  4. 生成指定輸出,除main()函數外還要調用兩個自定義函數

    #include <stdio.h>
    void jolly(void);
    void deny(void);
    
    int main(void){
       jolly(); 
       jolly(); 
       jolly(); 
       deny();
        return 0;
    }
    
    void jolly(void){
        printf("For he's a jolly good fellow!\n");
    }
    void deny(void){
        printf("Which nobody can deny!\n");
    }
    
  5. 生成指定輸出

    #include <stdio.h>
    void br(void);
    void ic(void);
    
    int main(void){
        br();
        ic();
        printf("India,China,\n");
        printf("Brazil,Russia\n");
    }
    
    
    void br(void){
        printf("Brazil,Russia,");
    }
    void ic(void){
        printf("India,China\n");
    }
    
  6. 編寫程序創建整型變量,計算變量的兩位和平方。

    #include <stdio.h>
    
    int main(void){
    
        int toes;
        toes = 10;
        
        int toes2;
        int toes_double;
        toes2 = 2 * toes;
        toes_double = toes * toes;
        
        printf("toes = %d\ntoes2 = %d\ntoes_double = %d\n", toes, toes2, toes_double);
    
        return 0;
    }
    
  7. 生成指定輸出simle。

    #include <stdio.h>
    
    void smile(void){
        printf("Smile!");
    }
    
    int main(){
        smile();
        smile();
        smile();
        printf("\n");
        smile();
        smile();
        printf("\n");
        smile();
        printf("\n");
    
        return 0;
    }
    
  8. 寫一個程序,在函數中調用另一個函數

    #include <stdio.h>
    
    void one_three(void);
    void two(void);
    
    int main(){
        printf("starting now:\n");
        one_three();
        printf("done!\n");
        return 0;
    }
    
    void one_three(void){
        printf("one\n");
        two();
        printf("three\n");
    }
    
    void two(void){
        printf("two\n");
    
    }
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM