一、結構圖:
二、代碼及練習題
1.1節 編寫一個簡單的C++程式
1.1節練習
練習1.1:
查閱使用的編譯器的文檔:我使用的是vs2013,其文檔為https://docs.microsoft.com/zh-cn/previous-versions/visualstudio/visual-studio-2013/60k1461a(v=vs.120)
編譯運作第2頁程式:
#include <iostream>
using namespace std;
int main()
{
return 0;
}
傳回值為 0 (0x0)
練習1.2:
改寫程式,讓它傳回-1.
#include <iostream>
using namespace std;
int main()
{
return -1;
}
傳回值為 -1 (0xffffffff)
0xffffffff ,0x表示十六進制,計算機裡用補碼表示。-1的補碼(32位系統,每四位二進制可以由一位十六進制代替)為ffffffff
原碼、反碼、補碼,這篇文章講的不錯:https://www.imooc.com/article/16813?block_id=tuijian_wz
正數的原碼、反嗎、補碼一樣。
以-1(8位)為例,最高位符号位,1為負數、0為正數。
原碼:1000 0001
反碼:1111 1110(反碼在原碼基礎上按位取反,符号位不變)
補碼:1111 1111(補碼在反碼的基礎上加1)
補碼轉原碼:補碼基礎上按位取反後加一,符号位在取反時不變,加一時最高位符号位有進位的,進位忽略
1.2 初識輸入輸出
#include <iostream>
using namespace std;
int main()
{
cout << "Enter two numbers:" << endl;
int v1 = 0, v2 = 0;
cin >> v1 >> v2;
cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl;
return 0;
}
1.2節練習
練習1.3:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello Word" << endl;
return 0;
}
練習1.4:
#include <iostream>
using namespace std;
int main()
{
cout << "Enter two numbers:" << endl;
int v1 = 0, v2 = 0;
cin >> v1 >> v2;
cout << "The product of " << v1 << " and " << v2 << " is " << v1 * v2 << endl;
return 0;
}
練習1.5:
#include <iostream>
using namespace std;
int main()
{
cout << "Enter two numbers:" << endl;
int v1 = 0, v2 = 0;
cin >> v1 >> v2;
cout << "The product of ";
cout << v1 ;
cout << " and " ;
cout << v2 ;
cout << " is ";
cout<<v1 * v2 << endl;
return 0;
}
練習1.6:
cout << "The sum of "<< v1 ;
<< " and "<< v2 ;
<< " is "<<v1 + v2 << endl;
程式不合法,原因是<<運算符接受兩個運算對象:左側的運算對象必須是一個ostream對象,右側的運算對象是要列印的值。顯然第二、三行缺少ostream對象。
可以修改為:
cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl;
或者:
cout << "The sum of "<< v1 ;
cout << " and "<< v2 ;
cout << " is "<<v1 + v2 << endl;
1.3注釋簡介
c++有兩種注釋:單行注釋(//)和界定符對注釋(/**/)
#include <iostream>
using namespace std;
/*
* 簡單主函數:
* 讀取兩個數,求它們的和
*/
int main()
{
//提示使用者輸入兩個數
cout << "Enter two numbers:" << endl;
int v1 = 0, v2 = 0; //儲存我們讀入的輸入資料的變量
cin >> v1 >> v2; //讀取輸入資料
cout << "The sum of "<< v1 << " and "<< v2
<< " is "<<v1 + v2 << endl;
return 0;
}
注釋界定符不能嵌套
#include <iostream>
using namespace std;
/*
* 注釋對/* */ 不能嵌套
*"不能嵌套"幾個字會被認為是源碼
* 像剩餘程式一樣處理
*/
int main()
{
return 0;
}
///*
//* 單行注釋中的任何内容都會被忽略
//* 包括嵌套的注釋對也一樣會被忽略
//*/
1.3節練習
練習1.7,包含不正确嵌套的程式,傳回錯誤資訊
練習1.8
cout << "/*"; //正确
cout << "*/"; //正确
cout << /*"*/"*/; //錯誤
cout << /* "*/" /* "/*" */; //正确
改為:
cout << /*"*/"*/";
1.4 控制流
1.4.1 while語句
#include <iostream>
using namespace std;
int main()
{
int sum = 0, val = 1;
//隻要val的值小于等于10,while循環就會持續執行
while(val <=10){
sum += val; //将sum+val賦予sum
++val; //将val加1
}
cout << "Sum of 1 to 10 inclusive is " << sum << endl;
return 0;
}
練習1.9
#include <iostream>
using namespace std;
int main()
{
int sum = 0, val = 50;
//隻要val的值小于等于100,while循環就會持續執行
while(val <=100){
sum += val; //将sum+val賦予sum
++val; //将val加1
}
cout << "Sum of 50 to 100 inclusive is " << sum << endl;
return 0;
}
練習1.10
#include <iostream>
using namespace std;
int main()
{
int val = 10;
while(val >=0){
cout << val << endl;
--val;
}
return 0;
}
練習 1.11
#include <iostream>
using namespace std;
void fun(int v1,int v2)
{
while (v1 >= v2){
cout << v1<<" ";
--v1;
}
cout << endl;
}
int main()
{
int v1,v2;
cout << "請輸入兩個整數:" << endl;
cin >> v1 >> v2;
if (v1 >= v2) fun(v1, v2);
else fun(v2, v1);
return 0;
}
1.4.2 for語句
#include <iostream>
using namespace std;
int main()
{
int sum =0;
//從1加到10
for (int val = 1; val <= 10; ++val)
sum += val; //等價于sum =sum+val
cout << "Sum of 1 to 10 inclusive is " << sum << endl;
return 0;
}
練習1.12
int sum =0;
for (int val = -100; val <= 100; ++val)
sum += val;
for循環完成-100到100的求和,sum終值為0
練習1.13
#include <iostream>
using namespace std;
int main()
{
int sum = 0, val = 50;
for (int val = 50; val <= 100;++val)
sum += val;
cout << "Sum of 50 to 100 inclusive is " << sum << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
for (int val = 10; val >= 0;--val)
cout << val << endl;
return 0;
}
#include <iostream>
using namespace std;
void fun(int v1, int v2)
{
for (; v1 >= v2; --v1)
cout << v1 << " ";
cout << endl;
}
int main()
{
int v1, v2;
cout << "請輸入兩個整數:" << endl;
cin >> v1 >> v2;
if (v1 >= v2) fun(v1, v2);
else fun(v2, v1);
return 0;
}
練習1.14 對比for 循環和while循環,兩種形式的優缺點各是什麼?
for循環和while循環的優缺點如下:
1、在for循環中,循環控制變量的初始化和修改都放在語句頭部分,形式較簡潔,且特别适用于循環次數已知的情況。
2、在while循環中,循環控制變量的初始化一般放在while語句之前,循環控制變量的修改一般放在循環體中,形式上不如for語句簡潔,但它比較适用于循環次數不易預知的情況(用某一條件控制循環)。
3、兩種形式各有優點,但它們在功能上是等價的,可以互相轉換。
https://blog.csdn.net/sixabs/article/details/82708318
練習1.15 熟悉編譯器生成的錯誤資訊。
1.4.3 讀取數量不定的輸入資料
#include <iostream>
using namespace std;
int main()
{
int sum = 0, value = 0;
//讀取資料直到遇到檔案尾,計算所有讀入的值的和
while (cin >> value)
sum += value; //等價于sum =sum+value
cout << "Sum is: " <<sum << endl;
return 0;
}
鍵盤輸入檔案結尾符:windows中先“Ctrl+Z”,然後再“換行Enter”
1.4.4 if語句
#include <iostream>
using namespace std;
int main()
{
//currVal是我們正在統計的數;我們将讀入的新值存入val
int currVal=0, val=0;
//讀取第一個數,并確定确實有資料可以處理
if (cin >> currVal){
int cnt = 1; //儲存我們正在處理的目前值的個數
while (cin >> val){ //讀取剩餘的數
if (val == currVal) //如果值相同
++cnt; //将cnt加1
else{ //否則,列印前一個值的個數
cout << currVal << " occurs " << cnt << " times" << endl;
currVal = val; //記住新值
cnt = 1; //重置計數器
}
}//while 循環在這裡結束
//記住列印檔案中最後一個值的個數
cout << currVal << " occurs " << cnt << " times " <<endl;
}//最外層的if語句在這裡結束
return 0;
}
1.5 類簡介
1.5.1 Sale_item類
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
Sales_item book;
//讀入ISBN号、售出的冊數以及銷售價格
cin >> book;
//寫入ISBN、售出的冊數、總銷售額和平均價格
cout << book << endl;
return 0;
}
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
Sales_item item1,item2;
cin >> item1>>item2; //讀取一對交易記錄
cout << item1 + item2 << endl; //列印它們的和
return 0;
}
練習1.22 編寫程式,讀取多個具有相同ISBN的銷售記錄,輸出所有記錄的和。
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
Sales_item item1, item2;
while (cin >> item1)
{
item2 = item1 + item2;
}
cout << item2 << endl; //列印它們的和
return 0;
}
1.5.2 初始成員函數
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
Sales_item item1, item2;
cin >> item1 >> item2;
//首先檢查item1和item2是否表示相同的書
if (item1.isbn() == item2.isbn()){
cout << item1 + item2 << endl;
return 0; //表示成功
}
else {
cerr << "Data must refer to same isbn" << endl;
return -1;
}
}
1.6 書店程式
#include <iostream>
#include "Sales_item.h"
using namespace std;
int main()
{
Sales_item total; //儲存下一條交易記錄的變量
//讀入第一條交易記錄,并確定有資料可以處理
if (cin >> total){
Sales_item trans; //儲存和的變量
//讀入并處理剩餘交易記錄
while (cin >> trans){
//如果我們仍在處理相同的書
if (total.isbn() == trans.isbn())
total += trans; //更新總銷售額
else{
//列印前一本書的結果
cout << total << endl;
total = trans; //total 現在表示下一本書的銷售額
}
}
cout << total << endl; //列印最後一本書的結果
}
else {
//沒有輸入!警告讀者
cerr << "No data?!" << endl;
return -1;
}
return 0;
}
小結
術語表