學習內容
全局變量與局部變量
switch語句
for循環
while循環
Break與Continue關鍵字
printf與scanf相關
數組
rand() 與 srand()函數
循環訓練demon之ATM
循環訓練demon之記數字
數組訓練之不同隨機數
1.全局變量與局部變量
因為變量作用域的不同,分為了局部變量與全局變量
全局變量
在所有函數外部定義的變量
作用域是從聲明時刻開始,到程序結束局部變量
函數內部定義的變量
作用域僅限于函數內部, 離開該函數后就是無效的,再使用就會報錯
- 在同一源文件中,允許全局變量和局部變量同名,在局部變量作用域內,同名的全局變量不起作用
- 允許在不同的函數中使用相同的變量名,他們代表不同變量
- 當全局變量與局部變量重名的時候,起作用的是局部變量,全局變量被屏蔽掉
- 局部變量不能賦值為同名全局變量的值
#include <stdio.h> int a = 3;//全局變量 int main(){ int a = 4;//局部變量 printf("a = %d",a); return 0; } 輸出: a = 4
2.switch語句
一個變量有多種值的情況下,不同值對應的情況不同,根據不同的值執行不同的語句
switch(表達式){ case 常量表達式1: 語句 1; case 常量表達式2: 語句 2; ...... case 常量表達式n: 語句 n; default: 語句 n+1; }
- 表達式必須是一個常量(int,char類型等)或者枚舉類型
- 表達式與常量表達式必須都是相同的數據類型
- 當表達式的值等于某個常量表達式的值之后,執行該表達式之后的語句
- 當語句中出現 break 的時候,語句中斷,并跳出 switch
- 如果 case 語句不包含 break,控制流將會繼續后續的 case,直到遇到 break 為止
- 一個 switch 語句可以有一個可選的 default case,出現在 switch 的結尾
//通過輸入1-3來判斷輸入的結果 int main(){ int a = 0; printf("請輸入一個數1-3:"); scanf("%d", &a); switch(a){ case 1: printf("你輸入的是1\n"); break; case 2: printf("你輸入的是2\n"); break; default: printf("你輸入的是3\n"); break; } return 0; } 輸出: 請輸入一個數1-3:3 你輸入的是3
3.for循環
for( init ; condition ; increment ){ 語句 // init : 循環變量賦初值(表達式1) //condion : 循環條件(表達式2) //increment : 循環變量增值(表達式3) }
- 循環控制變量的定義和初始化只執行一次
- 表達式1、表達式2和表達式3之間是用分號
;
隔開的- for(表達式1;表達式2;表達式3)的后面不要加(
;
)分號- for 循環的循環條件(condition)是決定循環的次數
- for( ; ; )與while(1) 等價,都是死循環,不停的執行語句
int main(){ //輸出1-10 之間的整數 for(int i = 1; i <=10; i++){ printf("i = %d\n", i); } //輸出不停輸出1-10之間的整數 for(int i = 1; i <= 10; i++){ printf("i = %d\n", i); if(i == 10){ i = 0; } } //死循環 for(; ;) { } return 0; } 輸出: 第一個循環輸出 i = 1 到 i =10; 第二個循環持續輸出 i = 1 到 i =10 ; 第三個循環死循環,一直加載,從未停止;
4.while循環
while(表達式){ 語句塊 } //表達式:循環條件 //語句塊:循環體
- 先計算“表達式”的值,當值為真時, 執行“語句塊”
- 執行完“語句塊”,再次計算表達式的值,如果為真,繼續執行“語句塊”
- 重復執行這個過程,直到表達式的值為假,就退出循環,執行 while 語句后面的代碼
//使用while循環打印1-100的和 int main(){ int i=1;//控制循環條件 int sum=0;//總和 while(i<=100){ sum+=i; i++; } printf("sum = %d\n",sum); return 0; } 輸出: sum = 5050
5.Break與Continue關鍵字
Break
在 switch 語句,當遇到 break 時,不再執行 switch 中的任何語句
在 while,for 循環當中,當遇到 break 時,會終止循環而執行整個循環語句后面的代碼
Continue
跳過循環體中剩余的語句而強制進入下一次循環 (只用于 while、for 循環語句當中)
6.printf與scanf相關
緩沖區:輸入輸出流
printf
向終端輸出字符串
先將字符串內容輸入到緩沖區,之后再依次輸出緩沖區內容printf
scanf
接收終端的輸入
在緩沖區里讀數據,當緩沖區里有對應類型數據,就從緩沖區里面取數據
如果沒有對應類型數據,就等待用戶輸入數據scanfgetchar(): 從緩沖區讀取一個字符
#include <stdio.h> int main(){ char a; printf("請輸入a:"); scanf("%c", &a); char b; printf("請輸入b:"); getchar(); scanf("%c", &b); char c; printf("請輸入c:"); scanf("%c", &c); printf("\na=%c b=%c c=%c\n",a,b,c); return 0; } 輸出 請輸入a:A 請輸入b:B 請輸入c: a=a b=b c=
輸入 A ,按下回車之后,緩沖流里面為
A\n
之后取出 A 放到 a 的地址里面,此時緩沖區還剩下\n
輸入 B,按下回車之后,此時緩沖區里面為\nB\n
getchar()從緩沖區里面拿走一個\n,緩沖里還剩下B\n
之后取出 B 放到 b 的地址里,此時緩沖區還剩下\n
因為緩沖區里面有字符\n
,scanf就將緩沖里的內容放到 c 的地址里
所以當我們輸入A,B之后,就直接輸出了結果
7.數組
數組:用于儲存多個相同類型數據的集合
數組相關
- 能夠存儲數據 就必須要有內存
- 如何定義一個數值的同時為他分配內存
- 數組定義時必須明確知道數組的大小
- 數組名就是數組的首地址
聲明數組
在C 語言中,聲明一個數組,需要指定元素的類型和元素的數量
//數組聲明格式 type arrayName [arraySize]; //arrayName:數組名字 //[]:數組標識 //type:數組存儲類型 //arraySize:數組大小
初始化數組
- C 語言當中,可以逐個初始化數組,也可以使用一個初始化語句。大括號 { } 之間的值的數目不能大于我們在數組聲明時在方括號 [ ] 中指定的元素數目。
int a[4] = {2,45,21,45};
- 如果您省略掉了數組的大小,數組的大小則為初始化時元素的個數。
int a[] = {2,3,564,7};
- 在定義時期明確指定數組的大小
int temp[5];
數組元素賦值
a[3] = 56; //將數組第4個位置的值賦為56
8.rand() 與 srand()函數
rand()函數
函數頭文件:stdlib.h
函數定義:int rand(void)
函數功能:產生一個隨機數
返回值: 返回0至RAND_MAX之間的隨機整數值
srand()函數
函數頭文件:stdlib.h
函數定義:void srand(unsigned int seed)
函數功能:設置隨機數種子
函數說明:通常可以用getpid()(獲取當前進程的進程識別碼)或者time(NULL)(獲取當前系統的時間信息)來充當種子,保持每次運行時種子是不一樣的#include <stdio.h> #include <time.h> #include <stdlib.h> int main(){ for(int i = 0;i < 5;i++){ //產生1-10以內的數字 int temp = rand()%9 + 1; printf("%d ",temp); } printf("\n"); srand(time(NULL));//播種 for(int i = 0;i < 5;i++){ int temp1 = rand()%9 + 1; printf("%d ",temp1); } return 0; } 輸出:(第一次結果) 6 9 8 5 9 5 3 1 4 6 輸出:(第二次次結果) 6 9 8 5 9(與第一次相同) 5 2 1 7 2
9.循環訓練demon之ATM
#include <stdio.h> int main(){ int old = 123;//原始密碼 int input;//輸入密碼 int wrongTime = 3; //錯誤次數 printf("**********************\n"); printf(" 歡迎使用建設銀行系統\n"); printf("**********************\n"); printf("請輸入密碼:"); for(int i = 1;i <= wrongTime; i++){ scanf("%d", &input); //判斷密碼 if(input == old){ //密碼正確 break; } if(i == wrongTime){ printf("錯誤次數過多!\n"); return 1; } //密碼不正確 printf("密碼不正確,請重新輸入密碼:"); } int choice;//接收用戶選擇 char goon;//是否繼續 for(; 1 < 2;){ //主界面 printf("*****************************\n"); printf("1.存款\n"); printf("2.取款\n"); printf("3.查詢\n"); printf("4.更改密碼\n"); printf("5.退出\n"); printf("*****************************\n"); //提示用戶選擇 printf("請選擇操作:"); scanf("%d", &choice); //判斷操作 switch(choice){ case 1: //存款 int temp;//存款金額 printf("請輸入存款金額:"); scanf("%d", &temp); total += temp; printf("存款成功!可用余額為:%d\n",total); break; case 2: //取款 int temp2;//取款金額 for(;1<2;){ printf("輸入取款金額:"); scanf("%d", &temp2); if(temp2 > total){ printf("余額不足 "); }else{ total -= temp2; printf("取款成功 余額為%d\n",total); break; } } break; printf("當前余額為:%d\n",total); break; case 4: //更改密碼 int n1;//第一次輸入的密碼 int n2;//第二次輸入的密碼 for(;1<2;){ printf("請輸入新密碼:"); scanf("%d", &n1); printf("請確認密碼:"); scanf("%d", &n2); if (n1 == n2){ printf("密碼設置成功!\n"); old = n1; break; } else{ printf("兩次輸入不一致!"); } } break; default://退出 exit(EXIT_SUCCESS);//成功退出 break; } //提示是否繼續 for(;1<2;){ printf("是否繼續(y/n):"); getchar(); scanf("%c", &goon); if(goon == 'y'){ break; } if (goon == 'n'){ exit(EXIT_SUCCESS); } printf("輸入無效 "); } } return 0; }
10.循環訓練demon之記數字
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> int main(){ int count = 3;//記錄每次生成多少個隨機數 while(1){ unsigned int seed = time(NULL); //設置產生種子的時間固定 //設置隨機數的種子 srand(seed); for(int i = 0; i < count; i++){ //生成一個隨機數 int temp2 = rand() % 9 + 1; printf("%d ",temp2); } printf("\n"); // 延時2s Sleep(2000); //刷新屏幕 system("cls"); int temp;//定義用戶輸入的變量 printf("請輸入:"); //重新設種子和之前生成時的種子一樣 srand(seed); //接收用戶輸入 一個一個接收 for(int i = 0; i < count; i++){ scanf("%d", &temp); //獲取對應的生成的隨機數 int old = rand() % 9 + 1; //比較輸入的和隨機數是否相同 if (temp != old){ printf("錯誤 退出!\n"); exit(EXIT_SUCCESS); } } printf("正確!\n"); //增加產生數字的個數 count++; } return 0; }
11.數組訓練之不同隨機數
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ int array[4] = {}; srand(time(NULL));//初始化隨機種子 for (int i = 0; i < 4; i++){ //產生一個隨機數 int temp = rand() % 4; if (i == 0){//第一個隨機數 直接保存到數組 array[i] = temp; }else{ //判斷前面是否已經存在了 int j = 0; for(; j <i; j++){ //比較j對應的值和temp是否相同 if(array[j] == temp){ //重復了 打印重復了的數字 printf("重復了:%d\n",temp); break; } } //判斷是怎么出來的 if (j == i){ //將i前面的比較一遍都沒發現重復的 //保存temp值 array[i] = temp; }else{ //重復了 //重新回到當前這一次 i--; } } } //輸出 for (int i = 0; i< 4; i++){ printf("%d ", array[i]); } return 0; }