【C语言练习打卡---Day001】

这篇博客介绍了如何使用C语言计算一个数的阶乘,并提供了两种不同的方法来求解从1到n所有数的阶乘之和,分别是时间复杂度为O(n^2)和O(n)的方法。此外,还展示了一个程序,该程序能动态地从两端显示一段文字直至中间相遇。
摘要由CSDN通过智能技术生成

在这里插入图片描述


打卡博客仅作为记录,有误部分请在评论区指正,谢谢!!


代码部分

1、求n的阶乘

/*
* 【变量名及函数名说明】
*   Factorical(阶乘)
*   ret --result(结果)
*   facRet --factorical result(阶乘结果)
*/

#pragma warning(disable:4996)//解决scanf在visual studio2019中报错
#include<stdio.h>
int Factorial(int);//阶乘函数声明(原因:如果想把自定义函数写在main函数后,就必须在main函数前,将自定义函数进行声明)
                  //C语言默认情况下,只有后面定义的函数才可以调用前面定义过的函数

int main()
{
	int n;
	printf("请输入一个整数:");
	scanf("%d", &n);
	int facRet = Factorial(n);//阶乘函数调用
	printf("%d!=%d", n, facRet);
}

int Factorial(int n)//阶乘函数定义
{
	int i, ret = 1;
	for (i = 1;i <= n;i++)//此处i不能为0(原因:当i=0时,ret*=i恒为0)
	{
		ret *= i;//累乘
	}
	return ret;
}

在这里插入图片描述



2、求n个n的阶乘的和

  • 方法一【时间复杂度为O(n2)】
  • 方法二 【时间复杂度为O(n)】
/* 【方法一】
* 【变量名及函数名说明】
*   fac  -- factorical(阶乘)
*   facSum -- factorical sum(阶乘的和)
*   ret --result(结果)
*/

#pragma warning (disable:4996)
#include<stdio.h>
int facSum(int n);

int main()
{
	int n;
	printf("请输入一个整数:");
	scanf("%d", &n);
	int ret = facSum(n);
	printf("1!到%d!的和为:%d",n,ret);
}

int facSum(int n)
{
	int a, b, fac = 1, sum = 0;
	for (a = 1;a <= n;a++)
	{
		int fac = 1;//fac置空(否则会保留之前的计算结果)-- 具体例子--2!计算完后,fac的值为2,此时再计算3!此时会多乘2,为了避免多乘,需要将fac置空,不置空输入3,fac最终结果为12=1!*2!*3!
		for (b = 1;b <= a;b++)
		{
			fac *= b;//分别计算每个数的阶乘(1到a的阶乘)
		}
		sum += fac;//将所求每个数的阶乘进行累加(1到n的阶乘的和)
	}
	return sum;
}

运行结果
运行结果


/* 【方法二】
* 【变量名及函数名说明】
*   fac  -- factorical(阶乘)
*   facSum -- factorical sum(阶乘的和)
*   ret --result(结果)
*/

#pragma warning (disable:4996)
#include<stdio.h>
int facSum(int n);

int main()
{
	int n;
	printf("请输入一个整数:");
	scanf("%d", &n);
	int ret = facSum(n);
	printf("1!到%d!的和为:%d", n, ret);
}

int facSum(int n)
{
	int a, fac = 1, sum = 0;
	for (a = 1;a <= n;a++)
	{
		fac *= a;//依次计算[1,n]的阶乘
		sum += fac;//依次累加上[1,n]的阶乘
	}
	return sum;
}

运行结果
运行结果



3、一段文字从俩端依次向中间显示

#include <stdio.h>
#include <string.h>  //引入strlen的头文件
#include <windows.h>//引入Sleep的头文件

int main()
{
	char arr1[] = "Welcom to AnHui!";
	char arr2[] = "****************";
	int left = 0;
	int right = strlen(arr1)-1;//right为arr1数组最右边数的数组下标
	while (left<=right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		left++;
		right--;
		printf("%s\n",arr2);
		Sleep(1000);//程序睡眠1000ms
		system("cls");//清空屏幕(清除之前打印的内容,最终结果也会被清除)
	}
	printf("%s\n", arr2);//清除屏幕时会将最终结果也清除掉,重新在屏幕上打印最终结果


}

运行结果(运行结果为动态,视频暂未审核,后期补上)
运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值