C 概念基础讲解1

更新时间:2023-09-29 13:09:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

我们的目的:

建立程序化思维,培养数学问题的计算机求解能力,提高信息技术应用水平,增强自主学习与团队协作学习能力,培养能在青少年信息学奥林匹克竞赛中取得优异成绩的选手。

二、编程训练以不影响文化课学习为前提,需取得父母的支持。

我们这项活动需要长期的兴趣与坚持。要在较长的时间内定时参与学习。所以需要你做到两点: 第一,不影响文化课学习,一定要在学有余力的前提下,把多余的时间用来进行本课程的学习。

第二,取得父母的理解与支持。我们这项活动,是对你的文化课学习、信息技术能力、甚至未来的职业定向都是有帮助的,所以需要你向父母解释清楚:使用电脑是整型 int(-32768—32768)、long(-2147483648—2147483648)

浮点型 float(单精度3.4E-38—3.4E38) double(双精度1.7E-308—1.7 E308) 字符型 char(-128—127) 字符串型 string 布尔型 bool 例:

int a,b;//定义两个整数变量

?//?是注释说明,后面的内容不会被计算机运行 double a,b;// 定义两个实数变量(带小数那种) char a,b;//定义两个字符型变量(用单引号括起来的一个数据,如’a’,’1’,’/’)

string a;// 定义一个字符串型变量(用双引号括起来在编写程序,是在学习,而不是在玩,在打游戏。 程序学习平台 code.org

C++程序设计基础讲解 目录:

第一章 程序的基本概念和语法规则 一、概念

二、程序的四个基本组成部分 三、程序的编写与运行 附录

一、需记忆的英语 二、常见调试错误信息 三、文件的处理

第二章 程序的基本结构 一、顺序结构 二、选择结构 三、循环结构

简单算法与常用技巧 练习

一、看程序写结果 二、专项编程练习 三、综合编程练习

第一节 程序的基本概念与语法规则

一、概念

程序是为了解决某一特定问题,用某一种计算机语言编写的指令序列。

程序设计=算法+程序语言

二、程序的基本组成部分

C++的程序由函数组成,每个程序需要有主函数。 函数内是函数体部分,一个程序的函数体通常可分成常变量说明部分、输入部分、计算部分、输出部分四块儿。 程序的必备部分,也是必背部分: #include using namespace std; int main() { }

1、常变量说明部分

1)变量:在程序中可以发生变化的量 变量定义格式:

数据类型 变量名1,变量名2,…,变量名n; 基本数据类型:

的一串字符,如?hello, Tom.?)

bool a; // 定义一个布尔型变量(表示逻辑真和逻辑假,只有两个值,1表示真,0表示假)

2)常量:在程序中不可以发生变化的量 常量定义格式:

const 数据类型 常量名; 例:const int a=30;

3)变量和常量的命名规则:

以字母开头,后面由字母、数字或下划线组成,区分大小写(即A和a代表的是两个不同的量)

C++规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线。下面列出的是合法的标识符,也是合法的变量名:

sum, average, total, day, month, Student_name, tan, BASIC, li_ling

在C++中,大写字母和小写字母被认为是两个不同的字符。因此,sum和SUM是两个不同的变量名。

在C++语言中,要求对所有用到的变量作强制定义,也就是必须?先定义,后使用?

2、输入部分 输入语句格式:

cin>>变量1>>变量2>>…>>变量名n;

cin语句的执行过程:程序会等待用户从键盘输入对应数目的数据,用户输入完数据并回车后,cin从输入流中取得相应的数据并依次传送给其后的变量。

例:cin>>a>>b;//从键盘读入两个值顺序给变量a和变量b

例1.1 输出一行字符: ?This is a C++ program.?。 程序如下(?//?符号引导的为注释,其后内容是写给人看的,机器不会编译执行其中的内容):

#include //包含头文件iostream,是i-o-stream 3个词的组合,即输入输出流的意思,含cin,cout等语句

using namespace std; //使用命名空间std,C++标准库(即#include命令行)中的类和函数是在命名空间std中声明

int main( ) //用main代表?主函数?的名字。C++程序必须有一个main函数。main前面的int是声明函数类型为整型

{ //函数体是由大括号{ }括起来的

cout<<″This is a C++ program.″; //cout为c-out两个词组合,<<为插入运算符,合起来为输出语句

1

return 0; //向操作系统返回一个零值。如果程序不能正常执行,则会自动向操作系统返回一个非零值,一般为-1。 }

在运行时会在屏幕上输出以下一行信息: This is a C++ program.

例2.1 将字符赋给整型变量。 #include using namespace std; int main( )

{ int i,j; //i和j是整型变量

i=′A′; //将一个字符常量赋给整型变量i

j=′B′; //将一个字符常量赋给整型变量j

cout<

执行时输出 65 66

字符数据在计算机中是以ASCII码存储的,它的存储形式就与整数的存储形式类似。这样,在C++中字符型数据和整型数据之间就可以通用。一个字符数据可以赋给一个整型变量,反之,一个整型数据也可以赋给一个字符变量。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。’A’的ASCII码为65,’B’为66。

可以看到:在一定条件下,字符型数据和整型数据是可以通用的。但是应注意字符数据只占一个字节,它只能存放0~255范围内的整数。

例2.2 字符数据与整数进行算术运算。下面程序的作用是将小写字母转换为大写字母。 #include using namespace std; int main( )

{char c1,c2; //定义c1,c2为字符型数据,ASCII码表中’A’~’Z’排在’a’~’z’的前面,中间还间隔了六个字符 c1=′a′; c2=′b′;

c1=c1-32; //减去32后刚好得到对应的小写字母 c2=c2-32;

cout<

运行结果为 A B

注意:″a″和′a′代表不同的含义,″a″是字符串常量,′a′ 是字符常量。″a″占两个字节,编译系统会在字符串最后自动加一个′\0′作为字符串结束标志。

3、计算部分 1)赋值语句格式

赋值语句:变量名 = 表达式; 注意:

○1?=?左边必须是一个变量名。

2若? = ? 两边变量类型不同,在赋值时要进行类型转换,转换原则:根据左边变量的类型转换。 例: a=5; a=a+1;

第一句是将5赋给变量a

第二句是将a的值加1后赋给变量a 2)算术表达式

1算术运算符和算术表达式 算术运算符:

+ - *(乘) /(除) %(取余) 使用注意:

(1) 除%仅用整形外,其余可用于整型和浮点型。+

和-还可用于字符型。

(2) 整型数相处结果为一个整商。 (3) 字符型可作加减运算。 (4) 运算符的优先级。

算术表达式:

用算术运算符连接起来的式子是算术表达式 两个整数相除结果为整数: 8/4=2 8/5=1 两个浮点数相除结果为浮点数: 8.0/5.0=1.6

整数才可求余,余数的符号与左边数的符号相同。 8%4=0 8%5=3 优先级与结合性

() * / % + - 表达式的书写格式:

数学表达式 合法的C++表达式 a×(-b) a*(-b) ab-cd a*b-c*d 2(b+y/c)+8 2*(b+y/c)+8 x2

+3x+2 x*x+3*x+2

求平方根 sqrt(b*b-4*a*c) 注意:

表达式中的括号只能是()

表达式中的算术运算符不能够省略

例如,下面是一个合法的C++算术表达式: a*b/c-1.5+′a′

在表达式中常遇到不同类型数据之间进行运算,如 10+′a′+1.5-8765.1234*′b′

在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换时如下图,由低到高转换。

如10+′a′+1.5,先运算10+′a′,’a’转换为整型,值为97,结果为107,107+1.5,转换为实型double,108.5

在C和C++中,常在表达式中使用自增(++)和自减(--)运算符,他们的作用是使变量的值增1或减1,如 ++i(在使用i之前,先使i的值加1,如果i的原值为

2

3,则执行j=++i后,j的值为4) --i (在使用i之前,先使i的值减1,如果i的原值为3,则执行j=--i后,j的值为2) i++ (在使用i之后,使i的值加1,如果i的原值为3,则执行j=i++后,j的值为3,然后i变为4)

i--(在使用i之后,使i的值减1,如果i的原值为3,则执行j=i--后,j的值为3,然后i变为2)

++i是先执行i=i+1后,再使用i的值;而i++是先使用i的值后,再执行i=i+1。

正确地使用++和--,可以使程序简洁、清晰、高效。 ++i:i自增1后再参与其它运算(先增后用)。 --i: i自减1后再参与其它运算(先减后用)。 i++:i先参与运算后,i的值再自增1(先用后增)。 i--: i先参与运算后,i的值再自减1(先用后减)。 例:输入两个整数,输出它们的和。 样例输入:3 6 样例输出:9

#include using namespace std; int main(){ int a,b,c; cin>>a>>b;

c=a+b;

cout << c <

4、关系运算符 !)种类:6个关系运算符:<、>、<=、>=、==、!=。 前4个运算符优先级高于后2个。

2)使用注意:关系运算符组成的表达式的值是逻辑值。真为1,假为0.

相等运算符是==,不要写成= 5、输出部分

1)输出语句格式:

cout<<输出项1<<输出项2<<…<<输出项n; ○

1?输出项?可以是变量、常量或表达式。 ○

2由双引号引起来的内容,如不是特殊规定,则是属于字符串类型,引号里面的内容会原样输出。 ○3在cout中,用endl实现输出数据换行 例: a=5; b=6;

cout<<5+6<前面两句是赋值语句,给变量a和b赋值 第3句有3个输出项,输出11,空格和30

第4句有2个输出项,输出a*b的值30后输出换行符号

2)指定位数输出

○1指定浮点数输出位数 例:

#include //调用格式库 double a=3.14159;

cout<setprecision是设置浮点数从左起第一个不为零的数位开始计算到右边最后一个不为零的数位为止的有效数位的位数的最大值,并进行四舍五入。 ○2指定小数位数的输出

#include //调用格式库

cout<6、再说函数体的框架

一般可分成常变量说明部分、输入部分、计算部分、输出部分

本题用a来表示第一个整数,b来表示第二个整数,c来存储两个整数的和 cin>>a>>b;是输入部分

c=a+b;是计算部分(除了赋值语句还可能有分支和循环语句)

cout << c <

1) 函数的四部分框架不是绝对的,只是为了初学者能够清晰地书写程序。实际的程序可以灵活变通。 2) c++函数体的每一条语句后要加上?;?号

