分支語句可以根據情況從多組語句中選擇一組執行
if(邏輯表示式1)
else if(邏輯表示式2)
else
迴圈語句可以用來反覆執行類似的操作
for語句是一種迴圈語句,其格式如下:
int loop=0;
(loop=開始數字;loop和迴圈變數的關係;loop變化規律)
假設有如下迴圈語句
for(1;2;3)
執行順序如下
[1,2] [4,3,2] [4,3,2] ……
編號為2的語句是邏輯表示式,如果為真則啟動下一組,編號為4的語句有可能根本就不執行
迴圈中可以使用break語句隨時終止迴圈的執行
迴圈中使用continue語句可以把一部分語句跳過,直接到大括號末尾
迴圈巢狀可以處理複雜的迴圈問題
外層迴圈的迴圈變數表示每個組代表數字的變化過程,內層迴圈的迴圈變數表示組內某個數字的變化過程,內迴圈的開始數字和結束數字可能都需要通過外迴圈的迴圈變數計算得到
for迴圈的多種寫法:
1、單條迴圈語句可以省略大括號
2、使用逗號操作符
3、在迴圈中宣告迴圈變數,c99規範中才支援,並且宣告的變數只在該迴圈中有效
4、可以小括號中只保留迴圈條件
5、還可以空語句
6、死迴圈 for(;;) printf(「*」);
while語句也是一種迴圈語句,格式如下
while(1)
[1] [2,1] [2,1] ……[2,1]
do…while語句也是一種迴圈語句
dowhile(邏輯表示式)
執行順序是【2,1】【2,1】…【2,1】
可以保證大括號內的語句至少執行一遍
while語句也可以寫空語句和死迴圈
arr.c
#include
int main() , size = 0;
printf("arr是%p\n", arr);
//arr = 0; 不可以被賦值
printf("arr + 2是%p,&arr[2]是%p\n", arr + 2, &arr[2]);
*(arr + 3) = 3;
printf("arr[3]是%d\n", arr[3]);
printf("sizeof(arr)是%d\n", sizeof(arr));
printf("變數個數是%d\n", sizeof(arr) / sizeof(arr[0]));
printf("請輸入乙個數字:");
scanf("%d", &size);
//int val[size] = {}; 變長陣列不可以被初始化
return
0;}
二維陣列由多個一維陣列構成
二維陣列中每個一維陣列也有乙個編號(下標),下標的範圍是從0開始到一維陣列個數減一為止,二維陣列在使用的時候需要提供乙個一維陣列的下標和一維陣列內部某個變數的下標。
二維陣列可以採用類似一維陣列初始化的方法進行初始化,如果初始化的時候提供足夠多的初始化資料則可以不宣告一維陣列的個數。
二維陣列在使用時可以只提供乙個下標,這個下標作為組下標。
#include
int main() ,};
//int arr[2][3] = ;
//int arr[3] = , };
int arr[3] = ;
int row = 0, col = 0;
for (row = 0;row <= 1;row++)
printf("\n");
}return
0;}
二維陣列名稱和其中第乙個一維陣列名稱代表的位址資料一樣 arr arr[0],但他們的級別不同,所以不能混用 arr+1 arr[0]+1
對二維陣列名稱也可以進行sizeof計算,結果是整個二維陣列中所有變數的大小總和。
#include
int main() ;
printf("arr[1]是%p,arr[2]是%p\n", arr[1], arr[2]);
printf("arr是%p,arr[0]是%p\n", arr, arr[0]);
printf("arr + 1是%p,arr[0] + 1是%p\n", arr + 1, arr[0] + 1);
printf("sizeof(arr)是%d\n", sizeof(arr));
return
0;}
/*
彩票作業
*/#include
#include
#include
int main() ;
int num = 0, val = 0, pos = 0;
srand(time(0));
//每次迴圈生成乙個新數字
while (num < 7)
}//如果新數字和所有舊數字都不一樣
if (!(pos
<= num - 1))
}//顯示陣列中的每個數字
for (pos = 0;pos
<= 6;pos++)
printf("\n");
return
0;}
/*
身份證作業
*/#include
int main() ;
int arr1 = ;
int arr2[18], pos = 0, sum = 0;
//獲得身份證的18個數字
for (pos = 0;pos
<= 17;pos++)
//對身份證中前17個數字分別乘以對應的數字並把結果求和
for (pos = 0;pos
<= 16;pos++)
//驗證校驗碼
printf("正確的校驗碼是%d\n", arr1[sum % 11]);
if (arr1[sum % 11] == arr2[17])
else
return
0;}
/*
圈叉棋練習
*/#include
#include
void show(int
map[3], int);
int get_num(void);
void get_pos(int
map[3], int pos);
bool win(int
map[3], int, int, int, int, int, int);
void show(int
map[3], int size)
else
if (map[row][col] == 1)
else
}printf("\n");
}}int get_num(void) while (num < 1 || num > 3);
return num;
}void get_pos(int
map[3], int pos) while (map[pos[0] - 1][pos[1] - 1]);
}bool win(int
map[3], int row1, int col1, int row2, int col2, int row3, int col3)
else
}int main() , pos[2] = {}, loop = 0;
show(map, 3);
for (loop = 0;loop <= 8;loop++)
if (win(map, 1, 0, 1, 1, 1, 2))
if (win(map, 2, 0, 2, 1, 2, 2))
if (win(map, 0, 0, 1, 0, 2, 0))
if (win(map, 0, 1, 1, 1, 2, 1))
if (win(map, 0, 2, 1, 2, 2, 2))
if (win(map, 0, 0, 1, 1, 2, 2))
if (win(map, 0, 2, 1, 1, 2, 0))
}return
0;}
c語言指標和陣列
1 指標陣列問題和 指向陣列的指標。int multi 2 4 int p 4 如果我寫成 int p 可以麼?p multi 這是 多維陣列 和指標的關係,指標陣列比較容易理解。指標陣列 是乙個陣列,裡面都放著某種型別的指標。陣列指標 指向陣列的指標 int b new int 10 指向一維陣列...
C語言 指標和陣列
關於c語言中指標和陣列的爭論就像是一場惡戰。一方面,有些人覺得,所有人都必須承認指標與陣列是不同的。而另一些人則認為陣列被當成指標來處理,因此它們不應該有什麼區別。這種現象讓人迷惑。然而,這兩種說法其實都是正確的。陣列不是指標,指標也不能說是陣列。在c語言中,指標僅在記憶體中代表乙個位址,而陣列是許...
C語言 指標和陣列
const char p hello world const char array hello world 以上兩種宣告,p和array都使用了字串 hello world!的位址。在這種情況下,帶雙引號的字串本身決定了預留給字串的儲存空間,但這兩種形式並不是完全相同的。陣列形式和指標形式有何不同呢...