目的:掌握用C語言編程的基本技能
內容:1.全局變量與局部變量
???2.switch語句
???3.for循環
???4.while循環
???5.break與continue
???6. getchar()的運用
???7. 數組
???8. while訓練之十進制轉化為二進制
???9. 數組訓練之產生不同隨機數
???10. "最強大腦“小游戲實戰
???11. ATM實戰
全局變量與局部變量
根據變量的作用域不同,可分為全局變量和局部變量
1.全局變量:在所有函數外部定義的變量(即在main函數前面定義的變量),作用域為從聲明開始到程序結束
?局部變量:在函數內部定義的變量(即在代碼塊之間定義的變量),作用域僅限于函數內部,離開該函數后無效
2.在同一源文件中,允許全局變量與局部變量重名。重名時,在局部變量作用域內,起作用的是局部變量,同名的全局變量被屏蔽
3.允許在不同的函數中使用相同的變量名,因為它們代表不同的變量
4.局部變量不能賦值為同名全局變量的值#include <stdio.h> int a = 0;//全局變量 int main(){ int a = 1;//局部變量 printf("a = %d",a);//輸出 a = 1 return 0; }
switch語句
1.用于一個變量有多個確定的值,而不同的值對應的執行語句不同的情況,格式如下:
switch(表達式){ case 常量表達式1: 語句1: case 常量表達式2: 語句2; ...... case 常量表達式 n: 語句n; default: 語句 n + 1 ; }
2.注意:
- 表達式必須是一個常量(如 int,char類型等)或者枚舉類型,且表達式與常量表達式必須是相同的數據類型
- 當表達式的值為某個常量表達式時,執行該表達式后的語句
- 當語句中出現break時,語句中斷并跳出switch;如果沒有出現break,控制流將繼續執行后面的case,直到遇到break才結束
- 一個switch語句可以有一個出現在switch語句末端的default case
#include <stdio.h> 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; }
for循環
1.for循環的格式為:for(循環控制變量;運行的條件;控制變量的變化){語句塊}
例如: for(int i=0;i<10;i++){printf("%d",i);}
- for循環中間條件是必須的,其他部分可以省略,但分號不可以省略
如:for(;1<2;)3.循環控制變量的定義和初始化只執行一次
4.循環控制變量什么時候變化?當這一次循環結束之后
5.for( ; ; )與while(1)等價,都時不停執行語句的死循環int main(){ 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; } }//不斷輸出1-10之間的整數 for(; ;) { }//死循環
while循環
- while循環的格式為:while(表達式){語句塊}
- 先計算表達式的值,當值為真時,執行語句塊
- 執行完語句塊后再次計算表達式的值,如果為真,繼續執行語句塊
- 重復執行這個過程,直到表達式的值為假再退出循環,執行while語句后的代碼
#include <stdio.h> //使用while循環計算1-10的和 int main(){ int a = 1; int sum = 0; while(a <= 10){ sum += a; a++; } printf("%d",sum); return 0; }
break與continue
- break:
在switch語句中,當遇到break時,跳出switch;在while和for循環中,當遇到break時,會跳出循環而執行后面的代碼- continue(只用于while和for循環語句):
跳過循環體中剩余語句而強制進入下一次循環
getchar()的運用
- getchar()用于從緩沖區取走一個字符
- 輸入1,按下回車鍵后,緩沖區里為1\n,之后1被放到a的地址中,此時緩沖區剩下\n
輸入2,按下回車鍵后,緩沖區里為\n2\n,而getchar()從緩沖區取走一個\n,緩沖區剩下2\n,之后2被放到b的地址中,此時緩沖區剩下\n
輸入3,按下回車鍵后,緩沖區里為\n3\n,而getchar()從緩沖區取走一個\n,緩沖區剩下3\n,之后3被放到c的地址中,此時緩沖區剩下\n#include <stdio.h> int main(){ char a; printf("請輸入a:"); scanf("%c", &a); char b; printf("請輸入b:"); getchar(); scanf("%c", &b); char c; printf("請輸入c:"); getchar(); scanf("%c", &c); printf("a=%c b=%c c=%c\n",a,b,c); return 0; } /*程序運行: 請輸入a:1 請輸入b:2 請輸入c:3 a=1 b=2 c=3*/
數組
- 數組:用于儲存多個相同類型數據的集合
- 數組的聲明格式: 數組儲存類型+數組名字+[數組大小]
例如:int array[3]- 數組名就是數組的首地址
- 系統為數組分配內存空間的時候,必須明確知道數組元素的個數
- 在C語言中,可以逐個初始化數組,也可以使用一個初始化語句
- 數組的初始化:
- 定義時要明確指定數組的大小,如:
int array1[4];
- 如果省略了數組的大小,數組的大小則為初始化時元素的個數,如:
int array[] = {1,2,3,4};
- 大括號里,值的數目不能大于數組聲明時在方括號里指定的數組大小,如:
int array2[2] = {1,2};
- 數組元素的賦值:
array[0] = 2;//將數組第1個位置賦值為2 array[1] = 23;//將數組第2個位置賦值為23
while訓練之十進制轉化為二進制
#include <stdio.h> int main(){ int num; printf("請輸入一個數字:"); scanf("%d",&num); //二進制 int wei = 1; long long sum = 0; while(1){ //取余 int yu = num % 2; num = num / 2; //目前的總和:當前位數的值 + 之前的值 sum = sum + yu * wei; wei = wei * 10; if(num < 2){ sum = sum + num * wei; break; } } printf("%d\n",sum); return 0; }
數組訓練之產生不同隨機數
#include <stdio.h> #include <stdlib.h> #include <time.h> //4.產生4個(不同)隨機數 保存到數組 輸出 int main(){ int array[4] = {}; srand(time(NULL)); /*生成數組 產生隨機數的同時比較是否重復 如果重復就重新產生一個隨機數 如果不重復就保存 每次i的值正好可以用來判斷已經有幾個數了*/ for(int i = 0;i < 4;i++){ int temp = rand() % 100; if(i == 0){ //第一個 直接保存 array[i] = temp; }else{ //判斷前面是否已經存在這個數 int j = 0; for(;j < i;j++){ //比較j對應的值和temp是否相同 if(array[j] == 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; }
"最強大腦“小游戲實戰
#include <stdio.h> #include <stdlib.h>//設置隨機數需導入該頭文件 #include <time.h>//設置隨機數需導入該頭文件 #include <windows.h>//設置延時需導入該頭文件 int main(){ int count = 3;//記錄每次生成多少個隨機數 printf("歡迎來到最強大腦!游戲開始!\n"); while(1){ unsigned int seed = time(NULL);//1000 //設置隨機數的種子 srand(seed); for(int i = 0;i < count;i ++){ //生成一個隨機數 int temp = rand() % 9 + 1; printf("%d\n",temp); } //延時2s Sleep(2000); //for(int i = 0;i < 10000000000/15*2;i++) //刷新屏幕 system("cls"); /* mac: for(int i = 0;i < 20;i++){ printf("\n"); } */ int input; printf("請輸入你看到的數字:"); //重新設種子 和之前生成的種子一樣 srand(seed); //接收用戶輸入 一個一個接收 for(int i = 0;i < count;i++){ scanf("%d",&input); //獲取對應生成的隨機數 int old = rand() % 9 + 1; //判斷輸入的數和隨機數是否相同 printf("old:%d\n",old); if(input != old){ printf("錯誤 退出!\n"); exit(EXIT_SUCCESS); } } count ++; } return 0; }
ATM實戰
#include <stdio.h> #include <stdlib.h> int main(){ int password = 123;//原始密碼 int input;//輸入密碼 int wrongtime = 3;//錯誤次數 int total = 1000;//余額 printf("*****************************\n"); printf(" 歡迎使用建設銀行 \n"); printf("*****************************\n"); printf("請輸入密碼:"); for(int i = 1;i <= wrongtime;i ++){ scanf("%d",&input); //輸入密碼 //密碼正確 if(input == password){ 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; case 3://查詢余額 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"); password = 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; }