1.计算n的阶乘
n * n-1 * n-2 * ...... * 等同于从1乘到n
#include <stdio.h>
int main()
{
int i = 0;
int n;
int ret = 1;
printf("请输入n:\n");
scanf("%d", &n);
for(i = 1; i <= n; i++)
{
ret = ret * i;
}
printf("ret = %d\n", ret);
return 0;
}
2.计算1!+2!+3!+4!+......+10!
#include <stdio.h>
int main()
{
int i;
int n;
int ret = 1;
int sum = 0;
for (n = 1; n <= 10; n++)
{
ret = 1; // 每一回合开始时,将ret变成1
for(i = 1; i <= n; i++)
{
ret = ret * i
}
sum += ret;
}
printf("sum = %d\n", sum);
return 0;
}
改进:
#include <stdio.h>
int main()
{
int n;
int ret = 1;
int sum = 0;
for(n = 1; n <= 10; n++)
{
ret = ret * n;
sum = sum +ret;
}
printf("sum = %d\n", sum);
return 0;
}
3.从一个有序数组中查找某个数
最简单的办法就是遍历数组,然后对比
改进:
二分查找法:
#include <stdio.h>
int main()
{
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sz = sizeof(arr) / sizeof(arr[0]);
int k = 7; // 假设要查找的数字是7
int left = 0; // 左下标
int right = sz - 1; // 右下标
while(left <= right)
{
int mid = (left + right) / 2; // 中间下标,每一回合都折半
if(arr[mid] > k)
{
right = mid - 1; // 如果折半的数字大于要查找的这个数字,那右下标减1
}
else if(arr[mid] < k)
{
left = mid + 1; // 如果折半的数字小于要查找的这个数字,那左下标加1
}
else
{
printf("找到了,下标是:%d\n", mid);
break;
}
}
if(left > right) //
{
printf("找不到\n");
}
return 0;
}
4. 编写代码,演示多个字符从两端移动,向中间汇聚
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main()
{
char arr1[] = "welcome to china!!!!!!";
char arr2[] = "######################";
int left = 0;
// int right = sizeof(arr1) / sizeof(arr1[0]) - 2; // 必须减2,因为字符串后面还有个\0
int right = strlen(arr1) - 1; // strlen()库函数,计算字符串的长度,需要调用string.h库
while(left < right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000); // 休息函数,需要调用windows.h
left++;
right--;
}
return 0;
}
5.编写代码,模拟用户登录,并且只能登录三次(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序)
#include <stdio.h>
#include <string.h>
int main()
{
int i = 0;
char password[20] = {0};
for(i = 0; i < 3; i++) // 最多允许错误三次
{
printf("请输入密码:>");
scanf("%s", password);
if(strcmp(password, "123456") == 0) // 等号不能用来比较两个字符串是否相等,应该用一个库函数——strcmp()
{
printf("登录成功!\n");
break;
}
else
{
printf("密码错误!\n");
}
}
if(i == 3)
{
printf("三次密码均错误,退出程序\n");
}
return 0;
}