任务描述
本关任务:计算一个数组中除最大数字之外的数字之和。
相关知识
指针形参
指针既然也是一种数据类型,自然也可以作为函数的形式参数。一般使用指针来让函数能修改外部内容,或者传递体积比较大的内容,比如:
void Swap(int *a,int *b)
{
int t = *a;
*a = *b;
*b = t;
}
int main()
{
int a = 10,b = 20;
Swap(&a,&b);
cout <<a << endl << b << endl;
}
得到的结果是:
20
10
实现了两个变量的交换。
数组形参
之前说到数组作为形参时,第一个维度是可以省略长度的,这实际上是因为数组形参会被变成其元素指针类型,比如:
void Func(int a1[],int a2[][10]); //等价于 void Func(int *a1,int (*a2)[10])
通过sizeof运算符也可以发现这一点:
void Size(int arr[10][10])
{
cout << sizeof(arr) << endl;
}
int main()
{
int arr[10][10];
Size(arr);
cout << sizeof(arr) << endl;
}
得到的结果是:
4
400
4是因为输出的是指针,而400则因为输出的是数组。
常量指针
有时候我们只想让别的代码读取指针所指数据,而不想让它写入,这个时候就可以用常量指针了。
常量指针虽然说是指向常量的指针,但其实可以指向变量,比如:
int a = 0;
const int b = 0; //一个整型常量
const int *ptr; //声明一个常量指针
ptr = &b; //指向一个常量
ptr = &a; //指向一个变量,也是可以的
cout << *ptr << endl; //只是读取,正确
*ptr = 1; //尝试写入,错误!
将常量指针用在形参上,就可以防止函数修改指针所指的内容,常用于字符串,比如:
void Print(const char *str) //字符串常量指针,只允许读
{
cout << str << endl;
str[0] = 'h'; //错误!
}
int main()
{
char str[] = "Hello";
Print(str); //变量传递给常量,没问题
str[0] = 'h'; //在这里可以随意修改
}
另外,需要注意的是常量指针说的是指向一个常量,不能修改的是所指向对象的内容,指针本身是可以修改。与此对应的是指针常量,比如:
int a,b;
const int *p1 = &a; //常量指针
p1 = &b; //正确
*p1 = 0; //错误
int * const p2 = &b; //指针常量,只能初始化
p2 = &b; //错误
p2 = &a; //错误
*p2 = 0; //正确
const int * const p3 = &a; //指向常量的指针常量,等于上面两种之和
编程要求
右侧编辑器中有一个函数Sum,它有两个参数arr和len,代表一个数组和这个数组的长度。
请在这个函数中补充代码,计算除数组最大元素之外其他元素的和,并将其输出,占一行。
注意:如果数组长度为0,则结果也是0。
输入数据由评测系统读取,并传递给Sum函数。具体见测试说明。
测试说明
平台会对你编写的代码进行测试:
测试输入:
5
1 2 3 7 9
预期输出:
13
测试输入:
4
1 2 4 4
预期输出:
3
每组输入有两行,第一行是数组的长度,第二行是数组的内容。
参考代码
#include <iostream>
using namespace std;
void Sum(const int * arr, int len) {
/********** Begin **********/
if (len == 0) {
printf("0\n");
return;
}
int max = arr[0];
int sum = 0;
// 找到数组中的最大值
for (int i = 0; i < len; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
// 计算所有元素的总和,并同时减去所有等于最大值的元素
for (int i = 0; i < len; i++) {
sum += arr[i];
if (arr[i] == max) {
sum -= max;
}
}
// 输出结果
printf("%d\n", sum);
/********** End **********/
}
标签:arr,const,常量,int,函数参数,数组,程序设计,指针
From: https://blog.csdn.net/Whovian_Z/article/details/140989368