【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)

系列文章目录

身躯已然冰封,灵魂仍旧火热
本文由@睡觉待开机原创,未经允许不得转载。
本内容在csdn网站首发
欢迎各位点赞—评论—收藏
如果存在不足之处请评论留言,共同进步!


文章目录

  • 系列文章目录
  • 前言
  • 题目链接(有需要请自行链接做题)
  • T1:
    • 题目解析:
    • 思路1:
    • 思路2:
    • 思路3:
  • T2:
    • 思路1:
    • 思路2:
  • T3:
    • 思路1:
  • T4:
    • 思路1:
  • T5:
    • 思路1:
  • T6:
    • 思路1:
    • 思路2:
  • T7:
    • 思路1:
    • 思路2:
    • 思路3:
  • T8:
    • 思路1:
    • 思路2:
  • T9:
    • 思路1:
    • 思路2:
    • 思路3:
  • 所有代码展示:
  • 总结:


前言

注:本文题目是作者听课视频讲解,来自比特鹏哥C语言刷题训练营,有些许代码思路借鉴。
在本节博客当中,题目难度有了一点点提升,然后就是更注重一些题目的多解性了,仔细对比不同的代码和思路解法,就能促进自己对代码的理解和掌握。


题目链接(有需要请自行链接做题)

第5讲

  1. 精选社⻓ 题号:BC147 链接:https://www.nowcoder.com/practic
    e/45a30e3ef51040ed8a7674984d6d1553?tpId=290&tqId=39935&ru=/exam/oj
  2. 你是天才吗 题号:BC50 链接:https://www.nowcoder.com/practic
    e/557cc54704bb4d56b73b62d1a5455331?tpId=290&tqId=39838&ru=/exam/oj
  3. 完美成绩 题号:(⽆) 链接:https://www.nowcoder.com/questionTe
    rminal/8312e497509a450f968d9a6a2381ce32
  4. 及格分数 题号:BC51 链接:https://www.nowcoder.com/practice/
    56513524333148b38945e1989bc7df4e?tpId=290&tqId=39839&ru=/exam/oj
  5. 判断整数的奇偶性 题号:BC52 链接:https://www.nowcoder.com/
    practice/a8b018667e274af29b5f76a6673450fc?tpId=290&tqId=39840&ru=/exam/oj
  6. 最⾼分数 题号:(⽆) 链接:https://www.nowcoder.com/questio
    nTerminal/52c18a3b49a54fc98107fbdde1415f90
  7. 判断元⾳还是辅⾳ 40题号:BC53 链接:https://www.nowcoder.com/p
    ractice/7eb4df4d52c44d309081509cf52ecbc4?tpId=290&tqId=39841&ru=/exam/oj
  8. 判断是不是字⺟ 题号:BC60 链接:https://www.nowcoder.com/practice/91a588dd4cd244bfa616f17603ec123c?tpId=290&tqId=39848&ru=/exam/oj
  9. 大小写字母转换 题号:BC48 链接:https://www.nowcoder.com/practice/850ebd30a2a34cfc87199da3fc15786a?tpId=107&&tqId=33329&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking

T1:

在这里插入图片描述

题目解析:

看着挺高大上,还是竞选社长,其实说白了就是给一串字符串,然后这个字符串里有A有B,该字符串以0为结束标志,让你数一数哪个多罢了。

思路1:

创建一个数组,存储一下字符串,然后用数组+循环进行挨个访问,挨个计数就行了
代码实现:

void T1_way1(void)
{//创建一个数组,读入并存储字符串char str[100] = { 0 };scanf("%s", str);//一般scanf需要给一个地址,这里数组名就是数组首元素地址//循环依次访问,直到遇到0或者EOFint i = 0;int count_a = 0;int count_b = 0;while (str[i] != '0' && str[i] != EOF){if (str[i] == 'A')count_a++;if (str[i] == 'B')count_b++;i++;}//按照情况来打印if (count_a > count_b)printf("A\n");else if (count_a < count_b)printf("B\n");elseprintf("E\n");
}

思路2:

其实计数这个地方可以升级一下哈,咱有俩计数的变量,有点多,其实一个就够了,数个A计数+1,数个B-计数就1,这样的话是比较不错的。
然后代码就变成这样了:

