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;
}