奥赛学本第一单元.docx

上传人:b****1 文档编号:2385527 上传时间:2023-05-03 格式:DOCX 页数:34 大小:656.53KB
下载 相关 举报
奥赛学本第一单元.docx_第1页
第1页 / 共34页
奥赛学本第一单元.docx_第2页
第2页 / 共34页
奥赛学本第一单元.docx_第3页
第3页 / 共34页
奥赛学本第一单元.docx_第4页
第4页 / 共34页
奥赛学本第一单元.docx_第5页
第5页 / 共34页
奥赛学本第一单元.docx_第6页
第6页 / 共34页
奥赛学本第一单元.docx_第7页
第7页 / 共34页
奥赛学本第一单元.docx_第8页
第8页 / 共34页
奥赛学本第一单元.docx_第9页
第9页 / 共34页
奥赛学本第一单元.docx_第10页
第10页 / 共34页
奥赛学本第一单元.docx_第11页
第11页 / 共34页
奥赛学本第一单元.docx_第12页
第12页 / 共34页
奥赛学本第一单元.docx_第13页
第13页 / 共34页
奥赛学本第一单元.docx_第14页
第14页 / 共34页
奥赛学本第一单元.docx_第15页
第15页 / 共34页
奥赛学本第一单元.docx_第16页
第16页 / 共34页
奥赛学本第一单元.docx_第17页
第17页 / 共34页
奥赛学本第一单元.docx_第18页
第18页 / 共34页
奥赛学本第一单元.docx_第19页
第19页 / 共34页
奥赛学本第一单元.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

奥赛学本第一单元.docx

《奥赛学本第一单元.docx》由会员分享,可在线阅读,更多相关《奥赛学本第一单元.docx(34页珍藏版)》请在冰点文库上搜索。

奥赛学本第一单元.docx

奥赛学本第一单元

第一单元

C语言入门问题选编

第一课:

HelloWorld

1.DevC++的安装与使用

软件简介:

Dev-C++是一个Windows环境下C/C++的集成开发环境(IDE),它是一款自由软件,遵守GPL许可协议分发源代码。

它集合了MinGW等众多自由软件,并且可以取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作。

Dev-C++是NOI、NOIP等比赛的指定工具,缺点是Debug功能弱。

Dev-C++最新版本:

5.5.3。

Dev-C++使用MingW32/GCC编译器,遵循C++11标准,同时兼容C++98标准。

开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能,适合初学者与编程高手的不同需求,是学习C或C++的首选开发工具!

多国语言版中包含简繁体中文语言界面及技巧提示,还有英语、俄语、法语、德语、意大利语等二十多个国家和地区语言提供选择。

该软件采用Delphi开发。

Noip比赛使用环境是4.9.9.2。

下载该版本软件安装即可

 

2.第一个程序helloworld

启动devcpp后,新建源代码文件,将以下代码键入编辑界面

样例代码1.1.1:

基本模板

#include

usingnamespacestd;

intmain()

{

cout<<"helloworld";

return0;

}

在合适的位置保存源代码后(以d:

\1.cpp为例),点击下图中按钮:

如果编译成功则会出现下图提示:

此时1.cpp源文件会被编译成1.exe可执行文件,在命令行中执行该应用程序会出现如图结果:

 

学习建议:

1、正确安装DEVC

2、代码严格保证与本教材一致,全部使用英语输入

3、尝试修改代码,观察不同效果。

 

第二课:

入门第一题与代码评测

例题:

A+B问题

这是一个经典的入门问题,通过此问题,你可以学会如何使用oj评测系统。

【问题描述】

现在有两个实数,分别是A和B。

请你从命令行中读取A和B,计算它们的和A+B,并把它输出到文件中。

(保留到整数)

【输入格式】

第一行:

一个实数A

第二行:

一个实数B

【输出格式】

第一行:

一个整数C=A+B

【输入样例】

1

2

【输出样例】

3

 

思路分析:

这道题目的设计目的是希望选手理解c++语言如何读入数据域输出数据

例题代码1.2.1:

#include

usingnamespacestd;

intmain()

{

inta,b,c;//声明三个变量

cin>>a>>b;//读入两个数字分别赋值给变量a和b

c=a+b;//将a+b的结果赋值给c

cout<

return0;//程序结束

}

Oj链接:

https:

//www.vijos.org/p/1000

在评测系统上提交你的代码:

1)打开一个在线评判系统以smartoj为例,注册账号后,以注册的账号登录

2)进入题库

