ios開發環境 分支語句 、 循環結構(for) 、 循環結構

1 完成命令解析程序

1.1 問題

有命令解析程序,該程序提供三個功能選項供用戶選擇,用戶選擇某功能後,程序在界面上輸出用戶所選擇的功能名稱。程序的交互效果如圖-1所示:函數

圖-1網站

由上圖能夠看出,程序提供的功能有:顯示所有記錄、查詢登陸記錄和退出。若是用戶在控制檯輸入1,則表示用戶選擇的功能爲「顯示所有記錄」,此時,須要在界面上輸出該功能的名稱。spa

若是用戶在控制檯輸入2,則表示用戶選擇的功能爲「查詢登陸記錄」,此時,也須要在界面上輸入該功能的名稱,交互效果如圖-2所示:對象

圖-2遊戲

若是用戶在控制檯輸入0,則表示用戶選擇的功能爲「退出」。此時,在界面上輸出「歡迎使用」,表示程序結束。交互效果如圖-3所示:ip

圖-3ci

若是用戶輸入除0、一、2之外的其它數字,則表示選擇錯誤,此時,在界面上輸出「輸入錯誤「。程序交互狀況如圖-4所示:數學

圖-4string

1.2 步驟

實現此案例須要按照以下步驟進行。it

步驟一:定義變量

變量command,用於保存用戶從控制檯輸入的命令。

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int command 0;
  5. return 0;
  6. }

步驟二:從控制檯輸入命令

首先,使用printf函數輸出一行提示。

而後,使用scanf函數輸入一個整數到變量command。

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int command 0;
  5. printf("請選擇功能:1.顯示所有記錄 2.查詢登陸記錄 0.退出\n");
  6. scanf("%d"&command);
  7. return 0;
  8. }

步驟三:使用switch解析命令

將switch結構配合break語句一塊兒使用,判斷用戶的選擇操做,並輸出解析結果。

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int command 0;
  5. printf("請選擇功能:1.顯示所有記錄 2.查詢登陸記錄 0.退出\n");
  6. scanf("%d"&command);
  7. switch (command{
  8. case 1:
  9. printf("顯示所有記錄\n");
  10. break;
  11. case 2:
  12. printf("查詢登陸記錄\n");
  13. break;
  14. case 0:
  15. printf("歡迎使用\n");
  16. break;
  17. default:
  18. printf("輸入錯誤\n");
  19. break;
  20. }
  21. return 0;
  22. }

1.3 完整代碼

本案例的完整代碼以下所示:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int command 0;
  5. printf("請選擇功能:1.顯示所有記錄 2.查詢登陸記錄 0.退出\n");
  6. scanf("%d"&command);
  7. switch (command{
  8. case 1:
  9. printf("顯示所有記錄\n");
  10. break;
  11. case 2:
  12. printf("查詢登陸記錄\n");
  13. break;
  14. case 0:
  15. printf("歡迎使用\n");
  16. break;
  17. default:
  18. printf("輸入錯誤\n");
  19. break;
  20. }
  21. return 0;
  22. }

2 求圓周率

2.1 問題

圓周率,通常以π來表示,是一個在數學及物理學廣泛存在的數學常數。它定義爲圓形之周長與直徑之比,也等於圓形面積與半徑的平方之比,是精確計算圓周長、圓面積、球體積等幾何形狀的關鍵值。

圓周率是一個無限不循環小數。在平常生活中,一般都用3.14來表明圓周率去進行近似計算。若是須要精確計算圓周率的值,則可使用以下公式:

π/4=1-1/3+1/5-1/7+1/9-1/11+……

本案例要求使用上述公式計算圓周率π的值。爲保證必定的精確度,要求計算至10億次後的結果。程序運行效果如圖-5:

圖-5

2.2 方案

計算π值的公式爲:

π=4*(1-1/3+1/5-1/7+1/9-1/11+1/13-1/15……)

有上述公式能夠看出,若是須要計算π的值,必須先計算表達式1-1/3+1/5-1/7+1/9-1/11+1/13-1/15……的值。分析此表達式,不難發現,此表達式中的每一個計算因子的構成相似,能夠總結出以下規律:flag * 1.0 / n。其中,flag表示每一個計算因子前面的正號或負號。好比,1能夠表示爲1*1.0/1;-1/3能夠表示爲-1*1.0/3;1/5能夠表示爲1*1.0/5。

