【c语言】五道经典练习题④

news2024/11/27 4:35:57

 

目录

①、年月日经过n天后的日期

 ②、坐标排序

③、统计文件中出现某个单词的次数

④、输出含for的行

⑤、比较两个文本是否相等


①、年月日经过n天后的日期

题述:定义包含年月日表示的日期的结构体,写程序实现计算某年某月某日过n天后的日期是哪年哪月哪日

思路:

1、这种题因为关于年了,那就应该判断是闰年还是平年,因为会导致2月的天数不同,闰年2月29天。

2、越界问题,无非是月越界或者年越界,因为过n天,这个n你没有指定范围,那他可以无限大也可以无限小,当天数超过本月应有的天数时,月份应该++,并且n应该减掉本月天数。如果月份>12了,年份应该++,并且再判断,上述过程全放在while循环中,直到n是一个正常的月份天数为止。

#include<stdio.h>

typedef struct date
{
	int year, month, day;
}date;
int main()
{	//闰年二月有29天
	int day[2][13] = { {0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31} };
	date a = { 0 };
	printf("请输入年月日:>\n");
	scanf("%d %d %d", &a.year, &a.month, &a.day);
	int leap = (a.year % 400 == 0) || ((a.year % 4 == 0) && (a.year % 100 == 0));
	int n = 0;
	printf("请输入过多少天:>\n");
	scanf("%d", &n);
	a.day += n;
	while (a.day > day[leap][a.month])
	{//为什么是while循环,因为你输入的天数没有限制范围,他可能很大也可能很小
		a.day -= day[leap][a.month];
		a.month++;
		if (a.month > 12)
		{
			a.month %= 12;
			a.year++;
			//那么年数变了,还要再次判断是否是闰年
			leap = (a.year % 400 == 0) || ((a.year % 4 == 0) && (a.year % 100 == 0));
		}
	}
	printf("经过%d天后为%d年%d月%d日\n",n, a.year, a.month, a.day);
	system("pause");
	return 0;
}

 ②、坐标排序

题述:输入n个点,对这些点的x轴坐标排序并输出

思路:关键就是冒泡排序的应用罢了

#include<stdio.h>
typedef struct
{
	int x, y;
}coord;
int main()
{
	int n = 0;
	printf("你想输入几个坐标:>\n");
	scanf("%d", &n);
	coord s[20];
	for (int i = 0; i < n; i++)
	{
		scanf("%d %d", &s[i].x, &s[i].y);
	}
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < n - 1 - i; j++)
		{
			if (s[j].x > s[j+1].x)
			{
				int temp = s[j].x;
				s[j].x = s[j+1].x;
				s[j+1].x = temp;
			}
		}
	}
	for (int i = 0; i < n; i++)
	{
		printf("第%d个坐标:(%d,%d)\n", i + 1, s[i].x, s[i].y);
	}
	return 0;
}

③、统计文件中出现某个单词的次数

题述:文件in.txt存放了一篇文章,从键盘输入某个单词,请统计文章中这个单词出现的次数并输出

思路:打开读取文章的文件,然后每次从文件中读取一行文本,fgets每次读取一行,并且遇到失败或者读到文件结尾返回NULL,因此不能直接用过fgets的返回值来判断函数是否出错而终止,应借助feof函数或者ferror函数来判断)如果已经读到文件末尾则退出循环。在每一行文本中查找单词出现的位置,如果查找到则统计次数并指向单词后面一个字符的位置继续查找,直到这行文本中不存在单词为止。

#include <stdio.h>
#include <string.h>
#define MAX_LEN 1000 // 假设文章最大长度不超过1000

int main() {
    char word[MAX_LEN]; // 用户输入的单词
    char filename[] = "in.txt"; // 文章文件路径
    char line[MAX_LEN]; // 保存读入的一行文本
    int count = 0; // 统计单词出现次数的变量
    FILE* file = fopen(filename, "r"); // 以只读方式打开文件
    if (file == NULL) {
        printf("Failed to open file '%s'.\n", filename);
        return 1;
    }
    printf("Please input a word: ");
    scanf("%s", word); // 读入一个单词
    while (!feof(file)) { // 循环读取一行文本
        fgets(line, MAX_LEN, file);
        char* p = line;
        while ((p = strstr(p, word)) != NULL) { // 查找单词出现的位置
            count++;
            p += strlen(word); // 指向单词后一个字符的位置
        }
    }
    printf("The word '%s' appears %d time(s) in the article.\n", word, count);
    fclose(file);
    return 0;
}

④、输出含for的行

题述:输出文件中含字符串"for"的行

思路:这道题是第③道题的变形,但是这道题有两种方法。

法一、与③同样的方法,调用strstr

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N 888
int main()
{
	FILE* fp = fopen("a.txt", "r");
	if (fp == NULL)
	{
		printf("文件打开错误!\n");
		exit(0);
	}
	char s[N];
	while(!feof(fp))
	{
		fgets(s, N, fp);//一次读取一行
		char *p = s;//一个为了保存一个为了遍历
		if (strstr(p, "for") != NULL)
		{
			printf("%s", s);
		}
	}
	return 0;
}

