wordpress自动发布网站,规划营销型的网站结构,广州宣布5条优化措施,网站改版做301前言#xff1a;每日一练系列#xff0c;每一期都包含5道选择题#xff0c;2道编程题#xff0c;博主会尽可能详细地进行讲解#xff0c;令初学者也能听的清晰。博主有时会将一些难题综合成每日一练加强版#xff0c;加强版是特殊的#xff0c;它仅包含5道选择题#x… 前言每日一练系列每一期都包含5道选择题2道编程题博主会尽可能详细地进行讲解令初学者也能听的清晰。博主有时会将一些难题综合成每日一练加强版加强版是特殊的它仅包含5道选择题但这5道选择题都是博主精挑细选的希望大家能够认真看看相信一定能有所收获。每日一练系列会持续更新上学期间将看学业情况更新。 有学习或者生活方面的问题都可直接私信博主询问博主看到会回复,太久没回复就扣个1提醒下博主 五道易错选择题
1、以下正确的程序段是 A、char str[20];scanf(%s,str);
B、char *p;scanf(%s,p);
C、char str[20];scanf(%s,str[2]);
D、char str[20],*pstr;scanf(%s,p[2]); 解析选项Astr得到的是整个数组的地址也就是说它的权重是整个数组那么str1就会跳过一整个数组进行操作所以你想使用scanf(%s,str);来进行字符串的修改会越界A错误。扩展有的编译器上面的scanf实现是通过强转成字符然后使用字符的特殊性(一个字符占一个字节的空间也就是说字符型指针的权重是一个字节)挨个将不同类型的值进行修改实现scanf的。强转成字符型指针时它的权重就不再重要所以使用这类scanf函数A选项是没问题的但这不具备普遍性所以A可以认为是错误的。 选项B空间没开辟好会使用到野指针有安全隐患B错误。选项Cstr[2]可写作*(str2)和*号抵消来到了偏移量为2的地址也就是说它可以正常输入17个字符形成一个长度为18的字符串C没有犯语法错误题目并没有要求程序实现的结果所以C是正确的。 选项Dp是首地址p[2]是首地址偏移量为2的地址所指向的字符也就是说p[2]不是地址它是字符不符合scanf的使用要求D错误。综上所述答案选C 2、设已有定义:char*sthow are you;下列程序段中正确的是
A、char a[11],*p;strcpy(pa1,st[4]); B、char a[11];strcpy(a,st); C、char a[11];strcpy(a, st); D、char a[],*p;strcpy(pa[1],st2): 解析st是一个数组指针存放的是字符串how are you\0的首地址由于是字符串的形式所以它的最后有个隐藏的\0数数就可以知道这个字符串长31313112。 先看A选项pa1,也就是p为数组首地址的下一个地址因此p最多拷贝10个字符而st[4]可以写作(*(st4)),*(st4)就是how 和 are 中间的空格,再就是得到这个空格的地址从这个位置往后数显然小于10故成功拷贝A正确。 B选项aa是地址啊你怎么能对地址修改呢B大错特错。C选项12个字符拷贝进只能存放11个字符的数组拷贝失败C错误。 D选项char a[]定义都定义错误了想要不写字符数组长度的前提是你得对它初始化比方说char a[]hello world;D选项定义都定义不明白D错误。综上所述答案选A 3、若有说明;int*p,m5,n;以下正确的程序段的是
A、pn;scanf(%d,p); B、pn;scanf(%d,*p); C、scanf(%dn);*pn; D、pn;*pm; 解析先分析代码int*p,m5,n;分别定义了一个指针变量p和两个整型变量mn其中m被初始化为5。 接着先看A选项pn也就是说p现在储存的是n的地址然后再scanf(%d,p)p相当于对n的地址再取地址因此scanf操作的是n的地址它会将n的地址进行修改但这显然错误因为地址是不可被修改的故A错误。 B选项scanf(%d,*p);p是n的地址*p即是n你scanf(%d,n);没有取地址无法进行值的修改B错误。C选项scanf(%d,n)这一步没有问题简单的修改n变量的值*pn就很有问题因为你p并没有初始化为空指针所以此时p是一个野指针你对野指针解引用并赋值会造成不可预知的后果所以C错误。 D选项先是令pn;也就是说p现在存有n的地址你再解引用p对p地址所指向的值修改就相当于对n进行修改并没有语法上的错误D正确。综上所述答案选D 4、以下程序段中输出信息不能正确反映变量大小关系的是 A、
if (x y) printf( x y );//1
if (x y) printf(x y );//2
else printf( x y );//3 A选项解析 根据ifelse的就近匹配原则代码2和代码3匹配我们可以先假设xy走一遍当xy时执行代码1但走到代码2时会因为else走先代码3所以它会同时打印出xy和xy因此A不能正确反映变量大小关系。 B、
if (x y)//1
if (x y) printf(x y);//2
else printf(x y);//3
else printf(x y);//4 B选项解析 先就近原则判断得出1和4匹配2和3匹配。那么当xy时先进入代码1满足条件进入代码1下的if判定再判定满足条件进入代码2打印xy正确。当xy时满足1进入1下的判定不满足走到代码3打印xy正确。当xy时代码1不满足直接走到代码4打印xy正确。综上所述可以正确反映变量的大小关系。 C、
if (x y) printf( x y );//1
if (y x) printf( x y );//2
if (x y) printf( x y );//3 C选项解析当xy直接打印xy,正确。当xy时xy和yx均不满足条件均不打印对应内容走到代码3打印xy正确。xy同理。综上所述可以正确反映变量的大小关系。 D、
if (x y) printf( x y );//1
else if (y x) printf( x y );//2
else printf( x y );//3 D选项解析观察代码1和2匹配2和3匹配。当xy时走1打印xy后面的else if不执行再下面的else是和2的if匹配的自然也不执行。当xy时走1判定为假走2判定为假走到3打印xy正确。当xy时走1判定为假走2判定为真打印xy后面的else不执行正确。综上所述可以正确反映变量的大小关系。 根据上述得答案为A 看到这里的友友相信已经有点疲劳了我们就最后来道简单点的题。
5、有以下程序程序运行时输入-1 -2 0 1 2 回车则输出结果是
#include stdio.h
int main()
{int x, a 1, b 1;while (1){scanf(%d, x);if (x 0) { a * x; break; }//1if (x 0) { b * x; continue; }//2printf(%d,%d\n, a, b);}
}
A、2,2 B、1,2 C、-1,1 D、-2,1 解析观察代码可以发现这是个死循环。当x0时会跳出循环当x0时循环会强制继续这两种情况都走不到printf只有当x0时才会打印出a和b输入-1 -2 0 1 2回车就相当于在数据流中存放了-1空格-2空格0空格1空格2空格。而scanf会将空格当作结束标志也就是说如果循环正常运行x将被依次赋予为-1-2012 。 当x1时走代码2令b*1所以b-1。当x-2时走代码2令b*x所以b2。当x0时直接打印出ab,此时a1b2所以打印出12。而当x1时会走到代码1跳出循环后面的2依然存放在数据流中不会赋值给x当程序结束之后会被清除对于此题并无影响。至此程序结束最终输出12答案选B 好了今天的练习到这里就结束了感谢各位友友的来访祝各位友友前程似锦O(∩_∩)O