對於表達式flag * 1.0 / n,flag和n是變化的數值,所以,能夠分別聲明變量來表示它,併爲其賦初始值,代碼以下:

  1. int flag -1;
  2. int n 1;

每次計算時,flag和n的值都會發生變化,其變化規律如表-1:

爲保證必定的精確度,要求計算至10億次後的結果,所以,須要使用for循環構建10億次的計算,而每次循環中,須要修改flag值,而後累加表達式flag*1.0/n的結果,並將n的數值加上2,用於下一次計算。程序流程圖如圖-6:

圖-6

2.3 步驟

實現此案例須要按照以下步驟進行。

步驟一:定義變量

定義變量pi,用於存儲計算出的π值。

定義變量flag,用於存儲計算過程當中的正號和負號。

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. double pi 0;
  5. int flag -1;
  6. return 0;
  7. }

步驟二:構建循環

結合變量n,使用for循環構建10億次計算。每次循環中,改變flag的值,並累加計算結果。

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. double pi 0;
  5. int flag -1;
  6. for (int n 1; n 1000000000; n +=2)
  7. {
  8. flag *= -1;
  9. pi += flag 1.0 / n;
  10. }
  11. return 0;
  12. }

步驟三:輸出結果

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. double pi 0;
  5. int flag -1;
  6. for (int n 1; n 1000000000; n +=2)
  7. {
  8. flag *= -1;
  9. pi += flag 1.0 / n;
  10. }
  11. printf("pi = %.15lf\n", pi 4);
  12. return 0;
  13. }

2.4 完整代碼

本案例的完整代碼以下所示:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. double pi 0;
  5. int flag -1;
  6. for (int n 1; n 1000000000; n +=2)
  7. {
  8. flag *= -1;
  9. pi += flag 1.0 / n;
  10. }
  11. printf("pi = %.15lf\n", pi 4);
  12. return 0;
  13. }

3 猜數字遊戲

3.1 問題

有猜數字遊戲,其遊戲規則爲:程序內置一個1~100之間的數字做爲猜想的結果,由用戶猜想此數字。用戶每猜想一次,由系統提示猜想結果:大了、小了或者猜對了;直到用戶猜對結果,則提示遊戲結束。

本案例要求使用交互的方式實現此遊戲,交互過程爲:

1) 遊戲剛開始,提示用戶在控制檯輸入所猜想的數字(爲1~100之間的整數),交互過程如圖-7所示:

圖-7

2) 用戶錄入所猜想的數字後,程序進行判斷:若是用戶所猜想的數字大於結果,則提示太大了;若是用戶所猜想的數字小於結果,則提示過小了。每次提示猜想結果後,提醒用戶繼續猜想。交互過程如圖-8所示:

圖-8

3) 直到用戶猜想正確,則由系統提示「恭喜,你猜對了!」,遊戲結束。交互過程如圖-9:

圖-9

3.2 方案

首先,此案例中,須要產生一個1~100之間的隨機整數,該數值就是用戶要猜想的結果;而後,提示用戶進行第一次猜想,並獲得用戶從界面所輸入的數字。

由於猜想的次數不肯定,則使用do-while循環來構建猜想的過程:判斷用戶所猜想的數字是否與結果相同,只有猜想不正確,則繼續循環。每次循環中,根據比較結果輸出提示信息(「太大了」或者「過小了」),並提示用戶進行下一次猜想。

若是用戶猜想正確,則循環結束,並提示用戶「恭喜,你猜對了!」,程序結束。程序流程圖以下圖-10:

圖-10

3.3 步驟

實現此案例須要按照以下步驟進行。

步驟一:定義變量

定義變量num,用於存儲系統生成的隨機數,即猜想對象。

定義變量guess,用於存儲用戶輸入的猜想值。

代碼以下:

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int num;
  7. int guess;
  8. return 0;
  9. }

步驟二:產生隨機數

srand和rand()配合使用產生僞隨機數序列。rand函數在產生隨機數前,須要系統提供的生成僞隨機數序列的種子,rand根據這個種子的值產生一系列隨機數。若是系統提供的種子沒有變化,每次調用rand函數生成的僞隨機數序列都是同樣的。srand(unsigned seed)經過參數seed改變系統提供的種子值,從而可使得每次調用rand函數生成的僞隨機數序列不一樣,從而實現真正意義上的「隨機」。一般能夠利用系統時間來改變系統的種子值,即srand(time(0)),能夠爲rand函數提供不一樣的種子值,進而產生不一樣的隨機數序列。

