第三章 程序設(shè)計(jì)初步

第三章 程序設(shè)計(jì)初步

1.

2.計(jì)算圓的數(shù)據(jù)

設(shè)圓半徑r=1.5,圓柱高 h=3求圓周長(zhǎng)圓面積圓球表面積圓球體積圓柱體積。
用 cin 輸人數(shù)據(jù),輸出計(jì)算結(jié)果,輸出時(shí)要求有文字說明,取小數(shù)點(diǎn)后兩位數(shù)字。請(qǐng)編程序。

#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;//計(jì)算周長(zhǎng)
    int area = M_PI * pow(r, 2);//計(jì)算面積
    int ball_size = 4 * M_PI * pow(r, 2);//圓球表面積
    int ball_volume = 4 / 3 * M_PI * pow(r, 3);//圓球體積

    std::cout << std::setprecision(2) << "周長(zhǎng):" << 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ù)點(diǎn)保留需要使用<iomanip>的std::setprecision
  • cout加上fixed可以固定保留小數(shù)位數(shù)
  • cmath提供了M_PI
  • pow是冪函數(shù), sqrt是根號(hào)

3. 華氏度與攝氏度

輸人一個(gè)華氏溫度,要求輸出攝氏溫度。公式為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ù)讀入兩個(gè)字符給 cl,c2然后分別用putchar 函數(shù)和cout 語句輸出這兩個(gè)字符。并思考以下問題:
(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的問題,實(shí)質(zhì)上getchar是可以int也可以char的。
  • 輸出c1,c2的ASCII碼需要使用cout << (int)c1

5. 理解 char 與 int 與 ascii

整型變量與字符變量是否在任何情況下都可以互相代替?
如char cl ,c2; int cl,c2;是否無條件的等價(jià)?

問題回饋

  • 答案是否定的!因?yàn)橛行﹊nt并無法找到ASCII對(duì)應(yīng)的char!

GPT見解

是的,您說的是正確的。雖然整型變量和字符變量都是變量類型,但它們并不在所有情況下可以互相代替。

例如,在C語言中,char類型的變量只能存儲(chǔ)一個(gè)字符(在ASCII編碼中),而int類型的變量可以存儲(chǔ)更大的值,從-2147483648到2147483647(如果使用32位編譯器)。因此,如果你將一個(gè)超出char類型范圍的整數(shù)賦值給一個(gè)char類型的變量,那么該變量將無法存儲(chǔ)整數(shù)的全部信息,并且會(huì)出現(xiàn)錯(cuò)誤的結(jié)果。

另一方面,當(dāng)你將一個(gè)包含字符的變量賦值給一個(gè)整型變量時(shí),這個(gè)字符變量會(huì)被轉(zhuǎn)換為其對(duì)應(yīng)的ASCII碼值并存儲(chǔ)在整型變量中,這可能與原始字符的含義不同。因此,在特定情況下,這兩種類型的變量不能互相代替。

6.運(yùn)算

什么是算術(shù)運(yùn)算?什么是關(guān)系運(yùn)算?什么是邏輯運(yùn)算?

GPT見解

算術(shù)運(yùn)算是對(duì)數(shù)字進(jìn)行數(shù)學(xué)操作的過程,例如加法、減法、乘法和除法等。它們通常用于執(zhí)行數(shù)值計(jì)算。

關(guān)系運(yùn)算是比較兩個(gè)值之間關(guān)系的運(yùn)算,例如相等、大于、小于、大于等于、小于等于和不等于等。它們通常用于條件語句和循環(huán)控制結(jié)構(gòu)中。

邏輯運(yùn)算是在邏輯上對(duì)布爾值進(jìn)行操作的過程,例如與、或和非等。它們通常用于條件語句和循環(huán)控制結(jié)構(gòu)中。在編程中,邏輯運(yùn)算通常用于判斷某些條件是否滿足,以便程序可以根據(jù)需要采取相應(yīng)的行動(dò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ù)都是以泛型編程的方式實(shí)現(xiàn)的,可以用于不同類型的數(shù)據(jù)結(jié)構(gòu)。引入了后可以使用 std::max({})

12. 顛倒數(shù)字

給一個(gè)不多于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ù),其需要提供一個(gè)迭代器范圍,即代碼中的`reverse(str.begin(), str.end())

13. 范圍條件

企業(yè)發(fā)放的獎(jiǎng)金來自利潤提成。
利潤i低于或等于 10 萬元的,可提成10% 為獎(jiǎng)金;
利潤i高于10萬元,低于或等于 20 萬元(100000<i200000 時(shí)低于10 萬元的部分按10%提成高于10萬元的部分可提成7.5%;200000<i400000 時(shí)低于20 萬的部分仍按上述辦法提成(下同),高于20 萬元的部分按 5% 提成;400000<i600000 時(shí)高于40萬元的部分按3% 提成;600000 <i1000000 時(shí)高于60萬元的部分按 1.5%提成i>1000000時(shí),超過100萬元的部分按1%提成。從鍵盤輸入當(dāng)月利潤求應(yīng)發(fā)獎(jiǎng)金總數(shù)
要求:(1)用if語句編程序:
(2)用switch 語編序。

//過于機(jī)械化

14. 排序數(shù)字

輸人4 個(gè)整數(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ù)組長(zhǎng)度,數(shù)組與Array

15. 最小公倍數(shù) 最大公約數(shù)

輸人兩個(gè)正整數(shù) m和n,求其最大公約數(shù)和最小公倍數(shù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容