3)system(?pause?);本句的作用是暂停,往往用于观察程序运行的结果

4)return 0; 向主函数返回一个0值,程序一般会向调用函数返回数据,实际编程的时候在主函数中不写该句也不会有问题(在正式比赛时必须写)。 例1.2 求a和b两个数之和。 可以写出以下程序:

// 求两数之和 (本行是注释行) #include //预处理命令 using namespace std; //使用命名空间std

int main( ) //主函数首部 { //函数体开始 int a,b,sum; //定义变量,定义a,b,sum为整型变量

cin>>a>>b; //输入语句,cin为c-in的组合,>>为提取运算符,运行时等待使用者输入两个数据,分别给a和b

sum=a+b; //赋值语句 cout<<″a+b=″<

return 0; //如程序正常结束,向操作系统返回一个零值

} //函数结束 如果在运行时从键盘输入 123 456↙ 则输出为 a+b=579

三、程序的编写与运行

程序的编写可以在记事本等文本编辑软件中进行,但一般用专门的IDE(集成开发环境)去进行编辑、编译、运行和调试。

Dev-Cpp是一种Windows下的编写C/C++程序的IDE,bashu.cn网站左下方?资源下载?处点击?更多?,下方的常用软件处有devC++软件可下载。

3

安装后选择Chinese转成中文界面。 1)新建程序文件

上方工具栏的第三个按钮是新建源代码按钮,单击就可新建一个程序文件。 2)常用操作与设置

工具菜单下编辑器属性面板中可进行一些设置提高编辑效率。

?基本?下将高亮匹配括号打上勾 使用语法加亮打上勾 ?显示?下将行号打上勾

编辑器的字体大小可选到14以上

?代码?下方有一项缺省源,单击后将下面这段代码输入后确定,以后新建程序文件时这段代码会自动出现,

不借用第三个变量的方法 cin>>a>>b;

a=a+b; b=a-b; a=a-b;

2、指定小数位数的输出

#include //调用格式库

cout<3、数字的分离

节省时间

#include using namespace std; int main(){

system(?pause?); return 0; }

搜索菜单下有替换功能,批量修改时比较有用

一些有用的快捷键:Ctrl+N(新建文件),Ctrl+Y(删除一行),Ctrl+R(查找替换)

程序编写完毕后按F9键可以编译保存并运行。

第二节 程序的基本结构

程序有三种基本结构:顺序、分支和循环,程序都可以用这三种结构来表示 一、顺序结构

函数体的每一句会顺序执行。

基本思路是:把需要计算机完成的工作分成若干个步骤,然后依次让计算机执行。注意这里的?依次?二字——步骤之间是有先后顺序的。这部分的重点在于计算。

例:鸡兔同笼

已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。 样例输入:14 32 样例输出:12 2 【分析】