使用rand()函數返回一個0到RAND_MAX之間的隨機數。RAND_MAX爲2147483647。而後,將隨機數整除100求餘數,則能夠生成一個0~99之間的隨機數(包含0,也包含99),再加上數值1,則能夠獲得1~100之間的隨機整數(包含1,也包含100)表示要猜想的數字。

注意:rand()函數與srand()函數須要在程序開頭包含stdlib.h頭函數;time()函數須要在程序開頭包含time.h頭函數。

代碼以下:

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int num;
  7. int guess;
  8. srand((unsigned)time(0));//time函數的聲明在time.h頭函數中
  9. num rand() 100;//srand函數與rand函數的聲明在stdlib.h中
  10. return 0;
  11. }

步驟三:讀取猜想結果

提示用戶輸入猜想的數字,做爲一次猜想。代碼以下所示:

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int num;
  7. int guess;
  8. srand((unsigned)time(0));
  9. num rand() 100;
  10. printf("請輸入你猜想的數字(1~100):");
  11. scanf("%d"&guess);
  12. return 0;
  13. }

步驟四:判斷結果

使用if-else結構判斷用戶猜想的數字和實際數字的大小,並根據比較結果輸出提示信息(「太大了」或「過小了」)。代碼以下所示:

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int num;
  7. int guess;
  8. srand((unsigned)time(0));
  9. num rand() 100;
  10. printf("請輸入你猜想的數字(1~100):");
  11. scanf("%d"&guess);
  12. if (guess > num)
  13. printf("太大了\n");
  14. else if (guess < num)
  15. printf("過小了\n");
  16. return 0;
  17. }

步驟五:構建循環

若是用戶猜想的數字和實際數字不相等,則反覆要求用戶猜想,直到猜對爲止。

代碼以下所示:

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int num;
  7. int guess;
  8. srand((unsigned)time(0));
  9. num rand() 100;
  10. do
  11. {
  12. printf("請輸入你猜想的數字(1~100):");
  13. scanf("%d"&guess);
  14. if (guess > num)
  15. printf("太大了\n");
  16. else if (guess < num)
  17. printf("過小了\n");
  18. }while(num != guess);
  19. return 0;
  20. }

步驟六:遊戲結束

若是用戶猜想的數字和實際數字相等,則表明用戶猜想正確,終止循環,並提示用戶正確信息「恭喜,你猜對了!」。

代碼以下所示:

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int num;
  7. int guess;
  8. srand((unsigned)time(0));
  9. num rand() 100;
  10. do
  11. {
  12. printf("請輸入你猜想的數字(1~100):");
  13. scanf("%d"&guess);
  14. if (guess > num)
  15. printf("太大了\n");
  16. else if (guess < num)
  17. printf("過小了\n");
  18. }while(num != guess);
  19. printf("恭喜,你猜對了!\n");
  20. return 0;
  21. }

3.4 完整代碼

本案例的完整代碼以下所示:

  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <stdlib.h>
  4. int main()
  5. {
  6. int num;
  7. int guess;
  8. srand((unsigned)time(0));
  9. num rand() 100;
  10. do
  11. {
  12. printf("請輸入你猜想的數字(1~100):");
  13. scanf("%d"&guess);
  14. if (guess > num)
  15. printf("太大了\n");
  16. else if (guess < num)
  17. printf("過小了\n");
  18. }while(num != guess);
  19. printf("恭喜,你猜對了!\n");
  20. return 0;
  21. }

4 登陸合法判斷程序

4.1 問題

建立C語言程序,模擬網站的登陸驗證過程。需求爲:從控制檯輸入密碼,由程序判斷密碼是否正確,若是密碼正確,則登陸成功,程序交互過程如圖-11:

圖-11

若是密碼不正確,則反覆要求輸入密碼,程序交互過程如圖-12:

圖-12

4.2 方案

本案例的實現方案如圖-13所示:

圖-13

4.3 步驟

實現此案例須要按照以下步驟進行。

步驟一:定義變量

變量password,用於保存用戶從控制檯輸入的密碼。

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int password;
  5. return 0;
  6. }

步驟二:從控制檯輸入密碼

