1.计算n的阶乘
首先我们先利用for循环创造出从一到n的数字,再让每个数字与ret相乘,以达到阶乘的目的,最后打印出ret就好啦。
int main()
{
int i = 0;
int n = 0;
int ret = 1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
ret = ret * i;
}
printf("ret=%d\n", ret);
return 0;
}
2.计算1!+2!+3!.....+10!
我们会算阶乘那么阶乘的相加就可以操作了,只需在嵌套一个n的for循环,且sum求和就行,看下面的代码。取个小的数字进行验证代码的正确性,例如3.
int main()
{
int i = 0;
int n = 0;
int ret = 1;
int sum = 0;
for (n = 1;n <= 3;n++)
{
for (i = 1;i <= n;i++)
{
ret = ret * i;
}
sum = sum + ret;
}
printf("sum=%d\n", sum);
return 0;
}
3的阶乘相加应是1!+2!+3!=9,但是结果却是15,看来代码有点问题,问题在哪呢?
问题出在ret上
n=1时,ret=1*1=1
n=2时,ret=1*1*1*2=2
n=3时,ret=1*1*1*2*1*2*3=12
最后相加=15;所以问题在于ret保留了上一阶乘的数值。所以我们只需将ret初始化为1就好了,如下代码
int main()
{
int i = 0;
int n = 0;
int ret = 1;
int sum = 0;
for (n = 1;n <= 3;n++)
{
ret = 1;// 改动在这
for (i = 1;i <= n;i++)
{
ret = ret * i;
}
sum = sum + ret;
}
printf("sum=%d\n", sum);
return 0;
}
这样就输出正确的结果啦
当然也有另外的表示方式,例如
int main()
{
int i = 0;
int n = 0;
int ret = 1;
int sum = 0;
for (n = 1;n <= 3;n++)
{
ret = ret * n;
sum = sum + ret;
}
printf("sum=%d\n", sum);
return 0;
}
结果也是一样的
3.编写代码,演示多个字符从两端移动,向中间汇聚。
//strlen的头文件
//sleep的头文件
//cls的头文件
int main()
{
char arr1[] = "I LOVE YOU";
char arr2[] = "##########";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);//1000ms=1s,休息1秒
system("cls");//执行系统命令的一个函数-cls-清空屏幕
left++;
right--;
}
printf("%s\n", arr2);
return 0;
}
4.编写代码实现,模拟用户登录情景,并且只能登陆三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入错误,则退出程序。
int main()
{
int i = 0;
char password[20] = {0};
for (i = 0;i < 3;i++)
{
printf("请输入密码\n");
scanf("%s", password);
if (strcmp(password, "123456") == 0)
{
printf("登陆成功\n");
break;
}
else
{
printf("密码错误\n");
}
}
if (i == 3)
printf("三次密码输入错误,启动自毁程序\n");
return 0;
}