将总只数乘以4后,每只鸡的腿被多算了2只,减去总腿数除以2后得到的就是鸡的只数,用a来表示鸡的只数的话则a=(4*n-m)/2,程序如下: int main(){

int a, b, n, m; cin>>n>>m; a = (4*n-m)/2; b = n-a;

cout<

单纯顺序结构的函数体可以写成常变量说明部分、输入部分、赋值部分、输出部分

简单算法与常用技巧

1、两个数的值的交换 借用第三个变量来实现 cin>>a>>b; c=a;a=b;b=c;

输入一个四位数,将各个位上的数分离出来,当然如果用字符串来处理也行 cin>>a; b=a; c=a/10; d=a/100; e=a/1000;

练习(顺序)

一、选择

1、下列关于标示符的描述中,错误的是

A.标示符是由字母、下划线和数字组成的字符序列,并且应以字母和下划线开头。

B.标示符中字符个数是不受限制的。 C.标示符中大小写字母是不加区别的。 D.用户不能使用关键字做标示符

2、下列各种数据中,数据长度最长的是: A.char B.long C.double D.float

3、已知int a=1,b=2;下列表达式中非法的是 A.a+=b B.b%a C.2*a=b D.a=b—

4、下列给出的字符串常量,非法的是

A.?? B.?a8? C.?m??n? D.?99?

二、看程序写结果。

int main(){//题1 int a,b,c; cin>>a>>b; c=a*a-b*b;

cout<

输入:5 4

int main(){//题2

int a,b,c; cin>>a>>b; c=a;a=b;

b=c;cout<

输入:5 4

int main(){//题3 int a; cin>>a;

4

a=a+20; a=a/3; cout<

输入:110

int main(){//题4 int t; cin>>t; t=t*100; t=t % 3; cout<

输入:4

int main(){//题5 int a,b; cin>>a>>b; a=a+b; b=a-b; a=a-b;

cout<

输入:5 4

int main(){//题6 int n,a,b,c; cin>>n; a=n % 10;

b=n / 10 % 10; c=n / 100; cout<

输入:123

#include//题7 int main(){

double area,r,pi=3.14159265; cin>>r;

area=pi*r*r;

cout<输入:1

三、专项编程练习:顺序结构

1000.求两个整数和

题目说明:计算 a+b ,其中a,b都是整数。 输入说明:给出a,b (0 <= a,b <= 1000) 输出说明:a与b的和

样例输入:1 2 样例输出:3

1519、求商数和余数(程序文件名:quore)

【问题描述】输入a,b两个整数(1= < a,b <= 10000),编程求出a除以b得到的商和余数。

【输入说明】输入一行,只有两个整数。

【输出说明】输出只有一行,两个整数(中间有空格)。 【样例输入】7 3 【样例输出】2 1

1、仓库的库存(程序文件名:stock)

【问题描述】某仓库5月1日有粮食x吨,5月2日又调进y吨,5月3日卖出库存的三分之二,5月4日又调进库存的z倍粮食,问该仓库从5月1日到5月4日期间每天的粮食分别是多少吨?(输出每天的库存量)

【输入说明】输入3个整数,分别表示x,y,z

【输出说明】输出每天的库存量,中间用空格隔开 【样例输入】100 20 3

【样例输出】100 120 40 160

2、分糖问题(程序文件名:candy)

有三个小朋友甲乙丙。甲乙丙各有a,b,c粒糖果。现在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、丙三人各有多少粒糖果? 【输入说明】输入3个整数,分别表示a,b,c

【输出说明】输出甲乙丙最后的糖果数,中间用空格隔开 【样例输入】50 40 30 【样例输出】55 39 21

3、读书问题(程序文件名:read)

【问题描述】小明爱读课外书,第一天读了x页,以后每天要比前一天多读y页,最后一天读了z页,问共读了多少天? 【输入说明】只有一行共三个整数数据,分别表示x, y, z 【输出说明】输出一个数据,表示共读了多少天 【样例输入】12 6 48 【样例输出】7

4、蜜蜂飞行距离(程序文件名:bee)

【问题描述】小明和小王各骑一辆自行车,从相距A公里的两个地方,开始沿直线相向骑行。在他们起步的那一瞬间,一辆自行车车把上的一只小蜜蜂,开始向另一辆自行车径直飞去。它一到达另一辆自行车车把,就立即转向往回飞行。这只小蜜蜂如此往返,在两辆自行车的车把之间来回飞行,直到两辆自行车相遇为止。小明骑自行车的速度是每小时B公里,小王骑自行车的速度是每小时C公里,小蜜蜂的飞行速度是每小时D公里,那么,小蜜蜂总共飞行了多少公里。

【输入说明】只有一行共4个整数数据,分别表示A、B、C、D 【输出说明】输出一个数据,表示共飞行了多少公里。(保留一位小数)

【样例输入】120 10 15 20 【样例输出】96.0

1515、求圆的面积和周长(程序文件名:circle)

【问题描述】已知一个圆的半径(0<半径<=100),求该圆的面积和周长.令pi=3.1415926

【输入说明】输入只有一行,只有1个整数。

【输出说明】输出只有一行,先周长,后面积(中间用空格分开,都保留两位小数)。

【样例输入】1 【样例输出】6.28 3.14

1517.求三角形面积

题目说明:输入三角形的三边a、b、c(假设这三边可以构成一个三角形),求三角形的面积s?

输入说明:输入三角形的三边a、b、c(都为整数<= 1000) 输出说明:输出三角形的面积s(保留两位小数)。 样例输入:3 4 5 样例输出:6

提示:海伦公式求三角形面积,p=(a+b+c)/2

s=sqrt(p(p-a)(p-b)(p-c))//sqrt是求平方根的意思

5

case 7:d=8;break; case 8: case 9: case 10:

case 11:d=10;break; case 12:d=15;break; }

f=p*w*s*(1-d/100.0);

cout<<″freight=″<

运行情况如下:

please enter p,w,s:100 20 300↙ freight=588000

练习(分支)

一、选择

1、下列运算符中,优先级最低的是 A.<= B.!= C.&& D.||

2、下列运算符对中,优先级相同的是 A.+=,*= B.!,&& C.&,| D.>>,==

3、已知 int a=5;计算a-=a*=a+=a/a后,变量a的值是 A.0 B.1 C.2 D.3

4、下列关于表达式的描述中,错误的是

A.相同运算符组成的表达式的计算顺序都是从左到右的 B.任何一个合法的表达式都应该有确定的值和类型

C.关系表达式和逻辑表达式的值是逻辑值, 用1或0表示 D.逗号表达式的值和类型取决于组成该表达式的最后一个操作数的值和类型

5、已知 int i,j,k,a;i=j=k=0;a=10,运行下段程序后,a的值是 if(!i) ++a; else if(j); if(k) a=5; else a=8;

A.10 B.11 C.5 D.8

二、看程序写结果。

int main(){//题9 int a; cin>>a;

if (a%2==0) cout<

输入:5

int main(){//题10 int a,b,c;

cin>>a>>b>>c;

if (a

cout<

输入:4 9 7

int main() {//noip2005-p1

int a, b; cin>>a;

b = (a * (a * a)) + 1; if (b%3 == 0) b = b / 3; if (b%5 == 0) b = b / 5; if (b%7 == 0) b = b / 7; if (b%9 == 0) b = b / 9; if (b == 0) b = b / 11; if (b == 0) b = b / 13; if (b == 0) b = b / 15; cout<<(100*a-b) / 2; }

输入:10

int main(){ int a,b; a=b=1;

if (b!=0) a=10; cout<

cout<

三、专项编程练习:顺序结构

行驶了多远(程序文件名:s)

【问题描述】一辆汽车在公路上行驶的速度为 V m/s ,当行驶了t秒后,求小汽车行驶的路程S是多少米?已知v和 t,求s。【样例输入】2 9 【样例输出】18

矩形周长和面积(程序文件名:rec)

【问题描述】输入一个矩形的长和宽,求它的周长和面积。 【样例输入】9 2 【样例输出】22 18

7、阿基米德数字(程序文件名:arch)

【问题描述】所谓?阿基米德特性?是这样的一条性质:对任意两个整数a、b,保证b>a>0,总存在整数m,使得a*m>b 。 请编写一个程序,对输入的a、b,输出最小的m。 【样例输入】2 9 【样例输出】5

作业本问题(程序文件名:exercise)

【问题描述】四年级的时候,老师在课堂上出了一道题:小华和小青都有一些作业本。如果小华给小青a本,两个人的作业本就一样多;如果小青给小华b本,小华的作业本就是小青的c倍,问小华和小青共有多少个作业本。

【输入格式】输入为一行,依次为a、b、c三个整数 【输出格式】输出小华和小青一共有的作业本数量。 【样例输入】3 2 3 【样例输出】20

【数据范围】输入三个数为大于等于0和小于等于10000的整数

(二)选择结构

1518、求分段函数的值(程序文件名:func)

11

【问题描述】编程求解数学中的分段函数。 x+1 (当x>0) y=f(x)= 0 (当x=0) x-1 (当x<0)

【输入说明】输入一行,只有一个整数x(-30000<=x<=30000)。 【输出说明】输出只有一行,包括1个整数(即y)。 【样例输入】3 【样例输出】4

1520.判断一元二次方程有无实根 题目说明:在方程 Ax^2+Bx+C=0 中,任意输入系数A,B,C,(-1000 <= A,B,C <=1000)m判断有无实数根,如有实根则打印“YES”;

1527、发放奖金(程序文件名:bonus)

【问题描述】某车间按工人加工零件的数量发放奖金,奖金分为五个等级:每月加工零件数N < 100者奖金为10元;100 < = N < 110者奖金为30元;110 < = N <120 者奖金为50元;120 < = N <130 者奖金为70元;N > 130者奖金为80元。 请编程,由键盘输入加工零件数量,显示应发奖金数。 【输入说明】输入加工零件数量。 【输出说明】输出应发奖金数。 【样例输入】85 【样例输出】10

无实根则打印“NO SOLUTION”。(B*B-4*A*C的值>=0则表示有实根,<0表示无实根)

输入说明:输入只有一行,包括3个整数。 输出说明:输出只有一行。 样例输入:1 2 0 样例输出:YES

1521、行礼托运价格(程序文件名:price)

【问题描述】某车站行李托运收费标准是:10公斤或10公斤以下,收费2.5元,超过10公斤的行李,按每超过1公斤增加1.5元进行收费。 试编一程序,输入行李的重量,算出托运费。 【输入说明】输入只有一个数,表示行李的重量(<=10000)。 【输出说明】输出只有一行,包括1个数(保留两位小数)。 【样例输入】10 【样例输出】2.50

1522、判断成绩等级(程序文件名:score) 【问题描述】输入某学生成绩(0<=成绩<=100),如果成绩在86分及86分以上则输出?VERY GOOD? ,如果在60到85之间的则输出?GOOD?,小于60的则输出?BAD?。 【输入说明】输入1个数,表示成绩。 【输出说明】输出只有一行。 【样例输入】80 【样例输出】GOOD

1523、求三个数的最大数(程序文件名:max3)

【问题描述】已知有三个不等的数(均小于10000),将其中的最大数找出来。

【输入说明】输入3个整数,之间用一个空格分开。 【输出说明】输出只有一个整数。 【样例输入】1 5 8 【样例输出】8

1524、求三个数的大小顺序(程序文件名:sequence3)

【问题描述】输入三个数(都小于10000),按由大到小顺序打印出来。

【输入说明】输入3个整数。

【输出说明】输出3个整数,之间用空格隔开。 【样例输入】1 2 3 【样例输出】3 2 1

1525、判断某年某月的天数(程序文件名:days) 【问题描述】输入年,月,然后告诉该月有多少天。 【输入说明】输入2个整数,之间用一个空格分开。 【输出说明】输出1个整数。 【样例输入】2000 2 【样例输出】29

5、打折的电池(程序文件名:batt)

【问题描述】信和超市里卖电池,每个电池a角钱,若数量超过b个,则可打c折。根据输入的电池个数d输出应付的金额。 【输入说明】输入4个数,分别表示a,b,c,d 【输出说明】输出一个数据,表示应付的金额。(保留一位小数) 【样例输入】8 10 7.5 12 【样例输出】72.0

6、求最小值(程序文件名:min)

【问题描述】输入四个整数,输出其中的最小数。 【样例输入】2 5 1 9 【样例输出】1

8、判断回文数(程序文件名:palin)

【问题描述】我们将左右对称的自然数称为回文数,如4114,输入一个四位数,如果是回文数则输出yes,否则输出no 【样例输入】4114 【样例输出】yes

1529、模拟计算器(存储文件名:calc)

【问题描述】津津这几天非常高兴,因为放寒假了,也因为有机会接触编程魔法了。几天的时间津津就会编写很多程序了,现在津津正准备编写一个模拟计算器,你能帮助她吗?这个模拟计算机只需要实现对两个实数进行加(+)、减(-)、乘(*)、除(/)四种运算的功能。

【输入说明】输入包括二行数据,第一行数据为进行运算的两个实数,中间用空格隔开,第二行只有一个运算符。

【输出说明】输出运算结果(运算结果保留一位小数,前面不留空格),当除数为0时,运算结果为error。 【样例输入】9 8 + 【样例输出】17.0

12

循环结构

顺序结构程序自上而下只执行一遍,分支结构中有些语句可能一遍也执行不了,这两种结构都没有充分利用计算机速度快的特点。循环结构是让一些语句在一定条件下反复多次被执行。

循环结构是三大程序结构之一,是C++程序设计的重点内容。顺序结构、选择结构只解决简单问题,是程序设计的基础,而循环结构则是程序设计的实际应用。顾名思义,所谓循环,是指某些语句由于需要而被反复执行多次的现象。

三种循环语句(for、while、do-while)。

1、for循环

格式:for( 初始化; 条件; 调整) 循环体;

循环体可能是复合语句,要写为下面这种格式: for( 初始化; 条件; 调整) { 循环体; }

C++中的for语句使用最为广泛和灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。

for语句的一般格式为

for(表达式1;表达式2;表达式3) 语句 它的执行过程如下: (1) 先求解表达式1。

(2) 求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环,转到第(5)步。 (3) 求解表达式3。

(4) 转回上面第(2)步骤继续执行。

(5) 循环结束,执行for语句下面的一个语句。 例如,输出10个?*?,可用如下语句即可完成: cout << “**********”; 如果要输出1000个?*?,再用上面的写法就不现实了! 解决办法是: 输出一个?*?,即cout << ?*?;重复1000次。

int main(){ int i;

for(i=1;i<=1000;i++)cout << “*\ }

○for 先判断条件而后执行循环体,即有可能循环体一

次也不被执行。如下语句中循环体?s=s+i?一次也不被执行:

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

○c++对循环变量的数据类型没有什么特殊要求:整型int,实型double,字符型 char都可以

○for 适宜循环次数明显的情况,又称计数循环。 ○for中三个表达式间只能用分号相隔,且即使三个表达式省略时,分号也不可省略。

○当循环语句超过一条语句时,要用{ }将语句组合在一起,构成复合语句。

○for中三个表达式,可以为多条语句。 如:for(i=1,j=2;i<=10;i++,j++)s=s+i+j;

2、while循环 格式:

while ( 条件表达式) {语句组} 等同于

for(; 条件表达式; ) {语句组}

3、do while循环 1)格式:

do { 语句组}

while(条件表达式);

for循环和while循环都是先判断表达式是否成立,然后再决定是否循环,do-while的差别在于先执行一次循环再看表达式是否成立。它是这样执行的:先执行一次指定的语句(即循环体),然后判别表达式,当表达式的值为非零(?真?) 时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。 例3.11 用do-while语句求1+2+3+…+100。 可编写出下面的程序: #include using namespace std; int main( )

{int i=1,sum=0; do

{ sum=sum+i; //累加求和 i++;

}while (i<=100); //条件成立就返回do后面大括号中的内容执行

cout<<″sum=″<

13

4、转向语句 1)break语句

break在循环体中,也可以从循环体内跳出循环体,提前结束循环。 for ( ; ; ) { cin>>x;

if (x==123) break; }

注意:break只能退出一层循环

2)continue语句

continue:其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。

int main( ) { int i;

for (i=1;i<=5;i++) { if (i%2)cout<<“*”; else continue; cout<<“#”; }

cout<<“ $\\n”; }

结果为:*#*#*# $

5、多重循环

循环嵌套:这是循环结构的重点和难点。三种循环语句可以互相嵌套(而不是交叉!),共有六种情况,构成循环嵌套结构的各种形式。

多重循环格式之一: for( ; ; ){ 语句组; for( ; ; ) { 语句组; }

语句组; }

例题:

如输出一个m×n的一个矩形的’*’号阵 样例输入:3 5 样例输出: *****

***** *****

一般用外循环控制行,内循环控制每行输出的内容.

如本例中用m控制行,n控制每行上有多少个*号,每行上的*号输出完毕后输出一个换行符。 输出m行n列*号 cin>>m>>n;

for( i=0;i

//外循环通常用作控制行,表示输出图形有m行 for(j=0;j

cout<

外循环i=0时,内循环j从0一直变化到n-1,即内循环中的语句{ cout<<‘*’; }被执行了n次,语句 cout<

有时每列上的字符个数不同,如 n=3时,输出如下图形 * ** *** cin>>n;

for( i=0;i

#include #include using namespace std; int main( ) {long f1,f2; int i; f1=f2=1;

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

{cout<

if(i%2==0) cout<

14

f1=f1+f2; //左边的f1代表第3个数,是第1、2个数之和

f2=f2+f1;//左边的f2代表第4个数,是第2、3个数之和 }

return 0; }

有时每行上的字符个数以等差数列递增,如 n=3时,输出如下图形 * *** ***** cin>>n;

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

for( j=1;j<=2*i-1;j++ )//每行上的字符数目以2递增,因此是2*i cout<

如果是这样的金字塔形式 n=3,输出 * *** *****

可以看作是先输出了一个倒三角形的空格,然后再输出上例中的图形 cin>>n;

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

for(j=1;j<=n-i;j++) //每行上的空格数是n-1,n-2,...,1,0这样一个递减序列,而i每次递增1,要将一个递增序列改为递减序列,直接在前面加上-号 cout<<' ';

for( j=1;j<=2*i-1;j++){//每行上的字符数目以2递增,因此是2*i cout<

cout<

简单算法与常用技巧

1、输入数据的数量不确定的处理

可以用while(cin>>n) 来进行处理。一直到无输入流数据时才退出循环。

2、数字的分离

如输入一个不知道位数的整数,要将其倒序输出 cin>>a; b=0;

while(a!=0){ //可接写为while(a)

b=b*10+a;//将a的个位取出来累加到b中 a=a/10; //将a的个位去掉 }

cout<

3、计数器

计数器在循环中的一般形式

cin>>n;j=0; //计数器初值一般为0 for(i=1;i<=n;i++){ cin>>a;

if(a%2==0) j=j++; } cout<

4、累加器

累加器在循环中的一般形式 cin>>n;s=0;//n个数的累加 for(i=1;i<=n;i++){ cin>>a; s=s+a;} cout<

5、累乘器

累乘器在循环中的一般形式 cin>>n;s=1;

for(i=1;i<=n;i++){ cin>>a; s=s*a;} cout<

6、标记法

输入整数n,请判断其是否为素数(质数)。 cin>>n;

f=1; //用f做标记,为1则表示是素数 for( j=2;j

if(n%j==0)f=0;//f为0表示n在2~n-1间有约数 if(f==1) cout<<”yes”; else cout<<”no”;

7、求最大值

先假设输入的第一个数即为最大数,然后用它去和后面的数一一进行比较,如果后面的数比它大,则将大的数

15

赋值给它。 cin>>a; max=a;

for(i=1;i

{ cin>>a; if(a>max) max=a;} 循环退出后max中存储的就是最大值

8、求最小值

先假设输入的第一个数即为最小数,然后用它去和后面的数一一进行比较,如果后面的数比它小,则将小的数交换给它。 cin>>a; min=a;

for(i=1;i

{ cin>>a; if(a

9、字符的处理

输入一串字母和数字,以? . ?号结束,统计其中字母和数字的个数。 char a;

zimu=0; shuzi=0; for( cin>>a; a!=?.?;){

if(a>=?a?&&a<=?z?||a>=?A?&&a<=?Z?) zimu++; if(a>=?0?&&a<=?9?) shuzi++; cin>>a; }

10、穷举的思想

穷举法也称为?枚举法?,这种算法基本思想是依题目的部分条件,确定答案的大致范围;在此范围内,对所有可能的情况一一列举,逐一验证,直到全部情况验证完毕,或者得到了需要的结果。

若某个情况经验证符合题目的全部条件,则它就是本题的一个答案;若全部情况经验证后,都不符合 题目的全部条件,则原题无解。 用穷举法解题的大致步骤如下:

1)分析题目,确定所要求的解是什么? 2)确定解的可能取值范围是什么? 3)穷举出所有可能的解 4)验证每一个可能的解 5)优化

例:鸡兔同笼问题

一个笼子里有鸡和兔,现在只知道里面一共有a个头,b只脚,问鸡和兔各有多少只(要求鸡和兔至少1只)?

int i,j,a,b; cin>>a>>b;

for(i=1;i

11、递推的思想 迭代的方法

例:斐波那契数列(从第三项起为前面两项之和) 1 1 2 3 5 8 13…

F1=1 (n=1) F2=1 (n=2) Fn=Fn-1+Fn-2 (n≥3)

cin>>n; a1=1; a2=1;

for(i=3; i<=n; i++){ a3=a1+a2; a1=a2; a2=a3; }

cout<

猴子吃桃问题。猴子摘了一堆桃,第一天吃了一半,还嫌不过瘾,又吃了一个;第二天又吃了剩下的一半零一个;以后每天如此。到第N天,猴子一看只剩下一个了。问最初有多少个桃子? cin>>n;

for(s=1,i=2;i<=n;i++) s=(s+1)*2; cout<

练习(循环)

一、选择

1、下列关于if语句的描述中,错误的是

A.If语句中可以没有 else if 子句,也可以没有else子句

B.If语句中只能有1个else子句

C.If语句中只能有不超过5个的else if 子句 D.If语句中<条件>可以是任意表达式

2、下列关于break语句和continue语句的描述中,错误的是

A.break语句可以用来退出循环体 B.Break语句可以用来退出if语句

16

C.Continue语句只能用于循环句的循环体内 D.Break语句和continue语句都属于转向语句

3、下列循环语句中,执行循环体的次数是 while(100) cout<<”ABC”;

A.100 B.0 C.无限 D.10

4、下列循环语句中,错误的是 A.int a=1,b=2;while(b--);

B.int a=1.b=2;do a++;while(a==b); C.int a=1,b=2;while(a==3); D.do b—while(b==0);

二、看程序写结果。 int main(){//题11 int m=0,n,k; cin>>k;

for(n=2;n

输入:5

int main(){//题12 int y=2,k; cin>>k;

while (y<=k) y=y*y; cout<

输入:32

int main(){//题13 int x=1,y=0; while(x) { y+=x; cin>>x; }

cout<

输入:2 8 6 0

int main(){//题14 char ch,c,d; cin>>d;

for(ch=?b?;ch<=d;ch++) {c=ch-1;cout<

}

输入:e

int main(){//题15 char a;

int zimu=0; shuzi=0; for( cin>>a; a!=?.?;){

if(a>=?a?&&a<=?z?||a>=?A?&&a<=?Z?) zimu++; if(a>=?0?&&a<=?9?) shuzi++; cin>>a; }

cout<

输入:My telephone number is 63003828.

int main(){//题16 int s=0,i,n; cin>>n;

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

if(i%3==0&&i%4==0) s+=i; cout<<”s=”<

输入:500

int main(){//题17 int s=1,i,n; cin>>n;

for(i=1;i<=n;i++) s*=i; cout<

输入:5

int main(){//题18 int s=0,n; cin>>n; while (n) { n=n/10; s++; }

cout<

输入:1234

int main(){//题19 int s=0,i=1,n;

17

cin>>n; do{ s+=i; i++;

}while(i<=n); cout<

输入:5

int main(){//题20 int a,min,i,n; cin>>n>>a; min=a;

for(i=1;i

{ cin>>a; if(a

输入:6 9 32 45 23 4 70

int main(){//题21 int n,f,j; cin>>n; f=1;

for( j=2;j

输入:17

#include//题22 int main(){ int g=0,m,n; double k=0,t; cin>>n;

for(m=1;m<=n;m++){ g++;

k+=1/(g*(g+1)); }

cout<

输入:49

int main(){//题23 int s=0,x,t;

cin>>x; do{

t=x % 10; s+=t; x/=10 ; }while(x); cout<

输入:123456789

#include//题24 int main(){ int i,n; cin>>n;

for(i=1;i<=n;i++) if(i%2==0){

cout<

if(i%5==0) cout<<”\\n”; } }

输入:50

int main(){//题25 int n,i,a1=3,a2=5,a3; cin>>n;

cout<

cout<

输入:10

int main(){//题26 int p,q,s,t; cin>>p;

for(q=p+1;q<=2*p;q++){ t=0;

s=(p*q)%(q-p); if(s==0){

t=p+q+(p*q)/(q-p); cout<

18

} }

输入:12

(三)单循环 1)计数器

1144、统计a的个数(程序文件名:count)

【问题描述】输入若干个字符,它的终止符是’#’,计算输入的字符中字母'a’出现的次数(包括大小写)。 【输入说明】输入若干个字符,以'#'结束. 【输出说明】字母'a’出现的次数 【样例输入】huang# 【样例输出】1

2.求出100之内自然数中偶数之和

3.求出100之内自然数中最大的能被31整除的数

1540. 乒乓球

题目说明:华华最近对乒乓球比赛的统计数据进行了一些分析,首先将比赛每个球的胜负列成一张表,然后计算在11分制下双方的比赛结果(截至记录末尾)。 比如现在有这么一份记录,(其中W表示华华获得一分,L表示华华对手获得一分):

WWWWWWWWWWWWWWWWWWWWWWLW 在11分制下,此时比赛的结果是华华第一局11比0获胜,第二局11比0获胜,正在进行第三局,当前比分1比1。如果一局比赛刚开始,则此时比分为0比0。 (规定10平后需要双方的分差为2分时才能分出胜负) 你的程序就是要对于一系列比赛信息的输入(WL形式),输出正确的结果。

输入说明:输入包含若干行字符串(每行至多20个字母),字符串有大写的W、L和E组成。其中E表示比赛信息结束,程序应该忽略E之后的所有内容。

输出说明:输出有若干行,每一行对应一局比赛的比分(按比赛信息输入顺序)。 样例输入:

WWWWWWWWWWWWWWWWWWWW WWLWE 样例输出: 11:0 11:0 1:1

1145.整数求和(初级)

题目说明:求输入的一个整数n(n<1000000)的各位数字之和。

输入说明:输入一个整数n 输出说明:输出各位数字之和 样例输入:123 样例输出:6

1536.累加求和(题目见顺序结构) 求出下列分数序列的前15项之和 2\\1,3\\2,5\\3,8\\5,13\\8,21\\13...

求出1-1\\2+1\\3-4\\1+........+1\\99-1\\100的值

9、购物问题(程序文件名:shopping)

【问题描述】dog同学喜欢去购物,但是他不想花很多钱,所以他总是挑那些自己喜欢的东西来买,现在给你一张他买东西的购物清单,上面有他喜欢的和不喜欢的商品,问他这购买所有喜欢的物品一共需要花多少钱? 【输入说明】第一行一个n(1<=n<=100)表示这张购物单上有多少个商品。后面紧接n行,每行描述购买的一种物品:

每行一个实数ai和一个字符bi(1<=ai<=10000),之间用空格分开,其中ai表示物品的价格,bi表示dog对这个物品喜欢还是不喜欢,喜欢用Y来表示,不喜欢用N来表示。

【输出说明】输出只有一行表示dog购买所有喜欢的商品一共需要花多少钱。(结果保留两位小数) 【样例输入】3 10000 Y 10.9 N 20.5 Y

【样例输出】10020.50

10、正方形的数量(存储文件名:square)

小明接到一个任务:统计由边长为1的小正方形组成的n×n的大正方形中正方形的数量。如n=3时,正方形数量为14个。小明希望编一个程序,输入n后,立马就输出正方形数量,省得他一个一个去数。 【样例输入】3 【样例输出】14

11、求和(程序文件名:sumn)

【问题描述】根据输入的自然数n求1+1/2+1/3+1/4+…+1/n的和。

【输入说明】输入n。

19

【输出说明】输出和(保留两位小数)。 【样例输入】2 【样例输出】1.50

1142、约数求和(程序文件名:divisor) 【问题描述】键入一个自然数x(x<10000),求这个自然数的所有约数之和s。 【输入说明】自然数x 【输出说明】约数之和s 【样例输入】6 【样例输出】12

1927.购物(程序文件名money) 题目说明:Dog同学喜欢去购物,但是他不想花很多钱,所以他总挑打折的东西来买,现给出他买的所有东西的购物清单,清单每行两个数,第一个数ai表示物品价格,第二个数bi表示物品打几折(1表示打一折),问他这次购物一共花了多少钱? 输入说明:第一行一个n(1<=n<=100)表示dog一共买了多少个东西。

后面紧接n行,每行描述购买的一种物品: 每行2个整数ai,bi(1<=ai<=10000,1<=bi<=10)

输出说明:一行,一个实数为dog一共花了多少钱,答案保留2位小数 样例输入: 2

10000 10 1 1

样例输出: 10000.10

1534. 求最大值

题目说明:求恰好使s=1+1/2+1/3+…+1/n的值不大于m时n的最大值,(m<15) 输入说明:输入m 输出说明:输出n 样例输入:2 样例输出:3

1058.津津的储蓄计划(题目见选择结构)

3)累乘器

1145、整数求和(程序文件名:intsum)

【问题描述】求输入的一个整数n(n<1000000)的各位数字之和。

【输入说明】输入一个整数n. 【输出说明】输出各位数字之和 【样例输入】123 【样例输出】6

3)求最值

1146、最小公倍数(程序文件名:lcm)

【问题描述】求两个自然数m,n的最小公倍数。 【输入说明】输入两个自然数m,n(0<=m,n<=10000) 【输出说明】输出最小公倍数 【样例输入】16 24 【样例输出】48

1147、最大数(程序文件名:max)

【问题描述】从n(n<1000)个数中挑选出最大的数 【输入说明】输入第一个数为n,后面为n个数 【输出说明】最大数

【样例输入】4 9 6 3 8 【样例输出】9

1542. 数的位置

题目说明:输入n个数,输出其中的最大数及其位置。 输入说明:输入第一行为一个数n(n<=100),第二行为n个用空格分开的整数(都小于10000,没有相等的数字)。

输出说明:输出其中的最大数及其位置。之间用空格隔开

样例输入: 3 1 3 2

样例输出:3 2

4)穷举

1143. 四位数分解

题目说明:把整数3025从中剪开分为30和25两个数,此时再将这两数之和平方,(30+25)2=3025计算结果又等于原数。求所有符合这样条件的四位数。 输入说明:无

输出说明:符合这样条件的四位数,每个之间用一个空格分开.

1537.阿姆斯特朗数

题目说明:阿姆斯特朗数:如果一个正整数等于其各个数字的立方和,则该数称为阿姆斯特朗数(也称自恋数),如407=4^3+0^3+7^3,试编程求出n(n<=10000)

20

6 265 4 264 3 258 2 244 1 237

1176. 最大公约数

题目说明:给出两个正整数A,B,求它们的最大公约数。 输入说明:第一行一个正整数A。 第二行一个正整数B。在60%的数据中,1<=A,B<=10^18 ;在100%的数据中,1<=A,B<=10^3000

输出说明:在第一行输出一个整数,表示A,B的最大公约数。

样例输入:18 24 样例输出:6

提示:高精度计算

1017.打保龄球 提示:模拟

狐狸找兔子

题目说明:围绕着山顶有n个洞,一只狐狸和一只兔子住在各自的洞里。狐狸想吃掉兔子。一天,兔子对狐狸说:?你想吃我有一个条件,先把洞从1-n编上号,你从第n号洞出发,先到1号洞找我;第二次隔1个洞找我,第三次隔2个洞找我,以后依次类推,次数不限,若能找到我,你就可以饱餐一顿。不过在没有找到我以前不能停下来。?狐狸满口答应,就开始找了。它从早到晚进了1000次洞,累得昏了过去,也没找到兔子,请问,兔子躲在几号洞里? 输入说明:输入n(1

输出说明:从小到大输出洞口编号,中间用空格隔开。如兔子被找到的话,输出0 样例输入:3 样例输出:2

31

以内的所有阿姆斯特朗数。 输入说明:输入一个数n

输出说明:输出所有的所有阿姆斯特朗数,每行一个数字。

样例输入:1 样例输出:1

5)递推

1538.猴子吃桃问题

题目说明:猴子吃桃问题。猴子摘了一堆桃,第一天吃了一半,还嫌不过瘾,又吃了一个;第二天又吃了剩下的一半零一个;以后每天如此。到第n天,猴子一看只剩下一个了。问最初有多少个桃子? 输入说明:输入一个数n(n<=20) 输出说明:输出最初的桃子个数 样例输入:2 样例输出:4

1539. 斐波那契数列

题目说明:已知斐波那契数列的前几个数分别为0,1,1,2,3,5,……编程求出此数列的第n项。(n由键盘输入)n<=60

输入说明:输入数字n(n<=60)

输出说明:输出斐波那契数列中的第n个数 样例输入:5 样例输出:3

多重循环

百鸡百钱问题。用一百钱买一百只鸡,公鸡一只5钱,母鸡一只3钱,雏鸡3只1钱。问共有多少种买法。

数组、函数、字符与字符串

一、数组

循环用到计算机速度快的特点,但没有用到计算机存储空间大的特点, 1、一维数组

数组变量的声明,与其他变量声明相同,声明时要加上下标,下标必须是一个明确的数值,所以在定义的时候要事先判断出下标的取值范围。 int a[n]; //这种声明是错误的

int a[200]; //下标给出具体值,表示了

a[0],a[1],a[2],…,a[199]共200个整型变量 int n=200;

int a[n]; //可以这样声明

注意:下标变量应为有序数据类型,如integer,不能为double

数组数据的读入、输出与处理通常都通过循环来进行。int i,a[200];

for(i=0;i<200;i++) cin>>a[i]; //用循环读入200个数据到a数组中

for(i=199;i>=0;i--) cout<

例1、输入n(n<100)个同学某门课程的成绩,打印出低于平均分的同学号数与成绩。

【问题分析】 在解决这个问题时,虽然可以通过读入一个数就累加一个数的办法来求同学的总分,进而求出平均分。但因为只有读入最后一个同学的分数以后才能求得平均分,且要打印出低于平均分的同学,故必须把n个同学的成绩都保留下来, 然后逐个和平均分比较,把高于平均分的成绩打印出来。如果用简单变量a1,a2,…,an来存放这些数据,可想而知程序要很长且繁。要想如数学中使用下标变量 ai形式表示这n个数,则可以引入下标变量a[i]。这样问题的程序可写为: int i,n,a[101]; double zf,pj; cin>>n;

zf=0; //zf表示总分}

for(i=1;i<=n;i++){ //读入每一个同学的成绩,并累加它到总分 cin>a[i]; zf=zf+a[i]; }

pj=zf/n; //计算平均分 for(i=1;i<=n;i++)

if (a[i]

21

如果第i个同学成绩小于平均分,则输出

例2、输入n(n<100)个数,倒序输出这n个数。

【问题分析】定义一个数组a用以存放输入的n个数, 然后将数组a内容逆序输出。 int main(){

int n,a[100],i; cin>>n;

然后将数组a内容逆序输出。 int main(){

int n,a[100],i; cin>>n;

for(i=0;i>a[i]; for(i=n-1;i>=0;i--){ cout<

一、一维数组讲解

数组变量的声明,与其他变量声明相同,声明时要加上下标,下标必须是一个明确的数值,所以在定义的时候要事先判断出下标的取值范围。 int a[n]; //这种声明是错误的

int a[200]; //下标给出具体值,表示了

a[0],a[1],a[2],…,a[199]共200个整型变量 int n=200;

int a[n]; //可以这样声明

注意:下标变量应为有序数据类型,如integer,不能为double

数组数据的读入、输出与处理通常都通过循环来进行。 int i,a[200];

for(i=0;i<200;i++) cin>>a[i]; //用循环读入200个数据到a数组中

for(i=199;i>=0;i--) cout<

例1、输入n(n<100)个同学某门课程的成绩,打印出低于平均分的同学号数与成绩。

【问题分析】 在解决这个问题时,虽然可以通过读入一个数就累加一个数的办法来求同学的总分,进而求出平均分。但因为只有读入最后一个同学的分数以后才能求得平均分,且要打印出低于平均分的同学,故必须把n个同学的成绩都保留下来, 然后逐个和平均分比较,把高于平均分的成绩打印出来。如果用简单变量a1,a2,…,an来存放这些数据,可想而知程序要很长且繁。要想如数学中使用下标变量 ai形式表示这n个数,则可以引入下标变量a[i]。这样问题的程序可写为: int i,n,a[101]; double zf,pj; cin>>n;

zf=0; //zf表示总分}

for(i=1;i<=n;i++){ //读入每一个同学的成绩,并累加它到总分 cin>a[i]; zf=zf+a[i]; }

pj=zf/n; //计算平均分 for(i=1;i<=n;i++)

if (a[i]

例2、输入n(n<100)个数,倒序输出这n个数。

【问题分析】定义一个数组a用以存放输入的n个数,

for(i=0;i>a[i]; for(i=n-1;i>=0;i--){ cout<

return 0; }

二、C++是由函数构成的,函数是C++的基本模块。有的函数完成某一操作;有的函数计算出一个值。通常,一个函数即能完成某一特定操作,又能计算数值。

为什么要使用函数? 1.避免重复的编程。

2.使程序更加模块化,便于阅读、修改。

说明:1.一个源程序文件由一个或多个函数组成。

2.一个程序必须有且只有一个main( )函数,C++从main( )函数开始执行。

3.从使用角度来说,分标准函数和用户自定义函数;从形式来说,分无参函数和有参函数。

一、无参函数:主调函数并不将数据传给被调函数。主要用于完成某一操作。

格式:类型说明 函数名(){函数体;} #include using namespace std; void print_message ()

{ cout<<\void printstar ()

{ cout<<\int main( )

{ printstar (); print_message (); printstar(); return 0; }

二、有参函数:主调函数和被调函数之间有数据传递。主调函数可以将参数传递给被调函数,被调函数中的结果也可以带回主调函数。

格式:类型说明 函数名(形式参数列表说明){函数体;}

#include using namespace std; int maxx(int x,int y) { int z;

z=(x>y)?x:y; return z; }

int main () { int a,b,c; cin>>a>>b; c=maxx(a,b);

cout<<\ return 0; }

将实际值a,b传给被调函数的参数x,y,计算后得到函数值z返回。

22

1、函数参数和函数的值

形参是被调函数中的变量;实参是主调函数赋给被调函数的特定值。实参可以是常量、变量或复杂的表达式,不管是哪种情况,在调用时实参必须是一个确定的值。 形参与实参类型相同,一一对应。 形参必须要定义类型。 2、函数的返回值

函数的返回值通过return语句获得。函数只能有唯一的返回值。

函数返回值的类型就是函数的类型。 return语句可以是一个表达式,函数先计算表达式后再返回值。

return语句还可以终止函数,并将控制返回到主调函数。

一个函数中可以有一个以上的return语句,执行到哪一个return语句,哪一个语句起作用。 3、数组名作函数参数

数组名可以作函数的实参和形参,传递的是数组的地址。这样,实参、形参共同指向同一段内存单元,内存单元中的数据发生变化,这种变化会反应到主调函数内。

在函数调用时,形参数组并没有另外开辟新的存储单元,而是以实参数组的首地址作为形参数组的首地址。这样形参数组的元素值发生了变化也就使实参数组的元素值发生了变化。

【例如】将数组中的n个数按从小到大输出 void sort(int x[],int n) { int t,i,j;

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

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

if(x[i]>x[j])swap(x[i],x[j]); }

int main( )

{ int i,a[10]={0};

for(i=0;i<10;i++)cin>>a[i]; sort(a,10);//函数调用

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

三、函数的调用

函数调用的方式

1.作为语句: printstar( ); 2.作为表达式: c=max (a,b);

3.作为另一个函数的参数:cout<

【例题】求最大值 1566 【问题描述】已知m=max(a,b,c)/(max(a+b,b,c)*max(a,b,b+c) ),其中max(a,b,c)是求三个数a,b,c的最大值; 【文件输入】输入a,b,c, 中间用空格分开 【文件输出】求m的值(保留三位小数) #include #include using namespace std; int f,g,e,a,b,c;

double m;

int max(int a,int b,int c) { int t; t=a;

if(b>t)t=b; if(c>t)t=c; return t; }

int main()

{ cin>>a>>b>>c; f=max(a,b,c); e=max(a+b,b,c); g=max(a,b,b+c); m=double(f)/(e*g);

cout<

自定义函数

函数是C++程序的基本模块,是构成结构化程序的基本单元,在结构化程序设计中往往将一个较大的程序分为若干个程序模块,每一个模块用来实现一个特定的功能。

函数分为标准库函数和用户自定义函数。 标准库函数:可以在任何程序中使用的公共函数,由C++ 编译器提供。

用户自定义函数:必须按C++要求通过函数定义、函数说明、才能被调用,由用户自定义。

程序从main( )开始,一个函数可以调用其他函数,也可以被其他函数调用。

函数与函数之间通过传递参数和返回值相联系。 1、自定义函数的的一般形式: 类型标识符 函数名(形式参数表) {

函数体 }

说明:函数名—给自定义的函数取的名字。

形式参数表—函数被调用时,接收调用函数传递的实参数。函数体—执行功能的语句块。

函数返回值—通过函数调用获得的函数返回值,其值由return语句返回。

2、函数分类—从函数调用的返回形式看 (1)有返回值型函数

完成指定任务后返回一个值给调用该函数的语句。 (2)void函数

不返回一个值给调用该函数的语句。

函数分类—从函数调用时是否需要传递数据看 (1)有参函数

在调用函数时,在主调函数和被调用函数之间有数据传递,即主调函数可以将数据传给被调用函数使用,被调用函数中的数据也可以带回来供主调函数使用。 (2)无参函数

在调用无参函数时,主调函数并不将数据传送给被调用函数。

3、实例

例1、输入长方形的长和宽,求长方形的面积。 #include

23

using namespace std;

int area(int c, int d){//c,d被称为形式参数 return(c*d); }

int main(){ int s,a,b; cin>>a>>b;

s=area(a,b); //a,b被称为实际参数 cout<

实参的值传给形参后,形参的值在子函数中变化时不会影响实参

例2、根据n值,输出如下图形: * * * * * * * * * * Hello,world!

* * * * * * * * * *

void printMessage(){//定义printMessage() cout<<\输出字符串 }

void printStar(int n){//定义printStar() int i;

for(i=0;i

int main(){//在主程序中调用它们: int n; cin>>n;

printStar(n); //调用printStar() printMessage(); //调用printMessage() printStar(n); }

例3、最小公倍数

int min_multiple(int x,int y) //函数定义 { int i=1; //定义函数中需要的变量 while(x*i%y!=0) i++;

return(x*i); //返回值 }

int main(){

int m, n , min; cin>>m>>n;

min=min_multiple(m,n); //函数调用 cout<

例4、将输入的3个整数从大到小输出。

void swap(int &x,int &y){ //&x,&y被称为是引用参数

int temp;

temp=x; x=y; y=temp; }

int main(){ int a,b,c; cin>>a>>b>>c; if(a

cout<

引用参数调用传递的是变量地址,当x,y值改变时实参会同时改变

4、递归函数

递归函数即自调用函数,即在函数体内有直接或间接地自己调用自己的语句。 例、求n的阶乘

n!=n*(n-1)! (当n>1时) n!=1(当n=0,1时) 下面是求n!的函数

long long fact(int n) { if (n==1) return 1;

else return(n*fact(n-1)); }

由于自调用过程在函数内必须设置某些条件,当条件成立时终止自调用过程,并使程序控制逐步从函数中返回。

递归调用机制是栈数据结构实现的。 函数之间由参数传递和返回值联系。 如:n等于3,则递归调用过程如下; fact(3)=3*fact(2) fact(2)=2*fact(1)

fact(1)时返回值1,再逐层返回:fact(2)=2*1,fact(3)=3*2

三、字符与字符串 字符处理见第四节

字符串相当于是一个字符数组 例如 string c;

c相当于是一个char c[];只是数组的下标范围是根据需要动态扩展的。

例:输入一串字符,将其倒序输出 string c; int i,n; cin>>c;

n=c.length();//c.length()得到字符串长度 for(i=n-1;i>=0;i--)cout<

这种方法仍然不能读入空格和回车,要能处理的话可以用

char c[100]; gets(c); 或者是 string c;

getline(cin,c);

提高题

支持谁?

题目描述:小明和班里的同学都迷上了看电视剧《三国演义》。由于欣赏角度不同,有的同学喜欢曹操,站在魏国一边;有的同学喜欢刘备,站在蜀国一边;有的同学则喜欢孙权,站在吴国一边。大家经常为下一集戏中谁战胜了谁争得面红耳赤。小明心想,到底我们班里喜欢各个国家的各有多少人呢?我来做一个统计调查吧。于是他约定:喜欢曹操的选A,喜欢刘备的选B,喜欢

24

孙权的选C。然后让全班同学来投票。同学们很认真地填写,并投票。当然,有可能有少数同学故意恶作剧,填了A、B、C之外的其它字母。如果出现这种情况,这张票就算作废。小明班上的同学很多,统计票是一件辛苦又容易出错的事情。请你写个程序,帮小明快速而准确地统计出结果吧。

输入:第1行:1个整数N(1<=N<=100),表示小明班的人数

第2行:N个大写字母,表示小明班上每个同学投的票 如求a,b的最大公约数,假设a>=b.设其最大公约数为

M. 如果a%b==0(a能被b整除),则M=b。 否则的话,问题即可转换为求b与a%b的最大公约数。(因为a%b的因子中必包含M). 输入:输出:样例输入:5 15 样例输出:5 15

统计字符个数

题目描述:输入一行字符,分别统计出其中英文字母、输出:第1行:3个整数,中间用一个空格分开,分别表示填A、填B和填C的人数。 样例输入:10 AABACCBBDB 样例输出:3 4 2

猴子吃桃

题目描述:猴子摘了一堆桃,第1天吃了一半,还嫌不过瘾,又吃了一个;第二天又吃了剩下的一半零一个;以后每天如此。到第十天,猴子一看只剩下X个桃子了。问最初有多少个桃子?

输入:第1行:第10天的桃子数X(X≤10) 输出:第1行:最初的桃子数 样例输入:1 样例输出:1534

循环的统计

题目描述:在墙角堆放着一堆完全相同的正方体小木块,从上往下数起,第一层是1块,第二层是3块,第三层是6块…… 因为木块堆得实在是太有规律了,你只要知道它的层数就可以计算所有木块的数量了。 输入:只有一个整数 n ,表示这堆小木块的层数,已知1 <= n <= 100 。

输出:只有一个整数,表示这堆小木块的总数量 样例输入:5 样例输出:35

循环的极值

题目描述:对于一个给定的数列, 输出在这个数列里面排第二大的那个数。

输入:第1行:一个整数n(2<=n<=100000),表示数列的长度第2行:有n个不相等的整数。 输出:第1行:一个整数, 表示在这个数列里面排第二大的那个数。 样例输入:5 2 6 4 3 8 样例输出

:6 求n的最大值

题目描述2+……+n2:

给出m求n的最大值。N应满足下式:22+42+6输入:输入m的值,一个整数。(4

最大公约数和最小公倍数

题目描述:输入两个正整数(0

空格、数字和其它字符的个数。

输入:第1行:一行字符,以换行符结束,总长度小于10^8

输出:第1行:1个整数,表示英文字母的个数第2行:1个整数,表示空格的个数第3行:1个整数,表示数字的个数第4行:1个整数,表示其它字符的个数 样例输入:ab12 */ 样例输出:2 1 2 2

落下的小球

题目描述:一球从X米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第Y次落地时,共经过多少米?第Y次反弹多高? 输入:第1行:两个数,第1个为浮点数,第2个为整数,分别表示高度和次数。

输出:第1行:一个数,表示总路程 第2行:一个数,表示高度 结果保留到小数点后第4位 样例输入:493.7341 1 样例输出:493.7341 246.8671

氢气球什么时候落地?

题目描述:Wisely是个气象爱好者,他时常放氢气球来探测气象信息。他发现氢气球上升到一定高度后,就会慢慢开始降落。经过研究,他发现空气的湿度h、气球飞行的时间t是关系飞行高度A的因素。其数学关系是: A = -6 * t^4 + h*t^3 + 2* t^2 + t

当t=1,2,3......时,可算出气球当前的飞行高度。 现在给出湿度h和一个时间的上限M,问在什么时候气球会降到高度值A<=0,或者超过时间上限M。

输入:第1行:2个非负整数h和M(0<=h<=100, 0

输出:第1行:1个整数,表示气球高度小于等于0时的时间。或者当达到时限M后,高度还未落地,输出-1 样例输入:30 10 样例输出

:6 差分数列

题目描述:差分数列是指这样的非负整数数列:T1, T2, ....Tm,从第3项开始,每项等于前两项之差,即:Tn+2 = Tn - Tn+1

当某项大于前一项时,数列终止,即:Tm-1 < Tm

例如,数列的第1、2项是120、71时,整个数列为:120 , 71, 49, 22, 27。因为22 < 27,所有数列终止。

25

给出数列的第1,2项,请算出数列的长度。

输入:第1行:2个非负整数,表示数列的1,2项 输出:第1行:1个整数,表示数列的长度 样例输入:120 70 样例输出

:5 3n+1猜想

题目描述:输入一个自然数,若为偶数,则除以2,若为奇数,则乘以3再加1,经过有限次运算后,则必能得到1。现在任意给出一个自然数n,求需要多少次才能得到1.

输入:一个自然数n

输出:输出需要多少次能变到1 样例输入:8 样例输出:3

接苹果

题目描述:有一个传统的小游戏,游戏界面分成了N列,在底部,有一艘M列宽的船,玩家可以左右移动小船,但是小船必须始终在屏幕中。开始时,船在最左边的M列。

苹果从屏幕顶部落下。每一个苹果从N中某一列落下,直到落到屏幕底部。当前一个苹果落到底部时,下一个苹果开始落下。

如果苹果落到底部时,刚好小船也在那个地方,就认为苹果被收获了。游戏的目标是收获所有的苹果后,使小船移动的距离最小。 输入:输入:

第一行包含2个整数N和M,用空格隔开。(1<=M<=N<=10) 第二行包含一个整数J(1<=J<=20),表示落下的苹果数。

接下来J行包含那些苹果的列号,按照他们落下的顺序给出。

输出:输出: 一个整数,表示收获所有苹果时,船的最小的移动距离。 样例输入:5 1 3 1 5 3

样例输出:6

2460.最大数和最小数

题目说明:给你n(n<=100000)个整数,要求你求出其中的最大数和最小数。

输入说明:共计两行:第一行为一个整数n,第二行为n个整数,均不超过200000000。

输出说明:输出只有一行最大数和最小数,用一个空格分开。 样例输入: 5

5 1 3 2 4 样例输出:5 1

老师的辛苦:

题目描述很多同学害怕老师,觉得老师们经常布置很多作业欺负自己,其实老师们心地也很善良,而且很辛苦!考试完了,又有一大堆成绩要统计!请同学们写个程序帮帮老师吧,谁让他们不会用Excel呢!

输入的成绩类似于一个成绩表:

同学 语文 数学 英语 综合 1 90 80 90 100 2 89 78 67 56 3 90 80 90 100 4 89 78 67 56 .............

输入:第一行:n (表示有n个同学, n<=50)

接下来有n行,每行如下:五个数字,分别为 学号、语文成绩、数学成绩、英语成绩、综合成绩

输出:输出4行,全班语文平均分、全班数学平均分、全班英语平均分、全班综合平均分,输出保留一位小数。 样例输入:4 1 90 80 90 100 2 90 80 90 200 3 90 80 80 100 4 90 80 80 200 样例输出: 90.0 80.0 85.0 150.0

求素数(初级)

数学上把除了1和它本身,没有别的数能够整除它的自然数叫做素数(或质数)。现在由键盘输入一个自然数N,编程判断N是否是素数,是则输出?YES?,否则输出?NO?。

输入:输入一个自然数N

输出:判断N是否为素数,是则输出?YES?,否则输出?NO?

样例输入:17 样例输出:YES

多重循环练习: 循环金字塔

题目描述:打印一个星号金字塔。

输入:一个整数,n(1<=n<=10),表示星号的层数 输出:星号金字塔。 样例输入:3 样例输出: * *** *****

百鸡百钱问题

题目描述:公鸡一只,值5$。母鸡一只,值3$,三只小鸡加一块,值1$。现在有X元$,希望恰好买Y只鸡,问公鸡、母鸡、小鸡应该各买多少只? 对于输入的X和Y,有解输出解,无解输出\SOLUTION\。若有多组解,输出字典序最小的一组解,即公鸡尽可能少。在公鸡相等的情况下,母鸡尽可能少。

输入:第1行:2个整数X,Y,意义如题目所述。

输出:第1行:3个数,分别表示公鸡、母鸡、小鸡的数量

样例输入:3871 3011 样例输出:3 1070 1938 提示

每组数据答案保证公鸡数和母鸡数不超过3000,小鸡数

26

不超过4000。

每种鸡的数量有可能为0

吉利数 题目描述:

8在我们国家被看成是吉利的数字。一个数如果是8的倍数,或者包含8,也都认为是吉利的数。例如,64,18等都是吉利数。现在给出一个数的区间[A, B],请数一数这个区间内有多少个吉利数(要包含区间的左、右端点)。 输入:

第1行:2个整数A和B(1<=A<=B<1000) 输出:

第1行:1个整数,表示区间内的吉利数的个数 样例输入: 10 20 样例输出: 2 提示

样例说明:在10~20之间,有16,18两个吉利数。

幸运数字 题目描述:

我们认为只包含4和7的数字为幸运数字,比如4, 7, 44, 47, 74... 现在对于给定的N,请你求出从小到大排列后的第N个幸运数字。 输入:

第1行:1个整数N (1 ≤ N ≤ 100) 输出:

第1行:1个数,表示第N个幸运数字 样例输入: 5

样例输出: 74

素数练习:1148/1149 区间内的素数

题目描述:给定一个区间[a, b],求出这个区间内的素数。

输入:第1行:2个整数a, b(1≤a<b≤10^6)

输出:第1行: 1个整数k,表示区间[a,b]内的素数个数第2行:k个用空格分开的素数,递增排列,1个空格分开。每行输出10个素数。 样例输入:10 20 样例输出:4 11 13 17 19

质数的分解

题目描述:大家小学应该都学过, 每一个大于1的整数, 都可以分解为一个或多个质数的积. 现在,请你来完成这个任务.

输入:第1行,一个整数n,表示待分解的数。(2<=n<=63725)

输出:一行,一个表达式,形如n=a*b*c… 请将分解后的数按从大到小排列。 样例输入1:42

样例输出1:42=7*3*2 样例输入2:7 样例输出2:7=7

用随机数来编写下面两道应用程序: 编写一个石头剪刀布的游戏,说明:

1、用字母a,b,c分别表示石头,剪刀,布

2、由使用者先出石头,剪刀,布,计算机随机产生石头,剪刀,布

3、每一次给出游戏结果,游戏结束时给出获胜结果

编写一个智能计算器程序,说明:

1、可由使用者自己向计算机出题,由计算机做

2、可由计算机向使用者出题,由使用者做,计算机给出分数

3、可进行加减乘除运算,需判断除数为0的情况,否则程序会出错,可进行实数和整数运算 4、程序运行过程中要给出提示信息

程序编写可整体规划,先编写简单部分,然后再逐渐完善。

第一步可以是决定由谁出题,第二步出多少题,做完之后可提示是否继续出题。

寻找完数

题目描述:一个数如果恰好等于它的因子之和,这个数就称为?完数?。例如6=1+2+3.编程找出N以内的所有完数。

输入:第1行:1个整数N,表示查找的区间是[1,N] 输出:若干行,每行一个完数 样例输入:10 样例输出:1 6

编写乘法口诀表

题目描述:输入一个正整数n,输出对应的乘法口诀表 输入:输入一个正整数n

输出:输入n行,每行的算式之间用一个空格隔开 样例输入:3 样例输出: 1*1=1

1*2=2 2*2=4

1*3=3 2*3=6 3*3=9

敲七 版本1

题目描述:输出7和7的倍数,还有包含7的数字例如(17,27,37...70,71,72,73...)。当然,这些数是无限的,所以我们加上一个上限N。即输出不大于N的敲七数。

输入:第1行:1个整数N。(N不大于30000)

输出:若干行,每行一个敲七数。按从小到大的顺序排列。

样例输入:20 样例输出:7 14 17

输出正方形图形

输入n,输出如下图形。每两个*号间用一个空格隔开。样例输入:4 样例输出: * * * * * *

27

* * * * * *

寻找完数

题目描述:一个数如果恰好等于它的因子之和,这个数就称为?完数?。例如6=1+2+3.编程找出N以内的所有完数。

输入:第1行:1个整数N,表示查找的区间是[1,N] 输出:若干行,每行一个完数 样例输入:10 样例输出:1 6

菱形排列的字母 题目描述:

输入一个整数N,表示菱形每边的字母个数,输出如下图所示的字母图案。

输入:第1行:1个整数N(1<=N<=7) 输出:按要求输出字母图案 样例输入: 样例1 2

样例2 3

样例输出: 样例1 Z Y X W 样例2 Z Y X W V U T S

1321. 投篮比赛

题目说明:学校举办投球比赛。比赛规则如下:选手3分钟内在规定位置投球,每投进一球得一分,如果连续投进3球则奖励一分。现在,请你编程帮助统计每位选手的得分情况,并且找出得分最高的选手。如果出现并列最高分则输出靠后选手的编号

输入说明:输入数据的第一行为选手人数N,后面N行的每一行为一名选手的投球得分情况,投进记录Y,没有投进则记录N,以E结束该选手的投球。

输出说明:输出数据包含两行,第一行为得分最高的选手的序号,第二行为该选手的得分。 样例输入: 3

YYNNNYYYYYYNYNYYE YYNNNNNNYE NNNNNYNNNNYYE 样例输出: 1 13

1009. 最大公约数与最小公倍数问题

题目说明:输入二个正整数x0,y0(2≤x0≤100000,

2≤y0≤1000000),求出满足下列条件的P、Q的个数。 条件:1.P、Q是正整数

二要求P、Q以x0为最大公约数,以y0为最小公倍数。 试求,满足条件的所有可能的两个正整数的个数。 [样例]

输入:x0=3 y0=60 输出:4

说明:(不用输出)此时的 P Q 分别为, 3 60 15 12 12 15 60 3

所以,满足条件的所有可能的两个正整数的个数共4种 输入说明:二个正整数x0,y0

输出说明:满足条件的P、Q的个数 样例输入:3 60 样例输出:4

1530.输出图形

题目说明:试编写程序输出以下图形。 输入说明:一个数字n(n<=20) 输出说明:输出对应图形 样例输入:4 样例输出: ******* ***** *** *

1533.百钱买百鸡

题目说明:一个炊事员上街采购,用100元钱买了100只鸡, 其中母鸡一只x元,公鸡一只y元,小鸡一只z元,正好把钱买完。问母鸡、公鸡、小鸡各买多少只(要求每种鸡至少要买一只)? 输入说明:输入x,y,z

输出说明:输出母鸡、公鸡、小鸡只数,用空格隔开 样例输入:3 3.5 0.5 样例输出: 2 15 83 8 10 82 14 5 81

1535. 输出如下图形 题目说明:输出样例图形 输入说明:输入一个数n 输出说明:输出对应的图形 样例输入:3 样例输出: A ABA ABCBA

4、数组、函数练习 1020. 进制转换

题目说明:请你编一程序实现两种不同进制之间的数据转换。

输入说明:输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10则用大写字母A~F表示数码10~15,

28

并且该n进制数对应的十进制的值不超过1000000000,题目说明:把n(2<=n<=16)进制的数化为十进制表示,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)。

输出说明:输出仅一行,包含一个正整数,表示转换之后的m进制数。 样例输入: 16 FF 2

样例输出:11111111

1154. 统计字符次数

题目说明:输入一串小写字母(以\为结束标志),统计出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出)。

输入说明:输入一串小写字母(以\为结束标志),中间可能有非字母输入。

输出说明:输出每个字母在该字符串中出现的次数(若某字母不出现,则不要输出)。 样例输入:aaaabbbccc. 样例输出: a:4 b:3 c:3

1004.数的计数

题目说明:我们要求找出具有下列性质数的个数(包含输入的自然数n):

先输入一个自然数n(n≤1000),然后对此自然数按照如下方法进行处理 ○l不作任何处理: ○2茬它的左边加上一个自然数,但该自然数不能超过原数的一半; ○3加上数后,继续按此规则进行处理,直到不能再而 自然数为止。 输入:6

满足条件的数为 6 (此部分不必输出) 16 26 126 36 136 输出:6

输入说明:一个自然数n(n≤1000) 输出说明:满足条件的数的个数 样例输入:6 样例输出:6

1162.回文

题目说明:一个自然数如果把所有数字倒过来以后和原来的一样,那么我们称它为回文数。例如151和753357。你的任务是输入一个串数n,判断他是否为回文数。 输入说明:输入一个串数n。

输出说明:输出,如果是回文数输出?YES?,否则输出?NO?。 样例输入:121 样例输出:YES

1245.其他进制化成十进制

如 (10101)2=(21)10

输入说明:n(表示n进制)和m,中间用空格分开 输出说明:输出相应的结果 样例输入:2 10101

样例输出:(10101)2=(21)10

1526. 求最大值

题目说明:任意输入一个整数,再把它的各位数字次序打乱重新组合一个新的整数,使其值最大。 输入说明:输入只有一行为1个整数。 输出说明:输出只有一行为1个整数。 样例输入:123 样例输出:321

1546.约瑟夫环问题

题目说明:有M个人,其编号分别为1-M。这M个人按顺序排成一个圈(如图)。现在给定一个数N,从第一个人开始依次报数,数到N的人出列,然后又从下一个人开始又从1开始依次报数,数到N的人又出列...如此循环,直到最后一个人出列为止。

输入说明:输入只有一行,包括2个整数M,N。之间用一个空格分开(0 < n <= m <= 100)。 输出说明:输出只有一行,包括M个整数 样例输入:8 5

样例输出:5 2 8 7 1 4 6 3

1547.输出杨辉三角的前N行

题目说明:输出杨辉三角的前N行(N<10)。

输入说明:输入只有一行,包括1个整数N。(N<10) 输出说明:输出只有N行. 样例输入:3 样例输出: 1 1 1 1 2 1

1155. 进制转换

题目说明:输入一个不大于32767的正整数N,将它转换成一个二进制数。

输入说明:输入一个不大于32767的正整数N 输出说明:输出它转换成的二进制数 样例输入:100 样例输出:1100100

1244. 十进制化成其他进制

题目说明:键盘输入一个十进制的整数,及确定进制n,把这个数转换成相应的n进制输出。

(其中2〈=n〈=16)例如:输入10,n=3 则输出 (10)10=(101)3

输入说明:一个整数m和进制n,用空格分开 把这个数转换成相应的n进制数 样例输入:10 3

样例输出:(10)10=(101)3

1151.排序

题目说明:输入n(n<=100)个整数,要求按照从小到大的顺序排序。

输入说明:共有两行,第一行尉一个n,表示共有n个

29

数字;第二行为用空格分开的n个整数; 输出说明:输出排序后的结果。 样例输入: 5

1 3 5 4 2 样例输出: 1 2 3 4 5

1172. 国名排序

题目说明:小李在准备明天的广交会,明天有来自世界?去重?与?排序?的工作。

输入说明:输入有2行,第1行为1个正整数,表示所生成的随机数的个数:N

第2行有N个用空格隔开的正整数,为所产生的随机数。

输出说明:输出也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。 样例输入: 10

各国的客房跟他们谈生意,小李要尽快的整理出名单给经理,你能帮他把客户来自的国家按英文字典次序排好吗?

例如小李手上有来自加拿大,美国,中国的名单,排好的名单应是美国,加拿大,中国

输入说明:第一行为一个n(n<=100)表示n个国家,第2行到第n+1行分别为n个国家的名字. 输出说明:输出n个国家按字典顺序的排列. 样例输入: 3 China Canada America 样例输出: America Canada China

字符串的处理

1552. 统计单词的个数

题目说明:输入一行字符,包含若干个单词,约定相邻的两个单词用空格或者标点符号隔开,编程统计单词的个数。

输入说明:输入一行字符。 输出说明:输出单词的个数 样例输入:I am a student. 样例输出:4

1559.兔子繁殖问题

题目说明:有一对小兔,过一个月之后长成大兔,到第四个月就可以生下一对小兔,并且以后每个月都 生下一对小兔。而所生的一对小兔也同样到一个月之后长成大兔,到第四个月就可以生下一 对小兔,并且以后也每个月都生下一对小兔.假设所有的兔子均不死亡,问第n个月后共有多少对兔子?请设计一个程序,解决这一问题。

输入说明:一个整数n(n <= 50) 输出说明:第n个月后共有多少对兔子 样例输入:5 样例输出:3

提示:递推(可用迭代或数组)

1507.明明的随机数

题目说明:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成

20 40 32 67 40 20 89 300 400 15 样例输出: 8

15 20 32 40 67 89 300 400

2004. 奖学金

题目说明:某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学 排在前面,这样,每个学生的排序是唯一确定的。

任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前五名名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分) 是: 7 279 5 279

这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是 279 (总分等于输入的语文、数学、英语三科成绩之和) ,但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是: 5 279 7 279

则按输出错误处理,不能得分。 输入说明:输入包含n+1行:

第1行为一个正整数n,表示该校参加评选的学生人数。

第2到n+1行,每行有3个用空格隔开的数字,每个数字都在O到100之间z第1行的3个数 字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为l~n (恰好是输入数据的行号减1)。

所给的数据都是正确的,不必检验。

输出说明:输出t共有5行,每行是两个用空格隔开的正整数,依次表示前5名学生的学号和总分。 样例输入: 6 90 67 80 87 66 91 78 89 91 88 99 77 67 89 64 78 89 98 样例输出:

30

6 265 4 264 3 258 2 244 1 237

1176. 最大公约数

题目说明:给出两个正整数A,B,求它们的最大公约数。 输入说明:第一行一个正整数A。 第二行一个正整数B。在60%的数据中,1<=A,B<=10^18 ;在100%的数据中,1<=A,B<=10^3000

输出说明:在第一行输出一个整数,表示A,B的最大公约数。

样例输入:18 24 样例输出:6

提示:高精度计算

1017.打保龄球 提示:模拟

狐狸找兔子

题目说明:围绕着山顶有n个洞,一只狐狸和一只兔子住在各自的洞里。狐狸想吃掉兔子。一天,兔子对狐狸说:?你想吃我有一个条件,先把洞从1-n编上号,你从第n号洞出发,先到1号洞找我;第二次隔1个洞找我,第三次隔2个洞找我,以后依次类推,次数不限,若能找到我,你就可以饱餐一顿。不过在没有找到我以前不能停下来。?狐狸满口答应,就开始找了。它从早到晚进了1000次洞,累得昏了过去,也没找到兔子,请问,兔子躲在几号洞里? 输入说明:输入n(1

输出说明:从小到大输出洞口编号,中间用空格隔开。如兔子被找到的话,输出0 样例输入:3 样例输出:2

31

本文来源:https://www.bwwdw.com/article/rlhd.html

Top