77范文网 - 专业文章范例文档资料分享平台

C 概念基础讲解1(5)

来源:网络收集 时间:2018-11-24 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

以内的所有阿姆斯特朗数。 输入说明:输入一个数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

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C 概念基础讲解1(5)在线全文阅读。

C 概念基础讲解1(5).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/305669.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: