2022.10.3
练习1:计算阶乘
#define _CRT_SECURE_NO_WARNINGS 1//屏蔽scanf不安全报警
#include <stdio.h>
#include <string.h>int main()//计算阶乘
{
int i = 1;
int a = 1;
int j = 1;
printf("请输入阶乘数:");
scanf("%d", &j);
for(i;i<=j;i++)
{
a= i * a;
}
printf("结果为%d", a);
return 0;
}
练习2:利用递归拆分数字
void print(int n)
{
if(n>9)
{
print(n / 10);//递归
}
printf("%d ", n % 10);
}
int main()
{
unsigned int num = 0;
scanf(" %d", &num);
//递归
print(num);
return 0;
}
练习3 通过函数模拟strlen
#include <string.h>
#include<stdio.h>
int my_strlen(char* str)//str是arr的指针变量
{
int count = 0;
while(*str !='\0')
{
count++;
str++;
}
return count;
}
int main()
{
char arr[]="hello world";
int len = my_strlen(arr);//数组传参传过去的不是整个数组,而是首元素的地址
printf("字符串长度为:%d\n", len);
return 0;
}
练习4 通过递归函数实现练习3
int my_strlen(char* str)
{
if (*str != '\0')
return 1 + my_strlen(str + 1);
else return 0;
}
练习5 通过递归实现阶乘
#include <string.h>
#include<stdio.h>
int Fac(int n)
{
if (n <= 1)
return 1;
else
return n*Fac(n-1);
}
int main()
{
int a = 0;
int ret = 0;
printf("请输入阶乘数:");
scanf("%d", &a);
ret = Fac(a);
printf("结果为:%d", ret);
return 0;
}
练习6 通过递归寻找斐波那契数
int Fib(int n)
{
if (n == 1 || n == 2)
{
return 1;
}
else
n = Fib(n - 1) + Fib(n - 2);
return n;
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d", &n);
ret = Fib(n);
printf("结果为%d", ret);
return 0;
}
练习7 用while语句寻找斐波那契数,减少计算量
int main()
{
int a = 1;
int b = 1;
int c = 0;
int d = 0;
int count = 0;
printf("请问需要查找第几位斐波那契数?\n");
scanf("%d", &c);
if(c<=2)
{
printf("结果为:1");
return 0;
}
while(count+2<c)
{
d = a + b;
a = b;
b = d;
count++;
}
printf("结果为:%d",d);
return 0;
}