【C语言】编程初学者入门训练(14)

news2024/9/25 15:23:55

文章目录

  • 131. kiki学结构体和指针
  • 132. kiki定义电子日历类
  • 133. 圣诞树
  • 134. 超级圣诞树

131. kiki学结构体和指针

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

  • 输入描述:包括三行:

    • 第一行输入数据个数n (3≤n≤100);
    • 第二行依次输入n个整数,用空格分隔;
    • 第三行输入欲删除数据m。
  • 输出描述:包括两行:

    • 第一行输出完成删除后的单链表长度;
    • 第二行依次输出完成删除后的单链表数据。
  • 示例

输入:5
	1 2 2 3 4
	2
输出:3
	1 3 4
  • 代码实现:
#include <stdio.h>
#include <stdlib.h>

//链表结点的定义
struct Node
{
	int data;//数据域
	struct Node* next;//指针域
};

int main()
{	
	int n,i;
	scanf("%d",&n);
	struct Node* list = NULL;//指向链表的指针
	struct Node* tail = NULL;//指向链表尾部元素的指针	

	//接收n个数字,并尾部插入到单链表中	
	for(i = 0;i < n;i++)
	{
		int m = 0;
		scanf("%d",&m);
		struct Node* n = (struct Node*)malloc(sizeof(struct Node));
		n -> data = m;//往数据域存
		n -> next = NULL;

		if(NULL == list)//插入第一个元素
		{
			list = n;
			tail = list;//让尾指针指向当前结点
		}
		else//插入其他元素
		{
			tail -> next = n;//将下一个结点的地址赋尾指针的next域
			tail = tail -> next;//然后让尾指针指向下一个结点
		}
	}
	//获取要删除的元素
	int del;//要删除的元素
	scanf("%d",&del);//接收要删除的元素

	//删除链表中指定的元素
	struct Node* cur  = list;
	struct Node* prev = NULL;

	while(cur)
	{
		//找到了要删除的元素
		if(del == cur -> data)
		{
			//如果要删除的是第一个结点
			struct Node* pd = cur;//要先存着被删除的结点,防止找不到地址
			if(cur == list)
			{
				list = list -> next;//让list直接指向下一个结点
				cur = list;
			}
			else//删除的不是第一个结点
			{
				prev -> next = cur -> next;
				cur = prev -> next;
			}
			free(pd);
			n-- ;//删除了一个元素长度就变小一点
		}
		else//找不到
		{
			prev = cur;//prev始终记录cur指针的前一个结点的位置
			cur = cur -> next;
			//没找到自然是让指针指向下一个结点继续找
		}
	}
	printf("%d\n",n);//删除了结点之后的单链表长度
	
	//输出完成单链表删除操作后的单链表数据
	cur = list;//找到链表的起始位置
	while(cur)//知道cur变成空指针为止
	{
		printf("%d ",cur -> data);
		cur = cur -> next;
	}
	
	//释放链表-从头往后释放
	cur = list;
	struct Node* d = NULL;
	while(cur)
	{
		d = cur;
		cur = cur -> next;
		free(d);
	}

	list = NULL;//变成空链表了
	
	return 0;
}

132. kiki定义电子日历类

  • 问题描述:KiKi学习了面向对象技术,学会了通过封装属性(变量)和行为(函数)定义类,现在他要设计一个电子日历类TDate。
    它有3个私有数据成员:Month,Day,Year和若干个公有成员函数,要求:
    1. 带有默认形参值的构造函数,默认值为0, 0, 0;
    2. 输出日期函数,用“日/月/年”格式输出日期;
    3. 设置日期函数,从键盘输入年、月、日。
  • 输入描述:一行,三个整数,用空格分隔,分别表示年、月、日。
  • 输出描述:一行,用“日/月/年”格式输出日期。
  • 示例
    • 输入:2019 12 30
    • 输出:30/12/2019
  • 代码实现
#include <iostream>
using namespace std;
class TDate
{
private:
    int Year;
    int Month;
    int Day;
public:
    TDate(int year=0, int month=0, int day = 0)
   {
        Year = year;
        Month = month;
        Day = day;
   }
    void Print()
   {
        cout<<Day<<"/"<<Month<<"/"<<Year<<endl;
   }
};
int main()
{
    int year = 0;
    int month = 0;
    int day = 0;
    cin>>year>>month>>day;
    TDate d(year, month, day);
    d.Print();
    return 0;
}

