C C++最全牛客网错题集_牛客竞赛将题目加入错题集(1),2024年最新C C++大厂面试题来袭

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

#include <stdio.h>
int main()
{
    char arr[] = { 'a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U' };
    char a = 0;
    while (scanf("%c", &a) != EOF)
    {
        int i = 0;
        for (i = 0; i < 10; i++)
        {
            if (a == arr[i])
            {
                printf("Vowel\n");
                break;
            }
        }
        if (i == 10)
            printf("Consonant\n");
    }

    return 0;
}

scanf函数取走相应字符后,还留下缓存区中的’ \n '回车键。scanf检测到缓存区里还有字符后,接着提取使用,就会再执行一次while循环。改善:

#include <stdio.h>
int main()
{
    char arr[] = { 'a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U' };//将元音字母放入数组更方便
    char a = 0;
    //下面的scanf(" %c",&a)中,在%c前加空格
    while (scanf("%c", &a) != EOF)//while(~scanf("%c",&a)也是可以的
    {
        int i = 0;
        for (i = 0; i < 10; i++)
        {
            if (a == arr[i])
            {
                printf("Vowel\n");
                break;
            }
        }
        if (i == 10)
            printf("Consonant\n");
        getchar();//清理缓存区
    }

    return 0;
}

while循环的结尾,用getchar清理输入缓存区。

还有两种方法清理缓存区里的’ \n ’

1.在%c后加’ \n ’ (仅限提取字符时可用,提取整型时不可用):

scanf(“%c\n”,&a),%c是从缓存区拿走一个字符,后面如果有\n,也会把缓冲区的\n拿走

2.在%c前加空格,会跳过空白字符:

第一次输入字符时,字符前面没有空白字符,直接运行。第二次输入开始时,输入缓存区还剩 ’ \n ‘,scanf函数检测字符前有’ \n '空白字符,直接跳过,提取下一个字符,从而实现每次都处理掉 \n

scanf函数结束输入时,会返回EOF - end of  file,EOF值为-1

-1 的 补码:11111111111111111111111111111111

也可以改善为while(~scanf (" %c ", &a )),当scanf函数返回EOF(-1)时,~EOF (~ ( - 1 ) )

~ -1 补码按位取反:00000000000000000000000000000000

(scanf)为0,假,while(scanf)循环停止


**5.**JZ65 不用加减乘除做加法

int Add(int num1, int num2 ) {
while(num2)
    {
        int t = (num1 & num2) << 1;//与,相同的一个二进制位,进一位,相当于相加进一
        num1 ^= num2;//异,不同的二进制位,处理后继续为一,相当于相加
        num2 = t;//把加一位后的结果存进num2,以便继续相加
    }
    return num1;
}

6.KS33 寻找奇数

#include <stdio.h>
int main()
{
    int n = 0;
    int m = 0;
    int t = 0;
    int i = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++)
    {
        scanf("%d", &t);
        m ^= t;//出现偶数次的数会对消成0 ,只有奇数次才会保留
    }
  //  利用异或运算性质
  //  a^ a = 0
  //  0 ^ a = a
  //  x ^ x ^ x ^ y = x ^ y
    printf("%d\n", m);
    return 0;
}

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值