C语言题目强化-DAY06


★★写在前面★★
本题库源自互联网,仅作为个人学习使用,记录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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直学不会编程的小徐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值