数据结构、算法与应用C++【第一章 C++回顾】答案解析1-4

我就随手写个博客,可能有错的,大家可以指出来哦~

//我只有C的基础

第一题

#include <iostream>
using namespace std;
 
//根据地址对传入的变量进行操作,
// 可以理解为把这个变量的地址赋给了形参的地址,
// 那么对形参的操作就是对该地址对应的变量操作
 
void swap(int& x,int& y)
{
    int temp = 0;
    temp = x;
    x = y;
    y = temp;
}
 
int main()
{
    int a = 4;
    int b = 6;
    swap(a,b);
    cout<<a<<","<<b<<endl;
    return 0;
}

第二题

#include <iostream>
using namespace std;
template <int len>

// 第一,在c中,数组在作为参数的时候就退化为指针,
// 对一个地址来取大小呢,如果是32位系统的话即为4,
// 如果是64位系统的话为8,所以呢,
// 在函数中sizeof获取的是指针的长度而不是数组的长度。
// 第二呢,在函数中,sizeof的处理时间的在编译期,
// 也就是说对于动态生成的数组大小是不能用sizeof来算出来的。
// 下面是一篇博客,说这个的,可以看看
// https://blog.csdn.net/xiaonan153/article/details/81411600
// int count(T* arr)
// {
//     //得到错误结果
//     return sizeof(arr)/sizeof(arr[0]);
// }

int count(int (&arr)[len])
{
    return sizeof(arr)/sizeof(arr[0]);
}
//建议搜搜资料

int main()
{
    int arr[] = {1,2,3,4,7};
    cout<<count(arr)<<endl;
    return 0;
}

第三题

#include <iostream>
using namespace std;
template <class T>

void fill(T* a,int start,int end,T value)
{
    for(int i = start;i<end;i++)
    {
        a[i] = value;
    }
}

int main()
{
    char arr[10] = {'0'};
    fill(arr,0,10,'w');
    for(int i = 0;i<10;i++)
    {
        cout<<arr[i]<<endl;
    }
    return 0;
}

第四题

#include <iostream>
using namespace std;
template <class T>

// size是两个数组中长度最小的一个数字
// 为什么不在函数里面量取,因为对我来说比较蛮烦,
// 可以参照第二题
// 量取可以放在主函数里面做的,而且易于理解
T inner_product(T*a,T*b,int size)
{
    T sum = 0;//如果是浮点数数组就是float了
    for(int i = 0;i<size;i++)
    {
        sum = sum + a[i]*b[i];
    }
    return sum;
}

int main()
{
    float arr1[] ={1,0,3.4,4,7};
    float arr2[] = {4,5,0,3,7.8};
    int size1 = sizeof(arr1)/sizeof(arr1[0]);
    int size2 = sizeof(arr2)/sizeof(arr2[0]);
    int size = size1;//先把第一个数组的长度给size

    //判断哪个数组长度大
    if(size1>size2)
    {
        size = size2;
    }

    cout<<inner_product(arr1,arr2,size)<<endl;

    return 0; 
}

上一篇:C语言指针基础编程练习1(指针、地址、基本指针运算、各基本类型数组、一维指针数组、函数传参、数组传址、sizeof的使用注意)


下一篇:gets的使用与sizeof使用的区别