C语言学习笔记
笔记内容:
1.找素数
2.找闰年
3.交换两个数
4.打印任意两个数的乘法口诀表
5.输出整数的每一位(递归实现)
6.递归与非递归实现strlen
7.求n的阶乘(递归实现)
8.求n的斐波那契数(递归与非递归实现)
9.反向输出字符串(递归实现)
10.输入一个整数,输出组成数字之和(递归实现)
11.求n的k次方(递归实现)
#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)
int IsPrimeNumber(int n)
{
for (int i = 2; i < n;i++){
if (n%i==0){
return 0;
}
}
return 1;
}
void IsLeapYear(int year)
{
if (((year%4)==0&&(year%100)!=0)||(year%400)==0){
printf("%d年是闰年\n",year);
}
else{
printf("%d年不是闰年\n", year);
}
}
int Exchange(int *ap,int *bp)
{
int temp = *ap;
*ap = *bp;
*bp = temp;
}
void MulList(int n)
{
for (int col = 1; col <= n;col++){
for (int row = 1; row <= col;row++){
printf("%d*%d=%d ",row,col,col*row);
}
printf("\n");
}
}
void Bit(int x)
{
if (x>9){
Bit(x/10);
}
printf("%d ",x%10);
}
int Strlen1(char *str)
{
if (*str == '\0'){
return 0;
}
else
return 1 + Rec(str + 1);
}
int Strlen2(char *str)
{
int i = 0;
while (*str!='\0'){
str++;
i++;
}
return i;
}
int Fact(int n)
{
if (n>=2){
return n*Fact(n - 1);
}
else{
return 1;
}
}
int RecFib(int n)
{
if (n>2){
return RecFib(n - 1) + RecFib(n - 2);
}
else{
return 1;
}
}
int Fib(int n)
{
int first = 1;
int second = 1;
int third = 1;
while (n>2){
third = first + second;
first = second;
second = third;
n--;
}
return third;
}
void ReverseString(char *p)
{
if (*p != '\0'){
ReverseString(p + 1);
}
printf("%c\n",*p);
}
void ReversePrint(char *arr, int num)
{
char *start = arr;
char *end = arr + num - 1;
while (start<end){
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
void Show(char arr[], int num)
{
for (int i = 0; i < num; i++){
printf("%c ", arr[i]);
}
printf("\n");
}
int DigitSum(int x)
{
if (x>9){
return DigitSum(x / 10) + (x % 10);
}
return x;
}
int Power(int x, int y)
{
if (y==1){
return x;
}
return x*Power(x, y - 1);
}
int main()
{
//输出n的k次方
printf("请分别输入n和k的值:");
int n = 0, k = 0;
scanf("%d %d",&n,&k);
printf("%d",Power(n,k));
//输出组成数字之和
printf("%d\n", DigitSum(1729));
//反向打印字符串
char *p = "lvreny";
ReverseString(p);
//反向存储并打印
char arr[] = "abcd1234";
int num = sizeof(arr) / sizeof(arr[0]) - 1;
Show(arr, num);
ReversePrint(arr, num);
Show(arr, num);
//求第n个斐波那契数
int n = 0;
scanf("%d",&n);
printf("%d\n", RecFib(n));
printf("%d\n", Fib(n));
//递归方式求n的阶乘
printf("你要求几的阶乘:");
int n = 0;
scanf("%d",&n);
printf("%d!=%d\n",n,Fact(n));
//普通方式求n的阶乘
int n = 5;
int mul = 1;
for (int i = 1; i <= n; i++){
mul *= i;
}
printf("%d!=%d",n,mul);
//计算1!+2!+...+10!
int n = 10;
int mul = 1;
int sum = 0;
for (int i = 1; i <= n; i++){
mul *= i;
sum += mul;
}
printf("%d",sum);
//递归与非递归实现strlen
char *p = "1901210139";
int len = Strlen1(p);
printf("递归strlen:%d\n",len);
len = Strlen2(p);
printf("非递归strlen:%d\n", len);
//递归方式打印整数的每一位
int n = 1901210139;
Bit(n);
//打印任意个数的乘法口诀表
printf("你想打印几的乘法口诀表:");
int num = 0;
scanf("%d",&num);
MulList(num);
//交换两个数
int a = 23, b = 47;
printf("交换前:a=%d,b=%d\n",a,b);
Exchange(&a, &b);
printf("交换后:a=%d,b=%d\n", a, b);
//判断是否是闰年
printf("请输入要判断的年份:");
int year = 0;
scanf("%d",&year);
IsLeapYear(year);
//判断并打印素数
for (int i = 100; i < 200;i++){
if (IsPrimeNumber(i)){
printf("%d ",i);
}
}
system("pause");
return 0;
}