1.题1
t=0;
while(printf("*"))
{
t++;
if (t<3)
break;
}
关于上述代码描述正确的是?
A: 其中循环控制表达式与0等价 B: 其中循环控制表达式与'0'等价
C: 其中循环控制表达式是不合法的 D: 以上说法都不对
我们来分析一下:printf的返回值为正确打印的字符数,为一个整数,如果输出错误则返回一个负数。我们看上述while循环语句中的判断式它的返回值应该为1,因为打印了一个字符,我们来看选项,A选项说与0等价,如果判断式为0的话,则不会进入while循环。B选项中等价为‘0’,我们知道字符‘0’的ASCLL码值为48,将会使代码进入死循环,和1的效果相同,所以B选项正确。注意这里说的死循环只是想说明判断式恒正。
2.题2
#include <stdio.h>
int main()
{
char ch;
while ((ch = getchar()) != '\n')
{
if (ch % 2 != 0 && (ch >= 'a' && ch <= 'z'))
ch = ch - 'a' + 'A';
putchar(ch);
}
printf("\n");
return 0;
}
如果我们输入1abcedf2df<回车>,那么结果会是啥呢?
我们来分析一下:这个代码的while循环的判断式是getchar输入的一个字符不为‘\n’就将其值赋给ch。if条件是ch%2后不等于0,且ch为大写字母,我们就会将其改写为小写字母,这个%2不等于0其实就是说字符得ASCLL码值是奇数。所以我们可以得到,a、c、e会被更改为大写。我们来运行看看:
3.题3
A: 只能在循环体内和switch语句体内使用break语句
B: 当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句体,并中止循环体的执行
C: continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环
D: 在while语句和do-while语句中无法使用continue语句
上述描述正确的是?
A是正确的,B中的break只能跳出switch语句,并不能终止循环语句,如果想达到B选项所描述的结果,我们可以使用return来结束程序。continue的作用是跳过下面的语句,直接来到该循环的判断部分。continue在三种循环中都可以使用,如果大家不太了解可以去看我之前的篇章《循环语句》。
4.题4
for(int i = 0 ; i || i++ < 5;);
上述代码会循环多少次呢?
可能大家在看到这道题的时候会有点懵,没关系我们先来分析一下:for循环直接进入后,第一次i为0,然后进入调整部分,我们发现该for循环没有调整部分,就会直接进入判断部分,这里有一个逻辑或运算符,如果前项为真,后项就不再计算,如果前项为假就计算后项,结果就为整个表达式的结果。我们发现i为0时为假,执行i++,i变为1为整个表达式的结果,此时判断式就更改为1<5恒成立了,有些人就会问了那i++就不会执行了吗?确实是的,因为没有调整,只有判断式,而且判断式的结果已经定下。所以该循环会陷入死循环。
5.题5
集合 s 包含从 1 到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合 丢失了一个数字 并且 有一个数字重复 。给定一个数组 nums 代表了集合 S 发生错误后的结果。请你找出重复出现的整数,再找到丢失的整数,将它们以数组的形式返回。
int* findErrorNums(int n, int* arr,int *returnnums)
{
int* arr1 = arr;
int* arr2 = arr+1;
while (*arr2)
{
if (*arr1 == *arr2)
{
*arr2 += 1;
break;
}
arr1++;
arr2++;
}
for (int i = 0; i < 2; i++)
{
returnnums[i] = *arr1;
arr1++;
}
return returnnums;
}
#include<stdlib.h>
int main()
{
int n = 0;
scanf("%d", &n);
int* arr = (int*)calloc(n + 1, sizeof(int));
int* pu = (int*)malloc(2 * sizeof(int));
for (int i = 0; i < n; i++)
{
scanf("%d",&arr[i]);
}
int*ret=findErrorNums(n,arr,pu);
for (int i = 0; i < 2; i++)
{
printf("%d ", ret[i]);
}
return 0;
}
大家可以多动手试试,我这个代码其实不太好,因为我设计的时候没有将输入放在函数中,而是将其放在main函数中。所以期待大家的改进。