3)选择要解决的问题

4)点击提交评测,将自己的代码复制到文本框内,注意选择相应的语言,本章采用C++语言,点击评测

5)系统将会显示评测结果,评测结果将会被永久记录,可以在记录板块中查看

6)提示AC为通过该测试点WA为答案错误TLE为程序运行超时RTE为运行时错误CE为编译错误

7)使用oj的原则,用户需要在提交代码之前仔细思考自己的代码,实力的体现在于用户第一次提交的代码的成绩。

 

第三课:

数字类型变量与运算符

1)赋值与四则运算

i.学习建议:

结合参考c语言书籍,熟悉c++语言的基本运算符,将本学案中的代码操练一遍,会起到更好的效果。

ii.四则运算的样例

下面的几份代码清单简要的说明了c++语言的基本四则混合运算的性质:

样例代码1.3.1:

加减乘除与取模运算

#include

#include

usingnamespacestd;

intmain()

{

inta,b,c;//声明三个变量

cin>>a>>b;//读入两个数字分别赋值给变量a和b

c=a+b;//将a+b的结果赋值给c

cout<

c=a-b;//将a-b的结果赋值给c

cout<

c=a*b;//将a*b的结果赋值给c

cout<

 

doubled;//考虑小数情况声明一个浮点型变量d

d=a*1.0/b;//要注意为什么要乘以1.0

cout<

 

c=a%b;//求a除b的余数

cout<

return0;//程序结束

}

代码重点分析:

C++语言中除法的运算有些特别,运算时如果除号两边都是整型数字,则除号是会进行整除操作的,所以为了得到正确的结果,要乘以1.0进行精度提升操作。

endl可以当做是换行符的意思,其实远不止这点,但现在可以暂且这样想。

样例代码1.3.2:

除法的运算规则验证

#include

#include

usingnamespacestd;

intmain()

{

intn1,n2,n3,n4;

doubled1,d2,d3,d4;

n1=5/2;/*n1<-2*/

n2=5.0/2.0;/*n2<-2.5(赋值时舍弃小数点以后的部分)*/

n3=5.0/2;/*n3<-2.5(赋值时舍弃小数点以后的部分)*/

n4=5/2.0;/*n4<-2.5(赋值时舍弃小数点以后的部分)*/

d1=5/2;/*d1<-2*/

d2=5.0/2.0;/*d2<-2.5*/

d3=5.0/2;/*d3<-2.5*/

d4=5/2.0;/*d4<-2.5*/

cout<<"n1="<

cout<<"n2="<

cout<<"n3="<

cout<<"n4="<

cout<<"d1="<

cout<<"d2="<

cout<<"d3="<

cout<<"d4="<

return0;

}

运行结果:

n1=2

n2=2

n3=2

n4=2

d1=2.000000

d2=2.500000

d3=2.500000

d4=2.500000

 

i.针对训练

例题1.3.1:

平均数问题

【问题描述】

现在有两个实数,分别是A和B。

请你从命令行中读取A和B,计算它们的和A+B,并把它输出到文件中。

(保留到整数)

【输入格式】

第一行:

三个实数A,B,C

【输出格式】

第一行:

一个实数D=(A+B+C)/3

【输入样例】

123

【输出样例】

2

 

框架支撑与思路分析:

输入数据要正确,求平均数的数据类型要正确,请补全代码。

例题代码1.3.1:

#include

#include

usingnamespacestd;

intmain()

{

inta,b,c;//声明三个变量

//输入三个数字

//将结果赋值给d

cout<

return0;//程序结束

}

第四课:

利用if语句结构解决问题

1)If语句的模板

样例代码1.4.1:

基本if语句

#include

#include

usingnamespacestd;

intmain()

{

if(条件)

{

//代码块

}

else

{

//代码块

}

return0;

}

样例代码1.4.2:

多条件if语句块,elseif可多个

#include

#include

usingnamespacestd;

intmain()

{

if(条件)

{

//代码块

}

elseif(条件)

{

//代码块

}

else

{

//代码块

}

return0;

}

样例代码1.4.3:

单一if语句,else可不加

#include

#include

usingnamespacestd;

intmain()

{

if(条件)

{

//代码块

}

return0;

}

2)例题:

奇数判定

例题1.4.1:

奇数判定

这是一个经典的入门问题,通过此问题,你可以学会如何使用if分支结构

【问题描述】

现在有一个整数A,请告诉我这个数字是奇数还是偶数,奇数输出“Yes”偶数输出“No”