133. 圣诞树

  • 问题描述:今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。
  • 输入描述:输入圣诞树的高度h,1<=h<=100
  • 输出描述:输出对应的圣诞树
  • 示例1
输入:1
输出:
  *  
 * * 
* * *
  *

说明:

在这里插入图片描述

  • 示例2
输入:2
输出:
     *     
    * *    
   * * *   
  *     *  
 * *   * * 
* * * * * *
     *
     *

说明:

在这里插入图片描述

  • 示例3
输入:3
输出:
        *  
       * * 
      * * *
     *     *  
    * *   * * 
   * * * * * *
  *     *     *  
 * *   * *   * * 
* * * * * * * * *
        *
        *
        *

说明:

在这里插入图片描述

  • 代码实现
#include <stdio.h>
int main()
{
    int num;
    scanf("%d",&num);
    
    for(int i = 1; i <= 3 * num; i++)
    {
        for(int j = 0; j < 3 * num - i; j++)
        {
            printf(" ");
        }
        int cnt = 0;
        for(int k = 0; k < ((i + 2) / 3); k++)
        {
            if(i % 3 == 0)
            {
                cnt = 3;
            }
            else 
            {
                cnt = i % 3;
            }
            for(int p = 0; p < cnt; p++)
            {
                printf("* ");
            }
            for(int p = 0; p < 3 - cnt; p++)
            {
                printf("  ");
            }
        }        
        printf("\n"); 
    }
    for(int i = 0; i < num; i++)
    {
        for(int j = 0; j < 3 * num - 1; j++)
        {
            printf(" ");
        }
        printf("*\n");
    }
    return 0;
}

134. 超级圣诞树

  • 问题描述:今天是圣诞节,牛牛要打印一个漂亮的圣诞树送给想象中的女朋友,请你帮助他实现梦想。
    输入描述:输入圣诞树的大小 1≤n≤8
  • 输出描述:输出对应的圣诞树
  • 示例1
输入:1
输出:
  *
 * *
* * *
  *

说明:

在这里插入图片描述

  • 示例2
输入:2
输出:
     *
    * *
   * * *
  *     *
 * *   * *
* * * * * *
     *
     *

说明:

在这里插入图片描述

  • 示例3
输入:3
输出:
           *
          * *
         * * *
        *     *
       * *   * *
      * * * * * *
     *           *
    * *         * *
   * * *       * * *
  *     *     *     *
 * *   * *   * *   * *
* * * * * * * * * * * *
           *
           *
           *

说明:

在这里插入图片描述

  • 示例4
输入:4
输出:
                       *
                      * *
                     * * *
                    *     *
                   * *   * *
                  * * * * * *
                 *           *
                * *         * *
               * * *       * * *
              *     *     *     *
             * *   * *   * *   * *
            * * * * * * * * * * * *
           *                       *
          * *                     * *
         * * *                   * * *
        *     *                 *     *
       * *   * *               * *   * *
      * * * * * *             * * * * * *
     *           *           *           *
    * *         * *         * *         * *
   * * *       * * *       * * *       * * *
  *     *     *     *     *     *     *     *
 * *   * *   * *   * *   * *   * *   * *   * *
* * * * * * * * * * * * * * * * * * * * * * * *
                       *
                       *
                       *
                       *

说明:

在这里插入图片描述

  • 解题思路:实在搞不定,看的题解。
    1. 定义二维数组ch[最大行数][最大列数],并初始化为n=1时的内容char ch[400][800] = {" * ", " * * ", “* * *”},还有现在三角的行数row=3,列数col=5

    2. 最外层循环 n-1 次。

    3. 将现在的三角复制到左下角和右下角。

    4. 清除原来左上角的三角。

    5. 将左下角的三角复制到上一层的中间位置。

    6. 设置新三角的行数row=row*2,列数col=col*2+1,完成了一次循环,跳到第2步。

    7. 根据row和col打印出来。

    8. 打印树干。

  • 代码实现