首先,使用printf函數輸出一行提示,提示輸入一個密碼。

而後,使用scanf函數輸入一個整數到變量password。

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int password;
  5. printf("請輸入密碼:");
  6. scanf("%d"&password);
  7. return 0;
  8. }

步驟三:構建循環

構建循環,循環的終止條件是用戶輸入的密碼不正確,循環體爲步驟二的輸入密碼。代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int password;
  5. do {
  6. printf("請輸入密碼:");
  7. scanf("%d"&password);
  8. while (password != 123456);
  9. return 0;
  10. }

步驟四:輸入的密碼正確,顯示登陸成功

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int password;
  5. do {
  6. printf("請輸入密碼:");
  7. scanf("%d"&password);
  8. while (password != 123456);
  9. printf("登陸成功\n");
  10. return 0;
  11. }

4.4 完整代碼

本案例的完整代碼以下所示:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int password;
  5. do {
  6. printf("請輸入密碼:");
  7. scanf("%d"&password);
  8. while (password != 123456);
  9. printf("登陸成功\n");
  10. return 0;
  11. }

5 輸入整數,輸出全部整數的和

5.1 問題

編寫一個求和程序。用戶從控制檯輸入的整數的個數不受限制,直到輸入整數0爲止。將輸入的整數逐個相加後,把結果輸出。控制檯交互狀況如圖-14:

圖-14

5.2 方案

本案例的實現方案如圖-15所示:

圖-15

5.3 步驟

實現此案例須要按照以下步驟進行。

步驟一:定義變量

變量num,用於保存用戶從控制檯輸入的整數。

變量sum,用於保存輸入的整數的累加和。

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num;
  5. int sum 0;
  6. return 0;
  7. }

步驟二:從控制檯輸入整數

首先,使用scanf函數輸入一個整數到變量num。

而後,將輸入的整數累加到變量sum中。

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num;
  5. int sum 0;
  6. scanf("%d"&num);
  7. sum += num;
  8. return 0;
  9. }

步驟三:構建循環

構建循環,循環的終止條件是用戶輸入的整數爲0,循環體爲步驟二的輸入整數和將輸入的整數求累加和。代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num;
  5. int sum 0;
  6. do
  7. {
  8. scanf("%d"&num);
  9. sum += num;
  10. }while(num != 0);
  11. return 0;
  12. }

步驟四:輸出累加和

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num;
  5. int sum 0;
  6. do
  7. {
  8. scanf("%d"&num);
  9. sum += num;
  10. }while(num != 0);
  11. printf("sum = %d\n", sum);
  12. return 0;
  13. }

5.4 完整代碼

本案例的完整代碼以下所示:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int num;
  5. int sum 0;
  6. do
  7. {
  8. scanf("%d"&num);
  9. sum += num;
  10. }while(num != 0);
  11. printf("sum = %d\n", sum);
  12. return 0;
  13. }

6 打印10之內的整數,跳過5

6.1 問題

在控制檯上打印0、一、二、三、四、六、七、八、9,注意5不打印,效果如圖-16所示:

圖-16

6.2 方案

本案例的實現方案如圖-17所示:

圖-17

6.3 步驟

實現此案例須要按照以下步驟進行。

步驟一:構建循環

構建循環,循環10次,循環體爲輸出循環變量i。代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. for (int i 0; i 10; i++)
  5. {
  6. printf("%d ", i);
  7. }
  8. printf("\n");
  9. return 0;
  10. }

步驟二:循環變量i爲5時,循環體不打印循環變量

在循環體中插入代碼,代碼的功能是判斷循環變量是否爲5,若是是將繼續循環,再也不打印循環變量。

代碼以下:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. for (int i 0; i 10; i++)
  5. {
  6. if (== i)
  7. continue;
  8. printf("%d ", i);
  9. }
  10. printf("\n");
  11. return 0;
  12. }

6.4 完整代碼

本案例的完整代碼以下所示:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. for (int i 0; i 10; i++)
  5. {
  6. if (== i)
  7. continue;
  8. printf("%d ", i);
  9. }
  10. printf("\n");
  11. return 0;
  12. }

7 用for循環嵌套打印各類圖形(矩形,三角)

7.1 問題

在控制檯上打印矩形圖形,效果如圖-18所示:

圖-18

在控制檯上打印三角形,效果如圖-19所示:

圖-19

7.2 方案

此方案須要使用嵌套循環來實現。

由圖-20可知,矩形一共須要輸出5行10列星:

圖-20

5行須要一個循環5次的循環,代碼以下所示:

  1. //變量i用於控制行數
  2. for (int i=0; i<5; i++) {
  3. }

在輸出每行中的內容時,還須要一個循環10次的循環,在一行中輸出10列,即10個星,代碼以下所示:

  1. //變量i用於控制行數
  2. for (int i=0; i<5; i++) {
  3. //變量j用於控制列數
  4. for (int j=0; j<10; j++) {
  5.          }
  6. }

由下圖可知,三角形一共須要輸出5行,第1行先輸出4個空格,再輸出一顆星,第2行先輸出3個空格,再輸出3顆星,第3行先輸出2個空格,再輸出5顆星,第4行先輸出1個空格,再輸出7顆星,第5行不輸出空格,直接輸出9顆星,詳見圖-21:

圖-21

打印5行星,須要一個循環5次的循環來完成,代碼以下:

  1. //變量i用於控制行數
  2. for (int i=0; i<5; i++) {
  3. }

在輸出每行中的內容時,首先須要打印空格,行數每增長1行,空格就少打一個,因此打印空格也須要一個循環來完成。而後打印星,行數每增長1行,星就多打兩個,因此打印星還須要一個循環來完成。這樣,在輸出每行時,實際上須要兩個循環分別打印空格和星。代碼以下所示:

  1. //變量i用於控制行數
  2. for (int i 0; i 5; i++)
  3. {
  4. //變量j用於控制每行中須要打印的空格個數,i等於0時,第1行打印4個空格,i等於1時,第2行打印3個空格,……
  5. for (int j 4; j > i; j--)
  6.          {
  7. }
  8. //變量j還用於控制每行中須要打印的星個數,i等於0時,第1行打印1個星,i等於1時,第2行打印3個星,i等於2時,第3行打印5個星,……
  9. for (int j 0; j < i 1; j++)
  10. {
  11. }
  12. printf("\n");
  13. }

7.3 步驟

實現此案例須要按照以下步驟進行。

步驟一:打印矩形

在main方法中,構建兩層嵌套的for循環:外層循環用於控制行,內層循環用於控制某行上的星。須要注意的是,每行輸出完畢後,須要換行。代碼以下所示:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. //變量i用於控制行數
  5. for (int i=0; i<5; i++) {
  6. //變量j用於控制列數
  7. for (int j=0; j<10; j++) {
  8. printf("*");
  9. }
  10. //每行輸出完畢後,須要換行
  11. printf("\n");
  12. }
  13. printf("---------------------------\n");
  14. return 0;
  15. }

步驟二:打印三角形

在main方法中,構建兩層嵌套的for循環:外層循環用於控制行,內層循環有兩個,一個用於控制某行上輸出的空格,一個用於控制某行上輸出的星。須要注意的是,每行輸出完畢後,須要換行。代碼以下所示:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. printf("---------------------------\n");
  5. //變量i用於控制行數
  6. for (int i 0; i 5; i++)
  7. {
  8. //變量j用於控制每行中須要打印的空格個數
  9. for (int j 4; j > i; j--)
  10. printf(" ");
  11. //變量j還用於控制每行中須要打印的星個數
  12. for (int j 0; j < i 1; j++)
  13. printf("*");
  14. printf("\n");
  15. }
  16. return 0;
  17. }

7.4 完整代碼

本案例的完整代碼以下所示:

 
  1. #include <stdio.h>
  2. int main()
  3. {
  4. //變量i用於控制行數
  5. for (int i=0; i<5; i++) {
  6. //變量j用於控制列數
  7. for (int j=0; j<10; j++) {
  8. printf("*");
  9. }
  10. printf("\n");
  11. }
  12. printf("---------------------------\n");
  13. //變量i用於控制行數
  14. for (int i 0; i 5; i++)
  15. {
  16. //變量j用於控制每行中須要打印的空格個數
  17. for (int j 4; j > i; j--)
  18. printf(" ");
  19. //變量j還用於控制每行中須要打印的星個數
  20. for (int j 0; j < i 1; j++)
  21. printf("*");
  22. printf("\n");
  23. }
  24. return 0;
  25. }
相關文章
相關標籤/搜索