亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 1050 | 回復(fù): 0
打印 上一主題 下一主題

第三周:C語(yǔ)言第一天 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-12-21 08:41 |只看該作者 |倒序?yàn)g覽
今天開(kāi)始是劉羽華講課,把C語(yǔ)言的基本概念都講了一遍:

講了:變量類型,枚舉,隱式聲明和顯示聲明的區(qū)別,外部變量和靜態(tài)變量

位操作是重點(diǎn)!
流控制講了折半查找,還有冒泡排序

編程實(shí)例:

1.折半查找:對(duì)一組有序的排列來(lái)說(shuō),折半查找是最快捷的方法:

#include <stdio.h>
#include <stdlib.h>
int binsearch(int number,int arr[],int size)
{
    int start=0,end=size-1;
    int middle=(start+end)/2;
    
    while(end > start)
    {
    middle=(start+end)/2;
    //printf("%d\n",middle);
    if(number == arr[middle])
        return middle;
    else if(number < arr[middle])
        end = middle-1;
    else
        start = middle+1;
    }
    return -1;
}

main(void)
{
    int arr[]={1,3,5,7,9,11,13,15,17,19,21,23,25};
    int ind;
    ind = binsearch(15,arr,13);
    printf("%d\n",ind);
}

2.冒泡排序:

void my_sort(int arr[],int n)
{
    int i,k;
    int temp;
    for(i=0;i<n;i++)
    {
        for(k=0;k<n-i;k++)
        {
            if(arr[k]>arr[k+1])
            {
                temp=arr[k];
                arr[k]=arr[k+1];
                arr[k+1]=temp;
            }
        }
    }
}

3.位操作
1)一些有用的函數(shù):
#include <stdio.h>
#include <stdlib.h>

#define BITMAX    32

void showbits(int number) //將一個(gè)int 整數(shù)以2進(jìn)制方式顯示出來(lái)
{
    int temp = number;
    int bit;
    int i;
       for(i=BITMAX-1;i>=0;i--)
       {
    bit = (temp & (1 << i)) >> i;
    printf("%d",bit);
       }
}

int bit_num(void) //查看本機(jī)器支持的最大位數(shù),i386機(jī)器一般為32位
{
       int i=1;
       int count=1;
        while(i>0)
        {
        i=i<<1;
        count++;
        }
    return count;
}
/*
main(void)
{
    int a=28;
    printf("The number of bit in this machine is %d\n",bit_num());
    showbits(a);
}
*/

2)
第三位取1 a | (1<<3)
第三位取0 a & ~(1<<3)
取第三位數(shù)值 bit = (a & 8) >> 3
非零整數(shù)的二進(jìn)位取值 (。)

#include <stdio.h>
#include <stdlib.h>
#include "usefull.c"

void showbits(int number);
int bit_num(void);

main(void)
{
    int a=115;
    int a1,a2,bit;
    printf("a =%d:",a);
    a1=a|(1<<3);
    a2=a&~(1<<3);
    showbits(a);
    printf("\na1=%d:", a1 );
    showbits(a1);
    printf("\na2=%d:", a2 );
    showbits(a2);
    bit = (a & 8) >> 3;

    printf("\nThe 3rd position of a is %d\n",bit);
}


課堂筆記

/***********************
 *  快速的旅行
 **********************/

1、Hello world

每一個(gè)C語(yǔ)言程序都由函數(shù)和變量組成。
函數(shù)中包含一些語(yǔ)句,用以指定要執(zhí)行的操作;
變量用于存儲(chǔ)計(jì)算過(guò)程中使用的值。

通常函數(shù)名和變量名都沒(méi)有限制,但main是一個(gè)特殊的函數(shù)。
C程序都有且只有一個(gè)main函數(shù),程序會(huì)從main函數(shù)開(kāi)始執(zhí)行。
可以用傳參數(shù)的方式在函數(shù)間交換數(shù)據(jù)。
函數(shù)中的語(yǔ)句用一對(duì)花括號(hào){}括起來(lái)。

2、變量與算術(shù)表達(dá)式

考慮一個(gè)程序,用公式 C = (5/9)(F-32)打印溫度對(duì)照表:
華氏(Fahrenheit)    攝氏(Celsius)
0            -17
20            -6
40            4
60            15
80            26
100            37
...            ...
...            ...
280            137
300            148

基本數(shù)據(jù)類型:
char
short
int
long
float
double

