C学习4

1、二分查找(折半查找)

#include<stdio.h>
int main()
{
    int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
    int left = 0;
    int sz = sizeof(arr) / sizeof(arr[0]);
    int right = sz - 1;
    int k;
    printf("请输入要查找的数字:");
    scanf_s("%d",&k);
    while (left <= right)
    {
        int mid = (left + right) / 2;
        if (arr[mid] > k)
        {
            right = mid - 1;
        }
        else if (arr[mid] < k)
        {
            left = mid +1 ;
        }
        else
        {
            printf("找到了,下标是%d\n", mid);
            break;
        }
    }
    if (left > right)
    {
        printf("找不到\n");
    }
    return 0;
}

还是多用scanf_s()做输入,避免内存泄漏;break不知道在哪放的话就看实际想要结束循环的地方放,在这里是找到了的那句。

当数组元素个数为偶数时,除以2得到一个小数,然而数组的下标里没有小数,很多人就很难受,但其实他们忘了int类型是如何取值的了,虽然除出来是小数,但因为int的强制取整,会丢弃掉小数部分,注意不是四舍五入,所以中间值依然为整数。

2、编写代码,演示多个字符从两端移动向中间汇聚。

#include<stdio.h>
#include<Windows.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char arr1[] = { "Welcome to the Avalon" };
    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(800);
        system("cls");
        left++;
        right--;
    }
    printf("%s", arr2);
    return 0;
}

如果非要用int right=sizeof(arr1)/sizeof(arr1[0]),那就要末尾-2而不是-1,因为char arr1[]="abc"实际上有a,b,c,\0四个元素

3、仅3次登录机会的登录界面

#include<stdio.h>
#include<string.h>
int main()
{
    int i = 0;
    char password[16] = { 0 };
    for (i = 0; i < 3; i++)
    {
        printf("Please enter the password:");
        scanf("%s", password);
        if (strcmp(password, "201110") == 0)
        {
            printf("Passed\n");
            break;
        }
        else
            printf("Failed\n");
    }
    if (i == 3)
        printf("All the chances wasted, U idiot");
    return 0;
}

卡最久的还是scanf那里,scanf_s、fscanf_s 输入字符串而非整型数字的时候, 需要在后面加上第三个参数,表示捕获的字符个数,如scanf_s("%s",str,10)、fscanf_s(&fp,"%s",str,10);不过最好还是对预处理器做设置会简易点,加参数这个我没试过。

不然就是按照此处链接对项目设置里的预处理器做设置:https://blog.csdn.net/oguro/article/details/52685662?utm_medium=distribute.pc_relevant_download.none-task-blog-2~default~BlogCommendFromBaidu~default-1.test_version_3&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-2~default~BlogCommendFromBaidu~default-1.test_version_

posted @ 2023-08-15 17:29  MaydayComes  阅读(7)  评论(0)    收藏  举报