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

目录

选择题:

题一:

题二:

题三:

题四:

题五:

编程题:

题一:字符个数统计

思路一:

题二:多数元素

思路一:

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

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


选择题:

题一:

1、 如下程序的运行结果是 ( )
char c5={'a', 'b', '\0', 'c', '\0'};
printf("%s", c);
A: 'a' 'b' B: ab\0c\0 C: ab c D: ab
答案解析:

字符串的结束标志是'\0',而'\0'的ASCII值是0,而c2被初始化为0,就相当于是'\0',故字符串打印的内容只有"ab"。

题二:

2、 若有定义: int a23; ,以下选项中对 a 数组元素正确引用的是( )

A: a20 B: a23 C: a03 D: a1\>21
答案解析:

本题主要考虑数组越界访问的情况,二维数组的行和列都是从0开始的,对于a数组来说,行下标最大是1,列下标最大是2,D选项中1>2表达式的值是0,是正确的,其他选项行和列都可能存在越界,A是行越界,B是行和列都越界,C是列越界。

题三:

3、 在下面的字符数组定义中,哪一个有语法错误( )

A: char a20="abcdefg"; **B:**char a\[\]="x+y=5.";

C: char a15; D: char a10='5';
答案解析:

D中的'5'是一个字符常量,不能给字符型数组a初始化。

题四:

4、 下列定义数组的语句中正确 的是**【多选】**( )
A:#define size 10
char str1size, str2size+2;

**B:**char str\[\];

C:int num'10';

**D:**int n=5; int ann+2;
答案解析:

A选项:宏替换,没问题;B选项:非法定义,一维数组必须定义数组元素个数;C选项:字符'0',转换成十进制为48,所以该选项最终为int num48;D选项:错误,数组定义下角标不能为变量,注:C99标准中支持了使用变量,这里不做特殊考虑。

题五:

5、 已知 " i " " j "都是整型变量,下列表达式中,与下标引用Xij不等效的是【多选】()

A:*(Xi+j) B:*(X+i)j C:*(X+i+j) D:*(*(X+i)+j)
答案解析:

本题考查的是二维数组的元素访问,A选项是 正确的,Xi就是第i行的数组名,数组名表示首元素的地址,Xi表示第i行的第一个元素的地址,+j后就是第i行下标为j的元素的地址,整体解引用就是Xij,A正确。B选项因为\[\]的优先级高于*,

所以代码相当于**((x+i)+j),X+i+j后就越界了,并不代表Xij,所以错误。C选项也明显不对,X是二维数组的数组名,数组名相当于第一行的地址,X+i+j,跳过了i+j行,就越界了,C错误。D选项是标准的指针形式访问二位数组的一个元素。

编程题:

题一:字符个数统计

字符个数统计_牛客题霸_牛客网 (nowcoder.com)

示例:

输入:

复制代码
   abc

输出:

复制代码
   3

思路一:

排序记录法:

第一步: 创建足够大小的数组arr ,输入数组的元素,计算数组长度sz ,通过my_string函数传参计算;

第二步: 在函数中将数组按升序排序 ,以及记录数的定义count;

第三步:遍历 数组:确保唯一性当数组为空或没有记录相同的字符时放入数组,每次记录完记录数都+1;

第四步: 将记录数**count返回,**打印。

cpp 复制代码
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
//升序排列
int my_cmp(const void* p1,const void* p2)
{
    return strcmp((char*)p1,(char*)p2);
}
//计算字符个数函数
int my_string(char* arr,int sz)
{
    assert(arr);
    //升序排列
    qsort(arr,sz,sizeof(arr[0]),my_cmp);
    char sum[500]= {0};
    int count = 0;
    //遍历数组
    for(int i = 0;i < sz;i++ )
    {
        //当数组为空或没有记录相同的字符时放入数组
        if(count == 0 || arr[i] != sum[count-1])
        {
            sum[count++] = arr[i];
        }
    }
    return count;
}
int main() 
{
    char arr[500] ={0};
    scanf("%s",&arr);
    //就是数组长度
    int sz = strlen(arr);
    //记录不同个数
    int num = my_string(arr,sz);
    printf("%d\n",num);
    return 0;
}

题二:多数元素

169. 多数元素 - 力扣(LeetCode)

思路一:

轮番比较:

第一步: 定义记录数count ,比较数k ,题目返回条件;

第二步: 将数组num按升序排列;

第三步:遍历 数组:先判断k与上一个k值是否相同 ,不相同则开始下一个数的记录;相同则记录数+1;当满足题目返回条件时 ,退出。

cpp 复制代码
//比较函数升序
int my_cmp(const void* p1,const void* p2)
{
    return *(int*)p1 - *(int*)p2;
}
int majorityElement(int* nums, int numsSize)
{
    int num = numsSize/2;
    int count = 0;
    int k = -1;
    //升序排序
    qsort(nums,numsSize,sizeof(nums[0]),my_cmp);
    //遍历数组
    for(int i = 0;i < numsSize;i++)
    {
        //与k不相同就重新开始记录
        if(k != nums[i])
        {
            k = nums[i];
            count = 0;
        }
        //相同记录+1
        if(nums[i] == k)
        {
            count++;
        }
        //达到要求返回
        if(count > num)
        {
            return k;
        }
    }
    return 0;
}

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

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

相关推荐
2601_96694965几秒前
每日自动更新股票行情:如何设计可靠的数据任务,避免重复写入和脏数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
ZealSinger7 分钟前
Go1.25容器感知GOMAXPROCS避限流
java·开发语言
kiracrimson15 分钟前
希尔排序:让插入排序不再怕逆序
数据结构·算法·排序算法
Logic10119 分钟前
C语言/数据结构位运算题解:异或XOR找出星球探险中的“独特能量石“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
M78佐菲21 分钟前
ARM学习笔记(12)
linux·arm开发·笔记·嵌入式硬件·学习
茉莉玫瑰花茶21 分钟前
GO [ 类型 ]
开发语言·数据库·golang
梅雅达编程笔记26 分钟前
02_BeautifulSoup网页数据提取
开发语言·爬虫·python·beautifulsoup·数据采集
Escalating_xu30 分钟前
【C 语言】深入理解指针(3):字符指针、数组指针、二维数组传参、函数指针与转移表
java·c语言·开发语言
ai小陈31 分钟前
深度学习CUDA OOM排查:显存占用与碎片问题实战
服务器·人工智能·python·深度学习·ai·gpu算力
奇思妙想聪明勤奋的小羊32 分钟前
ai-agent-book第五章:Coding Agent 与通用 Agent 学习笔记
人工智能·笔记·学习