3、控制語(yǔ)句

for
if
goto

4、符號(hào)常量

#define 名字 替換文本

5、數(shù)組

6、函數(shù)

7、字符輸入/輸出

int getchar(void)
int putchar(int c)

int mygetline(char *s, int len);

大整數(shù)加法(可選)








/***********************
 *  類型、運(yùn)算符與表達(dá)式
 **********************/

1、變量名

名字是由字母和數(shù)字組成的序列,第一個(gè)字符必須為字母。下劃線"_"被看做是字母。
變量實(shí)際上是一段帶有名字、類型的存儲(chǔ)空間。

位與上下文

2、數(shù)據(jù)類型和長(zhǎng)度

C語(yǔ)言只提供了下列幾種基本數(shù)據(jù)類型:
char
int
float
double

類型決定了程序?qū)⑷绾问褂靡欢未鎯?chǔ)空間。

3、常量

類似 1234 的整數(shù)常量為 int 類型
long 類型的常量以字母 l 或 L 結(jié)尾
無(wú)符號(hào)常量以字母 u 或 U 結(jié)尾
后綴 ul 或 UL 表示 unsigned long 類型

浮點(diǎn)常量中包含一個(gè)小數(shù)點(diǎn)(如12.3)或一個(gè)指數(shù)(如12e-3),也可以兩者皆有。
沒(méi)有后綴的浮點(diǎn)數(shù)常量為 double 類型
后綴 f 或 F 表示 float 類型
后綴 l 或 L 表示 long double 類型

帶前綴 0 的整數(shù)常量表示它為八進(jìn)制格式
帶前綴 0x 或 0X 的整數(shù)常量表示它為十六進(jìn)制格式

一個(gè)字符常量是一個(gè)整數(shù)。例如:在ASCII字符集中,字符‘0’的值為 48
某些字符可以用轉(zhuǎn)義序列表示,如 '\n'

字符串常量 "hello, world!"
C風(fēng)格的字符串包含尾0
編譯時(shí)可以將多個(gè)字符串常量連接起來(lái)。例如:
"hello, ""world" 等價(jià)于 "hello, world!"

常量表達(dá)式是僅僅包含常量的表達(dá)式。這種表達(dá)式在編譯時(shí)求值。

枚舉是一個(gè)常量整型值的列表。
enum boolen {NO, YES};

4、聲明

所有的變量及函數(shù)都必須先聲明后使用。
一個(gè)聲明指定一種變量類型,后面所帶的變量表可以包含一個(gè)或多個(gè)該類型的變量。
int i, j, foo[16];

變量可以在聲明的時(shí)候初始化。
int i = 0;

外部變量和靜態(tài)變量默認(rèn)初始化為 0

變量的聲明可以使用 const 限定符。
該限定符指定的變量的值不能被修改。

5、算術(shù)運(yùn)算符

+ - * / %
% 不能用于浮點(diǎn)類型

6、關(guān)系運(yùn)算符和邏輯運(yùn)算符

關(guān)系運(yùn)算符
>  >=  <  <=  ==  !=

邏輯運(yùn)算符
&&  ||  !

由 && 和  || 連接的表達(dá)式按從左到右的順序進(jìn)行求值,并且在知道結(jié)果值為真或假后立即停止計(jì)算。

根據(jù)定義,在關(guān)系表達(dá)式或邏輯表達(dá)式中,如果關(guān)系為真,則表達(dá)式的結(jié)果值為數(shù)值1;如果為假,結(jié)果值為數(shù)值0。

7、類型轉(zhuǎn)換

當(dāng)一個(gè)運(yùn)算符的幾個(gè)操作數(shù)類型不同時(shí),需要通過(guò)一些規(guī)則把它們轉(zhuǎn)換成某種共同的類型。

類型轉(zhuǎn)換分為自動(dòng)轉(zhuǎn)換(隱式)和強(qiáng)制轉(zhuǎn)換(顯式)兩種。

一般來(lái)說(shuō),自動(dòng)轉(zhuǎn)換是指把表達(dá)能力弱的操作數(shù)類型轉(zhuǎn)換成表達(dá)能力強(qiáng)的操作數(shù)的類型。
詳細(xì)規(guī)則參見(jiàn) ISO/IEC 9899:1999(E) 6.3.1.8

強(qiáng)制轉(zhuǎn)換:
(類型名)表達(dá)式

8、自增和自減運(yùn)算符

++   --

9、按位運(yùn)算符

& 按位與
| 按位或
^ 按位異或
<< 左移
>> 右移
~ 按位求反

10、賦值運(yùn)算符

=  +=  -=

大多數(shù)二元運(yùn)算符都有一個(gè)相應(yīng)的賦值運(yùn)算符 op= ,op 可以是下面運(yùn)算符之一:
+  -  *  /  %  <<  >>  &  |  ^

賦值語(yǔ)句本身也具有值,并且可以用在表達(dá)式中。

11、條件表達(dá)式

expr1 ? expr2 : expr3

12、優(yōu)先級(jí)與求值順序








/***********************
 *  控制流
 **********************/

1、語(yǔ)句與程序塊

在表達(dá)式之后加上一個(gè)分號(hào) ";" ,它們就成了語(yǔ)句。

用一對(duì)花括號(hào) "{" 和 "}" 把一組聲明和語(yǔ)句括起來(lái)就構(gòu)成一個(gè)復(fù)合語(yǔ)句(也叫程序塊)。
復(fù)合語(yǔ)句在語(yǔ)法上等價(jià)于單條語(yǔ)句。
右花括號(hào) "}" 用于結(jié)束程序塊,其后不需要分號(hào)。

2、if-else 語(yǔ)句

if-else 語(yǔ)句用于條件判斷。語(yǔ)法如下:
if (expression)
    statement1
else
    statement2

else 部分可選。該語(yǔ)句執(zhí)行時(shí),先判斷 expression 的值,如果其值為真(非 0),則執(zhí)行 statement1 。
反之,如果其值為假(expression 的值為 0),則執(zhí)行 statement2 。

因?yàn)?else 部分可選,所以在嵌套的 if 語(yǔ)句中會(huì)導(dǎo)致歧義。
C語(yǔ)言規(guī)定每個(gè) else 與最近的前一個(gè)沒(méi)有 else 配對(duì)的 if 進(jìn)行匹配。
建議在有 if 語(yǔ)句嵌套的情況下使用花括號(hào)。

3、else-if 語(yǔ)句

折半查找

4、switch 語(yǔ)句

switch (expression) {
case const-expr: statements
     break;
case const-expr: statements
default: statements
}

5、while 循環(huán)和 for 循環(huán)

冒泡排序

void reverse(char s[])

逗號(hào)運(yùn)算符

6、do-while

itoa()

7、break 和 continue 語(yǔ)句

8、goto









/***********************
 *  函數(shù)與程序結(jié)構(gòu)
 **********************/

函數(shù)可以把大的計(jì)算任務(wù)分解成若干個(gè)較小的任務(wù),程序員可以基于函數(shù)進(jìn)一步構(gòu)造程序,而不需要重新編寫所有代碼。
函數(shù)還可以將程序中不需要了解的具體細(xì)節(jié)隱藏起來(lái),從而使程序結(jié)構(gòu)更清晰,并降低修改程序的難度。

1、函數(shù)的基礎(chǔ)知識(shí)

返回值類型 函數(shù)名(參數(shù)表)

    聲明和表達(dá)式

    return 返回值或表達(dá)式


grep

2、外部變量

函數(shù)都是外部的。



逆波蘭序計(jì)算器(可選)

3、作用域規(guī)則

名字的作用域是指程序中可以使用該名字的部分。

變量
函數(shù)

4、頭文件

5、靜態(tài)變量

6、寄存器變量 register

7、const 和 volatile

8、程序塊結(jié)構(gòu)

9、初始化

10、遞歸(可選)

itoa()

11、C預(yù)處理器

文件包含
#include "文件名"
#include <文件名>

宏替換

#define 名字 替換文本

#define max(A, B) ((A) > (B) ? (A) : (B))

#undef

條件包含

#if
#else or #elif
#endif

defined(identifier)
defined identifier

#if !defined(identifier)
#define identifier
    ...
    ...
#endif

#ifdef
#ifndef

12、函數(shù)的實(shí)現(xiàn)(可選)









/***********************
 *  指針與數(shù)組
 **********************/

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

1、指針與地址

&取地址,只能用于變量和數(shù)組元素。
指針的聲明,賦值,類型。
間接引用。&*a

2、指針與函數(shù)參數(shù)

swap()

用指針傳結(jié)構(gòu)體(可選)

3、指針與數(shù)組

數(shù)組聲明。含義。
數(shù)組初始化,賦值。
數(shù)組名,與指針的對(duì)應(yīng)關(guān)系。
類似的操作方式。

在函數(shù)定義中,形參
char s[] 等價(jià)于 char *s

4、地址算術(shù)運(yùn)算

指針的比較,運(yùn)算,+、-、自增。強(qiáng)調(diào)類型。強(qiáng)調(diào)(*ip)++的括號(hào)。
指針和整型的關(guān)系;ハ嗫梢赞D(zhuǎn)化,不可移植。

5、字符指針與函數(shù)

字符串常量是一個(gè)字符數(shù)組。

char amessage[] = "hello world!";
char *pmessage = "hello world!";

strcpy
strcat
strcmp

6、指針數(shù)組以及指向指針的指針

指針數(shù)組與數(shù)組指針。

7、多維數(shù)組

8、指針與多維數(shù)組

9、命令行參數(shù)

10、指向函數(shù)的指針

11、復(fù)雜聲明











/***********************
 *  結(jié)構(gòu)
 **********************/

1、結(jié)構(gòu)的基本知識(shí)

考慮一下,如果我們要存儲(chǔ)一個(gè)復(fù)數(shù),或者是一個(gè)矢量,或者是一個(gè)坐標(biāo)值。

struct point {
    int x;
    int y;
};

關(guān)鍵字 struct 引入結(jié)構(gòu)聲明。結(jié)構(gòu)聲明由包含在花括號(hào)內(nèi)的一系列聲明組成。
關(guān)鍵字 struct 后面的名字是可選的,稱為結(jié)構(gòu)標(biāo)記。結(jié)構(gòu)標(biāo)記為結(jié)構(gòu)命名。
在定義之后,結(jié)構(gòu)標(biāo)記就代表花括號(hào)內(nèi)的聲明,可以用它作為該聲明的簡(jiǎn)寫形式。

結(jié)構(gòu)中定義的變量稱為成員。結(jié)構(gòu)成員、結(jié)構(gòu)標(biāo)記和普通變量可以重名。

struct point a, b, c;
struct {...} x, y, z;
int x, y, z;

初始化,必須是常量表達(dá)式
struct point foo = {3000, 8000};

引用
結(jié)構(gòu)名.成員

結(jié)構(gòu)可以嵌套。

sizeof 對(duì)象
sizeof(類型名)

2、結(jié)構(gòu)與函數(shù)

結(jié)構(gòu)的合法操作只有幾種:
作為一個(gè)整體復(fù)制和賦值,通過(guò) & 運(yùn)算符取地址,訪問(wèn)其成員。

結(jié)構(gòu)指針
struct point *p;
p->結(jié)構(gòu)成員

3、自引用結(jié)構(gòu)

malloc()
單鏈表

4、表查找 (可選)

5、類型定義

typedef int LENGTH;
typedef char *STRING;

typedef int (*PFI)(char *, char *);

6、聯(lián)合

聯(lián)合提供了一種方式,在單塊存儲(chǔ)區(qū)中管理不同類型的數(shù)據(jù)。

union a {
    int a;
    float b;
    char *c;
} d;

聯(lián)合名.成員
聯(lián)合指針->成員

7、位字段 (位域)

struct {
    unsigned int a : 1;
    unsigned int b : 2;
    unsigned int c : 1;
} flags;

位序的問(wèn)題:
據(jù)說(shuō)常有公司出有關(guān)位域的面試題。
不同機(jī)器的位序不一致。
X86平臺(tái)從低到高。

例:
union {
    struct {
        char a:1;
        char b:2;
        char c:1;
    } s;
    char d;
} u;
u.d = 1;
printf("%d\n", u.s.a);







/***********************
 *  再論函數(shù)
 **********************/

1、變量的類型

2、棧

3、x86 平臺(tái) linux 進(jìn)程的內(nèi)存結(jié)構(gòu)

4、函數(shù)的參數(shù)傳遞

5、用一個(gè)反匯編代碼來(lái)觀察函數(shù)的棧實(shí)現(xiàn)

6、遞歸

數(shù)學(xué)歸納法

7、變長(zhǎng)參數(shù)表









/***********************
 *  標(biāo)準(zhǔn)庫(kù)
 **********************/

1、stdio.h

2、stdlib.h

3、string.h































您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP