C语言:选择+编程(每日一练Day15)

目录

选择题:

题一:

题二:

题三:

题四:

题五:

编程题:

题一:寻找奇数

思路一:

题二:寻找峰值

思路一:

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

[感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!](#感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!)


选择题:

题一:

1、 有如下代码,则 *(p[0]+1) 所代表的数组元素是 ()
int a[3][2] = {1, 2, 3, 4, 5, 6}, *p[3];
p[0] = a[1];
A: a[0][1] B: a[1][0] C: a[1][1] **D:**a[1][2]
答案解析:

p是一个指针数组,p[0] = a[1];此处a[1]是二维数组的第二行的数组名,数组名表示首元素的地址,a[1]是a[1][0]的地址,所以p[0]中存储的是第2行第1个元素的地址,p[0]+1就是第二行第2个元素的地址,*(p[0]+1)就是第二行第二个元素了。所以C正确。

题二:

2、 关于指针下列说法正确的是【多选】( )
A: 任何指针都可以转化为void * B: void *可以转化为任何指针
**C:**指针的大小为8个字节 D: 指针虽然高效、灵活但可能不安全
答案解析:

C选项,指针占几个字节要看平台,64位环境下8个字节,32位环境下4个字节。

题三:

3、 以下 scanf 函数调用选项中, 错误 的是( )
struct T
{

char name[20];
int age;
int sex;
} a[5], *pa=a;
A: scanf("%s",a[0].name); B: scanf("%d", &pa[0].age);
C: scanf("%d",&(pa->age)); D: scanf("%d", pa->age);
答案解析:

该题考察的是通过scanf函数的调用对结构体数据类型进行初始化。scanf("输入控制符", 输入参数);功能:将从键盘输入的字符转化为"输入控制符"所规定格式的数据,然后存入以输入参数的值为地址的变量中。scanf输入时要通过地址找空间,B、C用了&是正确的。name属于字符数组的数组名,相当于数组的首地址,A正确。单独的pa->age可用于输出语句获取
值的形式,用在scanf中的时候需要&操作符,D错误。

题四:

4、 如下函数 fun 计算 prod=1*2*3*...*n ,并返回计算结果值。但当 n>12 时,返回值不正确。要找出该程序的错误,正确的调试方法是( )

int fun(int n)
{
int prod = 1 , i = 0;
for(i = 1;i <= n;i++)
{
prod *= i;
}

return prod;
}
A: 监视变量prod的值,在prod *= i;行处设置断点,然后单步运行,直到发现错误原因
B: 监视变量prod的值,在return prod;行处设置断点,程序中断后,即可发现错误原因
C: 在prod=1;处设置断点,然后在函数调用堆栈中即可发现错误原因
**D:**监视变量i的值,在for (i=1; i<=n; i++)行处设置断点,然后单步运行,直到发现错误原因
答案解析:

依题目已知情况,当n<=12时结果是正确的,说明是随着参数的变大计算过程中哪里出了问题,故而要在prod *= i;处设断点,查看原因。错误原因是数据过大时整型溢出。

题五:

5、 下列给定程序中,函数 fun 的功能是:把形参a所指数组中的奇数按原顺序依次存放到 a[0]、a[1]、a[2]... 中,把偶数从数组中删除,奇数个数通过函数值返回。 例如,若a所指数组中的数据最初排列为: 9,1,4,2,3,6,5,8,7 ,删除偶数后,a所指数组中的数据为: 9,1,3,5,7 ,返回值为5。请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果 ( )
int fun(int a[], int n)
{
int i, j;
j=0;
for (i=0; i<n; i++)
if (a[i]%2== _________ )
{
a[j]=a[i];
_________;
}

return _________;
}
A: 0 j++ j B: 1 j++ j+1 C: 0 j++ j+1 D: 1 j++ j
答案解析:

代码实现的思路应该是arr[i]是奇数的时候要存储起来,所以第一个空是1,最开始j是0,每次找到一个奇数就存储到arr[j]的位置,那接下里j需要+1,所以得第二个空是j++,当循环停止的时候,j其实就是奇数的个数。所以最后返回j,第三个空是j。所以选D。

编程题:

题一:寻找奇数

寻找奇数_牛客题霸_牛客网 (nowcoder.com)

示例1

输入:

复制代码
        5
        2 1 2 3 1

输出:

复制代码
        3

思路一:

必懂知识:按位异或(" ^ "):二进制位相同为"0",不同为"1"。

**第一步:**定义记录元素值的result,以及元素个数n;

第二步:遍历题目所给数组,并输入各个下标对应的元素给result, 按位异或,最终将相同的数抵消为"0";

第三步:最后得到的就是数组中奇数个元素,打印。

cpp 复制代码
#include <stdio.h>
#include <string.h>

int main()
{
    int n = 0;
    int result = 0;
    scanf("%d", &n);
    int num = 0;
    //遍历题目数组
    for (int i = 0; i < n; i++)
    {
        //输入各个下标对应的元素
        scanf("%d", &result);
        //按位异或,最终将相同的数抵消为"0"
        num ^= result;
    }
    //最后得到的就是数组中奇数个元素
    printf("%d\n", num);
    return 0;
}

题二:寻找峰值

寻找峰值_牛客题霸_牛客网 (nowcoder.com)

示例1

输入:

复制代码
        [2,4,1,2,7,8,4]

返回值:

复制代码
        1

说明:

复制代码
        4和8都是峰值元素,返回4的索引1或者8的索引5都可以     

思路一:

二分查找:

第一步:首先排除边界情况, 再定义首元素下标left,尾元素下标right;

第二步:二分查找:nums[mid] < nums[mid+1]时,说明峰在右边,即需要left = mid + 1;

nums[mid] >= nums[mid+1]时,说明峰在左边,即需要 right = mid;

第三步:最后二分查找使下标left就是最大值,返回left。

cpp 复制代码
int findPeakElement(int* nums, int numsLen ) 
{
    //排除边界情况
    if(numsLen == 1 || nums[0] > nums[1])
        return 0;
    if(nums[numsLen-1] > nums[numsLen-2])
        return numsLen-1;
    int left = 0;
    int right = numsLen-1;
    //二分查找使下标left就是最大值
    while(left < right)
    {
        int mid  = (left + right) / 2;
        if(nums[mid] < nums[mid+1])
        {
            left = mid + 1;
        }
        else 
        {
            right = mid;
        }
    }
    return left;
}

本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵!

感谢大佬们的一键三连! 感谢大佬们的一键三连! 感谢大佬们的一键三连!

相关推荐
霖004 分钟前
C++学习笔记三
运维·开发语言·c++·笔记·学习·fpga开发
mit6.82425 分钟前
[shad-PS4] Vulkan渲染器 | 着色器_重新编译器 | SPIR-V 格式
c++·游戏引擎·ps4
地平线开发者29 分钟前
征程 6M 部署 Omnidet 感知模型
算法·自动驾驶
上单带刀不带妹37 分钟前
JavaScript中的Request详解:掌握Fetch API与XMLHttpRequest
开发语言·前端·javascript·ecmascript
小白学大数据39 分钟前
Python爬取闲鱼价格趋势并可视化分析
开发语言·python
归去_来兮43 分钟前
Transformer模型原理概述
人工智能·深度学习·transformer
酌沧1 小时前
深度学习 必然用到的 微积分知识
人工智能·深度学习
秋说1 小时前
【PTA数据结构 | C语言版】线性表循环右移
c语言·数据结构·算法
ningmengjing_1 小时前
在 PyCharm 中安装并配置 Node.js 的指南
开发语言·javascript·ecmascript
晓13131 小时前
JavaScript基础篇——第五章 对象(最终篇)
开发语言·前端·javascript