法二、循环遍历一行的方法

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define N 888
int main()
{
	FILE* fp = fopen("a.txt", "r");
	if (fp == NULL)
	{
		printf("文件打开错误!\n");
		exit(0);
	}
	char s[N];
	while(!feof(fp))
	{
		fgets(s, N, fp);//一次读取一行
		if (strlen(s) >= 3)
		{
			for (int i = 0; i < strlen(s) - 2; i++)
			{
				if (s[i] == 'f' && s[i + 1] == 'o' && s[i + 2] == 'r')
				{
					printf("%s", s);
				}
			}
		}
	}
	return 0;
}

⑤、比较两个文本是否相等

题述:比较两个文本是否相等:比较两个文本文件内容是否相等,并输出两个文件中第一次不相同字符内容行号及列值。

思路:

1、我们可以一个一个字符比较,故用fgetc函数,那么循环终止条件应该是两个中有一个文件读到了文件尾

2、如果其中有一个文件读到了'\n',说明要换行,那么对应的列也要发生变化

3、如果读到的字符不相等有两种情况:要么就是有一个文件,或者两个文件都读到了文件尾标志EOF,要么就是字符不相等,并不是因为结束标志,这种情况需要打印行号和列号。

4、因为读到EOF和字符确实不相等的情况都会跳出循环,那我们就要判断,到底是因为读到结束标志了还是因为字符确实不相等。

#include <stdio.h>

int main( ) 
{
	FILE* fp, * fp1;
	int col1 = 1, row1 = 1, col2 = 1, row2 = 1;//两个文件内容行和列肯定都是从1开始的
	char ch1, ch2;
	//test与test1都是与当前程序在同一目录下的文件
	fp = fopen("test.txt", "r");
	fp1 = fopen("test1.txt", "r");
	while (!feof(fp) || !feof(fp1)) 
	{//循环继续的条件一定是两个文件都没读到文件尾
		ch1 = fgetc(fp);
		ch2 = fgetc(fp1);
		if (ch1 == '\n') 
		{
			row1++;//如果读到了换行,说明行数要++
			col1 = 1;//换行后列数还要是1
		}
		if (ch2 == '\n')
		{
			row2++;
			col2 = 1;
		}
		if (ch1 != ch2) 
		{
			if (ch1 == EOF || ch2 == EOF) break;//如果其中一个文件结束了,就跳出循环,因为不相等包括结束的情况
			printf("test\t行号:%d 列号:%d\n", row1, col1);//按要求,如果两个文件都没有结束的,就打印出行和列
			printf("test1\t行号:%d 列号:%d\n", row2, col2);
			break;//不相等就没有必要继续往下比了
		}
		else
		{
			col1++; col2++;//相等就列值++
		}
	}
	if (ch1 == EOF && ch2 != EOF)//能比到EOF说明之前一定有字符是相等的
		printf("test文件内容被包含在test1中");
	if (ch2 == EOF && ch1 != EOF)
		printf("test1文件内容被包含在test中");
	if (ch1 == EOF && ch2 == EOF)
		printf("两个文件完全相同!");
	fclose(fp);
	fclose(fp1);
	fp = fp1 = NULL;
	return 0;
}

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

肠道细菌阻碍阿卡波糖的降血糖作用

我们知道&#xff0c;口服抗糖尿病药是治疗糖尿病的有效方式之一。然而&#xff0c;患者对抗糖尿病药的反应程度各不相同&#xff0c;例如&#xff0c;有些患者在长期使用阿卡波糖后会产生耐药性。 阿卡波糖通常在饭前口服。它抑制人α-葡萄糖苷酶达到降血糖作用&#xff0c;包…

GWO-VMD-近似熵-极限学习机的轴承故障诊断软件,以西储大学轴承数据为例,采用MATLABAPP开发

采用灰狼算法优化VMD两个参数&#xff0c;以包络熵为最小适应度值&#xff0c;在最佳参数下提取采用近似熵指标提取西储大学轴承数据的特征向量&#xff0c;最后选用极限学习机ELM进行故障诊断。将以上程序集成在MATLABAPP进行开发。 首先是这个软件的各个界面展示。 软件启动…

云安全技术(四)之云计算安全的设计原则

计算安全的设计原则 Understand Design Principles of Secure Cloud Computing 1.1 云安全数据生命周期 Cloud secure data lifecycle 数据始终是安全保护的首要问题。必须深刻了解数据生命周期&#xff0c;以便正确制定和遵守安全策略&#xff0c;把握正确的步骤顺序&#xf…

万博智云与品高股份完成产品兼容性互认证,持续助力国产化生态建设

近日&#xff0c;万博智云的HyperBDR云容灾软件与广州市品高股份有限公司&#xff08;简称&#xff1a;品高股份&#xff09;旗下产品品高基础架构云资源管理软件V9.0完成了产品兼容性认证。 经万博智云和品高云双方人员的共同测试&#xff0c;得出结论&#xff1a; HyperBDR…

【C/C++数据结构与算法】C语言链表

