C语言百日刷题第十天

news/2025/2/21 7:49:37/

前言

今天是刷题第10天,放弃不难,但坚持一定很酷~

快来跟我一起刷题吧。

在这里插入图片描述

C语言百日刷题第十天

  • 前言
  • 81.连接两个字符串
  • 82.输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。
  • 83.写一个排序函数实现数组从小到大的排序
  • 84.字母的大小写转换
  • 85.找乒乓球队名单

81.连接两个字符串

输入两个字符串 strl 和 st2,对输入的字符串进行长度比较,然后将小的连接在大的字符串后面,最后输出连接好的新串并计算新串的长度。

题目分析:本题有两种解法,第一种是直接使用C语言里面的库函数,第二种是自己模拟对应的库函数。

方法一:使用库函数

#include<stdio.h>
#include<string.h>
int main()
{int len;char str1[80], str2[80];printf("输入字符串1:\n");scanf("%s", str1);printf("输入字符串2:\n");scanf("%s", str2);if (strlen(str1)>= strlen(str2)){strcat(str1, str2);len = strlen(str1);printf("连接后的字符串为:%s,长度为:%d\n", str1, len);}else{strcat(str2, str1);len = strlen(str2);printf("连接后的字符串为:%s,长度为:%d\n", str2, len);}return 0;
}

这里使用了两个字符串函数,我们分别介绍一下。

strlen函数:求字符串的长度。
在这里插入图片描述

strcat函数:连接两个字符串
在这里插入图片描述

方法二:使用自己模拟的函数
首先我们可以模拟一下strlen函数,strlen函数的作用就是计算字符串的长度。对于该函数,我们有三种方法可以进行模拟。
模拟方法一:循环+计数器模拟

int strlen1 (char * str)
{int count = 0;while(*str){count++;str++;}return count;
}

模拟方法二:递归模拟

int strlen2 (char * str)
{if(*str == '\0')return 0;elsereturn 1 + strlen2(str+1);
}

模拟方法三:指针运算模拟

int strlen3 (char *s)
{char *p = s;while(*p != ‘\0)p++;return p-s;
}

接下来,我们可以尝试去模拟一下strcat函数,而strcat函数的原理其实就是先找到目标字符串的结尾(‘\0’),然后从此处开始进行数据的复制,当找到源字符串的结束标志(’\0’)时停止复制。

char *strcat1(char *dest, const char*src)
{char *ret = dest;assert(dest != NULL); //断言防止为空指针assert(src != NULL);  //断言防止为空指针while(*dest){dest++;}while(*dest = *src)
{dest++;src++;
}return ret;
}

如此一来,我们就模拟了两个字符串函数,接下来把他们封装,直接调用就行了,这里的strlen函数我就使用第一种模拟的函数吧。

#include<stdio.h>
#include<assert.h>
int strlen1(char* str)
{int count = 0;while (*str){count++;str++;}return count;
}
char* strcat1(char* dest, const char* src)
{char* ret = dest;assert(dest != NULL); //断言防止为空指针assert(src != NULL);  //断言防止为空指针while (*dest){dest++;}while (*dest = *src){dest++;src++;}return ret;
}
int main()
{int len;char str1[80], str2[80];printf("输入字符串1:\n");scanf("%s", str1);printf("输入字符串2:\n");scanf("%s", str2);if (strlen1(str1) >= strlen1(str2)){strcat1(str1, str2);len = strlen1(str1);printf("连接后的字符串为:%s,长度为:%d\n", str1, len);}else{strcat1(str2, str1);len = strlen1(str2);printf("连接后的字符串为:%s,长度为:%d\n", str2, len);}return 0;
}

82.输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。

输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。

在这里插入图片描述

题目分析:分别统计英文、空格和数字,及其其他,我们自然就想到了使用分支语句进行判断,那么如何进行判断以上四种情况呢,柿子先捡软的捏,最容易判断的当然就是空格,其次就是英文字母和数字,最难判断的就是其他字符,但是如果我们把前面三种都判断了,那么最后的不就剩下其他字符了嘛?但是因为我们不知道用户输入的具体是多少,所以我们无法判断分支语句写多少条,所以我们就应该用循环,因为我们输入完后会敲回车,而回车相当于换行,所以我们要将换行作为循环结束的标志。

