首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【C语言刷题】第十二天:加量加餐继续,代码题训练,融会贯通IO模式

【C语言刷题】第十二天:加量加餐继续,代码题训练,融会贯通IO模式

作者头像
艾莉丝努力练剑
发布2025-11-13 10:08:37
发布2025-11-13 10:08:37
1420
举报
文章被收录于专栏:C / C++C / C++

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》《数据结构与算法》C语言刷题12天IO强训LeetCode代码强化刷题 🍉学习方向:C/C++方向 ⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平



前言:上一篇博客又带大家刷了一些相对来说已经有难度的代码题目,本篇文章我们将继续练习最后一部分的题目。这些题目的难度有的挖了大坑,大家做的时候要留意,如果做不出来,看了代码演示后要自己多敲几遍,去理解代码的逻辑。 本文就是【C语言刷题12天IO强训】的最后一篇文章了,到这里博主就把【C语言刷题12天IO强训】全部更新完了,大家一定要多练,不会做的结合代码演示,再看看。 宇宙安全声明:鉴于博主能力有限,本专栏适用于代码小白刷题,大佬们多多包涵(抱拳)!

正文

一、小乐乐查找数字

BC130 小乐乐查找数字

(一)题目描述

描述: 给定n个整数和一个整数x,小乐乐想从n个整数中判断x出现几次,请编程帮他实现。 输入描述: 共3行 第一行,一个整数,表示n(1 <= n <= 100)。 第二行,共输入n个整数,两个整数之间用空格分隔。 第三行,输入一个整数,表示要查找的整数x。 输出描述: 一行,表示整数x出现的次数。

题目截图:

(二)代码演示
代码语言:javascript
复制
#define  _CRT_SECURE_NO_WARNINGS  1

#include <stdio.h>
int main()
{
	int arr[101] = { 0 };
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		int m = 0;
		scanf("%d", &m);
		arr[m]++;
	}
	int x = 0;
	scanf("%d", &x);
	printf("%d", arr[x]);
	return 0;
}

二、KiKi学程序设计基础

BC131 KiKi学程序设计基础

(一)题目描述

描述: BoBo老师教了KiKi学习程序设计基础,他知道C++是带类的C语言,这个“++”主要包含三部分内容:对C语言进行语法上的扩展、面向对象(封装、继承和多态),STL(即模板)。这学期KiKi学习了C和C++,学好他们,其他编程语言都可以很轻松掌握。C和C++的输入有区别,请帮KiKi输出C和C++输出Hello world的代码。 输入描述:输出描述: printf("Hello world!\n"); cout << "Hello world!" << endl。

题目截图:

(二)代码演示
代码语言:javascript
复制
#define  _CRT_SECURE_NO_WARNINGS  1

#include <stdio.h>
int main()
{
	//难点:要让转义字符不是转义字符
	printf("printf(\"Hello world!\\n\");\n");
	printf("cout << \"Hello world!\" << endl;");

	return 0;
}

三、KiKi求质数个数

BC135 KiKi求质数个数

(一)题目描述

描述: KiKi知道了什么是质数(只能被1和他自身整除的数),他现在想知道所有三位整数中,有多少个质数。 输入描述:输出描述: 一行,一个整数,表示所有三位整数中,有多少个质数。

题目截图:

(二)代码演示
代码语言:javascript
复制
#define  _CRT_SECURE_NO_WARNINGS  1

#include <stdio.h>
int is_prime(int n)
{
	int i = 0;
	for (i = 2; i < n; i++)
	{
		if (n % i == 0)
			return 0;
	}
	return 1;
}
int main()
{
	int count = 0;
	int i = 0;
	for (i = 100; i <= 999; i++)
	{
		//判断i是否为质数
		if (is_prime(i))
		{
			count++;
		}
	}
	printf("%d\n", count);
	return 0;
}

四、KiKi去重整数并排序

BC136 KiKi去重整数并排序

(一)题目描述

描述: 给定一个整数序列,KiKi想把其中的重复的整数去掉,并将去重后的序列从小到大排序输出。 输入描述: 第一行,输入一个整数n,表示序列有n个整数。 第二行输入n个整数(每个整数大于等于1,小于等于1000),整数之间用空格分隔。 输出描述: 去重并且从小到大排列的整数序列,整数之间用空格分隔。

题目截图:

(二)两种思路
1、思路1
代码语言:javascript
复制
#define  _CRT_SECURE_NO_WARNINGS  1