#include <stdio.h>
int main() {
    int n;
    scanf("%d", &n);
    int i, j, k;
    int row = 3;
    int col = 5;
    // 行数 = 3 * pow(2,n-1) 列数 = 5 * pow(2,n-1)
    char ch[400][800] = {"  *  ", " * * ", "* * *"};
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < row; j++) {
            for (k = 0; k < col; k++) {
                ch[j + row][k] = ch[j][k]; // 左下角的图形复制
                ch[j + row][k + 1 + col] = ch[j][k];
            }
        }
        // 清空原来的三角位置
        for (j = 0; j < row; j++) {
            for (k = 0; k < col; k++)
                ch[j][k] = ' ';
        }
        // 将左下角的三角复制到两个中间去
        for (j = 0; j < row; j++) {
            for (k = 0; k < col; k++)
                ch[j][k + row] = ch[j + row][k];
        }
        row *= 2;           // 当前的行数
        col = col * 2 + 1;  // 当前的列数
    }
    // 打印出来
    for (j = 0; j < row; j++) {
        for (k = 0; k < col; k++) {
            if (ch[j][k] == '*')
                printf("%c", ch[j][k]);
            else
                printf(" ");
        }
        printf("\n");
    }
    // 打印树干
    for (j = 0; j < n; j++) {
        for (k = 0; k < row - 1; k++)
            printf(" ");
        printf("*\n");
    }
    return 0;
}

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

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

相关文章

【人脸检测】Yolov5Face:优秀的one-stage人脸检测算法

论文题目&#xff1a;《YOLO5Face: Why Reinventing a Face Detector》 论文地址&#xff1a;https://arxiv.org/pdf/2105.12931.pdf 代码地址&#xff1a;https://github.com/deepcam-cn/yolov5-face 1.简介 近年来&#xff0c;CNN在人脸检测方面已经得到广泛的应用。但是许多…

【C++的OpenCV】第一课-opencv的间接和安装(Linux环境下)

第一课-目录一、基本介绍1.1 官网1.2 git源码1.3 介绍二、OpenCV的相关部署工作2.1 Linux平台下部署OpenCV一、基本介绍 1.1 官网 opencv官网 注意&#xff1a;官网为英文版本&#xff0c;可以使用浏览器自带的翻译插件进行翻译&#xff0c;真心不推荐大家去看别人翻译的&am…

过滤器和监听器

1、过滤器Filter 作用是防止SQL注入、参数过滤、防止页面攻击、空参数矫正、Token校验、Session验证、点击率统计等等&#xff1b; 使用Filter的步骤 新建类&#xff0c;实现Filter抽象类&#xff1b;重写init、doFilter、destroy方法&#xff1b;在SpringBoot入口中添加注解…

演示Ansible中的角色使用方法(ansible roles)

文章目录一、ansible 角色简介二、roles目录结构三、role存放的路径&#xff1a;配置文件ansible.cfg中定义四、创建目录结构五、playbook中使用rolesplaybook变量会覆盖roles中的定义变量六、控制任务执行顺序七、ansible—galaxy命令工具八、安装选择的角色1.从网上下载&…

使用vue3,vite,less,flask,python从零开始学习硅谷外卖(41-82集)

第41集&#xff1a;这里遇到个大坑&#xff0c;因为这种项目有很多页面&#xff0c;有时候有的页面忘了保存就会出错&#xff0c;还很难排查&#xff0c;浪费了我快半天的时间。可以把vscode的代码自动保存打开&#xff0c;以后就不会踩坑了。 第42集&#xff1a;没啥好说的。 …

判断字符串中的字符的类型isdecimal();isalpha();isdigit();isalnum()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断字符串中的字符的类型 isdecimal()&#xff1b;isalpha()&#xff1b;isdigit()&#xff1b;isalnum() [太阳]选择题 对于代码中isdecimal()和isalnum()输出的结果是? s "ABc123&…

亿级高并发电商项目-- 实战篇 --万达商城项目 十一(编写商品搜索功能、操作商品同步到ES、安装RabbitMQ与Erlang,配置监听队列与消息队列)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是小童&#xff0c;Java开发工程师&#xff0c;CSDN博客博主&#xff0c;Java领域新星创作者 &#x1f4d5;系列专栏&#xff1a;前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶 &#x1f4…

Sandboxie-沙箱软件-Plus版本(Qt)-主框架程序-SandMan.exe-创建语言文件-tr-Qt-语言国际化

文章目录1.功能介绍2.Qt语言国际化3.设置软件的语言版本4.作者答疑1.功能介绍 沙箱软件的增强版本采用Qt架构开发&#xff0c;核心模块与经典版本相同&#xff0c;本文主要介绍SandMan.exe这个主程序代码。在main.cpp这个入口函数里&#xff0c;有主窗口入口&#xff0c;如下所…

2.5|iot冯|方元-嵌入式linux系统开发入门|2.13+2.18

一、 Linux 指令操作题&#xff08;共5题&#xff08;共 20 分&#xff0c;每小题 4分&#xff09;与系统工作、系统状态、工作目录、文件、目录、打包压缩与搜索等主题相关。1.文件1.1文件属性1.2文件类型属性字段的第1个字符表示文件类型&#xff0c;后9个字符中&#xff0c;…

