C语言属刷题训练【第八天】

这篇具有很好参考价值的文章主要介绍了C语言属刷题训练【第八天】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

🪗1、如下程序的运行结果是( )

char c[5]={'a', 'b', '\0', 'c', '\0'};
printf("%s", c);

A: ‘a’ ‘b’ B: ab\0c\0
C: ab c D: ab

字符串的结束标志是’\0’,而’\0’的ASCII值是0,而c[2]被初始化为0,就相当于是’\0’,故字符串打印的内容只有"ab"。
🧥知识点:字符串的结束标志

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

A: a[2][0] B: a[2][3]
C: a[0][3] D: a[1>2][1]

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

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

A: char a[20]=“abcdefg”; B: char a[]=“x+y=5.”;
C: char a[15]; D: char a[10]=‘5’;

D 中的’5’是一个字符常量,不能给字符型数组a初始化
👘知识点:数组定义规则

📔4、下列定义数组的语句中正确的是【多选】( )

A:#define size 10 char str1[size], str2[size+2]; B: char str[]; C:
int num[‘10’]; D: int n=5; int a[n][n+2];

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

🛍知识点:数组定义规则

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

A: *(X[i]+j) B: *(X+i)[j] C: *(X+i+j) D: ((X+i)+j)

本题考查的是二维数组的元素访问,A选项是 正确的,X[i]就是第i行的数组名,数组名表示首元素的地址,X[i]表示第i行的第
一个元素的地址,+j后就是第i行下标为j的元素的地址,整体解引用就是X[i][j],A正确。B选项因为[]的优先级高于*,所以代
码相当于**((x+i)+j),X+i+j后就越界了,并不代表X[i][j],所以错误。C选项也明显不对,X是二维数组的数组名,数组名相当于第
一行的地址,X+i+j,跳过了i+j行,就越界了,C错误。D选项是标准的指针形式访问二位数组的一个元素。
🎒知识点:指针与数组

💣字符个数统计

编写一个函数,计算字符串中含有的不同字符的个数。字符在 ASCII 码范围内( 0~127 ,包括 0 和 127 ),换行表示结束符,不算在字符里。不在范围内的不作统计。多个相同的字符只计算一次例如,对于字符串 abaca 而言,有 a、b、c 三种不同的字符,因此输出 3

输入描述:输入一行没有空格的字符串。
输出描述:输出 输入字符串 中范围在(0~127,包括0和127)字符的种数。
C语言属刷题训练【第八天】,C语言笔试题,c语言,算法,开发语言

这道题其实比较简单,定义两个指针,一个指向数组的前一个元素,一个指向数组元素。定义一个变量 count ,如果前一个元素与这个元素不同,count 就加1,如果相同,两个指针同时往后走,知道遍历完数组。
当然,博主这段代码,是刚开始将题意理解为将相同的数拷贝进另一个数组,不过只需要在同样的思路下加一个 count 变量即可。
知识点:双指针

#include <stdio.h>
#include<stdlib.h>
#include<string.h>
int com(const void*p1,const void*p2){
    return *(char*)p1-*(char*)p2;
}
int main(){
    char *str1=(char*)malloc(sizeof(char)*500);
    char *str2=(char*)malloc(sizeof(char)*500);
    int count=1;
    scanf("%s",str1);
    qsort(str1,strlen(str1),1,com);
    char*p1=str1,*p2=str2,*p3=str1;
    *p2=*p1;
    p1++;
    while(*p1){
        if(*p1==*p3){
            p1++;
            p3++;
        }
        else{
            *p2=*p1;
            p1++;
            p3++;
            p2++;
            count++;
        }
    }
    *p2='\0';
    printf("%d",count);
    return 0;
}

🛋多数元素

给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
C语言属刷题训练【第八天】,C语言笔试题,c语言,算法,开发语言
这个题目,理论上来讲可以用暴力求解的方法来实现,可当题目的测试用例搞出一些非常恶心的操作,例如
C语言属刷题训练【第八天】,C语言笔试题,c语言,算法,开发语言
说实话,这样的测试用例估计就是专门针对暴力求解的,也是没谁了。