数据范围

0

【输入格式】

第一行:

一个整数A

【输出格式】

Yes或者No

【输入样例】

1

【输出样例】

Yes

 

例题代码1.4.1:

#include

#include

usingnamespacestd;

intmain()

{

inta;

cin>>a;

if(a%2==0)

{

cout<<"Yes"<

}

else

{

cout<<"No"<

}

return0;

}

 

3)非零的判断

例题1.4.2:

非零的判断

【问题描述】

现在有一个整数A,请告诉我这个数字是否是0,是输出“Yes”否则输出“No”数据范围0

【输入格式】

第一行:

一个整数A

【输出格式】

Yes或者No

【输入样例】

1

【输出样例】

No

例题代码1.4.2:

请自己补全代码

#include

#include

usingnamespacestd;

intmain()

{

inta;

cin>>a;

if()

{

cout<<"Yes"<

}

else

{

cout<<"No"<

}

return0;

}

8)成绩等级判定

例题1.4.3:

成绩等级判定

【问题描述】

大学中期末得分与等级关系如下:

等级区间

A90≤Score≤100

B80≤Score<90

C70≤Score<80

D60≤Score<70

E0≤Score<60

请设计程序对输入的总分进行评级

【输入格式】

输入只有一行包括一个整数score,满足[0,100],score∈Z

【输出格式】

只有一个字符A,B,C,D,E其中一个

【输入样例】

100

【输出样例】

A

 

例题代码1.4.3:

请自己补全代码

#include

#include

usingnamespacestd;

intmain()

{

inta;

cin>>a;//scanf("%d",&a);

if()

{

cout<<"A"<

}

elseif()

{

cout<<"B"<

}

elseif()

{

cout<<"C"<

}

elseif()

{

cout<<"D"<

}

else

{

cout<<"E"<

}

return0;

}

 

第五课:

For循环的使用技巧与实战解析

1)For循环的模板

样例代码1.5.1:

模板

#include

#include

usingnamespacestd;

intmain()

{

inti;//循环变量的声明

for(i=循环变量的初始值;i<=循环变量的终止值;i++)

{

//被循环执行的语句

}

return0;

}

2)输出10次hello的for循环

样例代码1.5.2:

三个版本功能一样,有细微区别,编程时要注意

#include

#include

usingnamespacestd;

intmain()

{

inti;//循环变量的声明

//版本一

for(i=1;i<=10;i++)

{

cout<<”hello”<

}

//版本二

for(i=0;i<10;i++)

{

cout<<”hello”<

}

//版本三

for(i=1;i<11;i++)

{

cout<<”hello”<

}

return0;

}

3)使用for循环求n个数字的和与平均值

样例代码1.5.3:

#include

#include

usingnamespacestd;

intmain()

{

inti;

ints=0;

inta;

doubleans;

for(i=1;i<=n;i++)

{

cin>>a;

s+=a;

}

d=s*1.0/n;

cout<

return0;

}

4)使用for循环求n个数字的最大值(打擂法)

样例代码1.5.4:

#include

#include

usingnamespacestd;

intmain()

{

inti;

inta;

cin>>a;

max=a;

for(i=2;i<=n;i++)

{

cin>>a;

if(max

{

max=a;

}

}

cout<

return0;

}

第六课:

While循环的特点与实战解析

1)While循环模板

样例代码1.6.1:

模板

#include

#include

usingnamespacestd;

intmain()

{

while(循环条件)

{

被重复执行的语句

}

return0;

}

2)While循环适用的场合

样例代码1.6.2:

求一个整数n的所有位数字之和

#include

#include

usingnamespacestd;

intmain()

{

intn;

cin>>n;

ints=0;

while(n!

=0)

{

s+=n%10;

n/=10;

}

cout<

return0;

}

 

第七课:

多重循环

1)九九乘法表

样例代码1.7.1:

九九乘法表

#include

#include

usingnamespacestd;

intmain()

{

for(inti=1;i<=9;i++)

{

for(intj=1;j<=9;j++)

{

cout<

}

cout<

}

return0;

}

2)质数判断第一版

样例代码1.7.2:

判断质数第一版给定一个整数a,请判断a是否是质数

#include

#include

usingnamespacestd;

intmain()

{

inta;

cin>>a;

intflag=1;

for(inti=2;i<=a-1&&flag==1;i++)

{

if(a%i==0)

{

flag=0;

}

}

if(flag==1)

cout<<”Yes”<

else

cout<<”No”<

return0;

}

