数组中元素最大值的寻找
解决方法:用两个选择语句进行书写
void MaxMinExchang(int a[], int n)
//{
// int c = 0;
// int d = 0;
// for (d = 0;d < n;d++)
// {
// do
// {
// if (a[c] > a[c + 1])
// {
// int wu = a[c];
// a[c] = a[c + 1];
// a[c + 1] = wu;
// c++;
// }
// else
// {
// c++;
// }
// } while (c < n - 1);
// c = 0;
// }
//}
//void ReadData(int a[], int n)
//{
// int i = 0;
// do
// {
// scanf("%d", &a[i]);
// i++;
// } while (i < n);
//}
//void PrintData(int a[], int n)
//{
// int b = 0;
// do
// {
// printf("%5d\n", a[b]);
// b++;
// } while (b < n);
//}
//void main()
//{
// int n = 0;
// printf("Input n number:");
// scanf("%d", &n);
// int a[10] ;
// ReadData(a, n);
// MaxMinExchang( a, n);
// PrintData(a, n);
//
//}
break的作用解析:
函数的传参形式:
符号的应用:+= *= -=
函数的递归的学习(少量的代码进行大量复杂的运算,分为递推和回归两部分):
1定义:函数自己调试自己,递归的思想大事化小
限制条件:递归存在限制条件
2内容:
3重点:
4注意·:
0的阶乘为1
递归的练习:
1:阶乘的练习(迭代与递归的使用):
递归:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int foiso(long long int n)
{
if (n == 0)
return 1;
else
return n * foiso(n - 1);
}
int main()
{
long long int n = 0;
scanf("%d", &n);
long long int ret = foiso(n);
printf("%d", ret);
return 0;
}
迭代:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int a = 1;
int r = 0;
int sum = 1;
scanf("%d", &r);
for (a = 1;a <= r;a++)//运用循环的方法进行迭代
{
sum *= a;
}
printf("%d", sum);
return 0;
}
实验室提前批任务:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
反向输出有5个元素的int数组中的各元素的值。数组为{10,20,30,40,50}。
* *输出格式要求:"\ta[%d]=%d,"
程序运行示例如下:
a[4] = 50, a[3] = 40, a[2] = 30, a[1] = 20, a[0] = 10,
#include<stdio.h>
int main()
{
int a[] = { 10,20,30,40,50 };
int b = 0;
for (b = 0;b < 5;++b)
{
printf("a[b] = %d, ", a[b]);
}
return 0;
}
从键盘输入n个整数,用函数编程实现计算其最大值和最小值,并
其中,n由用户从键盘输入。已知n值不超过10。
要求按如下函数原型编写程序
void ReadData(int a[], int n);
/*void PrintData(int a[], int n)*/;
void MaxMinExchang(int a[], int n);
**输入提示信息要求:
"Input n(n<=10):\n"
* *要求输入格式为:"%d"
* *输出提示信息:
"Input %d numbers:\n"
"Exchange results:"
* *要求输出格式为:"%5d"
输出数组中所有数据后换行
注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程,主函数不能使用int main和return 0。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void MaxMinExchang(int a[], int n)
{
int c = 0;
int d = 0;
for (d = 0;d < n;d++)
{
do
{
if (a[c] > a[c + 1])
{
int wu = a[c];
a[c] = a[c + 1];
a[c + 1] = wu;
c++;
}
else
{
c++;
}
} while (c < n - 1);
c = 0;
}
}
void ReadData(int a[], int n)
{
int i = 0;
do
{
scanf("%d", &a[i]);
i++;
} while (i < n);
}
void PrintData(int a[], int n)
{
int b = 0;
do
{
printf("%5d\n", a[b]);
b++;
} while (b < n);
}
void main()
{
int n = 0;
printf("Input n number:");
scanf("%d", &n);
int a[10] ;
ReadData(a, n);
MaxMinExchang( a, n);
PrintData(a, n);
}
按如下函数原型编写程序,输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和。
void InputMatrix(int a[N][N], int n);
int AddDiagonal(int a[N][N], int n);
输入提示信息:
"Input n:"
"Input %d*%d matrix:\n"
输入格式:"%d"
输出提示信息和输出格式:"sum = %d\n"
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define v 10
int sum1 = 0;
void InputMatrix(int a[v][v], int n)
{
int s, d = 0;
for (s = 0;s < n;s++)
{
for (d = 0;d < n;d++)
{
scanf("%d", &a[s][d]);
}
}
}
int AddDiagonal(int a[v][v], int n)
{
if (n % 2 == 1)
{
int h = n / 2;
int g = 0;
for (g = 0;g < n;g++)
{
sum1 += a[g][g];
}
int t = 0;
int y = n-1;
for (t = 0;t < n;t++)
{
sum1 += a[t][y] ;
y--;
}
return sum1-a[h][h] ;
}
else
{
int u,i = 0;
int r = n-1;
for (u = 0;u < n;u++)
{
sum1 += a[u][u];
}
for (i = 0;i < n;i++)
{
sum1 += a[i][r];
}
return sum1;
}
}
int main()
{
printf("Input n:");
int n = 0;
scanf("%d", &n);
int a[v][v] = { 0 };
InputMatrix( a, n);
int sum = AddDiagonal( a, n);
printf("sum = %d\n", sum);
return 0;
}
采用递归方法计算x的n次方。
** 输入格式要求:"%d%d" 提示信息:"x=? n=?"
* *输出格式要求:"%d**%d=%d\n"
程序运行示例如下:
x = ? n = ? 2 8
2 * *8 = 256
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int js(int x, int n)
{
if (n == 0)
return 1;
else
return x * js(x,n-1);
}
int main()
{
int x,n = 0;
printf("x = ? n = ?\n");
scanf("%d %d", &x, &n);
int ret = js(x, n);
printf("%d**%d=%d", x, n, ret);
return 0;
}
(附加)设计一个函数Fun()要求对数组a[] = { 13,45,234,123,54,76,43,13,776,34,12,64,878,98,8,16,46,134,64,124,54,3,1,42,50,3,14,51,37,25,14,13,63,74,84,25,16,86,25,14 }进行处理
函数Fun(int* Input, int* Output, int Channel, int Fsr);
传参解释:在外部将数组a作为Input传入Fun函数, 将另外一个自建数组作为Output作为接收数组传入, Channel是用户自行输入(scanf)的一个对于数组a的分割值, Fsr是滤波系数
处理方式 : 该函数可以对任意长度的数组进行分割并滤波处理, 用于ADC数据处理, 其中Channel是最终输出通道数, 一般为接收数组的长度(sizeof), 决定了每读取到一组数据的长度, 例如Channel = 4时, a[0], a[4]。。。等就是一组, a[1], a[5]就是一组, 这样整个数组a就被分割成4份, 对于每一份数值, 需要滤波相加, 滤波方法是 前一个数* (1 - Fsr)+后一个数* Fsr, 这里Fsr建议小于不等于0.5, 直到加完为止。。例如, 对于Channel = 4, 最终处理完就只有4个数据, 再赋值给Output传出
最后在main函数里面将分割后的Output打印出来
注意 : 由于无法获取随机的数组a长度以及数据, 就假定就是a, 建议Channel长度就是40的因数, 例如2, 4, 8, 10等
输入要求 : ” % d”------》Channel的输入
“ % f”------ - 》Fsr的输入
输出要求 : ” % f\n”------》最终处理数据输出
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void Fun(float*Input, float* Output, int Channel, float Fsr)
{
int y = 0;
int t = 0;
int r = 0;
int p = 0;
for (t = 0;t < Channel;t++)
{
float m = 0.0;
y = t;
for (y;y + Channel< 40;y+= Channel)
{
m = Input[y] * (1 - Fsr) + Input[y + Channel]*Fsr;
Input[y + Channel] = m;
}
Output[r++] = m;
}
for (p = 0;p < Channel;p++)
{
printf("%f\n", Output[p]);
}
}
void main()
{
float a[40] = {13.0,45.0,234.0,123.0,4.0,76.0,43.0,13.0,776.0,34.0,12.0,64.0,878.0,98.0,8.0,16.0,46.0,134.0,64.0,124.0,54.0,3.0,1.0,42.0,50.0,3.0,14.0,51.0,37.0,25.0,14.0,13.0,63.0,74.0,84.0,25.0,16.0,86.0,25.0,14.0 };
//printf("%d", b);这个数组有40个数
int Channel = 0;
float Fsr ;
scanf("%d", &Channel);
scanf("%f", &Fsr);
float c[10];
Fun(a, c, Channel,Fsr );
}