七、判斷(二)

来源:https://www.cnblogs.com/piaolaipiaoqu/archive/2023/11/13/17830630.html
-Advertisement-
Play Games

七、判斷(二) 引:學校舉辦了一個抽獎獲得,根據學號給予學生獎勵,學生獎勵如下: 學號 獎勵 15692 現金500 65432 現金450 98741 現金250 2531 現金150 666 學號*2 321 學號*2 //if語句實現 #include <iostream> int main( ...


七、判斷(二)

引:學校舉辦了一個抽獎獲得,根據學號給予學生獎勵,學生獎勵如下:

學號 獎勵
15692 現金500
65432 現金450
98741 現金250
2531 現金150
666 學號*2
321 學號*2
//if語句實現
#include <iostream>

int main()
{
	unsigned int sId{}, sPr{};  //定義學生學號和獎勵
	std::cout << "請輸入你的學號:";
	std::cin >> sId;
	if (sId == 15692) sPr = 500;
	if (sId == 65432) sPr = 450;
	if (sId == 98741) sPr = 250;
	if (sId == 2531) sPr = 150;
	if (sId == 666) sPr = sId*2;
	if (sId == 321) sPr = sId*2;

	std::cout << "恭喜你獲得了獎學金" << sPr << "人民幣";
}

1、switch語句

註:if語句中的條件是一個bool類型值,switch語句的條件是一個整數值

1)switch語法

//switch語法
switch(值)          //值是一個整數值,裡面的值不管是小數還是其他類型的值預設都會轉化為整數類型
{
        case 選項1:        //選項和switch中的值進行比較
            break;
        case 選項2:
            break;
        case 選項3:
        case 選項4:
            break;
    	default:    //前面的選項沒有的一律會進入default,需要再加個break返回
        	break;
        
        
}

2)上述案例實現

//switch實現用戶抽獎
#include <iostream>

int main()
{
	unsigned int sId, sPr{};  //定義學生學號和獎勵
	std::cout << "請輸入你的學號:";
	std::cin >> sId;
	switch(sId)
	{
		case 15692:
			sPr = 500;
			break;       //遇到break跳出switch語句
		case 65432:
			sPr = 450;
			break;
		case 98741:
			sPr = 250;
			break;
		case 2531:
			sPr = 150;
			break;
		case 666:         //等於666,因沒有break,自動執行下麵的語句,同樣使得sId*2
		case 321:
			sPr = sId*2;        //等同於sId << 1;
			break;
		default:    //上述條件都未滿足,則執行default中的代碼
			std::cout << "對不起,你未參加本次的抽獎!!";
			break;
	}
	if(sPr)std::cout << "恭喜你獲得了獎學金" << sPr << "人民幣";  //Spr==0不執行該語句
}

3)switch語法C++17升級內容【fallthrough

switch(值)          
{
        case 選項1:        
            break;
        case 選項2:
            break;
        case 選項3:
            [[fallthrough]];  //貫穿選項。表示選項3以後直接執行選項4,而不是因為開發人員漏寫了break
        case 選項4:
            break;
    	default:    
        	break;
}
2、語句塊中的變數聲明方式

1)if語句

①if語句中臨時變數的聲明

if(條件)
{
    變數聲明;   //變數在哪用,在那聲明
}
else
{
    變數聲明;  //上面定義的變數,在else中無法使用
}

②c++17新語法中臨時變數的聲明

if(變數聲明;條件)   //if(int a;a>0){ }else{ }
{
    變數使用;      //if中聲明的變數,在if代碼塊和else代碼塊中都可以使用
}
else
{
    變數使用
}

2)switch語句中臨時變數的聲明

switch(變數聲明,值)          //switch(int a{},300){...}
{
        case 選項1:        
            break;
        case 選項2:
            break;
    	default:    
        	break;
}
3、C語言格式化輸出流及轉義

1)printf格式化輸出

字元 含義 示例
d 十進位整數 print("我叫%s,年齡%d","張三",20);
o 八進位整數
u 無符號十進位整數 將負號去掉
x/X 十六進位整數
f float小數
lf double小數
s 字元串
0 用0來補齊 %05d即00001
+ 替數字輸出符號%+ d %+05d 會將符號表述出來
#include <iostream>
int main()
{
	int age{ 18 };
	printf("你好,世界!!!\n");
	printf("我叫%s,我的年齡%d歲", "張三\n",age);
	printf("0x%X\n",age); //十六進位輸出
	printf("%05d\n", age); //字元對其
	printf("%+d", age); //輸出符號
}