第八课:

数组的使用方法

1.一维数组的声明与使用

什么是数组?

数目固定、类型相同的若干个变量的有序的集合。

为什么引入数组?

通过数组,可以方便地存储和处理许多同类型数据。

格式:

数据类型数组名[常量表达式];

例:

intscore[100];floatsalary[3];charname[4];

数组的存储特点:

在内存中占据一组连续的存储单元。

下标的取值范围:

0~数组元素个数-1

例:

intA[10]A的元素下标是从A[0]到A[9]

一维数组的初始化

例:

intarr[5]={9,8,7,6,5};

样例代码1.8.1:

一维数组的使用

用一维数组存放前20个斐波那契(Fibonacci)数并输出。

斐波那契数的第一和第二个数分别为0和1,从第三个开始,每个斐波那契数是前两个斐波那契数的和。

#include

usingnamespacestd;

intmain()

{

intfib[20]={0,1};//定义数组,并初始化

for(inti=2;i<20;i++)//通过循环依次访问数组元素

fib[i]=fib[i-1]+fib[i-2];//置当前元素为前两元素之和

for(inti=0;i<20;i++)//输出前20个斐波那契数

cout<

return0;

}

样例代码1.8.2:

一维数组的使用

某学校有若干名学生参加了100米短跑测试,成绩分别为13.6、14.8、12.0、12.7、15.6、13.4、14.9、12.6秒,求出其中最快和最慢的成绩。

#include

usingnamespacestd;

intmain()

{

doublescore[]={13.6,14.8,12.0,//100米短跑成绩

12.7,15.6,13.4,14.9,12.6},

max=score[0],//记录当前最慢成绩

min=score[0];//记录当前最快成绩

intlen=sizeof(score)/sizeof(double);//计算数组大小

for(inti=1;i

if(score[i]>max)max=score[i];

elseif(score[i]

cout<<"最快成绩:

"<

"<

return0;

}

2.二维数组的声明与使用须知

二维数组的定义:

数据类型数组名[常量表达式1][常量表达式2]

例:

inta[3][4];floatdata[4][4];

理解二维数组:

二维数组可以看作一种特殊的一维数组,它的每个元素又是一个一维数组。

二维数组在内存中的存储:

按行存放。

二维数组使用

引用数组元素的一般形式:

数组名[行标][列标]

访问二维数组的每个元素,一般通过二重循环。

例如:

intx[2][3];

for(inti=0;i<2;i++)

for(intj=0;j<3;j++)

x[i][j]=i*3+j+1;

二维数组的初始化

分行给二维数组赋值。

inta[2][3]={{1,2,3},{4,5,6}};

去掉行的界限赋初值。

inta[2][3]={1,2,3,4,5,6};

如果对数组的全部元素都赋初值可以省略第一维的大小。

inta[][3]={1,2,3,4,5,6};

也可只对部分元素赋初值而省略第一维大小,但应分行赋初值。

intb[][4]={{3,3,3},{},{1,3}};

样例代码1.8.3:

二维数组的使用

某超市有4个连锁店,定义二维数组存放各店2006年各个季度的销售额,计算各店一年的销售总额。

#include

voidmain()

{

doublesales[4][5]={0};

for(inti=0;i<4;i++)

{

cout<<"输入第"<

";

for(intj=0;j<4;j++)

{

cin>>sales[i][j];

sales[i][4]+=sales[i][j];

}

}

cout<<"一季度\t二季度\t三季度\t四季度\t总额\n";

for(i=0;i<4;i++,cout<

for(intj=0;j<5;j++)

cout<

return0;

}

9)筛选法求素数

样例代码1.8.4:

筛选法求素数

算法思路:

所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。

他是古希腊的著名数学家。

他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。

具体做法如下:

<1>先将1挖掉(因为1不是素数)。

<2>用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。

<3>用3去除它后面的各数,把3的倍数挖掉。

<4>分别用4、5…各数作为除数去除这些数以后的各数。

这个过程一直进行到在除数后面的数已全被挖掉为止。

例如找1~50的素数,要一直进行到除数为47为止(事实上,可以简化,如果需要找1~n范围内素数表,只需进行到除数为n^2(根号n),取其整数即可。

例如对1~50,只需进行到将50^2作为除数即可。

#include

#include

#include

usingnamespacestd;

intmain(){

intnum=100;

inta[101];

for(inti=0;i<=101;i++){

a[i]=i;

}

a[1]=0;

for(inti=2;i

for

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2