临沂网站制作哪家好,制作淘宝网页网站,广西建设网站,东营网新闻前言#xff1a;每日一练系列#xff0c;每一期都包含5道选择题#xff0c;2道编程题#xff0c;博主会尽可能详细地进行讲解#xff0c;令初学者也能听的清晰。每日一练系列会持续更新#xff0c;暑假时三天之内必有一更#xff0c;到了开学之后#xff0c;将看学业情… 前言每日一练系列每一期都包含5道选择题2道编程题博主会尽可能详细地进行讲解令初学者也能听的清晰。每日一练系列会持续更新暑假时三天之内必有一更到了开学之后将看学业情况更新。 五道选择题
1、执行下面的程序段语句3的执行次数为
for(i 0; i n-1; i) // (1)
for(j n; j i; j--) // (2)
state// (3)
A.n(n2)/2 B.(n-1)(n2)/2 C.n(n1)/2 D.(n-1)(n2) 解析先看代码构成两个循环嵌套在了一起每一次循环都会执行一次语句3那么我们的目标就是计算出总循环的次数。 第一层循环的i被初始化为0循环继续条件为in-1且每次循环i1。继续观察发现没有别的可以影响i的值的因素了0~n-1次数为n因此第一层循环的次数为n。 接下来看第二层循环第二层循环的j被初始化为了n循环继续条件为ji且每次循环j减1。第二层循环受到i的值的影响我们在做这种题时可以先代几个值进去尝试。 当i0时走到第二层循环那么此时循环继续进行的条件就变成了j0j被初始化为n每次循环j减1。那么第二层循环就会走n次。 我们接着走当i1时走到第二层循环那么此时循环继续进行的条件就变成了j1j又会被初始化为n那么循环的次数就会是n-1 当i2时为n-2.......一直到in-1时二层循环走1次可以看出 总共的循环次数是nn-1n-2.....1最后的结果为(1n)*n/2所以答案是C 2、对于代码段下面描述正确的是
t0;
while(printf(*))
{
t;
if (t3)
break;
}
A. 其中循环控制表达式与0等价 B. 其中循环控制表达式与0等价
C. 其中循环控制表达式是不合法的 D. 以上说法都不对 解析 观察四个选项发现它们都避不开循环控制表达式所以我们从循环控制表达式入手。循环控制表达式为printf(*)而printf是有返回值的它在屏幕上输出了几个字符返回值就为几。 printf(*)只会在屏幕上打印出一个*字符所以这个控制表达式可以等价为1也就是可以将循环看作while(1)循环条件恒为真也就是死循环。 因此如果有表达式可以实现循环控制表达式恒为真那就等价于我们的循环控制表达式。 先看A选项A循环控制表达式与0等价显然是错的0恒为假一次循环都不会进去更别说死循环了。 再看B选项B循环控制表达式与0等价0的ASCII码值是4848非0循环控制表达式恒为真故答案为B。 C选项是循环控制表达式不合法一般来说要出现循环控制表达式不合法很可能是你的语法出错了而题目中的死循环虽然它死循环了但循环是会进行的所以是合法的C错。D不用看一般都不会选这个。所以最后答案为B 3、如下函数是求两个int数字最大公约数的指出其中存在的问题【多选】
int gcd(char x,char y)
{
int min x y ? x : y;
for (min 0; min 0; min--)
if (x % min 0 y % min 0)
return min;
}
A. 参数类型不对 B.循环变量min初值不对 C.判断等于的符号不对 D.返回类型不对 解析题目函数的用途是求两个数字的最大公约数让我们指出代码存在的问题。这种问题即使你不知道怎么用代码求最大公约数也是能做的。 先看A选项A说参数类型不对那么我们观察可以发现xy是char型的而题目要求两个int数字的最大公约数参数类型不匹配故要选A。 再看B选项B说循环变量min初值不对min初值被设成了0而循环条件为min0因此循环一次都不会进行更不会走到if的判断中。会直接走到return min上最后只会返回xy中的较小的那个这样求最大公约数显然是错的故要选B。 再看C选项C说判断等于的符号不对观察发现问题代码if (x % min 0 y % min 0)我们判断相等时要用两个号一个号是赋值的意思故要选C。 最后再看D选项D说返回类型不对min是int型的而函数的返回类型也是故D错不选。综上所述我们的答案是ABC 4、下列条件语句中功能与其他语句不同的是 A. if(a) printf(%d\n,x); else printf(%d\n,y); B. if(a0) printf(%d\n,y); else printf(%d\n,x); C. if (a!0) printf(%d\n,x); else printf(%d\n,y); D. if(a0) printf(%d\n,x); else printf(%d\n,y); 解析找不同这个很简单顺着走看功能就行 先看A选项if(a) printf(%d\n,x); else printf(%d\n,y);顺着读就是当a为非0值时打印x当a为0时打印y 再看B选项if(a0) printf(%d\n,y); else printf(%d\n,x);当a为0时打印y当a为非0打印x和A一样 再看C选项if (a!0) printf(%d\n,x); else printf(%d\n,y);当a不等于0时打印x为0时打印y和A一样 最后看D选项if(a0) printf(%d\n,x); else printf(%d\n,y);当a等于0时打印x不等于0时打印y和之前的都不一样故答案为D 5、我们知道C语言的 break 语句只能跳出离它最近的一层循环可是有时候我们需要跳出多层循环下列跳出多层循环的做法正确的是【多选】
A. 将程序写成函数用return结束函数便可跳出循环 A解析使用return可以直接结束函数别说跳出循环了它直接撂担子不干了所以A正确 B. 修改外层循环条件例如
for (int i 0; i MAX1; i)
{for (int j 0; j MAX2; j){if (condition){i MAX1;//1break;//2}}//3
} B解析当condition满足的时候iMAX1然后breakbreak跳出一层循环跳到3的位置继续走发现没有代码执行了跳到开始的条件判断发现不满足iMAX1这个条件故循环结束。可以看出当condition满足时直接跳出这个多层循环故B正确 C. 在外层循环设置判断条件例如
for (; symbol ! 1 condition2; )
{for (; symbol ! 1 condition3; ){if (condition1)symbol 1;}
}C解析当condition满足时symbol被赋值为1。可以看出两层循环进行的条件均是symbol!1也就是说 当symbol不等于1时两层循环才会有进行的可能所以当symbol为1时两层循环都会被跳出C正确 D. 在外层循环后面加入break例如
for ( ;symbol; )
{for ( ;symbol!1; ){if (condition)symbol 1;//1}if (symbol 1)//2break;
}D解析当condition满足时symbol等于1会跳到2的位置。symbol等于1满足if(symbol1)故跳出循环D正确。综上所述答案为ABCD 编程题1
数字在升序数组中出现的次数_牛客题霸_牛客网 int GetNumberOfK(int* nums, int numsLen, int k) {int i 0; int count 0;for (i 0; i numsLen; i)//遍历一遍数组{if (nums[i] k)//k是目标当等于时计数器1{count;}}return count;//返回统计结果
}
编程题2
面试题 05.06. 整数转换 - 力扣LeetCode
int convertInteger(int A, int B) {unsigned int x A ^ B; int count 0;
//异或(^)可以将A和B的两个值相同的位变为0不同的位变为1
//因此此时的x的位上的1的数量为A和B不同的位的个数while(x){if(x11)
//与1进行且运算1只有最后一位为1其他位为0
//可以将x最后一位的值剥离出来
//当剥离的结果为1意味着找到了1个A和B不同的位{count;}x1;//将x右移1位如此可以遍历x上的所有位}return count;//返回计数结果
}
好了今天的练习到这里就结束了感谢各位友友的来访祝各位友友前程似锦O(∩_∩)O