void T1_way2(void)
{//创建一个数组,读入并存储字符串char str[100] = { 0 };scanf("%s", str);//一般scanf需要给一个地址,这里数组名就是数组首元素地址//循环依次访问,直到遇到0或者EOFint i = 0;int count = 0;while (str[i] != '0' && str[i] != EOF){if (str[i] == 'A')count++;if (str[i] == 'B')count--;i++;}//按照情况来打印if (count > 0)printf("A\n");else if (count < 0)printf("B\n");elseprintf("E\n");
}

思路3:

感觉我们得把一个字符串需要存起来,存起来的话,是不是有点浪费空间,我们到最后又不需要这个数组里的值,,,只是看看A多还是B多而已。。。要不我干脆补存储字符串了,一边读,一边计数不就得了

void T1_way3(void)
{//一边读一边计数,循环依次访问,直到遇到0或者EOFchar ch = '0';int count = 0;while (ch = getchar() != '0'&& ch != EOF){if (ch == 'A')count++;if (ch == 'B')count--;}//按照情况来打印if (count > 0)printf("A\n");else if (count < 0)printf("B\n");elseprintf("E\n");
}

这样的话其实没了数组计数变量也被我们搞成一个了,所以说应该是代码效率提升了不少哈哈,所以这种简单题目可以试试能不能我们把他的这个效率还有需要的内存给他搞得好一点。。。注意细节得。

T2:

在这里插入图片描述
题意:这个题也是一个超级简单的题目,说白了就是编一个程序,这个程序是这样滴:搞一个比较值,一个数字大于等于这个比较值,就是天才,小于就不是。

思路1:

直接搞俩变量,一个是存储这个比较值另一个输入值就行了

void T2_way1(void)
{int a = 140;int iq = 0;while(scanf("%d", &iq)!=EOF){if (iq >= a)printf("Genius\n");}
}

思路2:

其实这个多组输入还可以换一种写法:

void T2_way2(void)
{int a = 140;int iq = 0;while (~scanf("%d", &iq)){if (iq >= a)printf("Genius\n");}
}

可以自己稍微考量一下为啥这个多组输入还可以这么写哈,不会的私信我,我给你说哈。
然后这个题目就没啥好说的了吧,毕竟太简单了,没有可以改进的地方啊。。。

T3:

在这里插入图片描述
额,其实这个题目跟上一个一样的,就是改了改那个比较数字而已。。。

思路1:

代码我就直接copy上一个的代码了,没事可以自己再试一下。。。

void T3_way1(void)
{int a = 90;int iq = 0;while (~scanf("%d", &iq)){if (iq >= a)printf("Perfect\n");}
}

T4:

在这里插入图片描述
题目解析:跟前面俩题一样的,不多废话了。。。感觉这三个题目选的有点划水的感觉。。。

思路1:

void T4_way1(void)
{int a = 60;int iq = 0;while (~scanf("%d", &iq)){if (iq >= a)printf("Pass\n");elseprintf("Fail\n");}
}

T5:

在这里插入图片描述
题目解析:
就是你搞个数字进去,让程序看看是偶数还是奇数。。。用%操作就行了。

思路1:

void T5_way1(void)
{int num = 0;while (scanf("%d", &num) != EOF){if (num % 2 == 0)printf("Even\n");elseprintf("Odd\n");}
}

T6:

在这里插入图片描述
题目解析:就是输入三个数字,程序输出其中的最大的数字。
额。。。这个题目的话很多人可能想到了类似于打擂台的那种方式。。。其实这种三个比较量的时候,可以用三目操作符搞一下。

思路1:

三目操作符的使用,主要就是复习一下,省的忘干净C语言还有这个东西,这东西用起来其实相当好用的,不过很多人想不到而已。

void T6_way1(void)
{int a, b, c;while (~scanf("%d %d %d", &a, &b, &c)){int max = a > b ? a : b;max = max > c ? max : c;printf("%d\n", max);}}

思路2:

就是平常那种打擂台的方式,或者再加上数组高级一点。

void T6_way2(void)
{int n1 = 0;int n2 = 0;int n3 = 0;int max = 0;while (scanf("%d %d %d",&n1,&n2,&n3) != EOF){max = n1;if (n2 > max)max = n2;if (n3 > max)max = n3;printf("%d\n", max);}}

T7:

