第三章 程序設(shè)計初步
1.
2.計算圓的數(shù)據(jù)
設(shè)圓半徑r=1.5,圓柱高 h=3求圓周長圓面積圓球表面積圓球體積圓柱體積。
用 cin 輸人數(shù)據(jù),輸出計算結(jié)果,輸出時要求有文字說明,取小數(shù)點后兩位數(shù)字。請編程序唆貌。
#include <cmath>
#include <iostream>
#include <iomanip>
int main() {
setlocale(LC_ALL, "zh_CN.UTF-8");
int r = 1.5;
int h = 3;
int perimeter = 2 * M_PI * r;//計算周長
int area = M_PI * pow(r, 2);//計算面積
int ball_size = 4 * M_PI * pow(r, 2);//圓球表面積
int ball_volume = 4 / 3 * M_PI * pow(r, 3);//圓球體積
std::cout << std::setprecision(2) << "周長:" << perimeter << std::endl;
std::cout << std::setprecision(2) << "面積:" << area << std::endl;
std::cout << std::setprecision(2) << "圓球表面積:" << ball_size << std::endl;
std::cout << std::setprecision(2) << "圓球體積:" << ball_volume << std::endl;
return 0;
}
問題回饋
- 設(shè)置小數(shù)點保留需要使用<iomanip>的std::setprecision
- cout加上fixed可以固定保留小數(shù)位數(shù)
- cmath提供了M_PI
- pow是冪函數(shù), sqrt是根號
3. 華氏度與攝氏度
輸人一個華氏溫度,要求輸出攝氏溫度蜘腌。公式為c=一(F-32),輸出要有文字說明,取兩位小數(shù)
#include <iostream>
#include <iomanip>
using namespace std;
int main(int argc, char const *argv[]) {
double temp;
cout << "輸入華氏溫度:";
cin >> temp;
cout << endl << fixed << setprecision(2) << "攝氏溫度為:" << -(temp - 32.0) <<"C";
return 0;
}
問題回饋
- 沒什么問題
4.getchar與putchar
編程序用getchar 函數(shù)讀入兩個字符給 cl,c2然后分別用putchar 函數(shù)和cout 語句輸出這兩個字符。并思考以下問題:
(1)變量 cl,c2應(yīng)定義為字符型還是整型?抑或二者皆可?
(2)要求輸出cl和c2值的ASCII碼應(yīng)如何處理?
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main(int argc, char const *argv[]) {
char c1 = getchar();
int c2 = getchar();
putchar(c1);
putchar(c2);
cout << endl;
return 0;
}
問題回饋
- 中間涉及到了一些關(guān)于char int的問題,實質(zhì)上getchar是可以int也可以char的。
- 輸出c1,c2的ASCII碼需要使用cout << (int)c1
5. 理解 char 與 int 與 ascii
整型變量與字符變量是否在任何情況下都可以互相代替?
如char cl ,c2; int cl,c2;是否無條件的等價?
問題回饋
- 答案是否定的!因為有些int并無法找到ASCII對應(yīng)的char豆茫!
GPT見解
是的侨歉,您說的是正確的。雖然整型變量和字符變量都是變量類型澜薄,但它們并不在所有情況下可以互相代替为肮。
例如,在C語言中肤京,char類型的變量只能存儲一個字符(在ASCII編碼中)颊艳,而int類型的變量可以存儲更大的值,從-2147483648到2147483647(如果使用32位編譯器)忘分。因此棋枕,如果你將一個超出char類型范圍的整數(shù)賦值給一個char類型的變量,那么該變量將無法存儲整數(shù)的全部信息妒峦,并且會出現(xiàn)錯誤的結(jié)果重斑。
另一方面,當(dāng)你將一個包含字符的變量賦值給一個整型變量時肯骇,這個字符變量會被轉(zhuǎn)換為其對應(yīng)的ASCII碼值并存儲在整型變量中窥浪,這可能與原始字符的含義不同。因此笛丙,在特定情況下漾脂,這兩種類型的變量不能互相代替。
6.運算
什么是算術(shù)運算?什么是關(guān)系運算?什么是邏輯運算?
GPT見解
算術(shù)運算是對數(shù)字進行數(shù)學(xué)操作的過程胚鸯,例如加法骨稿、減法、乘法和除法等姜钳。它們通常用于執(zhí)行數(shù)值計算坦冠。
關(guān)系運算是比較兩個值之間關(guān)系的運算,例如相等哥桥、大于辙浑、小于、大于等于拟糕、小于等于和不等于等判呕。它們通常用于條件語句和循環(huán)控制結(jié)構(gòu)中。
邏輯運算是在邏輯上對布爾值進行操作的過程已卸,例如與佛玄、或和非等硼一。它們通常用于條件語句和循環(huán)控制結(jié)構(gòu)中累澡。在編程中,邏輯運算通常用于判斷某些條件是否滿足般贼,以便程序可以根據(jù)需要采取相應(yīng)的行動愧哟。
8. 比大小
比大小 abc
#include <iostream>
#include "algorithm"
using namespace std;
int main(int argc, char const *argv[]) {
int a, b, c;
cin >> a >> b >> c;
cout << ((a > b) ? ((a > c) ? a : c) : ((b > c) ? b : c));
cout << max({a, b, c});
return 0;
}
問題回饋
- <algorithm>是C++標(biāo)準(zhǔn)庫中的頭文件之一奥吩,它包含了一系列的算法函數(shù)。這些算法函數(shù)都是以泛型編程的方式實現(xiàn)的蕊梧,可以用于不同類型的數(shù)據(jù)結(jié)構(gòu)霞赫。引入了后可以使用 std::max({})
12. 顛倒數(shù)字
給一個不多于5 位的正整數(shù),要求:D求出它是幾位數(shù);2分別打印出每一位數(shù)字;3按逆序打印出各位數(shù)字,例如原數(shù)為321,應(yīng)輸出123。
#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
using namespace std;
int main(int argc, char const *argv[]) {
int number;
cin >> number;
if (number >= 100000) {
::printf("最高為五位數(shù)");
return 0;
}
string str = to_string(number);
cout << str.length() << endl;
for (int i = 0; i < str.length(); ++i) {
cout << str[i] << endl;
}
reverse(str.begin(), str.end());
cout << str << endl;
return 0;
}
問題回饋
- 這邊問題比較大肥矢,尤其是反轉(zhuǎn)端衰。reverse是<algorithm>下的函數(shù),其需要提供一個迭代器范圍甘改,即代碼中的`reverse(str.begin(), str.end())
13. 范圍條件
企業(yè)發(fā)放的獎金來自利潤提成旅东。
利潤i低于或等于 10 萬元的,可提成10% 為獎金;
利潤i高于10萬元,低于或等于 20 萬元(100000<i200000 時低于10 萬元的部分按10%提成高于10萬元的部分可提成7.5%;200000<i400000 時低于20 萬的部分仍按上述辦法提成(下同),高于20 萬元的部分按 5% 提成;400000<i600000 時高于40萬元的部分按3% 提成;600000 <i1000000 時高于60萬元的部分按 1.5%提成i>1000000時,超過100萬元的部分按1%提成。從鍵盤輸入當(dāng)月利潤求應(yīng)發(fā)獎金總數(shù)
要求:(1)用if語句編程序:
(2)用switch 語編序十艾。
//過于機械化
14. 排序數(shù)字
輸人4 個整數(shù)要求按由小到大的順序輸出抵代。
#include <iostream>
#include <iomanip>
#include <cmath>
#include <algorithm>
using namespace std;
void swap(int *num1, int *num2)
{
int temp = *num2;
*num2 = *num1;
*num1 = temp;
}
int main(int argc, char const *argv[])
{
int a, b, c, d;
cin >> a >> b >> c >> d;
int nums[] = {a, b, c, d};
int length = sizeof(nums) / sizeof(nums[0]);
for (int i = 0; i < length - 1; i++)
{
for (int j = 0; j < length - 1; j++)
{
if (nums[j] > nums[j + 1])
{
swap(nums[j], nums[j + 1]);
}
}
}
for (int i = 0; i < length; i++)
{
cout << nums[i] << ((i < 3) ? "," : "");
}
return 0;
}
問題回饋
- 指針變量
- 冒泡排序
- 數(shù)組長度,數(shù)組與Array
15. 最小公倍數(shù) 最大公約數(shù)
輸人兩個正整數(shù) m和n,求其最大公約數(shù)和最小公倍數(shù)忘嫉。