返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >拒绝摆烂!C语言练习打卡第三天
  • 403
分享到

拒绝摆烂!C语言练习打卡第三天

c语言算法c++数据结构开发语言链表 2023-09-10 05:09:02 403人浏览 薄情痞子
摘要

🔥博客主页:小王又困了 📚系列专栏:每日一练 🌟人之为学,不日近则日退  ❤️感谢大家点赞👍收藏⭐评论✍️   目录 一、选择题 📝1.第一题  

🔥博客主页:小王又困了

📚系列专栏:每日一练

🌟人之为学,不日近则日退 

❤️感谢大家点赞👍收藏⭐评论✍️

 


目录

一、选择题

📝1.第一题 

📝2.第二题 

📝3.第三题 

二、编程题

📝1.第一题 

📝2.第二题 


🗒️前言:

在前面我们学习C语言的所以知识,当然练习巩固也不能落下。俗话说:“无财之谓贫,学而不能行之谓病。”可见实践对我们学习的重要。接下来就让小王带着大家进行练习,巩固我们C语言的学习。

一、选择题

📝1.第一题 

以下程序运行后的输出结果是( )

int main(){    int a=1,b=2,m=0,n=0,k;    k=(n=b

💡解题思路:

这道题是要打印 k 和 m 的值,我们通过执行上面的表达式来得到它两的值。在这里括号的优先级最高,先执行括号中的代码,关系运算符的优先级大于赋值操作符,这里我们要注意 && ,当左边为假时,就不用执行右边的代码。

  1. 先执行 b
  2. 再将0赋值给 k,表达式 k=0表达式为假
  3. 左侧表达式为假,右侧表达式也不执行,所以 k 和 m 的值都为0

📝2.第二题 

读代码选结果( )

int main(){int count = 0;int x = -1;while (x){count++;x = x >> 1;}printf("%d", count);}

 💡解题思路:

通过观察代码,可以得知代码的目是计算一个整数 x 的二进制表示中有多少个1。

  • 首先,初始化计数器count为0,用于记录1的个数。
  • 然后,将整数 x 初始化一个值。接下来进入while循环,条件是x不为0。在循环内部,首先将count加1,表示找到了一个1。然后将x右移一位(相当于除以2),继续检查新的x值。当x变为0时,循环结束。
  • 最后,使用printf函数输出计数器count的值,即整数 x 的二进制表示中1的个数。

但是这里 x 初始化为-1,-1的二进制补码全部都是1,第一位是符号位。右移分为算数右移逻辑右移,一般编译器都是算术右移:右边丢弃,左边补原来的符号位。所以计数器会一直加,程序陷入死循环。

📝3.第三题 

请阅读以下程序,其运行结果是( )

int main(){    char c='A';    if('0' <=c<= '9')     {            printf("YES");    }    else     {        printf("NO");    }    return 0;}

 💡解题思路:

这道题很容易对大家产生误解,'0' <=c<= '9' 这段代码的意思就是 c 大于 ‘0’小于 ‘9’ 就为真,但这种是数学中的写法,在程序中这样的代码要从左向右执行:

  • 先执行 ‘0’<= c,'A' 的ASCII码值为65,‘0’ 的ASCII码值为48,‘0’ <=c 为真值为1
  • 然后进行下面的判断 1<= ‘9’ 为真,所以打印YES

正确的代码应该写成 c >='0'  && c <= '9',if语句判断为真,打印YES。

虽然两段代码的结果相同,但逻辑并不相同,所以我们在平常写代码时一定要规范。

二、编程

📝1.第一题 

💡解题思路:

我们想在数字中添加逗号,将每一位通过 %10 /10 的方式拆分下来,在需要的地方将逗号插入进去。由于加入逗号,原来的数字就不能用整型表示,而是要变成字符型,在得到每位的数据加上 ‘0’ 就可以变成字符型。将得到的数据存放在字符数组中,每存放3个数据就插入一个逗号,即k%3==0 就插入,这里要注意判断条件,当插入第一个数时,k%3==0 的条件也满足,但是不需要插入逗号,所以我们要加上 k!=0 ,使条件完整。

#include int main(){    int n = 0;    scanf("%d", &n);    //存放最后的结果    char arr[14] = { 0 };    int i = 0;    //记录加逗号    int k = 0;    while (n)    {        if (k != 0 && k % 3 == 0)        {            arr[i++] = ',';        }        arr[i++] = n % 10 + '0';        n /= 10;        k++;    }    //打印    for (i--; i >= 0; i--)    {        printf("%c", arr[i]);    }    return 0;}

📝2.第二题 

 💡解题思路:

我们通过两个循环遍历数组,当找到 numbers[i]+numbers[j] 和目标值相同的直接 return 。由于题目中还要求时间复杂度为 O(nlogn) ,两次循环时间复杂度为 O(n^2)。所以我们可以使用 contine ,在第二次循环之前先判断,如果 numbers[i]>target ,两数之和一定大于 target,使用 continue就可以跳过第二次循环,执行下一次。

  • continue:提前结束本次循环,接着执行下一次循环 

 

int* twoSum(int* numbers, int numbersLen, int target, int* returnSize) {    int* newarr = (int*)malloc(sizeof(int) * 2);    int i = 0;    for (i = 0; i < numbersLen; i++)    {        if (numbers[i] > target)        {            continue;        }        int j = 0;        for (j = i + 1; j < numbersLen; j++)        {            if (numbers[i] + numbers[j] == target)            {                newarr[0] = i + 1;                newarr[1] = j + 1;                *returnSize = 2;                return newarr;            }        }    }    *returnSize = 0;    return 0;}

本次的内容到这里就结束啦。希望大家阅读完可以有所收获,同时也感谢各位读者三连支持。文章有问题可以在评论区留言,博主一定认真认真修改,以后写出更好的文章。你们的支持就是博主最大的动力。

来源地址:https://blog.csdn.net/2301_76207836/article/details/132268684

--结束END--

本文标题: 拒绝摆烂!C语言练习打卡第三天

本文链接: https://lsjlt.com/news/402018.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作