在这里插入图片描述
题目分析:就是输入一个字母看看是元音还是辅音。。。

思路1:

void T7_way1(void)
{char str[] = "AEIOUaeiou";char ch = 0;while (scanf("%c", &ch) != EOF){int i = 0;for (i = 0; i < 10; i++){if (ch == str[i]){printf("Vowel\n");break;}}getchar();if (i == 10)printf("Consonant\n");}
}

这里得说一下哈,scanf输入字符时候,我们按回车也算一个字符,为了把那个回车给“吃掉”,所以就有搞了个getchar()函数。。。

思路2:

然后那个回车问题的话,其实在scanf%c前面加个空格也可以解决哈,就是也可以不用特地加一个getchar()来“吃掉”多余的回车。。。

void T7_way2(void)
{char str[] = "AEIOUaeiou";char ch = 0;while (scanf(" %c", &ch) != EOF){int i = 0;for (i = 0; i < 10; i++){if (ch == str[i]){printf("Vowel\n");break;}}if (i == 10)printf("Consonant\n");}
}

思路3:

void T7_way3(void)
{char str[] = "AEIOUaeiou";char ch = 0;while (scanf(" %c", &ch) != EOF){if (strchr(str,ch)){printf("Vowel\n");}elseprintf("Consonant\n");}
}

然后这里简单提及一下strchr函数吧,就是一个库函数,这个库函数是用来判断一个字符是否在某个数组当中。。。有的话就返回非0,没有的话返回0。。。

T8:

在这里插入图片描述

思路1:

直接用库函数判断
头文件:#include<string.h>

void T8_way1(void)
{char ch = 0;while (scanf(" %c", &ch) != EOF){if (isalpha(ch))printf("%c is an alphabet.\n",ch);elseprintf("%c is not an alphabet.\n",ch);}
}

思路2:

oid T8_way2(void)
{char ch = 0;while (scanf(" %c", &ch) != EOF){if (('a'<= ch && ch <= 'z') ||('A' <= ch && ch <= 'Z'))printf("%c is an alphabet.\n",ch);elseprintf("%c is not an alphabet.\n",ch);}
}

T9:

在这里插入图片描述

思路1:

void T9_way1(void)
{char ch = 0;while (scanf(" %c", &ch) != EOF){if ('a' <= ch && ch <= 'z')printf("%c", ch-32);else if('A' <= ch && ch <= 'Z')printf("%c\n", ch+32);}
}

思路2:

利用库函数
islower,isupper
头文件:#include<ctype.h>

void T9_way2(void)
{char ch = 0;while (scanf(" %c", &ch) != EOF){if (islower(ch))printf("%c", ch - 32);else if (isupper(ch))printf("%c\n", ch + 32);}
}

思路3:

还有库函数tolower,toupper

void T9_way3(void)
{char ch = 0;while (scanf(" %c", &ch) != EOF){if (islower(ch))printf("%c", toupper(ch));else if (isupper(ch))printf("%c\n", tolower(ch));}
}

所有代码展示:

