1.用上述函数求以下两个矩阵的乘积。
基于Visual Studio集成开发环境设计一个完整的C++工程程序,其中,包括实现两个二维数组(矩阵)的乘法运算的函数,要求:函数的形式参数为int *p、int m、int n、 int *q、int n、int k、int *r,分别表示指向第一个二维数组的第一个元素的地址的指针p、第一个二维数组的行数m和列数n、指向第二个二维数组的第一个元素的地址的指针q、第二个二维数组的行数n和列数k、指向乘积矩阵的第一个元素的地址的指针r。函数的返回值为空。一个m行n列的矩阵A乘以一个n行k列的矩阵B的积为一个m行k列的矩阵R:
其中,Ri,j表示R矩阵的第i行第j列的元素。
float arrA[100], arrB[100];
char c;
int m = 0, n = 0, k = 0, p = 0, i = 0, j, a, u, v;
float arrC[10][10];
int main(){
cout << "请输入矩阵1的值,中间使用;隔开,元素使用,隔开:" << endl;
cin >> arrA[i];
while ((c = getchar()) != '\n') {
cin >> arrA[++i];
if (c == ';')m++;
}
m++;
i++;
n = i / m;
cout << "请输入矩阵1的值,中间使用;隔开,元素使用,隔开:" << endl;
cin >> arrB[j];
while ((c = getchar()) != '\n') {
cin >> arrB[++j];
if (c == ';')k++;
}
k++;
j++;
p = j / k;
if (n != k) {
cout << "您输入的矩阵有错误!!";
return 0;
}
for (i = 0; i < m; i++) {
for (j = 0; j < p; j++) {
for (a = 1; a <= n; a++) {
arrC[i][j] += arrA[i * n + a - 1] * arrB[(a - 1) * p + j];
}
}
}
cout << "A*B=" << endl;
for (u = 0; u < m; u++) {
for (v = 0; v < p; v++) {
if (v != p - 1) {
cout << arrC[u][v] << ",";
}
else {
cout << arrC[u][v] << endl;
}
}
}
system("pause");
}
2.编写递归函数计算,其中n为整数,x为实数。用该函数求3.14的值。
double cifang(int n, double x) {
if (n == 0) return 1;
else if (n == 1) return x;
else {
//pow(平方的数,几次方)
return cifang(n - 1, x) * x;
}
}
double cifang2(int n, double x) {
if (n == 0) return 1;
else if (n == 1) return x;
else {
//pow(平方的数,几次方)
return x * pow(x, (n - 1));
}
}
int main(){
int n;
double x;
cout << "请输入n和x的值,其中n为整数,x为实数:" << endl;
cin >> n;
cin >> x;
cout << x<<"的"<<n<<"次方结果为"<< cifang(n, x) << endl;
cout << x<<"的"<<n<<"次方结果为"<< cifang2(n, x) << endl;
}
3.编写递归函数求阶乘,阶乘的定义为:n! = n×(n-1) ×…×2×1 = n × (n-1)!。这里求8!的值 。
double jiecheng(int num) {
if (num == 1) {
return 1;
}
else {
return num * jiecheng(num - 1);
}
}
int main(){
double num;
cout << "请输入num的值" << endl;
cin >> num;
cout << num << "的阶乘结果为" << jiecheng(num)<< endl;
}