有什么網(wǎng)站是做平面設(shè)計的百度搜索的優(yōu)勢
C++類與對象
- 1. 設(shè)計用類完成計算兩點距離
- 2. 設(shè)計向量類
- 3. 求n!
- 4. 出租車收費類的設(shè)計與實現(xiàn)
- 5. 定義并實現(xiàn)一個復(fù)數(shù)類
- 6. 線性表類的設(shè)計與實現(xiàn)
- 7. 數(shù)組求和
- 8. 數(shù)組求最大值
1. 設(shè)計用類完成計算兩點距離
【問題描述】設(shè)計二維點類Point,包括私有成員:橫坐標(biāo)x,縱坐標(biāo)y。能夠?qū)崿F(xiàn)以下操作:
(1)構(gòu)造函數(shù),初始化x,y;
(2) 打印函數(shù)print,打印點坐標(biāo)信息x,y;
(3) 求兩點直接距離,并輸出結(jié)果。
【輸入形式】輸入兩個二維點橫坐標(biāo)和縱坐標(biāo)信息,用空格隔開
【輸出形式】按輸入順序輸出二點坐標(biāo)信息x,y,和兩點間距離,用單個空格隔開
【樣例輸入】
2.3 3.4 4.5 3.7
【樣例輸出】
2.30 3.40
4.50 3.70
2.22(保留兩位小數(shù))
【評分標(biāo)準(zhǔn)】數(shù)據(jù)類型都用double類型
#include <iostream> // 引入輸入輸出流庫,用于控制臺的輸入輸出操作
#include <iomanip> // 引入格式控制庫,用于設(shè)置輸出格式
#include <cmath> // 引入數(shù)學(xué)庫,用于使用數(shù)學(xué)函數(shù),如sqrt() using namespace std; // 使用標(biāo)準(zhǔn)命名空間,避免在每次調(diào)用標(biāo)準(zhǔn)庫中的函數(shù)或?qū)ο髸r都要加上std::前綴 // 定義一個名為Point的類,用于表示二維平面上的一個點
class Point {
private: double x, y; // 私有成員變量,分別表示點的x坐標(biāo)和y坐標(biāo) public: // 構(gòu)造函數(shù),用于初始化Point對象 Point(double x_val, double y_val) : x(x_val), y(y_val) {} // 成員函數(shù),用于打印點的坐標(biāo) void print() const { cout << fixed << setprecision(2) << x << " " << y << endl; // 使用iomanip庫中的fixed和setprecision設(shè)置輸出格式,保留兩位小數(shù) } // 靜態(tài)成員函數(shù),用于計算兩個點之間的距離 static double distance(const Point& p1, const Point& p2) { double dx = p1.x - p2.x; // 計算x坐標(biāo)的差值 double dy = p1.y - p2.y; // 計算y坐標(biāo)的差值 return sqrt(dx * dx + dy * dy); // 使用勾股定理計算兩點之間的距離 }
}; int main() { double x1, y1, x2, y2; // 定義四個變量,用于存儲兩個點的坐標(biāo) cin >> x1 >> y1 >> x2 >> y2; // 從控制臺讀取兩個點的坐標(biāo) Point p1(x1, y1); // 使用讀取的坐標(biāo)創(chuàng)建第一個Point對象 Point p2(x2, y2); // 使用讀取的坐標(biāo)創(chuàng)建第二個Point對象 p1.print(); // 調(diào)用print函數(shù)打印第一個點的坐標(biāo) p2.print(); // 調(diào)用print函數(shù)打印第二個點的坐標(biāo) double dist = Point::distance(p1, p2); // 調(diào)用靜態(tài)成員函數(shù)distance計算兩點之間的距離 cout << fixed << setprecision(2) << dist << endl; // 打印計算得到的距離,保留兩位小數(shù) return 0; // 程序正常結(jié)束
}
2. 設(shè)計向量類
【問題描述】設(shè)計一個向量類,成員數(shù)據(jù)包括橫坐標(biāo)和縱坐標(biāo),設(shè)計完成兩個向量的加法和減法,輸出加減后得到的向量信息。
【輸入形式】輸入兩個向量的橫坐標(biāo)和縱坐標(biāo)
【輸出形式】輸出兩個向量分別做加減法的向量信息
【樣例輸入】3(第一個點橫坐標(biāo)) 5(第一個點縱坐標(biāo)) 2(第二個點橫坐標(biāo)) 4(第二個點縱坐標(biāo))數(shù)據(jù)之間用單個空格隔開
【樣例輸出】5 9 1 1(先輸出加法后的坐標(biāo)信息,再輸出減法后的坐標(biāo)信息)
【樣例說明】數(shù)據(jù)之間都是用單個空格隔開
#include <iostream> // 引入輸入輸出流庫,用于控制臺輸入輸出 // 定義一個名為Vector的類,用于表示二維向量
class Vector
{
public: double x; // 向量的x分量 double y; // 向量的y分量 // 構(gòu)造函數(shù),用于初始化向量的x和y分量 Vector(double x_val, double y_val) : x(x_val), y(y_val) {} // 靜態(tài)成員函數(shù),用于計算兩個向量的和 static Vector add(const Vector &a, const Vector &b) { return Vector(a.x + b.x, a.y + b.y); // 返回一個新的Vector對象,其x和y分量是a和b的對應(yīng)分量之和 } // 靜態(tài)成員函數(shù),用于計算兩個向量的差 static Vector subtract(const Vector &a, const Vector &b) { return Vector(a.x - b.x, a.y - b.y); // 返回一個新的Vector對象,其x和y分量是a的對應(yīng)分量減去b的對應(yīng)分量 } // 成員函數(shù),用于打印向量的x和y分量 void print() const { std::cout << x << " " << y; // 在控制臺輸出向量的x和y分量,以空格分隔 }
}; // 程序入口函數(shù)
int main()
{ double x1, y1, x2, y2; // 定義四個double類型的變量,用于存儲用戶輸入的兩個向量的x和y分量 // 從控制臺讀取用戶輸入的兩個向量的x和y分量 std::cin >> x1 >> y1 >> x2 >> y2; // 使用用戶輸入的值創(chuàng)建兩個Vector對象 Vector v1(x1, y1); Vector v2(x2, y2); // 調(diào)用靜態(tài)成員函數(shù)計算v1和v2的和,并將結(jié)果存儲在sum變量中 Vector sum = Vector::add(v1, v2); // 調(diào)用靜態(tài)成員函數(shù)計算v1和v2的差,并將結(jié)果存儲在diff變量中 Vector diff = Vector::subtract(v1, v2); // 打印向量sum的x和y分量 sum.print(); // 輸出一個空格,用于分隔sum和diff的輸出 std::cout << " "; // 打印向量diff的x和y分量 diff.print(); // 輸出一個換行符,以便后續(xù)的輸出從新的一行開始 std::cout << std::endl; return 0; // 程序正常結(jié)束,返回0
}
3. 求n!
【問題描述】輸入一個整數(shù),按要求輸出該數(shù)的階乘。
【輸入形式】輸入一個整數(shù)m
【輸出形式】輸出該數(shù)的階乘。
【樣例輸入】5
【樣例輸出】120
#include <iostream> // 包含輸入輸出流庫,用于輸入和輸出操作
#include <cstdlib> // 包含C標(biāo)準(zhǔn)庫,盡管在這個程序中它沒有被直接使用
using namespace std; // 使用標(biāo)準(zhǔn)命名空間,這樣我們可以直接使用標(biāo)準(zhǔn)庫中的類和函數(shù),無需前綴std:: class Fac { // 定義一個名為Fac的類 private: int number; // 私有成員變量,用于存儲輸入的整數(shù) long long factorial; // 私有成員變量,用于存儲階乘的結(jié)果 public: Fac(int n) : number(n), factorial(1) {}; // 構(gòu)造函數(shù),初始化number為輸入的整數(shù)n,factorial初始化為1 void compute() { // 成員函數(shù),用于計算階乘 for (int i = 1; i <= number; i++) { // 從1循環(huán)到number factorial *= i; // factorial乘以當(dāng)前的i,計算階乘 } } void print() { // 成員函數(shù),用于打印階乘的結(jié)果 cout << factorial << endl; // 輸出factorial的值 }
}; int main() { // 主函數(shù) int i; // 定義一個整數(shù)變量i,用于存儲用戶輸入的整數(shù) cin >> i; // 從標(biāo)準(zhǔn)輸入讀取一個整數(shù),并存儲到變量i中 Fac a(i); // 創(chuàng)建Fac類的對象a,使用i作為構(gòu)造函數(shù)的參數(shù) a.compute(); // 調(diào)用對象a的compute函數(shù),計算階乘 a.print(); // 調(diào)用對象a的print函數(shù),打印階乘的結(jié)果 return 0; // 主函數(shù)返回0,表示程序正常結(jié)束
}
4. 出租車收費類的設(shè)計與實現(xiàn)
【問題描述】
編程定義計算出租車收費類,完成如下功能:
(1)包含四個私有成員數(shù)據(jù),起步價(start),公里數(shù)(miles),每公里收費(money),收費總金額(allmoney)都是整數(shù)類型;
(2)通過構(gòu)造函數(shù)設(shè)置起步價,公里數(shù)和每公里收費;
(3)編寫函數(shù)計算收費金額,計算方法:3公里以內(nèi)(包括3公里),收費為起步價;超過3公里,3公里以內(nèi)的是起步價,超出部分按照公里數(shù)*每公里收費進(jìn)行計算,例如:起步價是8元,公里數(shù)是5公里,每公里收費1元,則這次出租車收取的費用為:8+(5-3)*1=10元;
(4)編寫輸出函數(shù),輸出收費金額。
【輸入形式】輸入起步價,公里數(shù),每公里收費
【輸出形式】輸出收費金額
【樣例輸入】8 5 1
【樣例輸出】10
#include <iostream> // 引入輸入輸出流庫,用于輸入輸出操作
using namespace std; // 使用標(biāo)準(zhǔn)命名空間,以便直接使用標(biāo)準(zhǔn)庫中的類和函數(shù) class Taxi { // 定義一個名為Taxi的類 private: int start; // 起步價 int miles; // 行駛的公里數(shù) int money; // 每公里收費 int allmoney; // 總費用 public: Taxi(int s, int m, int mon) : start(s), miles(m), money(mon), allmoney(0) { // 構(gòu)造函數(shù),初始化起步價、公里數(shù)、每公里收費和總費用(總費用初始化為0) // 并在構(gòu)造時調(diào)用count()函數(shù)計算總費用 count(); }; void count() { // 計算總費用的成員函數(shù) if (miles <= 3) { // 如果行駛公里數(shù)小于等于3公里,則總費用等于起步價 allmoney = start; } else { // 如果行駛公里數(shù)大于3公里,則總費用等于起步價加上超出3公里部分的費用 allmoney = start + (miles - 3) * money; } } void print() { // 打印總費用的成員函數(shù) cout << allmoney << endl; // 輸出總費用 }
}; int main() { // 主函數(shù) int s, m, mon; // 定義變量s(起步價)、m(公里數(shù))、mon(每公里收費) cin >> s >> m >> mon; // 從標(biāo)準(zhǔn)輸入讀取起步價、公里數(shù)和每公里收費 Taxi t(s, m, mon); // 創(chuàng)建Taxi類的對象t,使用讀取的起步價、公里數(shù)和每公里收費作為構(gòu)造函數(shù)的參數(shù) // 這里實際上是不需要的,因為在Taxi的構(gòu)造函數(shù)中已經(jīng)調(diào)用了count()函數(shù) // 如果構(gòu)造函數(shù)中已經(jīng)調(diào)用了count(),則這里不需要再次調(diào)用 t.count(); // 計算收費金額(這行代碼是多余的,因為已經(jīng)在構(gòu)造函數(shù)中計算過了) t.print(); // 打印收費金額 return 1; // 主函數(shù)返回1,通常主函數(shù)成功執(zhí)行完畢后應(yīng)返回0,返回1可能表示某種錯誤狀態(tài)
}
5. 定義并實現(xiàn)一個復(fù)數(shù)類
【問題描述】
定義并實現(xiàn)一個復(fù)數(shù)類,利用構(gòu)造函數(shù)(復(fù)數(shù)實部和虛部的數(shù)值作為參數(shù))初始化類對象,完成功能:
c1.add(c2); //c1= c1 + c2(c1和c2為復(fù)數(shù)類類對象,功能為兩個復(fù)數(shù)相加)
c1.sub(c2); //c1 = c1 - c2(c1和c2為復(fù)數(shù)類類對象,功能為兩個復(fù)數(shù)相減)
類中提供兩個外部接口函數(shù) getReal 和 getImag,功能分別為獲得復(fù)數(shù)實部和虛部的數(shù)值。
【輸入形式】首先從鍵盤輸入 4 個實數(shù)用來初始化兩個復(fù)數(shù)。然后再輸入一個字母,a 或者非 a,a 代表兩個復(fù)數(shù)做加法,非 a 字母代表兩個復(fù)數(shù)做減法(第一個復(fù)數(shù)是被減數(shù))。
【輸出形式】輸出計算后的復(fù)數(shù)。
【樣例輸入】3 5 4.5 0 a
【樣例輸出】7.5+5.0i
【樣例輸入】3.2 1.5 6.7 15.8 s
【樣例輸出】-3.5-14.3i
【樣例說明】實數(shù)輸出時保留一位小數(shù)點。
#include <iostream>
#include <stdio.h> using namespace std; // 定義復(fù)數(shù)類
class Complex {
private: float real; // 實部 float imag; // 虛部 public: Complex(float r = 0.0f, float i = 0.0f) : real(r), imag(i) {} // 構(gòu)造函數(shù),用于初始化復(fù)數(shù) // 復(fù)數(shù)加法 void add(const Complex& other) { real += other.real; imag += other.imag; } // 復(fù)數(shù)減法 void sub(const Complex& other) { real -= other.real; imag -= other.imag; } // 獲取實部 float getReal() const { return real; } // 獲取虛部 float getImag() const { return imag; }
}; int main() { float rx1, ix1, rx2, ix2; // 用于存儲輸入的兩個復(fù)數(shù)的實部和虛部 char ch; // 用于存儲操作類型的字符('a'代表加法,其他代表減法) // 從標(biāo)準(zhǔn)輸入讀取兩個復(fù)數(shù)的實部和虛部以及操作類型 scanf("%f%f%f%f %c", &rx1, &ix1, &rx2, &ix2, &ch); // 創(chuàng)建兩個復(fù)數(shù)對象,并用輸入的值初始化它們(程序部分2-2) Complex c1(rx1, ix1); Complex c2(rx2, ix2); // 根據(jù)操作類型執(zhí)行相應(yīng)的復(fù)數(shù)運算 if (ch == 'a') { // 如果是復(fù)數(shù)加法 c1.add(c2); // 將c2加到c1上 printf("%.1f%+.1fi", c1.getReal(), c1.getImag()); // 輸出結(jié)果 } else { // 如果是復(fù)數(shù)減法 c1.sub(c2); // 從c1中減去c2 printf("%.1f%+.1fi", c1.getReal(), c1.getImag()); // 輸出結(jié)果 } return 0;
}
6. 線性表類的設(shè)計與實現(xiàn)
【問題描述】定義并實現(xiàn)保存正整數(shù)的線性表類 Link,私有屬性包含線性表數(shù)據(jù)(數(shù)據(jù)長度小于 200,用數(shù)組保存即可),實際有效數(shù)據(jù)數(shù)量。要求編寫對外接口函數(shù)如下:
1、insert_link(int n, int index):將正整數(shù) n 插入到數(shù)組下標(biāo)為 index 的位置;
2、delete_link(int index):刪除下標(biāo)為 index 的數(shù)據(jù),不考慮空表;
3、show_link():輸出線性表所有數(shù)據(jù);
4、編寫兩個類構(gòu)造函數(shù)來初始化類對象,一個構(gòu)造函數(shù)無輸入?yún)?shù),初始化整個線性表數(shù)據(jù)為 0;另外一個構(gòu)造函數(shù)根據(jù)實際輸入數(shù)據(jù)進(jìn)行初始化。
說明:若 index 小于 0,則將其設(shè)置為 0,若 index 大于 有效數(shù)據(jù)長度減1,則將其設(shè)置為 有效數(shù)據(jù)長度減1。
【輸入形式】輸入一組正整數(shù),小于等于0代表輸入結(jié)束;再輸入正整數(shù) n 和整數(shù) index,用于在 index 處插入數(shù)據(jù) n;最后輸入一個整數(shù) index,用于在 index 處刪除一個數(shù)據(jù)。
【輸出形式】輸出原始表以及插入,刪除后的表。
【樣例輸入】
2 56 85 25 65 21 78 52 0
80 2 250
注:此處的80是要插入的數(shù)據(jù)n,2是插入的位置index,250是刪除數(shù)據(jù)的位置index。
【樣例輸出】
2 56 85 25 65 21 78 52
2 56 80 85 25 65 21 78 52
2 56 80 85 25 65 21 78
【樣例輸入】
1 2 3 4 5 -6
7 -8 3
注:此處的7是要插入的數(shù)據(jù)n,-8是插入的位置index,3是刪除數(shù)據(jù)的位置index。
【樣例輸出】
1 2 3 4 5
7 1 2 3 4 5
7 1 2 4 5
#include <iostream>
#include <stdio.h> using namespace std; // 定義線性表類 Link
class Link {
private: int data[200]; // 線性表存儲數(shù)組,最大長度為200 int length; // 線性表當(dāng)前長度 // 調(diào)整索引,確保索引在合法范圍內(nèi) int adjustIndex(int index) { if (index <= 0) { return 0; } if (index > length - 1) { return length - 1; } return index; } public: // 默認(rèn)構(gòu)造函數(shù),初始化線性表為空 Link() : length(0) { for (int i = 0; i < 200; i++) { data[i] = 0; } } // 帶參數(shù)的構(gòu)造函數(shù),根據(jù)傳入的數(shù)組和長度初始化線性表 Link(int* arr, int len) : length(len) { for (int i = 0; i < len; i++) { data[i] = arr[i]; } } // 在指定位置插入元素 void insert_link(int n, int index) { index = adjustIndex(index); // 調(diào)整索引 for (int i = length; i > index; i--) { data[i] = data[i - 1]; // 后移元素 } data[index] = n; // 插入新元素 length++; // 更新線性表長度 } // 刪除指定位置的元素 void delete_link(int index) { index = adjustIndex(index); // 調(diào)整索引 for (int i = index; i < length - 1; i++) { data[i] = data[i + 1]; // 前移元素 } length--; // 更新線性表長度 } // 顯示線性表的內(nèi)容 void show_link() { for (int i = 0; i < length; i++) { cout << data[i] << (i < length - 1 ? " " : "\n"); // 輸出元素,最后一個元素后換行 } }
}; int main() { int ar[200], len = 0; // 定義數(shù)組和長度變量,并初始化長度為0 int ins_index, n, del_index; // 讀入數(shù)據(jù),小于等于0結(jié)束,數(shù)據(jù)保存到數(shù)組ar,len為實際有效數(shù)據(jù)長度 // 可自定義變量 while (cin >> n && n > 0) { ar[len++] = n; // 將讀入的元素存入數(shù)組,并更新長度 } cin >> n >> ins_index >> del_index; // 讀入要插入的元素、插入位置和刪除位置 Link lk(ar, len); // 構(gòu)造線性表對象,根據(jù)數(shù)組和長度初始化 lk.show_link(); // 顯示初始線性表內(nèi)容 lk.insert_link(n, ins_index); // 在指定位置插入元素 lk.show_link(); // 顯示插入元素后的線性表內(nèi)容 lk.delete_link(del_index); // 刪除指定位置的元素 lk.show_link(); // 顯示刪除元素后的線性表內(nèi)容 return 0;
}
7. 數(shù)組求和
【問題描述】輸入一串整數(shù),求整數(shù)和。
【輸入形式】首先輸入一個正整數(shù)n(n>0),表示元素個數(shù),然后輸入n個整數(shù)。
【輸出形式】輸出n個整數(shù)之和。
【樣例輸入】5
1 2 3 4 5
【樣例輸出】15
#include <iostream>
#include <stdlib.h>
using namespace std; // 聲明一個數(shù)組類Array
class Array
{
private: int n, s; // n存儲數(shù)組中元素的個數(shù),s存儲數(shù)組元素之和的初始值 int *a; // 指向動態(tài)分配數(shù)組空間的指針 public: // 構(gòu)造函數(shù),初始化數(shù)組的大小,并動態(tài)分配內(nèi)存空間 Array(int size) { n = size; // 設(shè)置數(shù)組的大小 a = new int[n]; // 動態(tài)分配數(shù)組空間 input(); // 調(diào)用input函數(shù)輸入數(shù)組元素 s = 0; // 初始化數(shù)組元素之和為0 } // 析構(gòu)函數(shù),釋放動態(tài)分配的內(nèi)存空間 ~Array() { delete[] a; // 釋放數(shù)組空間 } // 輸入數(shù)組元素 void input() { for (int i = 0; i < n; i++) { cin >> a[i]; // 從標(biāo)準(zhǔn)輸入讀取數(shù)組元素 } } // 計算數(shù)組元素之和 void sum() { for (int i = 0; i < n; i++) { s += a[i]; // 累加數(shù)組元素的值到s } } // 打印數(shù)組元素之和 void print() { cout << s << endl; // 輸出數(shù)組元素之和 }
}; int main()
{ int i; cin >> i; // 從標(biāo)準(zhǔn)輸入讀取數(shù)組的大小 Array a(i); // 創(chuàng)建Array對象a,數(shù)組元素值在構(gòu)造函數(shù)中通過input函數(shù)輸入 a.sum(); // 調(diào)用sum函數(shù)計算數(shù)組a的元素之和 a.print(); // 調(diào)用print函數(shù)打印數(shù)組a的元素之和 return 0; // 程序正常退出
}
8. 數(shù)組求最大值
【問題描述】輸入一串整數(shù),求整數(shù)中的最大值。
【輸入形式】首先輸入一個正整數(shù)n(n>0),表示元素個數(shù),然后輸入n個整數(shù)。
【輸出形式】輸出n個整數(shù)的最大值。
【樣例輸入】5
1 2 3 4 5
【樣例輸出】5
#include <iostream>
#include <cstdlib>
using namespace std;// 數(shù)組類聲明
class Array
{
private:int n; // 存儲數(shù)組中元素的個數(shù)int maxnum; // 存儲數(shù)組中的最大值int *a; // 動態(tài)分配的數(shù)組空間public:// 構(gòu)造函數(shù),初始化數(shù)組的大小,并動態(tài)分配內(nèi)存空間Array(int size) : n(size), maxnum(-1), a(new int[n]){input(); // 調(diào)用input函數(shù)輸入數(shù)組元素}// 析構(gòu)函數(shù),釋放動態(tài)分配的內(nèi)存空間~Array(){delete[] a;}// 拷貝構(gòu)造函數(shù),用于創(chuàng)建數(shù)組對象的副本Array(const Array &other) : n(other.n), maxnum(other.maxnum), a(new int[n]){for (int i = 0; i < n; i++){a[i] = other.a[i]; // 復(fù)制元素到新的數(shù)組空間}}// 查找并設(shè)置數(shù)組中的最大值void max(){maxnum = a[0]; // 假設(shè)第一個元素是最大值for (int i = 1; i < n; i++) // 從第二個元素開始遍歷{if (a[i] > maxnum){maxnum = a[i]; // 更新最大值}}}// 輸入數(shù)組元素void input(){for (int i = 0; i < n; i++){cin >> a[i]; // 從標(biāo)準(zhǔn)輸入讀取數(shù)組元素}}// 打印數(shù)組中的最大值void print(){cout << maxnum << endl; // 輸出最大值}
};int main()
{int i;cin >> i; // 從標(biāo)準(zhǔn)輸入讀取數(shù)組的大小Array a(i); // 創(chuàng)建Array對象a,數(shù)組元素值在構(gòu)造函數(shù)中通過input函數(shù)輸入Array b = a; // 利用拷貝構(gòu)造函數(shù)創(chuàng)建Array對象b,并復(fù)制a的內(nèi)容b.max(); // 調(diào)用max函數(shù)查找數(shù)組b(即數(shù)組a的副本)中的最大值b.print(); // 調(diào)用print函數(shù)打印數(shù)組中的最大值return 0; // 程序正常退出
}
今天的內(nèi)容就分享這么多
求三連!!!
求關(guān)注!!!