【物联网】智慧农业病虫害精准辨识竞赛思路及代码分享

来源&#xff1a;投稿 作者&#xff1a;LSC 编辑&#xff1a;学姐 比赛官网: https://www.dataglobal.cn/cmpt/signUpInfo200.html 任务描述 请参赛者设计智慧农业病虫害检测系统&#xff0c;给出一体化问题解决方案&#xff0c;鼓励参赛选手结合某一果园/农作物实际情况建立…

使用 URLSearchParams 解析和管理URL query参数

介绍 首先 URLSearchParams是一个构造函数&#xff0c;会生成一个URLSearchParams对象&#xff0c;参数类型&#xff1a; 不传 &#xff5c; string &#xff5c; object &#xff5c; URLSearchParams&#xff0c; 并且遇到特殊字符它会自动帮我们encode 和 decode const ur…

Java模块化概述

3 模块化 3.1 模块化概述 Java语言随着这些年的发展已经成为了一]影响深远的编程语言&#xff0c;无数平台,系统都采用Java语言编写。但是&#xff0c;伴随着发展&#xff0c;Java也越来越庞大&#xff0c;逐渐发展成为-门“臃肿” 的语言。而且&#xff0c;无论是运行个大型的…

Vulnhub 渗透练习(五)—— lazysysadmin1

环境搭建 下载链接 vmware 打开靶机&#xff0c;nat 网络适配&#xff0c;攻击机同样。 信息收集 一个一个的看过去&#xff0c;这边就不贴图了。 漏洞挖掘 用 kail 的 wpscan 扫一下 wordpress&#xff0c;没发现漏洞。 ┌──(geng㉿geng)-[~] └─$ wpscan --url http…

【Linux06-基础IO】4.5万字的基础IO讲解

前言 本期分享基础IO的知识&#xff0c;主要有&#xff1a; 复习C语言文件操作文件相关的系统调用文件描述符fd理解Linux下一切皆文件缓冲区文件系统软硬链接动静态库的理解和制作动静态编译 博主水平有限&#xff0c;不足之处望请斧正&#xff01; C语言文件操作 #再谈文件…

SQLSERVER2019安装步骤过程

第一步官网下载SQLSERVER软件包 目前官网只能下载最新版本2022版本。 通过迅雷下载网址 SQL Server 2019 Enterprise (x64) - DVD (Chinese-Simplified)企业版 ed2k://|file|cn_sql_server_2019_enterprise_x64_dvd_2bfe815a.iso|1632086016|58C258FF0F1D006DD3C1F5F17AF3E…

ELK_Elasticsearch环境搭建

目录 一、Windows安装elasticsearch 1、安装JDK 2、下载和解压 3、配置文件 4、启动 5、检查ES是否启动成功 6、浏览器访问 二、 Windows安装Kibana 一、Windows安装elasticsearch 1、安装JDK 安装JDK&#xff0c;至少1.8.0_73以上版本&#xff0c;验证&#xff1a;j…

dbForge Source Control for SQL Server 2.5.X Crack

SQL Server功能概述 的 dbForge 源代码管理 dbForge Source Control for SQL Server 是一个可视化的 SSMS 插件&#xff0c;具有简单易用的界面&#xff0c;可帮助您轻松跟踪 SQL Server 数据库对象中的更改内容、更改时间和原因。该工具使您能够将数据库连接到多个版本控制系统…

【Python学习笔记】40.Python3 SMTP发送邮件

前言 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则&#xff0c;由它来控制信件的中转方式。 Python3 SMTP发送邮件 python的smtplib提供了一种很方便的途径发送电子邮件。它对smtp协议进行了…

CSS基础选择器,你认识多少?

前言在上一文初识CSS中&#xff0c;我们了解到了其格式&#xff1a;选择器{ }在初步尝试使用时&#xff0c;我们笼统的直接输入了p { }以选择p标签来对其操作&#xff0c;而这一章节里&#xff0c;我们再进一步探索有关基础选择器的相关内容&#xff0c;理解选择器的作用。选择…

2019蓝桥杯真题平方序列(填空题) C语言/C++

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明想找到两个正整数 X 和 Y&#xff0c;满足2019<X<Y;2019^2, X^2, Y^2组成等差数列。 请你求出在所有可能的解中&#xff0c;XY 的最小值是多少&#xff1f…