暴力求解的代码也给大家放这里吧

    int i=0;
    int *numscpy=(int*)malloc(sizeof(int)*numsSize);
    for(i=0;i<numsSize;i++){
        int j=0;
        int count=0;
        for(j=0;j<numsSize;j++){
            if(nums[i]==nums[j])
                count++;
        }
        numscpy[i]=count;
    }
    int max=numscpy[0];
    int idx=0;
    for(i=0;i<numsSize;i++){
        if(numscpy[i]>max){
            max=numscpy[i];
            idx=i;
        }
    }
    return nums[idx]; } ```

当然,肯定是有更好用的方法的,可以荣题目中多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素这句话入手,先对数组进行排序,那么中间的元素 arr[n/2] 地方的元素肯定是出现最多的元素

int com(const void*p1,const void*p2){
    return *(int*)p1-*(int*)p2;
}
int majorityElement(int* nums, int numsSize){
    qsort(nums,numsSize,sizeof(int),com);
    return nums[numsSize/2];
}

就是利用 qsort 排序再返回数组中间元素,多一行代码就是对qsort 的不尊重!
🪖知识点:qsort排序文章来源地址https://www.toymoban.com/news/detail-643533.html

到了这里,关于C语言属刷题训练【第八天】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Go学习第八天

    签名 验签

    2024年02月13日
    浏览(38)
  • 学习Spring的第八天

     先对自定义类使用@MyComponet的注解,在设置这个@MyComponet的的属性(一个 MyComponentBeanFactoryPostProcessor.java如下:   还要在主配置文件里配置

    2024年01月20日
    浏览(42)
  • MFC第八天 基本数据类型介绍

    CRect类是MFC中用于表示矩形的类。它提供了方便的方法来操作矩形的位置和大小。CRect类常用于图形绘制、窗口管理和布局等场景。 可以用于绘制矩形、椭圆、圆等图形时需要指定其位置和大小。此外,CRect类还常用于窗口管理,可以通过CRect对象来设置窗口的位置和大小。它

    2024年02月11日
    浏览(44)
  • 每日后端面试5题 第八天

    1.UDP无连接,速度快,安全性低,适合高速传输、实时广播通信等。 2.TCP面向连接,速度慢,安全性高,适合传输质量要求高、大文件等的传输,比如邮件发送等。 (还有:TCP只能是一对一的,UDP支持一对一、一对多、多对一) (还有:TCP首部开销有20个字节;UDP分组首部开

    2024年02月11日
    浏览(44)
  • 算法训练第三十八天|动态规划理论基础、509. 斐波那契数 、70. 爬楼梯 、 746. 使用最小花费爬楼梯

    参考:https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 动态规划是什么 动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以 动态规划中每一个状态一定是由上一个状态推导出来的 ,这一

    2024年02月04日
    浏览(40)
  • Java实训第八天——2023.6.14

    官方文档:https://v2.cn.vuejs.org/v2/guide/index.html 1.将vue.min.js复制到js中: 2.在demo01.html中,引入js 3.将官方文档复制到demo01.html中 demo01.html代码如下: 4.出现如下结果,则环境搭建成功! html代码如下: 运行结果: html代码如下: 运行结果如下: 运行结果: 代码如下: 初始页面:

    2024年02月09日
    浏览(45)
  • 算法训练第四十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III

    题目链接:198.打家劫舍 参考:https://programmercarl.com/0198.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D.html 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入

    2023年04月16日
    浏览(40)
  • Java重修第八天—枚举和泛型

    通过学习本篇文章可以掌握如下知识 1、枚举 2、泛型 枚举是一种 特殊类 枚举类的格式: 为什么说枚举是一个特殊类,定义一个简单的枚举如下: 将其编译成class文件后,使用IDEA打开, 结果如下 :可以看出枚举类A有私有构造器。 枚举类的第一行只能罗列一些名称, 这些

    2024年01月17日
    浏览(40)
  • 自学大数据第八天~HDFS命令(二)

    嗨喽,好久不见,最近抽空复习了一下hadoop,书读百遍,其意自现这句话还真是; 改变文件 拥有者~chown 使用 -R 将使改变在目录结构下递归进行。命令的使用者必须是超级用户。 改变文件所属组-chgrp 改变文件权限-chmod 使用-R将使改变在目录结构下递归进行。命令的使用者必须是文

    2023年04月09日
    浏览(36)
  • 蓝桥杯 试题 算法训练 印章

    动态规划: 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 共有n种图案的印章,每种图案的出现概率相同。小A买了m张印章,求小A集齐n种印章的概率。 输入格式 一行两个正整数n和m 输出格式 一个实数P表示答案,保留4位小数。 样例输入 2 3 样例输出 0.7500 数据规模和约

    2024年02月14日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包