高端企业网站定制公司,wordpress喜欢_赏_分享,中国机械加工网制造,wordpress哪些插件#x1f525;博客主页#xff1a;小王又困了
#x1f4da;系列专栏#xff1a;每日一练
#x1f31f;人之为学#xff0c;不日近则日退
❤️感谢大家点赞#x1f44d;收藏⭐评论✍️ 目录
一、选择题
#x1f4dd;1.第一题
#x1f4dd;2.第二题
#x1f4d… 博客主页小王又困了
系列专栏每日一练
人之为学不日近则日退
❤️感谢大家点赞收藏⭐评论✍️ 目录
一、选择题
1.第一题
2.第二题
3.第三题
二、编程题
1.第一题
2.第二题 ️前言 在前面我们学习完C语言的所以知识当然练习巩固也不能落下。俗话说“无财之谓贫学而不能行之谓病。”可见实践对我们学习的重要。接下来就让小王带着大家进行练习巩固我们C语言的学习。 一、选择题
1.第一题
下列程序的输出结果是什么
int main()
{int n 1001;int ans 0;for(int i 1; i n; i){ans ^ i % 3;}printf(%d,ans);return 0;
} 解题思路 这道题考查了我们对异或操作符的理解异或的计算规则是两个数对应的二进制位相同为0相异为1。还有特殊的规律两个相同的数异或为0任何数与0异或还是这个数。 使用for循环遍历从1到n的所有整数。在每次迭代中都会计算当前整数 i 对3取余的结果然后将这个结果与 ans 进行异或操作。对 i 取余的结果有120循环1001次这三个数出现333次多出12。偶数对异或的结果就是0最后剩下 1^2^0^1^2 ,最后的结果为0。 2.第二题
下面代码的结果是
#include stdio.hint i;int main()
{i--;if (i sizeof(i)){printf(\n);}else{printf(\n);}return 0;
} 解题思路 在C语言中0为假非0为真。全局变量没有给初始值时编译器会默认将其初始化为0。 i 的初始值为0i-- 的结果为-1i 为整型sizeof(i)求 i 类型的大小为4按这样的分析来看结果应该打印 ‘’ 但是sizeof的返回值的类型为无符号整型因此编译器会自动将左侧的 i 自动转化为无符号整型的数据-1的二进制序列的补码全为1对应的无符号整型是非常大的数超过4或8所以结果应该打印 ‘’。 3.第三题
下面代码的结果是
int main()
{int a, b, c;a 5;c a;b c, c, a, a;b a c;printf(a%d b%d c%d\n, a, b, c);return 0;
} 解题思路 我们想要解决这道题要了解几个知识点 i 与 i 的区别一个是先加在使用一个是先使用在加逗号运算符的作用含有逗号运算符的表达式它的值为最后一个表达式的值运算符的优先级1.的优先级比高 2.逗号运算符的优先级比赋值运算符的优先级低 3.多个号在一起其优先级为后置前置例如ac 可拆分为(a)c 了解这些我们就可以开始做题啦。我们一步一步执行代码 二、编程题
1.第一题 解题思路 我们直接遍历范围内的整数分别判断每个整数是否是自除数。在判断自除数时要得到整数的每一位每次对整数 %10 就可以得到整数的最后一位然后除以10。重复该操作依次得到整数每一位当整数变成0就遍历完一个整数。如果每一位都可以将整数整除那么这个数就是自除数。这里要注意得到的最后一位是0时由于0不能做除数一定不是自除数。 bool isSelfDividing(int num)
{int temp num;while (temp 0) {int digit temp % 10;if (digit 0 || num % digit ! 0) {return false;}temp / 10;}return true;
}int* selfDividingNumbers(int left, int right, int* returnSize)
{int* arr (int*)malloc(sizeof(int) * (right - left 1));int pos 0;for (int i left; i right; i) {if (isSelfDividing(i)) {arr[pos] i;}}*returnSize pos;return arr;
} 2.第二题 解题思路 我们可以使用异或的思想将数组中的数和 1-n 的数依次异或一遍得到的就是重复的数和丢失的数异或的结果。因为其他数都成对出现异或的结果就为0。我们只要在通过排序遍历数组找到重复的数再将重复的数与刚刚的数异或就可以得到丢失的数。 int cmp_int(const void* p1, const void* p2)
{return (*(int*)p1 - *(int*)p2);
}int* findErrorNums(int* nums, int numsSize, int* returnSize)
{int* newarr (int*)malloc(sizeof(int*) * 2);int i 0;int num 0;for (i 0; i numsSize; i){num ^ nums[i];}for (i 1; i numsSize; i){num ^ i;//会得到重复的数和丢失的数异或的结果}//排序qsort(nums, numsSize, sizeof(int), cmp_int);for (i 0; i numsSize - 1; i){//找重复的数if (nums[i] nums[i 1]){break;}}//得到丢失的数num ^ nums[i];newarr[0] nums[i];newarr[1] num;*returnSize 2;return newarr;
} 本次的内容到这里就结束啦。希望大家阅读完可以有所收获同时也感谢各位读者三连支持。文章有问题可以在评论区留言博主一定认真认真修改以后写出更好的文章。你们的支持就是博主最大的动力。