簡單程式設計——順序結構(二)
三·常量和變數
常量的定義:
一個常量可以直接呼叫(如124,‘A’),也可以給常量取個名字用一個標 識符代表它,這就是符號常量。其語法格式為:
const 符號常量=常量字串;
例如:const double PI=3.1415926;
習慣上,符號常量名用大寫,而變數名用小寫,以便於區別。
使用符號常量的好處:
1)增加了程式的可讀性。如看到例2.5程式中,見到PI就可知道它代表圓周率,定義符號常量名時應該儘量使用見名知意的常量名。
2)增加了程式的易改性。如例2.5程式中,只需改動一處,程式中的所有PI都會自動全部代換,做到“一改全改”。
變數的定義:
變數代表了一個儲存單元,其中的值是可以改變的,因此稱為變數。
一個程式中可能要使用到若干個變數,為了區別不同的變數,必須給每個變數(儲存單元)取一個名(稱為變數名),該變數(存貯單元)儲存的值稱為變數的值,變數中能夠儲存值的型別為變數的型別。
變數名
用一個合法的識別符號代表一個變數。如n,m,rot,total 等都是合法變數名。在程式中用到的變數要“先定義後使用”,變數名應遵循自定義識別符號的命名規則,並建議使用“見名知義”的原則,即用一些有意義的單詞作為變數名。在C++語言,變數名大小寫有區別。
用來標識變數名、符號常量名、函式名、陣列名、型別名、檔名的有效字元序列稱為識別符號。C++語言規定,識別符號只能由字母(包含下劃線“_”)開頭,後面的字元可以是字母或數字。
定義變數的語法格式為:
資料型別 變量表
例 int i=5,j,k; //定義i,j,k為整型變數, //i賦初值為5,j,k的初值未知。 char a,b,c; //定義a,b,c為字元變數 float x,y,z; //定義x,y,z為實型變數 C++語言允許在定義變數的同時為變數賦初值。
如果對變數未賦初值,則該變數的初值是一個 不可預測的值。
四·標準資料型別
整型
字元型(char)
1、普通表示形式
字元常量是由單個字元組成,所有字符采用ASCII編碼,ASCII編碼共有128個字元(表2-4)。在程式中,通常用一對單引號將單個字元括起來表示一個字元常量。如:‘a’,‘A’,'0’等。如字元A的序號是65,字元a的序號是97, 字元0的序號的48。
2、轉義字元表示形式。
轉義字元有三種用法:表示控制字元、表示特殊字元、表示所有字元。常用的轉義字元如右表所示。
例 整型資料型別儲存空間大小 分別定義int,short型別的變數各一個,並依次輸出它們的儲存空間大小(單位:位元組)。 【參考程式】 #include<iostream> using namespace std; int main() { int x; short y; cout<<sizeof(x)<<" "<<sizeof(y)<<endl; //sizeof返回一個物件或者型別所佔的記憶體位元組數 return 0;
基於char資料的這個特點,它可以和int變數一樣做加減運算
例2 大小字母的轉換
#include<iostream>
using namespace std;
int main()
{ char c1,c2;
c1='a';
c2='A';
cout<<c1<<" "<<c2<<endl;
c1=c1-32; //小寫字母轉換大寫字母
c2=c2+32; //大寫字母轉換小寫字母
cout<<c1<<" "<<c2<<endl;
}
執行結果:
a A
A a
因為所有小寫字母的ASCII值要比對應大寫字母的ASCII值大32,所以c1減去32後便得到原來字母的大寫形式。反之,c2加上32後便得到原來字母的小寫形式。
資料型別轉換
1. 混合運算時的型別轉換規則
整型、實型、字元型資料間可以混合運算。在這種情況下,需要將不一致的資料型別轉換成一致的資料型別,然後進行運算。為了保證運算精度,系統在運算時的轉換規則是將儲存長度較短的運算物件轉成儲存長度較長的型別,然後再進行處理。這種轉換是系統自動進行的,具體見表
2. 賦值時的型別轉換規則
當賦值運算子兩側的資料型別不同時,需進行型別轉換,這種轉換是系統自動進行的,轉換規則如下:
1)float、double型賦值給int型:直接截斷小數。
例如,“int i=f+0.6;”,f的值為4.0,右邊算術表示式運算後的結果為4.6的double型資料,根據上述轉換原則,直接捨棄小數,所以i的值為4。
2)int、char型賦值給float、double型:補足有效位以進行資料型別轉換。
例如:“float f=4;”,float為7位有效數字,所以f的值為4.0000000。
3)char型(1位元組)賦給int型(4位元組):數值賦給int型的低8位,其它位補0。
4)long int型賦值給int型:long int型截斷低位元組給int型。
5)int型賦值給long int型:賦給long int型的低16位,如果int型的最高位是0,則long int的高16位全為0;如果int型的最高位是1,則long int型的高16位全為1(稱為“符號擴充套件”)。
6)unsigned int型賦值給int型:直接傳送數值。
7)非unsigned int型賦值給位數相同的unsigned int型:直接傳送數值。
3. 強制型別轉換
在C++語言中,還允許強制型別轉換,即將某一資料的資料型別轉換為指定的另一種資料型別,強制型別轉換隻是臨時轉換。強制轉換運算子組成的運算表示式的一般形式為:
(型別名)(表示式)
例如:已知有變數定義“int b=7;float a=2.5,c=4.7;”,求下面算術表示式的值。
a+(int)(b/3*(int)(a+c)/2.0)%4
根據運算子的結合性規則,表示式要自左至右執行,b/3為2,2*(int)(a+c)為14,14/2.0為7.0,強制型別轉換後為7,7%4為3,a的值2.5與3相加,最終結果為5.5。
浮點數向零舍入
輸入一個單精度浮點數,將其向零舍入到整數。說明:向零舍入的含義是,正數向下舍入,負數向上舍入。提示:可以使用強制型別轉換來實現。
輸入: 輸出:
一個單精度浮點數。 一個整數,即向零舍入到整數的結果。
樣例輸入:
2.3
樣例輸出:
2
#include<iostream>
using namespace std;
int main()
{
double n;
cin>>n;
cout<<int(n)<<endl;
return 0;
}
資料輸入輸出
6個最基本的輸入、輸出函式:
字元輸入getchar,字元輸出putchar
流輸入cin,流輸出cout
格式化輸入scanf,格式化輸出prinf
字元輸入函式getchar
getchar函式是接收從鍵盤輸入的單個字元資料。它是一個無參函式,其語法格式為:
getchar();
【說明】
1)通常把輸入的字元賦予一個字元變數,構成賦值語句。例如:
char ch;
ch=getchar();
2) getchar函式只能接受單個字元,輸入數字也按字元處理。
3)輸入多於一個字元時,只接收第一個字元。
4) getchar函式等待使用者輸入,直到按回車鍵才結束,可用於暫停程式的執行,直到輸入一個回車鍵。
5)如果在程式中連續有兩個以上getchar()函式,應該一次性輸入所需字元,最後再按回車鍵,否則會把回車作為一個字元傳給後面的getchar()函式。
利用getchar函式接收鍵盤輸入。
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
char ch;
ch=getchar(); //讀入字元
cout<<"input="<<ch<<endl;
}
字元輸出函式putchar
putchar函式是字元輸出函式,功能是向標準輸出裝置(如顯示器)輸出單個字元資料,其語法格式為:
putchar(ch); //其中,ch為一個字元變數或常量。
利用putchar 函式輸出字元。
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
char c='B'; //定義字元變數c並賦值'B'
putchar(c); //輸出該字元
putchar('\x42'); //用轉義字元輸出字母'B'
putchar(0x42); //用16進位制ASCII碼值輸出字母'B'
putchar(66); //用10進位制ASCII碼值輸出字母'B'
}
執行結果:BBBB
通過cout流輸出資料
cout<<
輸出字串和輸出變數的區別
每當我們輸出字串常量的時候,必須用雙引號把字串引起來,以便將它和變數名明顯的區分開來。
下面兩個語句是不同的:
cout << "Hello" ; //列印字串Hello到螢幕上cout << Hello ;
cout << Hello; //把變數Hello儲存的內容列印到螢幕上
通過cin流讀入資料
cin>>
格式化輸入函式scanf
格式化輸出函式printf
【下節展開】
幾種輸入輸出格式的幾點說明
1、cin和cout在Dev C++中只能呼叫庫,而其他輸入輸出格式要呼叫<stdio.h>庫或庫。
2、cin和cout屬於C++的概念,呼叫時涉及輸入輸出流,而scanf和printf屬於C的概念,是C語言的標準輸入/輸出庫中的函式,所以在時效上,scanf和printf優於cin、cout,對於大資料的輸入輸出,通常情況下應該用scanf、printf。
3、對於普通資料的輸入輸出,cin和cout比較方便,而在格式化方面,scanf和printf比較容易。cin效率比scanf低很多,尤其輸入資料達到20萬以上時非常明顯,在100萬時cin讀入就會超時。
4、scanf和printf也缺點,cin和cout能夠自動識別變數的資料型別,因此,在進行輸入輸出時,不需要指定資料型別,printf和scanf函式在輸入輸出時需指定資料型別。