本篇文章给大家谈谈c语言一维数组递归,以及C语言中一维数组对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、运用递归法求一组数中的最大值与最小值 C语言,2、如何用c语言中的函数递归调用算法实现n阶矩阵的n次幂的求解?3、C语言:用递归的方式对数组排序:4、C语言用数组做递归的问题。5、C语言编写递归函数,统计一维数组偶数的个数?6、C语言数组递归问题(形参接收数组和其大小)
运用递归法求一组数中的最大值与最小值 C语言,
可以用递归,将数组排序后,就可以直接得到最大最小值。
#include stdio.h
int px(int *a,int index,int size);//用递归将数组a升序排列,index传0
int main()
{
int a[]={6,4,2,8,9,5,7,1,10,3},size=10;
px(a,0,size);
printf(“数组{6,4,2,8,9,5,7,1,10,3}中最大值:%d,最小值:%d\n”,a[size-1],a[0]);
}
int px(int *a,int index,int size)
{
int i,n;
if(index==size-1)
return 1;
for(i=index+1;isize;i++)
if(a[index]a[i])
n=a[index],a[index]=a[i],a[i]=n;
return px(a,++index,size);
}
如何用c语言中的函数递归调用算法实现n阶矩阵的n次幂的求解?
/*用c语言中的函数递归调用算法实现n阶矩阵的n次幂*/
#include stdio.h
#include stdlib.h
#include time.h
#include string.h
//创建矩阵,矩阵用一维数组存储
double *matCreate(unsigned int m, unsigned int n)
{
double *p = (double *)malloc(sizeof(double) * m * n);
if (p == NULL) printf(“创建矩阵失败!\n”);
return p;
}
//输入矩阵元素
void matInput(double *a, unsigned int m, unsigned int n)
{
for (int i = 0; i m; ++i)
{
for (int j = 0; j n; ++j)
{
scanf(“%f “, a[i * n + j]);
}
}
return;
}
//随机产生矩阵元素,均匀分布于[from to]
void matInitRand(double *a, unsigned int m, unsigned int n, double from, double to)
{
if (a == NULL || m = 0 || n = 0) return;
double x;
srand(time(NULL));
for (int i = 0; i m; ++i)
{
for (int j = 0; j n; ++j)
{
x = (1.0 * rand() / RAND_MAX) * (to – from) + from;
a[i * n + j] = x;
}
}
return;
}
//转置
void matTranspose(double *a, double *b, unsigned int m, unsigned int n)
{
for (int i = 0; i m; ++i)
{
for (int j = 0; j n; ++j)
{
b[j*n +i]=a[i * n + j] ;
}
}
}
//输出矩阵
void matPrint(double *a, unsigned int m, unsigned int n)
{
for (int i = 0; i m; ++i)
{
for (int j = 0; j n; ++j)
{
printf(“%8.4f “, a[i * n + j]);
}
putchar(‘\n’);
}
return;
}
//矩阵乘法c=a*b
void matMul(double *a, double *b, double *c, unsigned int m, unsigned int n, unsigned int k)
{
if (a == NULL || b == NULL || c == NULL || m = 0 || n = 0 || k = 0) return;
double x = 0.0f;
for (int i = 0; i m; ++i)
{
for (int u = 0; u k; ++u)
{
x = 0.0f;
for (int j = 0; j n; ++j)
{
x += a[i * n + j] * b[j * k + u];
}
c[i * k + u] = x;
}
}
return;
}
//b=a^n, a:m*m阶矩阵
void matFac(double *a, double *b, unsigned int n, unsigned int m)
{
double *c = (double *)malloc(sizeof(double) * m * m); //保存临时结果
if (n 1)
{
matFac(a, c, n – 1, m);
matMul(a, c, b, m, m, m);
}
else
memcpy(b, a, sizeof(double)*m * m);
// printf(“%d:\n”,n);
// matPrint(b, m,m);
free(c); //回收内存
return ;
}
#define M 3
#define N 4
#define K N
int main(int argc, char const *argv[])
{
double *A, *B, *B1,*BT, *C;
A = matCreate(M, N);
B = matCreate(N, K);
B1 = matCreate(N, K);
BT = matCreate(K,N);
C = matCreate(M, K);
if (!A || !B || !B1 || !BT || !C) return -1;
matInitRand(A, M, N, 0.0f, 1.0f);
printf(“A=\n”);
matPrint(A, M, N);
matInitRand(B, N, K, 0.0f, 1.0f);
printf(“B=\n”);
matPrint(B, N, K);
matTranspose(B,BT,N,K);
printf(“B’=\n”);
matPrint(BT, K,N);
matMul(A, B, C, M, N, K);
printf(“C=A*B\n”);
matPrint(C, M, N);
matFac(B, B1, 4, N);
printf(“B^4\n”);
matPrint(B1, N, K);
return 0;
}
C语言:用递归的方式对数组排序:
#include stdio.h
#define N 100
void selection_sort(int a[],int len);
int main()
{
int a[N],i=0,len;
while(scanf(“%d”,a[i])==1)
{
i++;
}
len=i;
selection_sort(a,len);
for(i=0;ilen;i++)
{
if(i==0)
printf(“%d”,a[i]);
else
printf(” %d”,a[i]);
}
printf(“\n”);
return 0;
}
void selection_sort(int a[],int len)
{int i,j,t;
for(i=j=0;ilen;i++)
if(a[i]a[j])j=i;
t=a[len-1]; a[len-1]=a[j]; a[j]=t;
if(len1)selection_sort(a,len-1);
}
C语言用数组做递归的问题。
楼主,你这段代码除了漏洞,别的没有错误啊,你的目的是什么?
C语言编写递归函数,统计一维数组偶数的个数?
#includestdio.h
int odd(int a[],int n)
{if(n0)return odd(a,n-1)+a[n-1]%2;
return 0;
}
int main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10};
printf(“%d\n”,even(a,10));
return 0;
}
C语言数组递归问题(形参接收数组和其大小)
你的函数逻辑有问题。return min(b[length-n-1],arboat(b,length-n-1));这句话并不能保证所有数都被判断到。你输入四个数的话,最后一个数不管多大都不会被判断到。只判断前3个。输入超过4的话。有情况是length会等于0.所以逻辑有问题。
关于c语言一维数组递归和C语言中一维数组的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。