1. 程式人生 > >C語言基礎部分

C語言基礎部分

一、   如何把自己的函式加進去

①無返回值

#include<stdio.h>

void jolly(void);

int main(void)

{

jolly();  

return 0;

}

void jolly(void) //這裡沒有‘;’

{

printf("forhe's a jolly goof fellow\n");

}

/*這裡main是主函式,先執行main(),再執行自己定義的函式*/

②有返回值

#include<stdio.h>

double sum_squares(long a,long b);

int main()

{

………….

}

Double sum_squares(long a,long b)

{

   Doubletotal=0;

   Long I;

   ………….

Return total;

}

二、   print語句

1、會替換以前的資料,轉義序列

#include<stdio.h>

Int main()

{

float salary;

printf(“Enter your desired monthly salary:”);

printf(“$_______\b\b\b\b\b\b\b”);//\b是往後退

printf(“%f”,&salary);

printf(“\n\t$%.2f a month is $%.2f a year.”,

salary,salary*12.0);//3

printf(”\rGee!\n”);//4

/*對於第三行,列印完後,游標會在本行不動,繼續讀第4個,這時/r會返回第一行,列印Gee!,因為列印是替換機制,所有列印第四行必須替換第三行東西。/t是製表符,和tab建作用相同,有時系統設定tab是4個空格或8個空格,輸出就會有幾個空格*/

2、print語句後從右到左計算

Int a=1;

Printf("a=%d,++a=%d”,a,++a);

輸出 2,2

三、   資料型別

1、浮點數舍入錯誤

Float型別的數字通常只能儲存所有數字開頭起6或7位有效數字。

如2e10+1再減去2e10時顯示只能2後5到6個零

2、double16位有效數字

Float7位有效數字(3.500000)

3、型別轉化

①char和short都會自動轉換成int

②float會被轉換成double

③如果目標型別事無符號整型,且待賦值的數是整數時,額外的數會被忽略。如:目標型別是8位unsigned char,代付的值是原始資料求模256

四、(字串和格式化輸出)

1、char name[40],此時scanf(“%s,name”)

//name不用取地址符&

2、scanf()在取到合適的值後會在有空格的地方停止

//如輸入Kevin chen,輸出只會是Kevin

/*scanf(“%d  ,%d”)格式字串的空白意味著跳過下一個輸入項前面的所有空白*/

3、使用#include<string.h>才可以使用strlen()函式,給出字串中字元長度(包括空格和標點符號)

4、c預處理

#define BOOK “westlife’biography”

/*用大寫字母表示常量,對於字串,必須用雙引號,並且雙引號不會打出*/

/*如果想輸出雙引號,單引號,斜槓,”\””就會輸出雙引號*/

5、const限定符

Const int vim=15

//此刻vim值不可修改

6、printf(“010.2f”,qq);

/*10前的0代表如果qq不夠10個寬度,用零補,如0572043666*/

7、%.4s 

//意味著對於python來說只打印pyth

8、列印較長的字串

//不能在雙引號括起來的字串中間直接斷開

方法①用\隔開

②用“

//對於一句話,可以使用多個“隔開

9、printf()用*表示寬度

Printf(“the number is %*d”,width,number);

例子

#include<stdio.h>

#include<string.h>

int main()

{

    charname1[20];

    charname2[20];

   printf("please enter two names:");

   scanf("%s %s",name1,name2);

   printf("%s %s\n",name1,name2);

   printf("%*zd%*zd\n",strlen(name1),strlen(name1),strlen(name2),

strlen(name2));

printf("%zd%*zd",strlen(name1),strlen(name1),strlen(name2));

    return 0;

}

輸入Kevin bee

輸出Kevin bee

        5   3

     5    3

10、scanf中會跳過含有*的項

Scanf(“%*d,%*d,%d”,&n);

Printf(“the last number is %d”,n);

11、列印%,輸出時必須用兩個%,這樣才可輸出%

12、%s會是列印一句話,%c會列印一個字元

13%lf表示double型別

14、最後程式的getchar會取走scanf沒有取走的換行符(每次後一個scanf會將上一個scanf後用戶輸入的換行符替換掉),多加一次putchar就會起到暫停的作用

五、   運算子、語句

1、整數除法結果的小數部分被丟棄,這一過程被稱為截斷

2、7.0可直接用7.表示

3、截斷計算結果的小數部分,不會四捨五入

4、求餘數的運算子只能用於整數,不能用於浮點數

當char型別賦值超過一位元組大小,待賦值將是原始值求模(求餘數)256

※5、強制型別裝換

A=1.6+1.7=3.3

B=(int)1.6+(int)1.7=2

例如(float)9變為9.0

6、列印字母a-g

Char ch=’a’;

While(ch<=’g’)

Printf(“%5c”,ch++);

Printf(“\n”);

/*”=”一定要在《後面*/

7、while迴圈注意

當while這一句後沒有花括號,緊接著一句在迴圈內,其餘不在

例子:while(x++<103)

        Printf(“%dd\n”,x);//這句話在迴圈內

        Printf(“%4d\n”,x);//沒有在迴圈內

※8、將程式段帶註釋的成功去除

#if 0

語句//註釋

#endif

這樣帶註釋的語句就成功去除

9、想要使用pow()函式

要用<math.h>,同時使用gcc –lm(加檔案)

#include<stdio.h>

#include<math.h>

void cube(double x);//說明是double型別

int main()

{

    double n,m;

   printf("you will get a cube\n");

   printf("please enter a number\n");

   scanf("%lf",&n);

    m=pow(n,3);

    cube(m);//給引數

    return 0;

}

void cube(double x)

{

   printf("%f",x);

}

※10、邏輯運算子

a=1,b=2,c=3,d=4,m=1,n=1;

(m=a>b)&&(n=c>d)

M=0,所以這句話的真值為0,此時不在執行後一句話,既n不改變

所以輸出m=0,n=1

11、sizeof運算子

①sizeof(x=f+2)

/*不會對x賦值,只是求x此時所佔的位元組*/

②sizeof()以位元組微單文給出指定型別大小

/*運算物件是型別時,圓括號必不可少,如int,但是對於特定量,可有可無,但是一直用帶括號的,輸出的格式化是%zd代表十進位制,%zx代表16進位制*/

③sizeof一個數組名的時候會算上所有

Float a【10】

Sizeof(a)=40

12、條件運算子 ? :

Max=(a>b)?a:b

/*如果a》b成立,則max=a,否則max=b

六、   迴圈

1、         a=scanf(…)的情形

a=scanf(‘%ld”,&num);

/*如果輸入的是字串要求的,a此時=1,既a為真*/

2、         while(a)和while(a!=0)相同

3、為了檢查比較的==和=不用錯,一般用1==stay來表示

4、_Bool型別

_Bool input_is_good//不用下劃線,is是另外一種用法

給這句話賦值就可以弄布林值,布林值只能存1或0,表示真假

5、關係運算符(<)比算術運算子低(+-),比賦值運算子高

6、①while是入口條件迴圈,滿足開始條件才可迴圈。

While(scanf(“%d”,&num)==1)

 ;

/*此時程式會跳過數字,知道不是數字,while結束,此時“;”什麼都不做,只是一個空語句*/

②do while是出口條件迴圈

Do{

Printf(“qq”)

}while();

Statement//這句話不在迴圈內

7、不能用關係運算符比較字串,比方xxx==yyy

8、比較浮點數,儘量用《和》,因為浮點數的舍入誤差會導致在邏輯上應該相等的不相等。使用fbs()函式算出絕對值可以方便比較浮點數

8、while迴圈當有數值時,會一直迴圈

While(age=55)

{

}

/*這種情況也會無限迴圈,因為還是常數*/

9、while(a)就是等於while(a!=0)或者就是while(a!=false)

10、for迴圈

①for(count=1;count<=22;count++)

printf(“hello”)

/*順序是先過count=1,然後再判斷,之後列印

接著再進行第三句,更新資料,然後判斷(第一句只執行一次)*/

執行第一句之後,還要再判斷條件才可輸出

※②for(x=1;y<=75;y=(++x*5)+50)

Printf(“%d %d”,x,y);

//等於

For(x=1;y<=75;y=x*5+50)

{

Printf(“%d %d”,x,y);

++x;

}

//也等於

For(x=1;y<=75;++x,y=x*5+50)//使用逗號表示式

③for(printf(“hello”);num!=6;)

  /*print只執行一次,num!=6是條件*/

11、①a=249,500;

解釋為a=249;

      500;

②a=(249,500);

這個時候a=500

12、巢狀迴圈(輸出三角形等問題)

For(row=0;row《ROWS;row++)

{

For(ch=(‘A’+row);ch<(‘A’+CHARS);ch++)

Printf(“%c”,ch);

Printf(“\n”);

}

有行有列

13、陣列對於scanf來說&的有無

①char name【20】不用&

②int score【10】,對score【0】賦值,用scanf要用&

七、   分支和跳轉

1、         if語句

①if(stament)

statement

else

statement

② if

   Else if

 Else if

 Else

③else會和最近的一個else匹配

If(  )①

If(  )②

Else//與2匹配

If()①

{

  If()②

}

Else//和①匹配

2、         getcahr和putchar

ch=putchar()和scanf(“%c”,&ch)等價

putchar同理

3、常量不能用自增或自減符號

a=2

n=++(a+a++)

錯誤,a+a++已經是常數

3、         continue和break

4.switch語句

switch(ch)

{

Case ‘a’://常數不加‘’

     Statement;

     Break;

Case ‘b’:

            Statement;

Break;

Default://如果ch既不等於a,也不等於b,則輸出這句話

   statement

}