ACM編程隊訓練記錄(二)

身爲學校acm隊的隊長,對上個學期的訓練做一下記錄。本次訓練針對的是大一新入學的學生,沒有相應的編程基礎,因此本次進行基礎的編程教學。本次記錄的訓練時間爲2019年10月26日

變量

變量也就是數學中的變量,一個可以變化的值,在計算機語言中能儲存計算結果或能表示值抽象概念。
通俗的說,在c++編程中,變量就是你聲明的一個用來存儲內容的容器。你可以給這個變量隨意的賦值並在程序運行過程中進行肆意的更改。

int a;

如上述的例子,前面的int,表示的是變量的數據類型是int(整型),而a就是變量的名稱。在後續的程序中你可以通過賦值符號,輸入符號等等來改變這個變量a的值,如下:

a=1;
cin>>a;
a=a+1;

這些方法都可以改變a的值,從上往下看最開始如果僅僅使用int a,那麼a將處於初始值0。

在使用了a=1後,a的值就變成了1。之後的cin>>a,你就可以在命令行內輸入一個數值,它將代替原先的1變成a的數值。比如我輸入了3,則a的值就變成了3。
後面使用了a=a+1則是代表着將a原先的值+1之後重新賦予給a,這一行運行之後,a的值就會變成4。

常量

相對於上述的可以在程序運行之中可以改變數值的變量,那同樣也存在着不能夠再程序運行過程中改變的值,這便是常量

常量,可以是任何的基本數據類型,可分爲整型數字、浮點數字、字符、字符串和布爾值。與變量相比,常量就是常規的變量,只不過常量的值在定義後不能進行修改。

聲明方式

在c++中常量有兩種聲明方式,一種是使用#define預處理器,另一種是使用const 關鍵字。

#define 預處理器

#define這種定義方式一般用在#include引用庫之後,在這個位置使用#define定義的變量將直接被賦予相應的數值,並且在運行過程中一直固定不可改變。

使用方法:

#define identifier value

具體示例:

#include <iostream>
using namespace std;

#define LENGTH 10   
#define WIDTH  5
 
int main()
{
   int area;  
   area = LENGTH * WIDTH;
   cout << area<<endl;
   return 0;
}

當上面的代碼被編譯和執行時,它會輸出一個固定值50。

同時,#define屬於一種宏定義,也就是說它所定義的變量不論在本程序本次運行的哪個位置,只要使用了這個變量,它就是被定義的值。想要對其進行修改,必須結束程序後在程序中進行改變。

const 關鍵字

相對於#define的定義,const就相對靈活,它可以定義在任何位置,但是在使用時,需要給該常量一個明確的數據類型。

使用方法:

const type variable = value;

實際樣例:

const int a=100;

在上述樣例中,只要程序還在繼續運行,那變量a的值在該語句生效的作用域內就將一直爲100不再改變。

作用域

變量和常量講完了,咱們還需要考慮變量和常量的作用域。故名思意,作用域就是這個變量和常量可以展現其正常功能的作用範圍。

局部變量

倘若你在主函數中定義了一個值爲10的變量a,但在F函數中也存在一個變量a,此時F函數中的a便和主函數變量a的值不互通。之所以出現這樣的狀況,便是兩個變量a之間的作用域不同。主函數中的變量a,他的作用範圍只在主函數運行範圍內,而F函數中的變量a只在該函數的運行過程中存在,對於主函數並沒有影響。這種變量便是所說的局部變量,只能夠在某個範圍內生效。

全局變量

但是,如果你在所有函數外(包括主函數)定義了一個變量b,此時只要你在主函數裏給b進行了賦值,那在其他函數中只要你調用了變量b,那麼只要你沒有在其他函數中重新聲明一個局部變量b,那麼這個變量b都將是主函數中富裕的那個值。而這個變量便是全局變量,它可以在全部程序中生效,但是它可以被局部變量在局部範圍內覆蓋。

基礎邏輯

在編寫程序的時候我們通常要以一定的邏輯進行編寫,而最常用的就是選擇循環

選擇邏輯

選擇邏輯也被稱爲判斷邏輯,使用這個的時候你會進行一個判斷,如果某件事情是對的就進行步驟一,是錯的就行步驟二。如下圖
在這裏插入圖片描述
這是標準的判斷形式,通常這個結構在程序中使用if-else來實現。
除了這種還有幾種經常會使用的語句。

