最容易做流量的网站,网页的创新型网站策划,大连建站价格,域名购买网前言#xff1a;每日一练系列#xff0c;每一期都包含5道选择题#xff0c;2道编程题#xff0c;博主会尽可能详细地进行讲解#xff0c;令初学者也能听的清晰。每日一练系列会持续更新#xff0c;暑假时三天之内必有一更#xff0c;到了开学之后#xff0c;将看学业情… 前言每日一练系列每一期都包含5道选择题2道编程题博主会尽可能详细地进行讲解令初学者也能听的清晰。每日一练系列会持续更新暑假时三天之内必有一更到了开学之后将看学业情况更新。 五道选择题
1、如果 x2014 下面函数的返回值是
int fun(unsigned int x)
{
int n 0;
while(x 1)
{
n;
x x | (x 1);
}
return n;
}A、20 B、21 C、23 D、25 解析观察代码发现代码的主要构成是一个循环且每进行一次循环n1最后返回的值为n的大小那么我们的目标就是计算循环的次数。循环内部是x和x1进行|(或)运算|运算的规则是位上只要有一个为真便为真两个同时为假才为假。 而和比自己大1的数进行|运算就会稳定地使x上的位为0的变为位为1的直到全部都变为1再进一次循环就为0。2014可写作0000.......0111 1101 1110总计有9个123个0那么当循环23次之后也就是n为23时x为1111.......111132位均是1想要再次循环但x1为0不满足循环条件故结束循环返回23。因此答案选C 2、如下函数 fun 计算 prod1*2*3*…*n 并返回计算结果值。但当 n12 时返回值不正确。要找出该程序的错误正确的调试方法是
int fun(int n)
{
int prod 1 , i 0;
for(i 1;i n;i)
{
prod * i;
}
return prod;
}
A、监视变量prod的值在prod * i;行处设置断点然后单步运行直到发现错误原因 B、监视变量prod的值在return prod;行处设置断点程序中断后即可发现错误原因 C、在prod1;处设置断点然后在函数调用堆栈中即可发现错误原因 D、监视变量i的值在for (i1; in; i)行处设置断点然后单步运行直到发现错误原因 解析依题目已知情况当n12时结果是正确的说明是随着参数的变大计算过程中哪里出了问题故而要在prod * i;处设断点查看原因。错误原因是数据过大时整型溢出故答案选A 3、请问下列代码的输出结果有可能是哪些【多选】
#include stdio.h
typedef union
{int a;struct{short b;short c;};
}X;
int main()
{X x;x.a 0x20150810;printf(%x,%x\n, x.b, x.c);return 0;
}
A、2015,810 B、50810,201 C、810,2015 D、20150,810 解析对于0x20150810 如果按照大端模式存储 从低地址到高地址20 15 08 10 输出从低地址到高地址20 15 08 10 如果按照小端模式存储 从低地址到高地址10 08 15 20 输出从高地址到低地址08 10 20 15 此数以int类型赋值给联合体x.a而以结构成员b和c分开访问分别拿到低地址的2个字节和高地址的2个字节大端下是2015和810小端下是810和2015故答案选AC 4、运行以下程序后如果从键盘上输入 65 14回车 则输出结果为
#includestdio.h
int main()
{
int m, n;
printf(Enter m,n\n);
scanf(%d %d, m,n);
while (m!n) //1
{
while(mn) mm-n; //2
while(nm) nn-m; //3
}
printf(m%d\n,m);
return 0;
}
A、3 B、2 C、1 D、0 解析观察代码发现它主要实现了一个功能就是将输入进来的两个数互相减来减去直到它们两个相等中止循环数据不大可以直接代入进去65-145151-143737-142323-14914-959-545-414-133-112-1111中止循环打印1故答案选C。当数据不大的时候我们可以直接代入得结果但当数据大到一定程度的时候还是需要通过分析两个数据之间的联系具体情况具体分析。 5、若运行以下程序时从键盘输入ADescriptor回车 则下面程序的运行结果是
#include stdio.h
int main()
{char c;int v0 0, v1 0, v2 0;do{switch (c getchar()){casea:caseA:casee:caseE:casei:caseI:caseo:caseO:caseu:caseU:v1 1;default: v0 1; v2 1;}} while (c ! \n);printf(v0%d,v1%d,v2%d\n, v0, v1, v2);return 0;
}
A、v07,v14,v27 B、v08,v14,V28 C、v011,v14,v211 D、v012,v14,v212 解析观察代码发现主要构成就是一个循环包着一个switch它的switch语句从我们输入的字符中读取并通过读取的字符进行一系列的计算。但要注意的一点便是它的switch中没有break也就是说它一旦执行了上面的它就会一直往下走直到走完再通过循环判断。 ADescriptor回车。一共11个字符aeiou大小写加起来有4个令v1v0v24剩下7个字符令v07v27所以最后v14,v0v211看上去好像就是这样但需要注意的一点就是它是dowhile循环也就是先执行循环内容再判断也就是说\n这个回车它也要执行1次最后令v14,v0v212选D 编程题1
9. 回文数 - 力扣LeetCode 思路通过取模的计算将后一位剥离出来在通过/10不断地寻找下一位的同时对储存颠倒过来的数不断*10使其恢复位数最后比对即可。需要注意的一点就是负数不可能是回文数。 bool isPalindrome(int x) {if (x 0)//当x为-1时倒过来为1-可看出负数不可能为回文数{return false;}long long int sum 0; long long int x1 x;while (x1){sum sum * 10 x1 % 10;x1 / 10;}if (sum x){return true;}elsereturn false;
}
编程题2
力扣LeetCode官网 - 全球极客挚爱的技术成长平台 思路通过我们手中的5美元和10美元钞票的数量进行判断需要注意的便是一开始我们是没有钱的只能收5美元别的遇到便找不开了。 bool lemonadeChange(int* bills, int billsSize) {//一开始我们是穷光蛋一块钱都找不出if (bills[0] ! 5)return false;int five 0; int ten 0;//只需要计算5块钱和10块钱的数目即可因为找钱不可能拿20找int i 0;for (i 0; i billsSize; i){if (bills[i] 5)//给我们5美元的时候直接收就行{five 1;}if (bills[i] 10)//10美元就一种情况找5美元收10美元{five - 1;if (five 0){return false;}ten 1;}if (bills[i] 20)//两种情况找3张5或1张10和1张5{if (five 3 ten 1)//确实没有办法了就找3张5出去可以找的时候找1张5和1张10//因为5相比10适用范围更大{five - 3;}else{five - 1;ten - 1;}if (five 0 || ten 0){return false;}}}return true;
} 好了今天的练习到这里就结束了感谢各位友友的来访祝各位友友前程似锦O(∩_∩)O