2)scanf格式化輸入

字元 含義
d 十進位整數
o 八進位整數
u 無符號十進位整數
x/X 十六進位整數
f float小數
lf double小數
s 字元串%s
#include <iostream>
int main()
{
	int age{  };
	printf("請輸入你的年齡:");
	scanf_s("%d",&age);
	printf("輸入的年齡為:%d",age);
}

註:**&為取值運算符,&a,表示取a的地址

3)無顯示的輸入

//輸入鍵盤上的字元後,不顯示到屏幕上 
#include <iostream>
#include <conio.h>
int main()
{
	int uin = _getch();    //輸入一個字元,會將輸入的字元或者數字,通過ASCII表翻譯成整數(輸入的是鍵盤按鍵的值)
	std::cout << "你輸入的字元為:"<<uin << std::endl;
}

4、goto語句

1)goto語句語法

//goto語法
標簽:
goto 標簽;

註:goto常和判斷一起使用

2)案例:

//goto案例
#include <iostream>

int main()
{
	char a;
linput:
	printf("請輸入一個大寫字母:");
	std::cin >> a;
	if (a > 64 && a < 91)
	{
		a += 32;
		std::cout << "轉化後的小寫字母為:" << a << std::endl;
		goto linput;   //跳到標簽定義的位置,重覆執行
	}
	else
	{
		printf("你輸入的內容不符合要求,請重新輸入\n");
		goto linput;  //跳到標簽定義的位置,重覆執行
	}

}

5、案例:網銀證書密碼攻擊(安全實驗)

需求:設計一個系統來模擬網銀密碼被攻擊的場景,用戶輸入一個6位的數字密碼,然後我們破解它的密碼

#include <iostream>
#include <conio.h>

int main()
{
linput:
	int password,repassword;
	std::cout << "請輸入一個6位數數字密碼:";
	std::cin >> password;
	std::cout << "請你再數一次你的數字密碼:";
	std::cin >> repassword;

	if (password == repassword)
	{
		if (password > 999999) goto linput;
		system("cls");
		std::cout << "密碼設置成功,請按任意鍵進入密碼破解系統\n";
		_getch();
		int testpass{};
lhack:
		if (testpass != password)
		{
			testpass++;
			goto lhack;
		}
		else std::cout << "密碼為:" << testpass;

	}
	else goto linput;

}
6、if語句和switch語句的出場時機

註:switch語句效率比if語句的效率高,超過3個判斷儘量使用switch

if語句和switc語句彙編比較

cmp指令表示比較;jmp相當於goto,進行跳轉

7、項目:設置游戲技能

需求:設計麟江湖的技能釋放模型,要求用戶按下相應技能快捷鍵後開始釋放技能,技能數據如下,假設角色的當前等級下最高內力為1000,最高生命為3000,基礎攻擊力為50

快捷鍵 技能名稱 技能效果
1 治愈 消耗100內力,生命值恢復最大生命值的10%
2 金剛掌 消耗50內力,對遠程目標造成基礎攻擊+50點傷害
3 麻痹數 消耗50內力,禁止目標攻擊三個回合
4 鷹抓功 10個回合內,對目標造成傷害將恢復傷害量20%的內力傷害量60%的生命
5 絕處逢生 消耗100內力,對目標造成基礎攻擊+已損失血量的傷害
6 易筋經 消耗300內力,將內力和生命值進行互換,攻擊力提高1000%
#include <iostream>
#include <conio.h>

