Day 4.29 小题总结
Test 1:求数组最值及其对应下标
注意:获取最值的比较条件!!!
#include<stdio.h>
int main() {
int a[10], n, max, min, posMax, posMin;
for (n = 0; n < 10; n++) {
scanf("%d", &a[n]); //数组初始化
}
max = min = a[0];
for (n = 0; n<10; n++) {
/*获取最大值及数组下标*/
if (a[n]>max) {
max = a[n];
posMax = n ;
}
/*获取最小值数组下标*/
else if (a[n] < min) {
min = a[n];
posMin = n ;
}
}
printf("max=%d,posMax=%d\n", max, posMax);
printf("min=%d,posMin=%d\n", min, posMin);
}
Test 2:递归+循环迭代2种方法求斐波拉契数列
一、什麽是斐波拉契数列?
斐波拉契数列特点是第N项总是等于前两项之和;
一般是从第一项和第二项都是1开始:例如
1 1 2 3 5 8 13 21 34 55 59…
二、C中的常见题型
2.1 问题:编写一个程序,用户输入整数 N,程序打印前 N 项斐波那契数并求和;
如输入N=7 ,运行结果是:
1 1 2 3 5 8 13
1 + 1 + 2 + 3 + 5 + 8 + 13 = 33
———————————————————————————————
2.2 求解方法有两种,迭代法(又称循环法)和递归法;
法一:迭代法(也称循环法)
#include<stdio.h>
#include<stdlib.h>
int main()
{
long int *f;
int n, i;
long int sum = 0;
printf("input n:");
scanf("%d", &n);
/*为数组f申请动态内存*/
f = (long int*)malloc(sizeof(long int)*n);
f[0] = 0;
f[1] = 1;
/*从第2项其,后一项等于前2项的和*/
for (i = 2; i <= n; i++)
{
f[i] = f[i - 1] + f[i - 2];
}
for (i = 1; i <= n; i++)
{
printf("%-6d", f[i]);
//换行
if (i % 6 == 0)
{
printf("\n");
}
}
printf("\n");
for (i = 0; i < n; i++)
{
sum += f[i];
}
printf("sum =%d\n", sum);
return 0;
}
结果:
法二:递归法
#include<stdio.h>
//递归法
int fibonacci(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main(void)
{
int n;
int sum = 0;
int ret = 0;
printf("输入要求的斐波拉契数列项数n:");
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
ret = fibonacci(i);
sum = sum + ret;//计算前n项和
printf("%d\n", ret);//打印前n项的每个数
}
printf("第%d项 = %d\n", n, ret);
printf("前%d项和 sum= %d\n", n, sum);
return 0;
}