//方法1
#include<stdio.h>
int main()
{
	int n = 0;
	int arr[100];
	scanf("%d", &n);
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr[i]);
	}
	//排序
	for (i = 0; i < n - 1; i++)
	{
		int j = 0;
		for (j = 0; j < n - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
	//去重-比较n-1对
	int j = 0;
	for(j = 0;j < n-1;j++)
	{
		//把i+1后边的元素往前移动
		if (arr[i] == arr[i + 1])
		{
			int k = 0;
			for (k = i; k < n - 1; k++)
			{
				arr[k] = arr[k + 1];
			}
			n--;
			i--;
		}
	}
	//打印
	for (i = 0; i < n; i++)
	{
		printf("%d ", arr[i]);
	}
		return 0;
	}
2、思路2
代码语言:javascript
复制
//方法2:
#include<stdio.h>
int main()
{
	int n = 0;
	int arr[1001] = { 0 };
	scanf("%d", &n);
	int i = 0;
	int m = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &m);
		arr[m] = m;
	}
	for (i = 0; i < 1001; i++)
	{
		if (arr[i] != 0)
			printf("%d ", arr[i]);
	}
	return 0;
}

五、KiKi学结构体和指针

BC138 KiKi学结构体和指针

(一)题目描述

描述: KiKi学习了结构体和指针,他了解了结构体类型可以定义包含多个不同类型成员,而指针本质是内存地址,是引用数据的另外一种方式。现在他想将多个输入的数据通过结构体和指针的方式连接在一起,形成一个单向链表,即:每个结点是结构体类型,包括整型数据成员(data)和结构体指针类型成员(next),每个结点的指针部分指向下一个输入的结点。具体建立过程如下:先输入n个整数,按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。输出删除后的单链表信息。 输入描述: 包括三行: 第一行输入数据个数n (3≤n≤100); 第二行依次输入n个整数,用空格分隔; 第三行输入欲删除数据m。 输出描述: 包括两行: 第一行输出完成删除后的单链表长度; 第二行依次输出完成删除后的单链表数据。

题目截图:

(二)代码演示
代码语言:javascript
复制
#define  _CRT_SECURE_NO_WARNINGS  1

#include <stdio.h>
#include <stdlib.h>
struct Node
{
	int data;
	struct Node* next;
};
int main()
{
	int n = 0;
	struct Node* list = NULL;
	struct Node* tail = NULL;
	//输入结点
	int i = 0;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
	{
		int data = 0;
		scanf("%d", &data);
		struct Node* n = (struct Node*)malloc(sizeof(struct Node));
		n->data = data;
		n->next = NULL;
		if (list == NULL)
		{
			list = n;
			tail = list;
		}
		else
		{
			tail->next = n;
			tail = tail->next;
		}
	}
	//删除结点
	int del = 0;
	scanf("%d", &del);
	struct Node* cur = list;
	struct Node* prev = NULL;
	while (cur)
	{
		//找到了
		if (cur->data == del)
		{
			struct Node* pd = cur;
			//如果删除的是第一个结点
			if (cur == list)
			{
				list = list->next;
				cur = list;
			}
			else
			{
				//删除的不是第一个结点
				prev->next = cur->next;
				cur = prev->next;
			}
			n--;
			free(pd);
		}
		else//找不到
		{
			prev = cur;
			cur = cur->next;
		}
	}
	cur = list;
	printf("%d\n", n);
	while (cur)
	{
		printf("%d ", cur->data);
		cur = cur->next;
	}
	//释放空间
	cur = list;
	while (cur)
	{
		del = cur;
		cur = cur->next;
		free(del);
	}
	return 0;
}

六、KiKi定义电子日历类

BC139 KiKi定义电子日历类

(一)题目描述

描述: KiKi学习了面向对象技术,学会了通过封装属性(变量)和行为(函数)定义类,现在他要设计一个电子日历类TDate。 它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,要求: (1)带有默认形参值的构造函数,默认值为0, 0, 0; (2)输出日期函数,用“日/月/年”格式输出日期; (3)设置日期函数,从键盘输入年、月、日。 输入描述: 一行,三个整数,用空格分隔,分别表示年、月、日。 输出描述: 一行,用“日/月/年”格式输出日期。

题目截图:

(二)思路
1、C++的写法

