数据结构,算法与应用 C++语言描述 练习答案1.2函数与参数
1.修改代码,使实参的值得到交换:
void swap(int &x,int &y){
int temp=x;
x=y;
y=temp;
}
2.编写一个模板函数count,返回值是数组a[0,n-1]中value出现的次数。
template <class T>
int count(T& a,int value) {
int i = 0, j = 0,n;
n = (sizeof(a) / sizeof(a[0]));
for (i = 0; i < n; i++) {
if (a[i] == value)
{
j++;
}
}
return j;
}
3.编写一个模板函数fill,给数组a[start:end-1]赋值value。
template<class T>
void fill(T * a, int start, int end, const T & value)
{while (start != end) {
a[start++] = value; }
}
4.编写一个模板函数inner_product,返回值是a[i]b[i] (i从0到n-1).
template <class T>
int inner_product(T *a,T *b,int n) {
int i = 0, sum = 0;
for (i = 0; i < n; i++) {
sum += a[i] * b[i];
}
return sum;
}
5.编写一个模板函数iota,使a[i]=value+i,0<=i<n.(要注意用for来遍历数组中的每个元素,如果只使用cout输出a的话会出现乱码)
template <class T>
void iota(T *a,T value,int n) {
int i ;
for (i = 0; i < n; i++) {
a[i] = value + i;}
}
/*int main() {
int a[7] ;
iota(a,4,7);
for (auto x : a) {
cout << x << " ";
}
return 0;
}*/
6.编写一个模板函数is_sorted,当且仅当a[0:n-1]有序时,返回值是true。
template <class T>
bool is_sorted(T *a,int n) {
int f = 1, ff = 1;
for (int i = 0; i < n - 1; i++) {
if (a[i] < a[i + 1]){
f = 0;
}
if (a[i] > a[i + 1]) {
ff = 0;
}
}
if (f == 1 || ff == 1)
return true;
else
return false;
}//通过运行结果我们可以看到,所有元素相同的数组也被认为是有序数组
7.编写一个模板函数mismatch,返回值是使不等式a[i]不等于b[i]成立的最小索引i,0=<i<n.
(这里题设描述的不是很准确,可以认为n=lengtha[ ]=lengthb[ ])
template<class T>
int mismatch(T* a, T* b, int length) {
for (int i = 0; i < length; i++) {
if (a[i] != b[i]) {
return i;
}
}
return -1;
}