Hello,大家好!我是阿冰!在我的上一个“不忘初心”的博客中提到,过一周左右我要参加学校组织的程序设计大赛,以及要准备蓝桥杯,我们学校的比赛题型也是参考蓝桥杯的题型,不管怎样,最重要的都是蓝桥杯,校赛也一直抱着学习总结的心态,为蓝桥杯做好准备,因此,打算出一个备战蓝桥杯的系列,利用这段时间冲一冲省奖,有同样打算的小伙伴可以关注这一系列,如果能帮到你,本人将感到无比荣幸。
首先说一下本人的学习情况吧,我是省一本大学一名大二的学生,专业是软件工程,大一学了c语言和数据结构,c++只会建项目,头文件和输入输出,哈哈哈,也就是典型的只学教材的大学生,不过好在基础还算扎实,c++中涉及c的部分基本是会的。
比赛最重要的是考察算法而非语言,语言只是一个载体,我的计划是通过刷题来学习算法,算法遇到知识盲点再回看语言,通过这种学习方式可以让备赛更高效,真正做到以赛促学。好,话不多说,我们直接上干货~
我蓝桥杯报的是大学B组c/c++组,简单来说就是可以用c语言写程序,也可以用c++写,不过还是推荐使用c++,因为c++的功能更强大,它是c语言的升级版,除了包含c的功能外,还提供了一些类库函数,此外还有面向对象的部分,可以让代码更简洁,因此很受竞赛选手青睐。
我使用的编译器是Dev-c++,当然Visual Studio也是个非常不错的选择,大家根据习惯进行选择即可。我们需要先对c和c++有个初步的区分,首先就是头文件的不同,上面是c的,下面是c++的
#include<stdio.h>
#include "iostream"
using namespace std;
然后就是输入输出格式有所不同, 以输入整数然后输出为例,下面是用c写的完整代码,附运行结果:
#include<stdio.h>
int main()
{
int num;
printf("请输入一个整数:\n");//输入提示
scanf("%d",&num);//输入数字
printf("%d",num);//输出数字
return 0;
}
然后下面是使用c++的代码,附运行结果:
#include "iostream"
using namespace std;
int main()
{
int num;
cout<<"请输入一个整数"<<endl;//输入提示
cin>>num;//输入整数
cout<<num;//输出
return 0;
}
在初步学习中,我们可以认为,除了以上两点不同外,其余都是一样的。在这里,我也是计划通过c语言的基本算法来带入到c++的算法,一是借此回忆起c的知识,进而打好c++的基础,二是找找感觉,提高算法编程能力。下面我们就直接使用c++来写程序啦!
#第一部分 选择结构
1、输入圆的半径,输出该圆的周长和面积。若半径小于0,提示“输入不合法”。
#include "iostream"
using namespace std;
#define PI 3.14
int main()
{
double r;
cout<<"请输入半径大小:";
cin>>r;
if(r<0)
{
cout<<"输入不合法!";
}
else
{
cout<<"周长为:"<<2*PI*r<<endl;
cout<<"面积为:"<<PI*r*r;
}
return 0;
}
这道题非常有代表性,首先定义了宏常量,方便后面使用,然后考虑到半径的合法问题,通过使用简单的选择结构,使程序功能更强大!
2、输入学生成绩,输出等级,规则如下:
90~100 A
80~89 B
70~79 C
60~69 D
不及格 E
要求:使用if和switch分别实现
方法一:if语句
#include "iostream"
using namespace std;
int main()
{
int score;
cout<<"请输入成绩:"<<endl;
cin>>score;
if(score<0||score>100)
{
cout<<"成绩输入不合法!"<<endl;
}
else
{
if(score>=90)
cout<<"A"<<endl;
else if(score>=80)
cout<<"B"<<endl;
else if(score>=70)
cout<<"C"<<endl;
else if(score>=60)
cout<<"D"<<endl;
else
cout<<"E"<<endl;
}
return 0;
}
方法二:switch语句
#include "iostream"
using namespace std;
int main()
{
int score;
cout<<"请输入成绩:";
cin>>score;
if(score>=0&&score<=100)
{
switch(score/10)//成绩取整
{
case 10:
case 9:cout<<"A"<<endl;break;
case 8:cout<<"B"<<endl;break;
case 7:cout<<"C"<<endl;break;
case 6:cout<<"D"<<endl;break;
default:cout<<"E"<<endl;
}
}
else
{
cout<<"成绩不合法!"<<endl;
}
return 0;
}
运行结果:
这道题使用了多条if语句以及if嵌套语句,很具有代表性,代码也是结构清晰,容易理解~
3、输入年、月,输出该月有多少天。( 1, 3, 5, 7, 8, 10, 12月,31天。
4, 6, 9, 11月,30天。2月, 闰年, 29天;平年, 28天。)
#include "iostream"
using namespace std;
int main()
{
int year,month,days;
cout<<"请输入年、月:";
cin>>year;
cin>>month;
if(month<1||month>13)
{
cout<<"数据不合法!"<<endl;
}
else
{
switch(month)
{
case 1:days=31;break; //注意break一定不能少!
case 2:
if(year%4==0&&year%100!=0||year%400==0) //区分闰年和平年
days=29;//闰年
else
days=28;//平年
break;
case 3:days=31;break;
case 4:days=30;break;
case 5:days=31;break;
case 6:days=30;break;
case 7:days=31;break;
case 8:days=31;break;
case 9:days=30;break;
case 10:days=31;break;
case 11:days=30;break;
case 12:days=31;break;
}
cout<<year<<"年"<<month<<"月有"<<days<<"天"<<endl;
}
return 0;
}
这道题的核心算法就是闰年的判断条件,这个非常重要!
4、给一个不多于3位的正整数,要求按逆序输出各位数字。
例如,原数是321,应输出123;原数是45,应输出54。
#include "iostream"
using namespace std;
int main( )
{
int num,n1,n2,n3;
cout<<"请输入一个不多于3位的正整数:"<<endl;
cin>>num;
if(num<0||num>999)
{
cout<<"数据不合法!"<<endl;
}
n3=num/100; /*分解出百位*/
n2=num%100/10; /*分解出十位*/
n1=num%10; /*分解出个位*/
if (n3!=0)
cout<<"这是一个三位正整数,逆序输出结果为:"<<n1*100+n2*10+n3<<endl;
else if (n2!=0)
cout<<"这是一个二位正整数,逆序输出结果为:"<<n1*10+n2<<endl;
else
cout<<"这是一个一位正整数,逆序输出结果为:"<<n1;
return 0;
}
这道题的核心算法是对于一个给定的三位数,分解出百位、十位、个位的数字,这是解题的关键!
好了,今天的分享就先到这里啦,希望可以对你有所帮助,我们下期再见,拜拜~