【码图C++程序设计(2023)】第10章 作业1

get_sum

通过课程进入题 号:522get_sum语言要求:C++
编写一个模板函数get_sum,接收两个参数:数组和数组的长度,返回该数组所有元素的和。部分代码已给出,请将代码补充完整。

#include <iostream>

using namespace std;

【        】

int main()

{

  int arr_int[6] = { 1, 2, 3, 4, 5, 6 };

  double arr_double[6] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6 };

  cout << get_sum(arr_int, 6) << endl;

  cout << get_sum(arr_double, 6) << endl;

  return 0;

}

 这里数组有int 和 double两种,用模板函数可以一次解决。

填空:

template<class T>
T get_sum(T* array, int n)
{
	T sum = 0;
	for (int i = 0; i < n; i++)
	{
		sum += array[i];
	}
	return sum;
}

什么是模板函数?

C++模板函数是一种通用的函数,可以操作多种不同类型的数据。定义模板函数时,在函数名后面使用关键字“template”来指定模板参数,然后在函数中可以使用这些参数作为类型或值的占位符。

例如,下面是一个简单的模板函数,用于比较两个数的大小:

```
template <typename T>
T max(T a, T b) {
    return (a > b) ? a : b;
}
```

在这个例子中,“typename T”是模板参数,它表示任何类型。在函数体内部,我们可以使用T作为占位符,以便编译器知道我们要对哪种类型进行比较。

当我们调用这个函数时,我们需要明确指定T所代表的实际类型。例如,如果我们想比较两个整数,我们可以这样写:

```
int x = 3, y = 5;
int result = max<int>(x, y);
```

在这个例子中,我们将模板参数T指定为int,这意味着编译器将生成一个特定的max函数,用于比较两个整数。

node append

通过课程进入题 号:525node append语言要求:C++
编写一个表示链表节点的模板类node,实现链表节点的以下功能:
set_value函数:设置节点值
get_value函数:获取节点值
get_prev函数:获取上一个节点
get_next函数:获取下一个节点
append函数:在当前节点之后追加新节点

例如,下列程序中,
test1函数的输出应为:1 2 3
test2函数的输出应为:1.1 2.2 3.3
test3函数的输出应为:a b c

部分代码已给出,请将代码补充完整。

#include <iostream>

using namespace std;

【          填空           】

void test1()

{

  node<int> *ptr;

  node<int> node1,node2,node3;

  node1.set_value(1);

  node2.set_value(2);

  node3.set_value(3);

  node1.append(&node2);

  node2.append(&node3);

  for(ptr=&node1 ; ; ptr=ptr->get_next())

  {

    cout << ptr->get_value() << " ";

    if(ptr->get_next()==NULL) break;

  }

}

void test2()

{

  node<float> *ptr;

  node<float> node1,node2,node3;

  node1.set_value(1.1);

  node2.set_value(2.2);

  node3.set_value(3.3);

  node1.append(&node2);

  node2.append(&node3);

  for(ptr=&node1 ; ; ptr=ptr->get_next())

  {

    cout << ptr->get_value() << " ";

    if(ptr->get_next()==NULL) break;

  }

}

void test3()

{

  node<char> *ptr;

  node<char> node1,node2,node3;

  node1.set_value('a');

  node2.set_value('b');

  node3.set_value('c');

  node1.append(&node2);

  node2.append(&node3);

  for(ptr=&node1 ; ; ptr=ptr->get_next())

  {

    cout << ptr->get_value() << " ";

    if(ptr->get_next()==NULL) break;

  }

}

int main( )

{

  int type;

  cin >> type;

  

  switch(type)

  {

    case 1:

    test1();

    break;

    

    case 2:

    test2();

    break;

    case 3:

    test3();

    break;

  }

return 0;

}

 

template <typename DataType>
class node
{
    DataType data;
    node *next;

public:
    node(){};
    void set_value(DataType d)
    {
        data = d;
    }
    DataType get_value()
    {
        return data;
    }
    node *get_next()
    {
        return next;
    }
    void append(node *n)
    {
        next = n;
    }
};

异常处理

通过课程进入题 号:528异常处理语言要求:C++
下列程序的功能是:输入数组下标和除数,从数组中取出下标对应的数组元素作为被除数,输出除法运算的结果。例如,
输入:9 5
输出:2

捕获程序数组下标越界错误,给出相应的提示,例如,
输入:10 5
输出:10 out of bound

输入:-1 5
输出:-1 out of bound

捕获程序数组下标除零错误,给出相应的提示,例如,
输入:9 0
输出:divide by 0

部分代码已给出,请将代码补充完整。

#include <iostream>

using namespace std;

【          填空          】

int main()

{

  int index, dividend, divisor, result;

  int array[10]={1,2,3,4,5,6,7,8,9,10};

  try

  {

    cin >> index >> divisor;

    if( index < 0 || index>9)

      throw A(index);  

    if(divisor==0)

      throw B(divisor);

    dividend = array[index];

    result = dividend / divisor;

    cout << result << endl;

  }

  catch(A a)

  {

    cout << a.err << " out of bound" << endl;

  }

  catch(B b)

  {

    cout << "divide by "<< b.err << endl;

  }

  

  return 0;

}

class A{

public:
    int err;
    A(int index){
        err=index;
    }
};

class B{
public:
    int err;
    B(int divisor){
        err=divisor;
    }

};

异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。

异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw

  • throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。
  • catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。
  • try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 catch 块。

命名空间ns1

通过课程进入题 号:529命名空间ns1语言要求:C++
补充下列程序的代码,使得程序的输出为:
1,2
a,b
11

#include <iostream>

using namespace std;

namespace ns1

{

【     填空   】

}

int main()

{

  using namespace ns1::ns2;

  cout << ns1::x << "," << ns1::y << endl;

  cout << x << "," << y << endl;

  cout << add_one(10) << endl;

return 0;

}

int x=1,y=2;
    namespace ns2{
        char x='a',y='b';
        int add_one(int a){
            return a+1;
        }
    }

 自定义命名空间

命名空间可以嵌套,您可以在一个命名空间中定义另一个命名空间,如下所示:

namespace namespace_name1

{ // 代码声明

        namespace namespace_name2

                { // 代码声明 }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值