struct Role 
{
	int Hp;
	int maxHp;
	int Mp;
	int maxMp;
	int act; //攻擊力
	int cantact; //禁止攻擊
	int bufcount; //回合
	bool cant;
};
int main() 
{	
	int inkey, damage;
	Role user{ 3000,3000,1000,1000,50,0,false };
	Role boss{ 30000,30000,1000,1000,190,0,false };
lfight:
	system("cls");
	printf("生命[%d/%d]  BOSS生命[%d/%d]\n",user.Hp,user.maxHp,boss.Hp,boss.maxHp);
	printf("內力[%d/%d]  攻擊力[%d]\n", user.Mp, user.maxMp, user.act);
	printf("請輸入你的技能:");
	
	inkey = _getch();
	damage = 0;
	switch(inkey)
	{
		case 49: 
			if (user.Mp > 99)
			{
				user.Mp -= 100;
				user.Hp += 300;
				user.Hp = user.Hp > user.maxHp ? user.maxHp : user.Hp;
			}
			break;
		case 50: 
			if (user.Mp >= 50)
			{
				user.Mp -= 50;
				user.Hp -= 50 + user.act;
			}
			break;
		case 51:
			if (user.Mp >= 50)
			{
				user.Mp -= 50;
				boss.cantact = 3;
			}
			break;
		case 52:
			user.bufcount = 10;
			break;
		case 53:
			if (user.Mp >= 100)
			{
				user.Mp -= 100;
				damage = user.maxHp - user.Hp + user.act;
			}
			break;
		case 54:
			if ((user.Mp >= 300) && (!user.cant))
			{
				int ls = user.maxHp;
				user.maxHp = user.maxMp;
				user.maxMp = ls;
				ls = user.Hp;
				user.Hp = user.Mp;
				user.Mp = ls;
				user.act *= 10;
				user.cant = true;
			}
			break;
	}

	if (boss.cantact > 0)
	{
		boss.cantact--;
	}
	else user.Hp -= boss.act;
	boss.Hp -= damage;
	if (user.bufcount > 0)
	{
		user.bufcount--;
		user.Hp += damage * 0.6;
		user.Mp += damage * 0.2;
		user.Hp = user.Hp > user.maxHp ? user.maxHp : user.Hp;
		user.Mp = user.Mp > user.maxMp ? user.maxMp : user.Mp;
	}
	if (user.Hp < 1)
	{
		system("cls");
		printf("你死了,游戲結束!!");
	}
	else if (boss.Hp < 1)
	{
		system("cls");
		printf("擊敗BOSS,游戲結束!!");
	}
	else goto lfight;
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前端“三清” 在前端開發中,我們經常聽到關於“三清”的說法,即 window、document、Object。這三者分別代表了 BOM(瀏覽器對象模型)、DOM(文檔對象模型)以及 JS 的頂層對象。在這個體系中,我們通過 JavaScr ...
  • 舉例:要屏蔽“Missing trailing comma”或“comma-dangle”警告,你可以使用ESLint的配置選項來設置規則。下麵是一些方法,你可以根據自己的需求選擇其中一種(這裡只是舉例,其他警告處理方法相同) 方法1:在代碼中添加註釋來禁用規則 在你希望屏蔽警告的代碼行的上方添加如 ...
  • 一、創建Date對象 var dateObj=new Date(); var now = Date.now() 當前時間 二、Date方法 1、將日期轉為字元串 toLocaleString() toLocaleDateString() toLocaleTimeString() 2、獲取年、月、日、 ...
  • 本文介紹了結構型設計模式中的代理設計模式,講解了靜態代理、JDK的動態代理和cglib的動態代理,並用代碼進行演示。 ...
  • 趁著雙十一備戰封板,終於又有一些時間可以梳理一下最近的心得。最近這半年跟同事討論比較多的是分層架構,然後就會遇到兩個觸及靈魂的問題,一個是如何做好分層架構,二是DDD在架構層面該如何落地。 ...
  • 一、定義 給某一個對象提供一個代理或占位符,並由代理對象控制對原對象的訪問。代理模式是一種結構型模式。 二、描述 代理模式的結構比較簡單,其核心是代理類,為了讓客戶端能夠一致性地對待真實對象和代理對象,在代理模式中引入了抽象層。包含以下三個角色: 1、Subject(抽象主題角色):它聲明真實主題和 ...
  • 清晰架構原則對於任何希望創建健壯、可維護和可擴展軟體的軟體開發者來說都至關重要。理解並實施這些概念可以顯著提升你的編程技能。以下是對20個基本架構洞見的深入探討:依賴規則: 清晰架構的核心是依賴規則。它規定源代碼的依賴關係應始終指向內部。這種內向的方向確保了一個具有彈性的基礎,強調了關註點的分離,並 ...
  • 話不多說,今天我們要介紹的是函數。本系列文章追求短而精,今天我們將重點討論函數以及與Java方法的區別。與Java方法不同,函數不需要像Java方法一樣講究修飾符等其他特性,它只需要使用"def"關鍵字進行聲明。另外,函數的參數也與Java方法有所不同,Java方法中不存在預設參數的概念,而在Pyt... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...