目录 一、单链表 二、双向循环链表 三、判断链表是否带环 四、链表的回文结构判断 五、复制带随机指针的链表 一、单链表 优点&#xff1a;头部增删效率高&#xff0c;动态存储无空间浪费 缺点&#xff1a;尾部增删、遍历效率低&#xff0c;不支持随机访问节点 头结点&…

【夜深人静学习数据结构与算法 | 第六篇】贪心算法

目录 前言&#xff1a; 引入: 贪心算法&#xff1a; 455. 分发饼干 - 力扣&#xff08;LeetCode&#xff09; 376. 摆动序列 - 力扣&#xff08;LeetCode&#xff09; 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 122. 买卖股票的最佳时机 II - 力扣&a…

【Python 随练】统计字符类型个数

题目&#xff1a; 输入一行字符&#xff0c;分别统计出其中英文字母、空格、数字和其它字符的个数。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个字符统计问题&#xff1a;输入一行字符&#xff0c;统计其中英文字母、空格、数字和其他字符的个数。我们将提供…

学习python爬虫需要掌握哪些库?

Python爬虫是指使用Python编写的程序&#xff0c;用来自动化地获取互联网上的数据。通过爬取网站的HTML内容&#xff0c;并解析和提取所需的数据&#xff0c;可以实现自动化地收集、分析和处理大量的在线数据。 学习Python爬虫需要掌握以下几个核心库&#xff1a; Requests&am…

【ARM AMBA AXI 入门 9 - AXI 总线 AxPROT 与安全之间的关系 】

文章目录 介绍ARM Trustzone的安全扩展简介 1.1 AXI AxPROT 介绍1.1.1 AXI 对 Trustzone的支持 介绍 ARMv8 架构中的AXI&#xff08;Advanced eXtensible Interface&#xff09;总线与NS&#xff08;Non-Secure&#xff09;位密切相关。NS位是指在ARM TrustZone安全扩展中定义…

LeetCode 1254. Number of Closed Islands【DFS,BFS,并查集】中等

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

单片机MCU如何实现让部分代码运行在RAM中

随着单片机硬件的发展&#xff0c;其中的RAM和flash越做越大。MCU在实际的使用中&#xff0c;通常程序都是运行在flash上的&#xff0c;RAM的高速空间并没有得到充分的利用&#xff0c;如果我们的程序需要运行的更快&#xff0c;系统有更好的实时性&#xff0c;我们可以考虑将这…

CSS查缺补漏之《常用长度单位(px、em、rem、%、vw/vh、vmin/vmax)》

此文内容较少&#xff0c;轻轻松松掌握&#xff0c;莫要有压力~ 正如现实生活中长度具有mm、dm、cm、m等&#xff0c;在css中&#xff0c;也具备多种长度单位&#xff0c;本文对常用的几种单位进行详细举例介绍~ px&#xff1a;像素单位 初学css时&#xff0c;px单位经常被使用…

【Leetcode60天带刷】day08字符串——344.反转字符串, 541. 反转字符串II,剑指Offer 05.替换空格,151.翻转字符串里的单词

题目&#xff1a; 344. 反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1&#xff1a; 输入&…

基于SpringBoot+Vue的“漫画之家”系统设计与实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…

新电脑机环境安装笔记

「Navicat_15.0.25_64bit_Setup.exe」 下载https://www.aliyundrive.com/s/b9xUw2JpuJb Navicat Keygen Patch v5.6.0 下载 https://www.aliyundrive.com/s/YYyE5BQMMuN 全程断网操作 patch 将安装目录选中 提示 check 64 mysql安装&#xff1a; https://baijiahao.baidu…

因子分析——SPSS实例分析

【续上篇主成分分析】 因子分析常用于通过可观测变量推断出其背后的公共因子&#xff08;也称为隐变量&#xff09;&#xff0c;样本在公共因子上的取值变化影响其在可观测变量上的取值&#xff0c;因为一般公共因子的个数小于可观测变量的数目&#xff0c;所以因子分析也可以…

渠道归因(一)传统渠道归因

渠道归因&#xff08;一&#xff09;传统渠道归因 小P&#xff1a;小H&#xff0c;我又来了。。。最近在做ROI数据&#xff0c;但是有个问题。。。 小H&#xff1a;什么问题&#xff0c;不就是收入/成本吗&#xff1f; 小P&#xff1a;是的&#xff0c;每个渠道的成本很容易计算…

基于html+css的图展示134

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

如何打造创意百变的虚拟直播场景?

场景对于直播来说是直接呈现给观众的&#xff0c;也是直播带货的“直接”的视觉冲击的价值核心&#xff0c;所以场景的设计十分重要。今天&#xff0c;我们就一起来看看如何低成本搭建一个网红同款直播间吧&#xff01; 直播间类型 直播间大体可以分为三种类型&#xff1a;虚拟…

CUDA共享内存详解

为什么需要共享内存&#xff1f; 共享内存的访问速度比访问全局速度快的多&#xff0c;因此对于多次访问全局内存的程序&#xff0c;特别是需要多次将全局内存的运算结果缓存到全局内存的运算&#xff0c;先将临时结果缓存到共享内存再做计算&#xff0c;会提高运算速度。 1、…