C++primer 第五版课后习题 第六章(1) 1-20

本文详细解答了C++ Primer第五版第六章的部分习题,涉及实参与形参的区别、函数错误修复、局部变量与局部静态变量的生命周期,以及引用与传值调用的比较。通过练习,深入理解C++中函数参数、变量管理和调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

练习6.1
实参和形参的区别是什么?
形参出现在函数定义中,只能在函数体内使用

练习6.2
(a)返回类型不匹配。应该把int换成string
(b)没有返回类型。应该加上一个返回类型(如void)
(c)任意两个形参不能同名。把第二个v1换成v2
(d)函数体必须加上{ }

练习6.3 && 练习6.4

#include<iostream>

using namespace std;

int fact(int a) {
    int ret = 1;
    while (a > 1)
        ret *= a--;

    return ret;
}

int main() {
    int val;
    cin >> val;
    cout << val<<"的阶乘是:\t"<<fact(val) << endl;
    return 0;
}

练习 6.5

#include<iostream>

using namespace std;

int abs(int a) {
    return a > 0 ? a : (-a);
}

int main() {
    int val;
    cin >> val;
    cout << val<<"的绝对值是:\t"<<abs(val) << endl;
    return 0;
}

练习 6.6

形参 ,局部变量以及局部静态变量之间的关系
局部变量包括 形参和静态局部变量。
形参属于自动对象,在函数开始时初始化,在函数终止时被销毁。
局部静态变量,在程序第一次使用时初始化,直到程序终止时才被销毁。

练习 6.7

#include<iostream>

using namespace std;

int fun() {
    static int flag = -1;
    flag++;
    return flag;
}
int main() {
    for (int i = 0; i < 10; i++)
        cout <<"第"<<i+1<<"次调用的返回值是:\t"<< fun() << endl;
    return 0;   
}

分离式编译没有仔细看,用上了再看吧。。。。
练习 6.10

#include<iostream>
using namespace std;

void change_zhi_zhen(int *a,int *b) {
    int temp;
      temp = *a;
      *a = *b;
      *b = temp;
}
void change_yin_yong(int &a, int &b)
{
    int temp;
    temp = a;
    a = b;
    b = temp;
}
int main() {
    int val1 = 2, val2 = 3;
    cout << val1 << " " << val2 << endl;
    change_zhi_zhen(&val1, &val2);//用指针形参交换
    cout <<"指针形参交换"<< val1 <<" "<< val2 << endl;
    change_yin_yong(val1, val2);//用引用类型交换
    cout << "用引用类型交换" << val1 << " " << val2 << endl;
}

练习 6.12

当然是引用更容易,因为引用还可以返回额外的信息(这个理由有点牵强)

练习 6.13

前者以传值的方式传入参数,不能修改实参;
后者以引用的方式传入参数,可以修改实参;

练习 6.17

#include<iostream>
#include<cctype>
#include<string>
using namespace std;

bool find_big(const string &s) {
    for (auto c : s)
        if (isupper(c))
            return true;
    return false;
}
string change_to_small(string &s) {
    /*这种做法不对,改变的只是c的值,与s无关,c只是一个临时变量
    for (auto c : s)
    {
    c = tolower(c);
    cout << c << endl;
    }
    */
    for (decltype(s.size()) i = 0; i < s.size(); i++)
        s[i] = tolower(s[i]);   
    return s;
}

int main() {
    cout << find_big("Bhdkalks") << endl;
    string s = "Bhdkalks";

    cout << change_to_small(s)<< endl;

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值