C语言假期作业 DAY 06

简介: C语言假期作业 DAY 06

题目

一、选择题

1、以下叙述中正确的是( )

A: 只能在循环体内和 switch 语句体内使用 break 语句

B: 当 break 出现在循环体中的 switch 语句体内时,其作用是跳出该 switch 语句体,并中止循环体的执行

C: continue 语句的作用是:在执行完本次循环体中剩余语句后,中止循环

D: 在 while 语句和 do - while 语句中无法使用 continue 语句


2、下列 for 循环的次数为( )

for(int i = 0 ; i || i++ < 5;);


A: 0

B: 5

C: 1

D: 无限


3、以下描述中正确的是( )

A: 由于 do - while 循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句

B: do - while 循环由 do 开始,用 while 结束,在 while( 表达式 ) 后面不能写分号

C: 在 do - while 循环体中,不一定要有能使 while 后面表达式的值变为零 (" 假 ") 的操作

D: do - while 循环中,根据情况可以省略 while


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) ;


5、在c语言中,一个函数不写返回值类型,默认的返回类型是( )

A: int

B: char

C: void

D: 都不是


二、编程题

1:LeetCode747. 至少是其他数字两倍的最大数

747. 至少是其他数字两倍的最大数 - 力扣(LeetCode)


给你一个整数数组 nums ,其中总是存在 唯一的 一个最大整数 。


请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是,则返回 最大元素的下标 ,否则返回 -1


示例 1

输入:nums = [3,6,1,0]

输出:1

解释:6 是最大的整数,对于数组中的其他整数,6 至少是数组中其他元素的两倍。6 的下标是 1 ,所以返回 1 。


示例 2

输入:nums = [1,2,3,4]

输出:-1

解释:4 没有超过 3 的两倍大,所以返回 -1 。


示例 3

输入:nums = [1]

输出:0

解释:因为不存在其他数字,所以认为现有数字 1 至少是其他数字的两倍。


提示

1 <= nums.length <= 50

0 <= nums[i] <= 100

nums 中的最大元素是唯一的


2:LeetCode349. 两个数组的交集

349. 两个数组的交集 - 力扣(LeetCode)


示例 1

输入:nums1 = [1,2,2,1], nums2 = [2,2]

输出:[2]


示例 2

输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]

输出:[9,4]


说明

输出结果中的每个元素一定是唯一的。

我们可以不考虑输出结果的顺序。


题解

一、选择题

1 、【答案解析】

正确答案: A

break 语句通常用在循环语句和 switch 语句中。当 break 用于 switch 语句中时,可使程序跳出 switch 而执行 switch 以后的

语句;当 break 语句用于 do-while 、 for 、 while 循环语句中时,可使程序终止循环而执行循环后面的语句,即满足条件时便

跳出循环。 continue 语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。 B 、 C 和 D 三个选项中均有错误。因此 A 选

项正确


2 、【答案解析】

正确答案: D

逻辑或运算如果前表达式为真,后表达式不计算,第一次循环时 i 为 0 ,执行 i++ ,第二次循环时 i 为 1 ,是个真值,不再执行

i++ ,也就死循环了


3 、【答案解析】

正确答案: C

do-while 循环中的循环体通常都是复合语句代码块, A 错误, while( 表达式 ) 后面要写分号, B 错误, while 不能省, D 错误


4 、【答案解析】

正确答案: D

A 选项数组传参只需要写数组名就行, a[] 时错误的, B 选项第二个参数写成了大写,错了。 C 选项第二个参数是浮点数,但是

fun 函数的第二参数是数组不匹配, fun 函数参数 x 需要传一个数组或者 float * 指针,只有 D 选项的形式是正确的。


5 、【答案解析】

正确答案: A

一个函数不写返回值类型,默认的返回类型是 int ,但不提倡这么做


二、编程题

1 、【答案解析】

暴力破解:双重循环遍历数组,对每个元素判断是否是其他元素的两倍。或者先遍历一遍找出最大值,然后遍历一遍

判断是否是其他数字二倍。

更优思想:一次遍历找出最大的数字和次大的数字,判断最大的数字是否是次大数字 2 倍即可。


int dominantIndex(int* nums, int numsSize) 
{
  if (numsSize == 1) return 0;
  int max, sec, idx;
  if (nums[0] > nums[1]) 
  {
  max = nums[0];
  idx = 0;
  sec = nums[1];
  }
  else 
  {
  max = nums[1];
  idx = 1;
  sec = nums[0];
  }
  for (int i = 2; i < numsSize; i++) 
  {
  if (nums[i] > max)
  { 
    sec = max; 
    max = nums[i]; 
    idx = i;
  }
  else if (nums[i] > sec)
  {
  sec = nums[i];
  }
  }
  if (max >= sec * 2)
  {
  return idx;
  }
  return -1;
}


2、【答案解析】

暴力破解即可,将 nums1 数组中的每一个数字,判断是否存在于 nums2 数组中,通过这种方式找出交集数据,找出 之后判断这个数组是否已经在返回数组中存在,不存在则添加到返回数组中即可。

int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize)
{
  static int arr[1000];
  *returnSize = 0;
  int i, j, k;
  for (i = 0; i < nums1Size; i++) 
  {
    for (j = 0; j < nums2Size; j++)
    {
    if (nums2[j] == nums1[i]) break;
    }
    if (j == nums2Size) {
    continue;
    }
    for (j = 0; j < *returnSize; j++) 
    {
    if (nums1[i] == arr[j]) break;
    }
    if (j == *returnSize) 
    {
    arr[*returnSize] = nums1[i];
    *returnSize += 1;
    }
  }
  return arr;
}


相关文章
|
19天前
|
C语言
[日常]C语言作业详解12_17(题型对应知识点)
[日常]C语言作业详解12_17(题型对应知识点)
30 0
|
14天前
|
算法 程序员 编译器
C语言初阶③(函数)知识点+编程作业(递归模拟strlen,pow)
C语言初阶③(函数)知识点+编程作业(递归模拟strlen,pow)
23 0
|
14天前
|
存储 Linux C语言
C语言初阶⑥(操作符详解)编程作业(算数转换)(下)
C语言初阶⑥(操作符详解)编程作业(算数转换)
8 1
|
14天前
|
存储 C语言 索引
C语言初阶⑥(操作符详解)编程作业(算数转换)(上)
C语言初阶⑥(操作符详解)编程作业(算数转换)
23 0
|
14天前
|
存储 C语言
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)(下)
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)
21 1
|
14天前
|
存储 C语言
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)(上)
C语言初阶④(数组)知识点+编程作业(三子棋,冒泡排序)
23 0
|
19天前
|
存储 C语言
C语言进阶---------作业复习
C语言进阶---------作业复习
|
19天前
|
存储 人工智能 搜索推荐
【C语言进阶】 假期测评①
【C语言进阶】 假期测评①
38 2
|
19天前
|
存储 安全 BI
【C语言进阶】假期测评②
【C语言进阶】假期测评②
39 1
|
19天前
|
存储 测试技术 C语言
【C语言进阶】 假期测评③
【C语言进阶】 假期测评③
46 1