栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

蓝桥杯-基础练习题(自我总结)(持续更新中...)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥杯-基础练习题(自我总结)(持续更新中...)

前言

        作为第一次参加蓝桥杯的小白,我特别想创建一个专门的文章来记录这几个月的练习过程,没怎么写过文章,所以文章内容会很呆板,再加上之前学习的c++差不多已经忘光了。希望各位大佬看到这篇文章时,可以为我提一些意见,这些意见就是我最大的鼓励!

        在练习的过程中难免会遇见对于我来说很有价值的问题,各位大佬可以忽略自我总结部分,因为主要是为我而写,就写的很差T T。

        在练习之前,需要选择一个编译器来提升代码的熟练度,这里我直接使用的是蓝桥杯提供的dev-cpp软件,当然也可以用VsCode,只要写全了头文件,对于训练过程没有太大的影响。

一、数列排序

问题:给定一个长度为n的数列,将这个数列按从小到大的顺序排列。(1<=n<=200)

#include 
#include 
#include *(data+j+1))
			{
				swap(*(data+j),*(data+j+1));
			}
		}
	}
	for(i=0;iMaxsize)
	{
		printf("请输入合法数组长!请重新输入:");
		scanf("%d",&num);
	}
	data=(int *)malloc(num*sizeof(int));
	for(int i=0;i>data[i];
	}
	Order(data,num);
	return 0;
}

结果:

本题总结:

  1. 在蓝桥杯的比赛中,使用的是老版软件Dev-cpp,因此在写c++时的头文件要齐全,如这道题中,原本我只写了的头文件,导致printf、scanf和malloc函数编译器无法识别,因此要写全所有的头文件!!!!
  2. 在想输入一串数组数据又不想只能用回车当间隔符,可以不使用scanf的标准输入,而使用cin输入流,因为cin中输入空格等空白符是不会记录下来的,因此不仅可以用回车还可以用空格、制表符等等。等待到所有的数组数据输入完成,回车就可以退出cin输入流。
  3. swap()函数在c中的algorithm.h头文件中,在c++中的iostream.h头文件中。swap()中函数的形参设为指针,然后将指针上对应的数值进行交换,地址上的值就会改变。由于传递的是两个变量的内存地址(指针)使得我们可以直接操作对应的值。
    void swap(int &a, int &b)
    {
        int temp = a;
        a = b;
        b = temp;
    }
    
  4. 冒泡排序学习

(原文:JS-Sorting-Algorithm/bubbleSort.md at master · hustcc/JS-Sorting-Algorithm · GitHub)

二、十六进制转八进制(本题代码内容参考他人,非原创)

问题:给定n个十六进制正整数,输出它们对应的八进制数。

#include 
#include 
#include 
#include 
using namespace std;
#define Maxsize 10
#define Minsize 1

int main()
{
	int num;
	cin >>num;
	for(int i=0;i>sixteen;
		for(int j=0;j 

 结果:

本题总结:

        这道题我在写时,原本以为它需要先转换成十进制,再从十进制转换成八进制,这个方法虽然没问题,但是在写代码时发现过于复杂(还是可以实现的!),后来参考别人写的代码时发现,他们使用的都是二进制作为中间变量,这样就简单很多,因为十六进制中需要四位二进制数,而八进制需要三位二进制数,这样只需要将被转换数变成二进制,并从二进制数中以3为单位取数,从而转换成八进制。

        但是要注意,这个方法需要检查二进制数是否为3的倍数,通过余数判断是否要在前面补零,余数为1时,说明还差两个凑齐3,补两个0;余数为2时,同理。

三、十六进制转十进制

问题:从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
	string sixteen;
    //注意一定要写longlong型,因为当输入FFFFFFFF时,会超出int等类型的范围!
	long long ten=0;
	string two;
	cin >>sixteen;
	for(int i=0;i 

结果:

 本题总结:

在第一次写这题时,我想因为是十进制,就和我们平时使用的数学计算的进制是一样的,但我没考虑到的是使用int、long int、double等都会显示不全,只有long long的范围才足够显示。

类型字节取值范围
signed char1-128 ~ +127
short int2-32768 ~ +32767
int4-2147483648 ~ +2147483647
long int4-2147483648 ~ +2141483647
long long int8-9223372036854775808 ~ 9223372036854775807
四、十进制转十六进制

问题:给出一个非负整数,将它表示成十六进制的形式。

#include 
#include 
#include 
#include 

using namespace std;

int main()
{
	unsigned int ten;
	unsigned int chushu;//暂存ten/16 
	unsigned int yushu;//暂存chushu%16
	string sixteen;
	scanf("%d",&ten);
	chushu=ten;
    //要特别注意ten=0的情况,因为我使用的while循环内需要chushu不为零!
	if(ten==0)
	{
		cout <<'0' < 

结果:

 本题总结:

        题目要求输入的是一个非负整数,因此使用unsigned int来限制,由于每除16表示十六进制的一位数,因此当非零十进制除16不为零时,就说明十六进制后面还有位数,直到除成零。但是这个条件是当输入的数是非零十进制数,因此还要再前面加一个特殊情况,当输入就是零本身时,十六进制也是输出零。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/715353.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号