以下是用 C++ 实现的代码,因为 C 语言不支持类(class)的概念,而题目中明确要求定义类 TDate ,所以使用 C++ 来完成:

代码语言:javascript
复制
#define  _CRT_SECURE_NO_WARNINGS  1

#include <iostream>
using namespace std;

class TDate
{
private:
    int Month;
    int Day;
    int Year;

public:
    // 带有默认形参值的构造函数
    TDate(int year = 0, int month = 0, int day = 0) : Year(year), Month(month), Day(day) {}

    // 输出日期函数,按“日/月/年”格式输出
    void showDate()
    {
        cout << Day << "/" << Month << "/" << Year << endl;
    }

    // 设置日期函数,从键盘输入年、月、日
    void setDate()
    {
        cin >> Year >> Month >> Day;
    }
};

int main()
{
    TDate date;
    date.setDate();
    date.showDate();
    return 0;
}

代码说明 1、类的定义: TDate 类包含私有成员 Month 、 Day 、 Year 和公有成员函数。 2、构造函数:使用默认参数,初始化日期的年、月、日。 3、showDate 函数:按“日/月/年”格式输出日期。 4、setDate 函数:从键盘输入年、月、日并设置到对象中。 5、主函数:创建 TDate 对象,调用 setDate 设置日期,再调用 showDate 输出日期。

2、C的写法

如果必须用 C 语言实现(不使用类),可以用结构体和函数模拟,以下是 C 语言版本:

代码语言:javascript
复制
#define  _CRT_SECURE_NO_WARNINGS  1

#include <stdio.h>

// 定义日期结构体
typedef struct 
{
    int Year;
    int Month;
    int Day;
} TDate;

// 初始化日期(模拟构造函数)
void initDate(TDate* date, int year, int month, int day) 
{
    date->Year = year;
    date->Month = month;
    date->Day = day;
}

// 输出日期,按“日/月/年”格式
void showDate(TDate* date) 
{
    printf("%d/%d/%d\n", date->Day, date->Month, date->Year);
}

// 设置日期,从键盘输入年、月、日
void setDate(TDate* date) 
{
    scanf("%d %d %d", &date->Year, &date->Month, &date->Day);
}

int main() 
{
    TDate date;
    // 初始化日期(使用默认值 0,0,0)
    initDate(&date, 0, 0, 0);
    setDate(&date);
    showDate(&date);
    return 0;
}

C 语言版本说明: 1、结构体:用 TDate 结构体存储年、月、日; 2、函数模拟类成员: initDate 、 showDate 、 setDate 函数操作结构体数据;; 3、主函数:创建结构体对象,调用函数完成设置和输出。

总结:

这里我们根据题目要求(面向对象、类的定义),还是更推荐使用 C++ 版本。如果是纯 C 环境,也可使用 C 语言版本。


结尾

【C语言刷题12天IO强训】到这里就全部结束了,感谢uu们的支持和鼓励!

往期回顾:

【C语言刷题】第十一天:加量加餐继续,代码题训练,融会贯通IO模式

【C语言刷题12天IO强训】到这里博主已经写了十二篇了,列出来有水字数嫌疑,就只放第十篇的网址,博主把专栏的前九篇的网址都放在C语言刷题(十)的【往期回顾】了,点击文章下面的【传送门】就可以看了,本文就只放第十篇,专栏链接挂在文章开头。

【C语言刷题】第十天:加量加餐继续,代码题训练,融会贯通IO模式

结语:本篇文章带大家刷了十二道题目,大家认真思考一下,结合知识点就能想出来,大家一定要及时回顾前面刷过的题目。本文到这里就结束了,希望对友友们有所帮助。本文的代码相比起之前的题目,难度上加深了很多,大家要上手操作,本文中的代码题难度上和前面比整体是偏难的,从前面开始,博主控制了难度,这样友友们才能比较丝滑地上手敲下去。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正文
    • 一、小乐乐查找数字
      • (一)题目描述
      • (二)代码演示
    • 二、KiKi学程序设计基础
      • (一)题目描述
      • (二)代码演示
    • 三、KiKi求质数个数
      • (一)题目描述
      • (二)代码演示
    • 四、KiKi去重整数并排序
      • (一)题目描述
      • (二)两种思路
    • 五、KiKi学结构体和指针
      • (一)题目描述
      • (二)代码演示
    • 六、KiKi定义电子日历类
      • (一)题目描述
      • (二)思路
  • 结尾
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档