語句 描述
if 一個 if 語句 由一個布爾表達式後跟一個或多個語句組成。
if-else 一個 if 語句後可跟一個可選的 else 語句,else 語句在布爾表達式爲假時執行。
if-else if-else 可以在一個 if 或 else if 語句內使用另一個 if 或 else if 語句。
switch-case 一個 switch 語句允許測試一個變量等於多個值時的情況。

if-else

上面表格中的前三種語句都可以看成是if-else類型。

第一種,便是僅進行一次判斷,如果判斷不爲真便不在進行考慮。如:

if (a>b){
	cout<<"a>b"endl;
}

第二種,則是在判斷後就分成兩種結果進行執行。如:

if (a>b){
	cout<<"a>b"<<endl;
} else{
	cout<<"a<=b"<<endl;
}

第三種則是在一個判斷會出現三種及以上結果時使用。如:

if (a>b){
	cout<<"a>b"<<endl;
} else if(a==b){
	cout<<"a=b"<<endl;
}else{
	cout<<"a<b"<<endl;
}

switch-case

這個分支語句通常用於多種判斷結果進行使用,case可以講多種情況進行一一列舉,而default可以代替剩下所有的情況。如:

switch(a){
	case 1:
			b=1;
			break;
	case 2:
			b=2;
			break;
	case 3:
			b=3;
			break;
	default:
			b=4;
			break;
}

循環邏輯

除了選擇邏輯還有之中經常使用的邏輯,就是循環邏輯。
有的時候,可能需要多次執行同一塊代碼。而一般情況下,程序是順序執行的:函數中的第一個語句先執行,接着是第二個語句,依此類推。如果把每一次過程都寫出那麼程序將會相當繁雜。因此需要用循環語句來精簡這次額內容。
在這裏插入圖片描述
常見的循環語句

循環語句 描述
while循環 當給定條件爲真時,重複語句或語句組。它會在執行循環主體之前判斷條件是否爲真。
for循環 多次執行某一語句直到達成某一條件
do…while 循環 先執行一次循環體,再進行判斷,與while類似

相對來說,三種循環中for與while是經常使用的,第三種的使用已經越來越少。同時這幾種循環的使用也是可以相互嵌套,層層相扣的。

循環控制語句

對於循環來說,有時會出現一些特殊情況,比如打斷或者跳過某一循環。這個時候就需要一些語句去控制循環的進行。

語句 描述
break 中止循環,讓程序則直接進入循環後的語句
continue 跳出本次循環,但依舊在循環中繼續執行

這兩種語句是經常使用的控制語句,除此之外,還有一種goto語句,可以將控制轉移到被標記的語句。但是不建議在程序中使用 goto 語句,容易引起程序產生衝突。同時這幾種語句不僅能在循環語句中使用,也可以在程序中的其他的方式使用。

while

該語句會先進行一次判斷,如果判斷結果爲真就執行循環體,示例如下:

int a=0;
while(a<10){
	cour<<a<<endl;
	a++;
}

在這個代碼裏,將會輸出從0到9一共十個數,但是僅僅寫了一個輸出代碼,這便是循環體的應用。

for循環

相對於while循環,for循環需要三個參數來進行循環,示例如下:

for(int i=o;i<10;i++){
	cout<<i<<endl;
}

這個程序與上面while循環的效果一樣,但是其中的i變成了循環內置的函數,僅僅在循環中生效,循環結束了,這個變量也就消失了。

作業

1、有一個猴子摘了好多桃子,第一天吃了一半扔了一個,第二天又吃了一半扔了一個,第十天結束只剩下了一個,求他一開始摘了多少桃子。
2、給一個年份判斷他是什麼年,如:甲午年、乙未年
3、輸入十個數將其進行從小到大排序
4、(擴展)輸入n個數,將其從小到大進行排序
5、(思考)一個監獄裏有n個囚牢,一天獄警買來m瓶酒,和罪犯玩了一個遊戲,他喝第1瓶酒時,把1的倍數的牢房都打開,喝第二瓶酒時把2的倍數的牢房,開着的都關上,關着的都打開,喝第三瓶酒時把3的倍數的牢房,開着的都關上,關着的都打開,直到他喝完第m瓶,並關完房門,這是房門打開的罪犯便可以獲得釋放,請您寫出算法,計算最後能有多少人被釋放。不考慮獄警最多能喝多少酒,同時牢房裏的罪犯也無法在遊戲過程中逃脫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章