★★写在前面★★
本题库源自互联网,仅作为个人学习使用,记录C语言题目练习的过程,如果对你也有帮助,那就点个赞吧。
1、以下叙述中正确的是( )
A: 只能在循环体内和switch语句体内使用break语句
B: 当break出现在循环体中的switch语句体内时,其作用是跳出该switch语句体,并中止循环体的执行
C: continue语句的作用是:在执行完本次循环体中剩余语句后,中止循环
D: 在while语句和do-while语句中无法使用continue语句
正确答案:A
答案解析:
A、break语句通常用在循环语句和switch语句中。当break用于switch语句中时,可使程序跳出switch而执行switch以后的语句,选项A正确。
B、当 break 用于开关语句 switch 中时, 可使程序跳出 switch 而执行 switch 以后的语句,当 break 语句用于 do-while 、 for 、 while 循环语句中时, 可使程序终止循环而执行循环后面的语句,即满足条件时便跳出循环,选项B错误。
C、continue语句的作用是跳过本次循环体中剩下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为只是中止(跳过)本次循环,接着开始下一次循环,选项C错误。
D、continue 能且只能在循环语句中使用,只能在 for、while 和 do…while 语句中使用,选项D错误。
2、下列for 循环的次数为( )
for(int i = 0 ; i || i++ < 5;);
A: 0 B: 5 C: 1 D: 无限
正确答案:D
答案解析:逻辑或“||”如果左边的表达式为假,逻辑或表达式无法得出是真还是假,还需要看右边表达式的真假,当左边的表达式为真的时候,逻辑或表达式则为真,所以i=0的时候,i<5条件表达式为真,循环一次,然后i++,此时i=1,因此”i || i++ < 5;“中||左边为真,进入无限循环。
3、以下描述中正确的是( )
A: 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句
B: do-while循环由do开始,用while结束,在while(表达式)后面不能写分号
C: 在do-while循环体中,不一定要有能使while后面表达式的值变为零(“假”)的操作
D: do-while循环中,根据情况可以省略while
正确答案:C
答案解析:
A: 由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句,前后因果关系不成立,do-while循环中循环体语句可以是一条也可以是复合语句,选项A错误。
B: do-while循环由do开始,用while结束,在while(表达式)后面可以写分号,即空语句,选项B错误。
C: 在do-while循环体中,不一定要有能使while后面表达式的值变为零(“假”)的操作,按需求写代码,选项C正确。
D:do-while循环中,不可以省略while,选项D错误。
4、设函数fun 和实参数组的说明是如下形式,则对函数的调用语句中,正确的是( )
void fun(char ch,float x[]);
float a[10];
A: fun(“asd” , a[]); B: fun(‘x’ , A); C: fun(‘68’ , 2.8); D: fun(32 , a);
正确答案:D
答案解析:
A:数组传参只需要写数组名就行,a[]是错误的,选项A错误。
B:第二个参数写成了大写,选项B错误。
C:第二个参数是浮点数,但是fun函数的第二参数是数组不匹配,fun函数参数x需要传一个数组或者float *指针,选项C错误。
D:正确。
5、在c语言中,一个函数不写返回值类型,默认的返回类型是( )
A: int B: char C: void D: 都不是
正确答案:A
答案解析:一个函数不写返回值类型,默认的返回类型是int,但不提倡这么做。
1、给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。请你找出数组中的最大元素并检查它是否 至
少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1 。
leetcode【leetcode 题号:747. 至少是其他数字两倍的最大数】
示例:
输入:nums = [3,6,1,0]
输出:1
解释:6 是最大的整数,对于数组中的其他整数,6 大于数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。
输入:nums = [1,2,3,4]
输出:-1
解释:4 没有超过 3 的两倍大,所以返回 -1 。
输入:nums = [1]
输出:0
解释:因为不存在其他数字,所以认为现有数字 1 至少是其他数字的两倍。
int dominantIndex(int* nums, int numsSize){2 3}{
}
int dominantIndex(int* nums, int numsSize) {
int i = 0;
int Max = nums[0];
int Max_index = 0;
for (; i < numsSize; i++)
{
if (nums[i] > Max)
{
Max = nums[i];
Max_index = i;
}
}
for (i = 0; i < numsSize; i++)
{
if (nums[i] * 2 > Max&& nums[i]!=Max)
return -1;
}
return Max_index;
}
代码思路:首先从数组中找到最大值,并保存到Max变量里面,然后遍历进行比较,需要注意的点在于第二次遍历的时候,需要用nums[i] * 2 > Max&& nums[i]!=Max;这个语句来排出遍历到Max本身!!!
2、给定两个数组,编写一个函数来计算它们的交集。
leetcode【leetcode 题号:349. 两个数组的交集】
示例:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize){
}
//官方题解
int cmp(void* a, void* b) { //两个参数为void* ,返回类型也是void*
return *(int*)a - *(int*)b;
}
int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {
qsort(nums1, nums1Size, sizeof(int), cmp);//用qsort函数实现排序,方便快捷,
qsort(nums2, nums2Size, sizeof(int), cmp);
*returnSize = 0;
int index1 = 0, index2 = 0;
int* intersection = malloc(sizeof(int) * (nums1Size + nums2Size));
while (index1 < nums1Size && index2 < nums2Size) {
int num1 = nums1[index1], num2 = nums2[index2];
if (num1 == num2) {
// 保证加入元素的唯一性
if (!(*returnSize) || num1 != intersection[(*returnSize) - 1]) {
intersection[(*returnSize)++] = num1;
}
index1++;
index2++;
} else if (num1 < num2) {
index1++;
} else {
index2++;
}
}
return intersection;
}