#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<ctype.h>void T1_way1(void)
{//创建一个数组,读入并存储字符串char str[100] = { 0 };scanf("%s", str);//一般scanf需要给一个地址,这里数组名就是数组首元素地址//循环依次访问,直到遇到0或者EOFint i = 0;int count_a = 0;int count_b = 0;while (str[i] != '0' && str[i] != EOF){if (str[i] == 'A')count_a++;if (str[i] == 'B')count_b++;i++;}//按照情况来打印if (count_a > count_b)printf("A\n");else if (count_a < count_b)printf("B\n");elseprintf("E\n");
}void T1_way2(void)
{//创建一个数组,读入并存储字符串char str[100] = { 0 };scanf("%s", str);//一般scanf需要给一个地址,这里数组名就是数组首元素地址//循环依次访问,直到遇到0或者EOFint i = 0;int count = 0;while (str[i] != '0' && str[i] != EOF){if (str[i] == 'A')count++;if (str[i] == 'B')count--;i++;}//按照情况来打印if (count > 0)printf("A\n");else if (count < 0)printf("B\n");elseprintf("E\n");
}void T1_way3(void)
{//一边读一边计数,循环依次访问,直到遇到0或者EOFchar ch = '0';int count = 0;while (ch = getchar() != '0' && ch != EOF){if (ch == 'A')count++;if (ch == 'B')count--;}//按照情况来打印if (count > 0)printf("A\n");else if (count < 0)printf("B\n");elseprintf("E\n");
}void T2_way1(void)
{int a = 140;int iq = 0;while (scanf("%d", &iq) != EOF){if (iq >= a)printf("Genius\n");}
}void T2_way2(void)
{int a = 140;int iq = 0;while (~scanf("%d", &iq)){if (iq >= a)printf("Genius\n");}
}void T3_way1(void)
{int a = 90;int iq = 0;while (~scanf("%d", &iq)){if (iq >= a)printf("Perfect\n");}
}void T4_way1(void)
{int a = 60;int iq = 0;while (~scanf("%d", &iq)){if (iq >= a)printf("Pass\n");elseprintf("Fail\n");}
}void T5_way1(void)
{int num = 0;while (scanf("%d", &num) != EOF){if (num % 2 == 0)printf("Even\n");elseprintf("Odd\n");}
}void T6_way1(void)
{int a, b, c;while (~scanf("%d %d %d", &a, &b, &c)){int max = a > b ? a : b;max = max > c ? max : c;printf("%d\n", max);}}void T6_way2(void)
{int n1 = 0;int n2 = 0;int n3 = 0;int max = 0;while (scanf("%d %d %d", &n1, &n2, &n3) != EOF){max = n1;if (n2 > max)max = n2;if (n3 > max)max = n3;printf("%d\n", max);}}void T7_way1(void)
{char str[] = "AEIOUaeiou";char ch = 0;while (scanf("%c", &ch) != EOF){int i = 0;for (i = 0; i < 10; i++){if (ch == str[i]){printf("Vowel\n");break;}}getchar();if (i == 10)printf("Consonant\n");}
}void T7_way2(void)
{char str[] = "AEIOUaeiou";char ch = 0;while (scanf(" %c", &ch) != EOF){int i = 0;for (i = 0; i < 10; i++){if (ch == str[i]){printf("Vowel\n");break;}}if (i == 10)printf("Consonant\n");}
}void T7_way3(void)
{char str[] = "AEIOUaeiou";char ch = 0;while (scanf(" %c", &ch) != EOF){if (strchr(str, ch)){printf("Vowel\n");}elseprintf("Consonant\n");}
}void test(void)
{char str[] = "AEIOUaeiou";char ch = 0;scanf("%c", &ch);int c = strchr(str, ch);printf("%d", c);
}void T8_way1(void)
{char ch = 0;while (scanf(" %c", &ch) != EOF){if (isalpha(ch))printf("%c is an alphabet.\n", ch);elseprintf("%c is not an alphabet.\n", ch);}
}void T8_way2(void)
{char ch = 0;while (scanf(" %c", &ch) != EOF){if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z'))printf("%c is an alphabet.\n", ch);elseprintf("%c is not an alphabet.\n", ch);}
}void T9_way1(void)
{char ch = 0;while (scanf(" %c", &ch) != EOF){if ('a' <= ch && ch <= 'z')printf("%c", ch - 32);else if ('A' <= ch && ch <= 'Z')printf("%c\n", ch + 32);}
}void T9_way2(void)
{char ch = 0;while (scanf(" %c", &ch) != EOF){if (islower(ch))printf("%c", ch - 32);else if (isupper(ch))printf("%c\n", ch + 32);}
}void T9_way3(void)
{char ch = 0;while (scanf(" %c", &ch) != EOF){if (islower(ch))printf("%c", toupper(ch));else if (isupper(ch))printf("%c\n", tolower(ch));}
}int main()
{//T1_way1();//T1_way2();//T1_way3();//T2_way1();//T2_way2();//T3_way1();//T4_way1();//T5_way1();//T6_way1();//T6_way2();//T7_way1();//T7_way2();//test();//T8_way1();//T8_way2();//T9_way1();//T9_way2();T9_way3();return 0;
}

总结:

以上就是对鹏哥刷题训练营第五节课所有的代码笔记了~希望同学们还是自己动手敲一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/284502.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux shell编程学习笔记36:read命令

目录 0 前言1 read命令的功能、格式、返回值和注意 1.1 命令功能1.2 命令格式1.3 返回值1.4 注意事项2 命令应用实例 2.1 一次读入多个变量值2.2 不指定变量名2.3 测试read命令的返回值2.3 指定输入时限并进行相应处理2.4 -t 指定结束符2.5 -n 指定输入字符个数2.6 -N 指定输入…

被我们忽略的HttpSession线程安全问题

1. 背景 最近在读《Java concurrency in practice》(Java并发实战)&#xff0c;其中1.4节提到了Java web的线程安全问题时有如下一段话&#xff1a; Servlets and JPSs, as well as servlet filters and objects stored in scoped containers like ServletContext and HttpSe…

Java+Swing: 删除数据 整理15

1. 添加点击事件 2. 在MainViewHandler处理类中&#xff0c;实现相应的处理操作 if ("删除".equals(text)){int[] selectedRowIds mainView.getSelectedRowIds();if (selectedRowIds.length 0){JOptionPane.showMessageDialog(mainView, "请选择要删除的数据…

JWT令牌的作用和生成

JWT令牌&#xff08;JSON Web Token&#xff09;是一种用于身份验证和授权的安全令牌。它由三部分组成&#xff1a;头部、载荷和签名。 JWT令牌的作用如下&#xff1a; 身份验证&#xff1a;JWT令牌可以验证用户身份。当用户登录后&#xff0c;服务器会生成一个JWT令牌并返回…

Linux - 非root用户使用systemctl管理服务

文章目录 方式一 &#xff08;推荐&#xff09;1. 编辑sudoers文件&#xff1a;2. 设置服务文件权限&#xff1a;3. 启动和停止服务&#xff1a; 方式二1. 查看可用服务&#xff1a;2. 选择要配置的服务&#xff1a;3. 创建自定义服务文件&#xff1a;4. 重新加载systemd管理的…

【网络安全】-Linux操作系统—操作系统发展历史与Linux

文章目录 操作系统发展历史初期的操作系统分时操作系统个人计算机操作系统 Linux的诞生UNIX与GNU项目Linux内核的创建 Linux的特点开放源代码多样性社区支持 Linux的应用服务器和超级计算机嵌入式系统桌面系统 总结 操作系统发展历史 操作系统&#xff08;Operating System&am…

Leetcode sql50基础题最后的4题啦

算是结束了这个阶段了&#xff0c;之后的怎么学习mysql的方向还没确定&#xff0c;但是不能断掉&#xff0c;而且路是边走边想出来的。我无语了写完了我点进去看详情都不让&#xff0c;还得重新开启计划&#xff0c;那我之前的题解不都没有了&#xff01;&#xff01; 1.第二高…

DDD | 入门 - [概念体系]

INDEX 接触 DDD 前的准备不要用和 MVC 对照的思想去接触 DDD 领域 & 子域 & 界限上下文思路领域子域界限上下文 领域的初步划分 接触 DDD 前的准备 不要用和 MVC 对照的思想去接触 DDD 不要用和 MVC 对照的思想去接触 DDD&#xff0c;这样你会很痛苦。 在之前 蛋式编…

Linux下Netty实现高性能UDP服务

前言 近期笔者基于Netty接收UDP报文进行业务数据统计的功能&#xff0c;因为Netty默认情况下处理UDP收包只能由一个线程负责&#xff0c;无法像TCP协议那种基于主从reactor模型实现多线程监听端口&#xff0c;所以笔者查阅网上资料查看是否有什么方式可以接收UDP收包的性能瓶颈…

IDEA报错处理

问题1 IDEA 新建 Maven 项目没有文件结构 pom 文件为空 将JDK换成1.8后解决。 网络说法&#xff1a;别用 java18&#xff0c;换成 java17 或者 java1.8 都可以&#xff0c;因为 java18 不是 LTS 版本&#xff0c;有着各种各样的问题。。

手拉手EasyExcel极简实现web上传下载(全栈)

环境介绍 技术栈 springbootmybatis-plusmysqleasyexcel 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性…

OpenSergo Dubbo 微服务治理最佳实践

*作者&#xff1a;何家欢&#xff0c;阿里云 MSE 研发工程师 Why 微服务治理&#xff1f; 现代的微服务架构里&#xff0c;我们通过将系统分解成一系列的服务并通过远程过程调用联接在一起&#xff0c;在带来一些优势的同时也为我们带来了一些挑战。 如上图所示&#xff0c;可…