#include<stdio.h>
int main()
{char c;int letter = 0, space = 0, digit = 0, other = 0;printf("请输入需要统计的字段:\n");while ((c = getchar()) != '\n'){if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')letter++;else if (c == ' ')space++;else if (c >= '0' && c <= '9')digit++;elseother++;}printf("英文有:%d\n空格有:%d\n数字有:%d\n其他有:%d", letter, space, digit, other);return 0;
}

83.写一个排序函数实现数组从小到大的排序

排序的方法有很多,这里我写一个我比较常用的排序方法-------快速排序。
快速排序的核心思想就是分治,这里我提供一个我比较常用的模板。

#include<stdio.h>
//快速排序的实现
void quick_sort(int q[], int left, int right)
{if (left >= right)return;int i = left - 1, j = right + 1, x = q[left + right >> 1];//  >>一位相当于除以二while (i < j){do i++; while (q[i] < x);do j--; while (q[j] > x);if (i < j){int tmp;tmp = q[i];q[i] = q[j];q[j] = tmp;}}//递归处理左右边界quick_sort(q, left, j), quick_sort(q, j + 1, right); 
}
//验证
int main()
{int q[10] = { 1,2,56,2552,5,325,2,69,348,222 };quick_sort(q, 0, 9);for (int i = 0; i < 10; i++){printf("%d ", q[i]);}return 0;
}

84.字母的大小写转换

从键盘输入一个字符,判断其是否为大写字母,若是大写字母,则将其转换为小写;否则,不进行转换。

题目分析:本题的核心是了解ASCII码之间的关系,从表上来看,对于字母来说,小写的字母的ASCII码比大写的ASCII码值大32
在这里插入图片描述

代码如下:

#include<stdio.h>
int main()
{char input;scanf("%c", &input);if (input >= 'A' && input <= 'Z'){input = input + 32;}printf("%c", input);return 0;
}

85.找乒乓球队名单

在这里插入图片描述


现有两个乒乓球队进行比赛,各出三人。甲队为A,B,C 三人,乙队为X,Y,Z 三人。已抽签决定比赛名单。有人向队员打听比赛的名单。A说他不和X比,C说他不和X,Z比,请编程序找出三队赛手的名单。

分析:需要通过循环进行比较,并且需要if语句来判断参赛队员是否重复。

#include<stdio.h>
int main()
{for (char i = 'X'; i <= 'Z'; i++){for (char j = 'X'; j <= 'Z'; j++){if (i != j){for (char k = 'X'; k <= 'Z'; k++){if (i != k && j != k){if (i != 'X' && k != 'X' && k != 'Z'){printf("A对%c\nB对%c\nC对%c\n", i, j, k);}}}}}}return 0;
}

http://www.ppmy.cn/news/299.html

相关文章

Python学习:optparse模块

optparse&#xff0c;是一个更够让程序设计人员轻松设计出简单明了、易于使用、符合标准的Unix命令例程式的Python模块&#xff0c;生成使用和帮助信息。 参数说明 dest&#xff1a;用于保存输入的临时变量&#xff0c;其值通过options的属性进行访问&#xff0c;存储的内容是…

MuLogin的WebRTC功能介绍与设置

WebRTC 协议可以绕过代理取到一些本机的网卡IP和真实的上网公网IP地址&#xff0c;那么我们可以使用替换模式来让网站取到我们指定的IP信息&#xff0c;或用禁用模式&#xff0c;让被访问的网站不能通过WebRTC协议来取我们的IP地址。这里如果你不知道公网IP是多少&#xff0c;建…

安科瑞安全用电监测,智慧用电装置,导轨式安装带无线通讯功能

安科瑞 王晶淼/司红霞 前言 随着电气化的迅猛发展和用电普及程度的日益提高,电已经成为人类生存和发展必不可少的能源之一。然而,由于种种原因,由电气引发的火灾和爆炸事故也直呈现上升趋势。电气设备的绝缘大量使用塑料、橡胶、绝缘漆、稀释剂等易燃物品,在电气设备运行中,由…

网络规划.1.扩展.IP地址规划

第一章 IPv4 Internet中有数百万台以上的主机和路由器&#xff0c;IP 地址可以确切地标识它们。- 一台主机至少拥有一-个IP地址。任何两台主机的IP地址不能相同&#xff0c;但是允许一台主机拥有多个IP地址。如果一台计算机虽然也连入Internet, 使用Internet 的某些功能&#…

Python的10个编程技巧,你不一定都知道

文末有Python资料下载 1. 原地交换两个数字 Python 提供了一个直观的在一行代码中赋值与交换&#xff08;变量值&#xff09;的方法&#xff0c;请参见下面的示例&#xff1a; 赋值的右侧形成了一个新的元组&#xff0c;左侧立即解析&#xff08;unpack&#xff09;那个&…

计算机毕业设计JavaWeb端校园报修系统(源码+系统+mysql数据库+lw文档)

计算机毕业设计JavaWeb端校园报修系统(源码系统mysql数据库lw文档&#xff09; 计算机毕业设计JavaWeb端校园报修系统(源码系统mysql数据库lw文档&#xff09;本源码技术栈&#xff1a; 项目架构&#xff1a;B/S架构 开发语言&#xff1a;Java语言 开发软件&#xff1a;idea…

经典文献阅读之--PL-SLAM(点线SLAM)

0. 简介 之前作者基本都在围绕着特征点提取的路径在学习&#xff0c;最近看到了最近点云PCL推送的《Structure PLP-SLAM: Efficient Sparse Mapping and Localization using Point, Line and Plane for Monocular, RGB-D and Stereo Cameras》。这个工作是基于OpenVSLAM架构的…

【HDU No. 1166】 敌兵布阵

【HDU No. 1166】 敌兵布阵 杭电 OJ 题目地址 【题意】 A国在海岸线沿直线布置了N 个工兵营地。C国通过先进的监测手段对A国每个工兵营地的人数都掌握得一清二楚。每个工兵营地的人数都可能发生变动&#xff0c;可能增加或减少若干人手。 【输入输出】 输入&#xff1a; 第…