




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第1章C++语言简介1.1C++程序的基本结构1.2算法与程序1.3C++程序的基本要素1.4分析问题、编码和运行21.1C++程序的基本结构
例1-1第一个C++程序,在计算机屏幕上显示:
HelloWorld!//Example1-1:屏幕上显示:HelloWorld!#include<iostream> usingnamespacestd; intmain() { cout<<"HelloWorld!"<<endl; return0; }3结构分析1、C++程序由函数组成。该程序只由一个主函数main()构成。2、一对花括号“{}”是函数的定界符。3、函数由语句组成语句用分号结束;41.2算法与程序算法:也就是解决问题的方案。举例:给定两个正整数p和q,求其最大公因数?古希腊数学家欧几里德的算法:步骤1:如果p<q,交换p和q步骤2:求p/q的余数r步骤3:如果r=0,则q就是所求的结果如果r!=0,做如下工作:
令p=q,q=r,重复步骤2、3,直到r=0为止5例1.2按照欧几里德算法编程//Example1-2:计算两个正整数的最大公因数#include<iostream> usingnamespacestd; intmain(){ //说明三个整型变量p,q,r intp,q,r; //提示用户由键盘输入两个正整数
cout<<"Pleaseinputtwointegers:"<<endl; cin>>p>>q;6接上页: //如果p<q,交换p和q if(p<q) { r=p; p=q; q=r; } //计算p除以q的余数r r=p%q;7接上页: //只要r不等于0,重复进行下列计算
while(r!=0) { p=q; q=r; r=p%q; } //输出结果
cout<<"Themaximumcommondivisoris"<<q<<"."<<endl; return0;}81.3C++程序的基本要素一、C++关键词asm,auto,bad_cast,bad_typed,bool,break,case,catch,char,class,const,const_cast,continue,default,delete,do,double,dynamic_cast,else,enum,except,extern,explicit,false,finally,float,for,friend,goto,if,inline,int,long,mutable,namespace,new,operator,private,9C++关键词(续)protected,public,register,reinterpret_cast,return,short,signed,sizeof,static,static_cast,struct,switch,template,this,throw,try,type_info,typedef,typeid,union,unsigned,using,virtual,void,volatile,while10二、注释1、多行注释:/*注释内容*/2、单行注释://注释内容11三、输入和输出(1)标准输入流对象cin格式:cin>>v1>>v2>>v3…说明:1)>>称为提取运算符2)V1、V2、V3是已定义的变量3)输入多个数据,数据之间可以用空格、回车键或Tab分开12(2)标准输出流对象cout格式:cout<<E1<<E2<<E3…1)<<称为插入运算符2)输出表达式E1、E2、E3例如:cout<<"Hello";//字符串常量
cout<<4;//常量
cout<<a;//输出变量的值
cout<<a+6;//先计算后输出131.4分析问题、编码、运行1.算法研制2.编写程序;3.编辑源程序4.编译和连接5.反复上机调试程序,直到改正了所有的编译错误和运行错误。6.运行。14例1-3加法计算器程序#include<iostream>usingnamespacestd; intmain(){ doublea,b,c; cout<<"Pleaseinputtwonumbers:"; cin>>a>>b; c=a+b; cout<<a<<"+"<<b<<"="<<c<<endl; return0;}151-4:显示生日卡#include<iostream>usingnamespacestd; intmain(){ charname1[41],name2[41]; cout<<endl<<"Pleaseinputyourfriend'sname:"; cin>>name1; cout<<endl<<"Pleaseinputyourname:"; cin>>name2;16 cout<<endl<<"===================================="<<endl; cout<<"Mydear"<<name1<<","<<endl; cout<<"Happybirthdaytoyou!"<<endl; cout<<"yours,"<<endl; cout<<""<<name2<<endl; cout<<"===================================="<<endl; return0;}17例1-5:用梯形法计算定积分使用梯形法计算定积分,其中a=0,b=1,被积函数为sin(x),取积分区间等分数为1000。abxyf(x)xixi+1h梯型面积=(上底+下低)x高218//Example#include<iostream>#include<cmath> usingnamespacestd; intmain(){ doublea,b;doubleh; doublesum; intn; inti; a=0.0; b=1.0; n=1000; h=(b-a)/n; sum=(sin(a)+sin(b))/2;19
for(i=1;i<n;i=i+1) sum=sum+sin(a+i*h); sum=sum*h; cout<<"Theresultis"<<sum<<endl; return0;}20例1-6:计算星球之间的万有引力#include<iostream>usingnamespacestd; doublegrav(doublem1,doublem2,doubledistance){ doubleg,G=6.67E-11; g=G*m1*m2/(distance*distance); returng; }21intmain(){doubleGse,Gme,Msun,Mearth,Mmoon,Dme; Msun=1.987E30; //太阳质量1.987×1030千克Mearth=5.975E24; //地球质量5.975×1024千克Gse=grav(Msun,Mearth,1.495E11);//太阳与地球两者间距1.495×1011米
cout<<"Thegravitationbetweensunandearthis"<<Gse<<"N."<<endl; Mmoon=7.348E22; //月亮质量7.348×1022千克Dme=3.844E5; //月亮与地球两者间距3.844×105米
Gme=grav(Mmoon,Mearth,Dme); cout<<"Thegravitationbetweenmoonandearthis"<<Gme<<"N."<<endl; return0;}22学好计算机的唯一途径是
你的编程能力与你在计算机上投入的时间成
结 束 语上机练习正比23第2章基本数据类型与表达式2.1数据类型2.2常量2.3变量2.4运算符与表达式1.算术运算符和算术表达式2.关系运算符和关系表达式3.逻辑运算符和逻辑表达式4.赋值运算符和赋值表达式5.自增运算符和自减运算符2.5表达式中各运算符的运算顺序2.6类型不同的数据之间的混合算术运算程序设计举例242.1数据类型C++的数据有两种:常量和变量。常量通过本身的书写格式就说明了该常量的类型;变量必须先说明其类型,否则程序无法为该变量分配存储空间。在计算机中为了区别不同的数,使用了不同的表示方法。包括:整数的表示实数的表示字符数据的表示数组的表示25数据类型计算机只能存放二进制数据。不同类型的事物如何区分和描述?由此产生数据类型。不同类型的数据占据不同长度的存储单元。不同类型的数据对应不同的值域范围。不同类型的数据对应不同的操作(运算)及规则。数据类型越丰富,求解能力越强大。26图2.1C++的数据类型27基本数据类型
数据类型类型说明浮占用字节字符型 char1个短整数 short2个整型 int4个浮点型 float4个双精度型 double8个28数据在计算机中的存放数据在计算机中采用二进制存放;一个字节8个二进制位,示意图如下:数的表示范围:-2^7~2^7-1(-128~127)显然,一个字节表示数的范围是有限的。要表示更大范围内的数,就要使用多个字节。7029整数的存储格式字符型短整型
短整数表示范围为:-2^15~2^15-1(-32768~32767)长整型
长整数表示范围为:-2^31~2^31-17015870312423161587030实数的表示实数也称为浮点数,用于表示小数;有两种形式:十进制形式:xxxxx.xxxx指数形式:xxx.Exx一般浮点数的可以达到7位有效数字。例如1234.567。双精度浮点数的有效位数可以达到15~16位。尾数部分指数部分3124231615870312.2常量1.整型常量8进制常量,例04400,0777,010010进制常量,例230416进制常量,0x900,0xABC,0xffff2.实型常量0.0,
2.68,3.141593,637.312,32767.0,
32768.0,…0.0E0,
6.226E
4,1.267E20,…323.字符型常量字符常量,例'a','A','1','','+',转义常量'\n'(换行),'\r'(回车),'\t'(横向跳格),'\''(单引号),…4.字符串常量"VisualC++","12.34","Thisisastring.\n",…5.布尔型常量整数0表示false,1表示true332.3变量一.变量定义格式:<类型说明符><变量名1>;例:charc1,c2; //说明了2个字符型变量inti,j,k; //说明了3个整型变量longlen; //说明了1个长整型变量
floataverage,sum; //说明了两个浮点类型的变量
doubledistance,weight; //说明了两个双精度类型的变量34二.变量(标识符)命名命名规则:(1)变量名只能由字母、数字或下划线组成;(2)变量名的第一个字符必须是字母或下划线;(3)变量名长度不超过32个字符(TC);(4)不要用保留字定义变量名(有32个保留字)。合法变量名:
a、b1、_area、employee_name不合法变量名:1-name、maxone、float、*account35三.变量初始化定义变量时赋值例如:charc=‘A’;intcount=0;intcount(0);362.4运算符与表达式运算是数据的加工过程。记述不同运算的符号称为运算符。参加运算的数据称为操作数或运算数。由运算符运算符和运算数组成的式子是表达式。不同类型的表达式按不同运算规则进行计算37一、算术运算符和算术表达式算术运算符:+ - */%运算对象:数值变量、常数、函数、表达式等计算结果:数值优先级:先乘、除、取余,后加、减结合性:从左至右注意事项:5X2
应写成5*X*X(x+y)(x-y)改为(x+y)*(x-y)38二.关系运算符和关系表达式关系运算是对两个运算数进行大小关系等的比较。关系表达式用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子。39运算符名称例子关系>大于a>ba大于b<小于a<ba小于b==等于a==ba等于b!=不等于a!=ba不等于b>=大于等于a>=ba大于等于b<=小于等于a<=ba小于等于b40关系表达式计算结果逻辑值(true和false)。c++语言没有逻辑型数据以“非0”代表“真”,以“0”代表“假”。例如,“5==3”的值为“假”;“5>=0”的值为“真”优先级:{>,>=,<,<=}高于{==,!=}41三.逻辑运算符和逻辑表达式计算结果:逻辑值(“真”和“假”)优先级:!>&&>||赋值运算<&&、||
<关系运算<算术运算<!(非)运算对象:算术、关系、赋值、字符及逻辑表达式运算符名称例子关系!逻辑非!a非a&&逻辑与a&&ba与b||逻辑或a||ba或b42举例x*y>z&&x*y<100||-*y>0&&!isgreat(z)判别闰年表达式:(year%4==0&&year%100!=0)||year%400==0xc或xb至少之一成立
x<=c||x>=b43i和j均小于或等于100,或者i和j均大于k(i<=100&&j<=100)||(i>k&&j>k)选未婚、30岁以上女讲师和35岁以上男副教授!婚否&&((性别=‘男’&&职称=‘副教授’&&年龄〉=35)||(性别=‘女’&&职称=‘讲师’&&年龄〉=30))44四.赋值运算符和赋值表达式1.赋值运算符“=”:2.赋值的格式:变量名=表达式3.作用将表达式的值存入变量45举例i=j=m*n;计算表达式m*n的值,将其结果存入变量j中,然后再将结果存入变量i中。temp=a;a=b;b=temp;交换a和b的值sum=sum+i;(等价于sum+=i;)计算sum与i的和,结果送sum465、自增、自减运算符表2-2自增运算符和自减运算符的用法举例i++; //i增加1
i; //i减少1472.5表达式中各运算符的运算顺序优先级别运算符运算形式名称或含义1()[](e)a[e]圆括号数组下标2-+++--!-e++x或x++负号和正号自增运算和自减运算逻辑非3*/%e1*e2乘、除和求余4+-e1+e2加和减6<<=>>=e1<e2关系运算(比较)7==!=e1==e2等于和不等于比较482.6类型不同的数据之间混合运算1.级别低的类型转换为级别高的类型。各类型按级别由低到高的顺序:char,int,unsigned,long,unsignedlong,float,double。2.可以使用强制类型转换。d1=(double)i1/i2;49例2-1:取整型量的最低4位#include<iostream>usingnamespacestd;intmain(){ inti; cout<<"请输入一个整数:"; cin>>i; cout<<i<<"的最低4位对应的十进制数是:"<<(i&0X0F)<<endl; return0;}50例2-2根据三边长求三角形面积#include<iostream>#include<cmath>usingnamespacestd;intmain(){ doublea,b,c,s,area; cout<<"Pleaseinputa,b,c="; cin>>a>>b>>c; s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); cout<<"area="<<area<<endl; return0;}51例2-3:解一元二次方程求一元二次方程ax2+bx+c=0的根,其中系数a,b,c为实数,由键盘输入。52#include<iostream>#include<cmath>usingnamespacestd;intmain(){ doublea,b,c,delta,p,q; cout<<"Pleaseintputa,b,c="; cin>>a>>b>>c; delta=b*b-4*a*c;
p=-b/(2*a); q=sqrt(fabs(delta))/(2*a);53
if(delta>=0) cout<<"x1="<<p+q<<endl<<"x2="<<p-q<<endl; else { cout<<"x1="<<p<<"+j"<<q; cout<<endl<<"x2="<<p<<"-j"<<q<<endl; } return0;}54例2-4:温度转换输入一个华氏温度,计算并输出对应的摄氏温度#include<iostream>usingnamespacestd;intmain(){ doublec,f; cout<<"请输入一个华氏温度:"; cin>>f; c=5.0/9.0*(f-32); cout<<"对应于华氏温度"<<f<<"的摄氏温度为"<<c<<endl; return0;}55例2-5:反序输出输入一个四位无符号整数,反序输出这四位数。#include<iostream>usingnamespacestd;intmain(){ unsignedintn; charc1,c2,c3,c4; cout<<"请输入一个界于1000与9999之间的数:"; cin>>n; cout<<"反序输出前的数为:"<<n<<endl;56 c1=n%10+'0'; //分离个位数字
c2=n/10%10+'0'; //分离十位数字
c3=n/100%10+'0'; //分离百位数字
c4=n/1000+'0'; //分离千位数字
cout<<"反序输出后的数为:"<<c1<<c2<<c3<<c4<<endl; return0;}57例2-6:大小写转换输入一个字符,判断它是否为大写字母,如是,将其转换为对应的小写字母输出;否则,不用转换直接输出。58#include<iostream>usingnamespacestd;intmain(){ charch; cout<<"请输入一个字母:"; cin>>ch; if(ch>='A'&&ch<='Z')ch=ch-'A'+'a'; cout<<"将大写转换为小写后,该字母为:"<<ch<<endl; return0;}59例2-7:找零钱问题假定有伍角、壹角、伍分、贰分和壹分共五种硬币,在给顾客找硬币时,一般都会尽可能的选用硬币个数最小的方法。例如,当要给某顾客找七角二分钱时,会给他一个伍角,2个壹角和1个贰分的硬币。请编写一个程序,输入的是要找给顾客的零钱(以分为单位),输出的是应该找回的各种硬币数目,并保证找回的硬币数最少。60#include<iostream>usingnamespacestd;intmain(){ intchange; //存放零钱的变量
cout<<"请输入要找给顾客的零钱(以分为单位)"; cin>>change; cout<<"找给顾客的五角硬币个数为:"<<change/50<<endl; change=change%50; cout<<"找给顾客的壹角硬币个数为:"<<change/10<<endl;61
change=change%10;cout<<"找给顾客的伍分硬币个数为:"<<change/5<<endl;change=change%5;cout<<"找给顾客的贰分硬币个数为:"<<change/2<<endl;change=change%2;cout<<"找给顾客的壹分硬币个数为:"<<change<<endl;return0;}62学好计算机的唯一途径是
你的编程能力与你在计算机上投入的时间成
结 束 语上机练习正比63第3章控制结构3.1程序的基本控制结构3.2C++的控制结构1.顺序结构2.选择结构3.循环结构程序设计举例643.1程序的基本控制结构一.结构化程序设计结构化程序设计方法的基本思想是任何程序都可以用三种基本结构表示,即顺序结构,选择结构,循环结构。由这三种基本结构经过反复嵌套构成的程序称为结构化程序语句序列1语句序列2语句序列1条件?成立不成立语句序列2语句序列不成立成立条件?顺序结构选择结构循环结构65二.模块化程序结构1.模块化把程序划分为若干个模块,每个模块独立存放、一个模块完成一个功能2.目的降低程序的复杂度,使设计出来的程序便于阅读、调试和维护。3.一个模块可以是一条语句、一段程序、一个函数等4.基本特征仅有一个入口和一个出口
663.2C++的控制结构1、顺序结构说明语句赋值语句I/O语句复合语句和空语句672、选择结构(1)if语句格式:
if(表达式)
{语句序列1}else{语句序列2}68例3-1编程实现分段函数69#include<iostream>usingnamespacestd;intmain(){ doublex,y;
cout<<"Pleaseinputx="; cin>>x;
if(x<0) { y=x+1; cout<<"x="<<x<<",y=x+1="<<y<<endl;
}70 elseif(x<1) //0≤x<1 { y=1;
cout<<"x="<<x<<",y="<<y<<endl; } else //1≤x { y=x*x*x; cout<<"x="<<x<<",y=x*x*x="<<y<<endl;
} return0;}71(2)switch语句语句格式:
switch(整数表达式)
{case数值1:语句序列1;
…...case数值n:语句序列n;
[default:
语句序列n+1;]}
72例3-2:将百分制的分数转换为5级制分数编写程序,将百分制的学生成绩转换为优秀、良好、中等、及格和不及格的5级制成绩。标准为:
优秀:100-90分;
良好:80-89分;
中等:70-79分;
及格:60-69分;
不及格:60分以下。73#include<iostream>usingnamespacestd;intmain(){ intold_grade,new_grade; cout<<"Pleaseinputthescore:"; cin>>old_grade;74 switch(old_grade/10) //根据转换值进行分支选择
{ case10: case9: new_grade=5; break; case8: new_grade=4; break; case7: new_grade=3; break;75case6: new_grade=2; break; default: new_grade=1; } cout<<"Beforetransformed,thescoreis"<<old_grade<<endl; cout<<"Aftertransformed,thescoreis"<<new_grade<<endl; return0;}763.循环结构(1)while语句格式:
while(表达式)循环体不成立语句序列成立条件?77
例3-3:计算常数e的值计算,当通项时停止计算78#include<iostream>usingnamespacestd;intmain(){ doublee=1.0;
doubleu=1.0; intn=1; while(u>=1.0E-7) { u=u/n; e=e+u;n=n+1; } cout<<"e="<<e<<"(n="<<n<<")"<<endl; return0;}79(2)do~while语句格式:
do
语句序列
while(表达式);条件?语句序列成立不成立80例3-4用do-while重新编写例3-3的程序#include<iostream>usingnamespacestd;intmain(){ doublee=1.0; doubleu=1.0; intn=1;
do { u=u/n; e=e+u; n=n+1; }while(u>=1.0E-7); cout<<"e="<<e<<"(n="<<n<<")"<<endl; return0;}81(3)for语句格式:
for(表达式1;表达式2;表达式3)循环体82for的执行过程(1)计算表达式1;(2)计算表达式2值为非0时,执行步骤3;值为0时退出循环;(3)执行循环体;(4)计算表达式3;(5)返回(2);83例3-5:计算1+2+3+…+100#include<iostream>usingnamespacestd;intmain(){ intsum=0; for(inti=1;i<=100;i++) sum=sum+i; //累加求和
cout<<"1+2+3+…+100="<<sum<<endl; return0;}84例3-7:用迭代公式求平方根设,则迭代公式为
迭代结束条件取相对误差。85#include<iostream> #include<cmath> usingnamespacestd;constdoubleEPS=1.0e-10;intmain(){ doublea,x; cout<<"Pleaseinputthevalue:";
cin>>a; doublex0,x1; x1=1.0;86
if(a>0.0) //避免负数开方
{ do {x0=x1; x1=(x0+a/x0)/2; }while(fabs((x0-x1)/x1)>=EPS); //fabs()函数为求绝对值的库函数
x=x1; } else x=a;87 if(x<0) cout<<"Thenegativedoesnothavesquareroot!"<<endl; else cout<<"Thesquarerootof"<<a<<"is"<<x<<endl; return0;}88例3-8:求π的近似值#include<iostream>#include<cmath>usingnamespacestd;intmain(){ ints=1; doublen=1.0,u=1.0,pi=0.0; while(fabs(u)>=1.0e-4) { pi=pi+u; //累加通项
n=n+2; s=-s; //符号位的生成
u=s/n; //通项
} cout<<"pi="<<4*pi<<endl; return0;}89例3-9:打印所有的水仙花数如果一个三位数的个位数、十位数和百位数的立方和等于该数自身,则称该数为水仙花数。编一程序求出所有的水仙花数。90#include<iostream>usingnamespacestd;intmain(){ intn,i,j,k; for(n=100;n<=999;n++) { i=n/100;//取出n的百位数
j=(n/10)%10;//取数n的十位数
k=n%10;//取出n的个位数
if(n==i*i*i+j*j*j+k*k*k) cout<<n<<"="<<i<<"^3+"<<j<<"^3+"<<k<<"^3"<<endl; }return0;}91例3-10:制作乘法表#include<iostream>usingnamespacestd;intmain(){ inti,j; for(i=1;i<10;i++) { for(j=1;j<=i;j++) cout<<j<<"*"<<i<<"="<<i*j<<"\t"; cout<<endl; }return0;}92例3-11:统计阶乘n!的末尾中0的个数对于任意给定的一个正整数n,统计其阶乘n!的末尾中0的个数。93#include<iostream>usingnamespacestd;intmain(){ intn;intsum=0;inti,k; cout<<"Pleastinputapositivenumber:"; cin>>n; for(i=5;i<=n;i=i+5)//只有5的倍数才含5的因子
{ intm=i; for(k=0;m%5==0;k++) m=m/5; sum=sum+k; } cout<<"Thenumberofzeroin"<<n<<"!is:"<<sum<<endl; return0;}94学好计算机的唯一途径是
你的编程能力与你在计算机上投入的时间成
结 束 语上机练习正比95第4章数组与字符串4.1数组1.一维数组2.二维数组3.多维数组4.2字符型数组和字符串处理库函数1.字符型数组的定义和初始化2.字符串的输入与输出3.字符串处理库函数964.1数组数据类型(1)基本类型:整型、字符型、实型(2)构造类型:由基本类型数据按一定规则组成的,包括数组、结构体、共用体数组(1)具有相同数据类型的变量集合,这些变量名称相同,下标不同,称为数组元素(2)有一个下标——一维数组(3)有两个下标——二维数组974.1.1一维数组1、一维数组的定义格式类型说明符数组名[常量表达式]2、说明(1)数组名命名规则和变量名相同。(2)数组名后用方括弧括起来的常量表达式表示下标长度(3)C语言的下标从0开始,必须是整型变量或常量。(4)数组在内存中存储时,按下标递增的顺序连续存储各元素例如:intarray[10];
表示数组名为a,有10个元素983、一维数组的初始化(1)定义数组时顺序对各元素赋以初值例如:inta[10]={0,1,2,3,4,5,6,7,8,9};(2)全部元素赋初值时,可以不指定数组长度例如:
inta[5[={1,2,3,4,5};可以写成inta[]={1,2,3,4,5};(3)可以只给一部分元素赋值。例如:inta[10[={0,1,2,3,4};前面5个元素赋初值,后5个元素值为0。99一维数组初始化例:intA[5];在内存存储如图数组的首地址是数组名A数组的首地址也是第一个元素的地址&A[0]C++语言中,数组的整体不能参加数据处理,参加处理的只能是数组中的元素变量。所以要对数组进行初始化。例如:intdata[5]={,4,,8,};赋值如图A[0]A[1]A[2]A[3]A[4]100例4-1题目:给一维数组x输入10个整数,找出x数组中的最大数和最小数。算法分析:1、假设数组中第1个元素最大,令xmax=a[0]2、将a[i](0<=i<n)与max进行比较,若a[i]<xmax,i=i+1,再执行2否则,令xmax=a[i],i=i+1,再执行23、循环结束,求出最大元素并输出max。输入 21731249输出 max=12101//Example4-1:#include<iostream.h>intmain(){intarray[7];cout<<"Pleaseinputanarraywithsevenelements:"<<endl; for(inti=0;i<7;i++) cin>>array[i]; intbig=array[0]; for(intj=0;j<7;j=j+1) if(array[j]>big)big=array[j]; cout<<"max="<<big<<endl; return0;}102二维数组定义格式:<类型><数组名>[<常量表达式1>][<常量表达式2>];例如,三个学生四门课程成绩数据如下:858793888690958978918295利用二维数组存放这些数据更能表现数据之间相互联系的特征。每一行数据表示该学生的各门课程的成绩,而每一列数据表示该门课程各学生的成绩。该数组定义为:intmatrix[3][4];103二维数组存储结构逻辑结构:二维数组恰似一张表格(或矩阵)。数组元素中的第一个下标值表示该元素在表格中的行号,第二个下标为列号。
M[3][3]具有如下逻辑结构:
M[0][0]M[0][1]M[0][2]M[1][0]M[1][1]M[1][2]M[2][0]M[2][1]M[2][2]存贮结构:二维数组在内存中按一维数组存放、占据一片连续的存贮单元;是“按行顺序”在内存中分配存贮单元。104二维数组初始化1.按照二维数组元素的物理存储次序给所有或部分数组元素提供数据值intscore[3][4]={85,87,93,88,86,90,95,89,78,91,82,95};//给数组stu_score每个元素都提供初值floatmatrix[2][3]={1.0,3.0};//仅为数组matrix的前2个元素提供初值1052.以行结构方式提供各数据值
intscore[3][4]={{85,87,93,88}, {86,90,95,89},{78,91,82,95}};1064.2字符型数组和字符串处理库函数字符串用双引号括起来,例如,”abc”;用字符型数组存放字符串,存放时,在有效字符后自动加’\0’;称’\0’为空值,是字符串结束标志;有效字符的个数称为字符串长度。例如,”abc”的长度为3,但占4个字节(’\0’占一位)。107字符型数组的定义和初始化charweekday[7]={"MONDAY"};charweekday[7]="MONDAY";字符串的输入与输出charname[20];cin>>name;cin.get(name,n);//第一个是字符数组变量,第二个指定向这个变量//中读入几个字符cout<<name;108例4-2字符串的输入与输出输入和输出 Pleaseinputanamewithblank(within19characters):CongZhenPleaseinputthenameagainCongZhen109例4-2源程序#include<iostream.h>intmain(){ charname1[20],name2[20]; cout<<"Pleaseinputanamewithblank(within19characters):"<<endl; cin.get(name1,20); cout<<"Pleaseinputthenameagain"<<endl; cin>>name2; cout<<"Usingfunctionget,thenamestoringinthevariableis:"<<name1<<endl; cout<<"Usingoperater<<,thenamestoringinthevariableis:"<<name2<<endl; return0;}110字符串处理库函数需要添加#include<string.h>stpcpy():字符串拷贝;strcat():字符串连接;strchr():在字符串中查找字符;strcmp():字符串比较;strlen():求字符串长度;strlwr():将字符串中的大写字母转换为小写字母;strrev():反转字符串;strstr():在字符串中查找另一个字符串;strupr():将字符串中的小写字母转换为大写字母;…111例4-3编写一个用来计算字符串长度的函数mystrlen(),并用主函数验证算法分析:1)设一个计数器变量len=02)从数组s[len]第一个元素开始进行处理3)若当前的元素值s[len]非空(‘\0’),则len+1,继续执行3;否则,退出循环。4)打印结果len112程序逻辑功能框图len=0str[n]len=len+1打印结果lenstr[len]=‘\0’?是否113//Example4-3:求字符串的长度#include<iostream.h>//计算字符串的长度的函数intmystrlen(charstring[]){intlen=0;while(string[len]!='\0')len=len+1;returnlen;}114//测试计算字符串长度的主函数intmain(){ charstring[100]; intlen=0; cout<<"Pleaseinputastring(within99characters):"<<endl; cin>>string; cout<<"Thelengthofthestringis:"<<mystrlen(string)<<endl; return0;}输入 china输出 Thelengthofthestringis:51154.3结构体类型迄今为止,已介绍了基本类型(或称简单类型)的变量(如整型、实型、字符型变量等),也介绍了一种构造类型数据——数组,数组中的各元素是属于同一个类型的。但是只有这些数据类型是不够的。有时需要将不同类型的数据组合成一个有机的整体,以便于引用。这些组合在一个整体中的数据是互相联系的。116例如,工人工资单:姓名、单位、编号.....例如,学生成绩单:学号、姓名、性别、各科成绩等这些项都与某一学生相联系。可以看到性别(sex)、年龄(age)、成绩(score)、地址(addr)是属于学号为10010和名为“LiFun”的学生的。如果将num、name、sex、age、score、addr分别定义为互相独立的简单变量,难以反映它们之间的内在联系。1174.3.1结构体类型的定义
结构体作为一种数据构造类型,在C语言程序中也许需要经历定义——声明——调用的过程。结构体是由不同的数据类型的数据组成的。组成结构体的每个数据成为该结构体的成员项简称成员。在程序使用结构体时,首先要对结构体进行描述,这称为结构体的定义。1184.3.1结构体类型的定义struct结构名{数据类型成员名1;数据类型成员名2;
……
数据类型成员名n;};structstudent{charname[20];unsignedlongnumber;floatmath;floatenglish;floatphysics;};119三种结构体变量的声明(1)先定义结构体类型,再定义结构体类型变量。例如,日期类型可以定义为
structdate{intda_year;charda_mon;charda_day;};structdateyesterday,today,tomorrow;120三种声明结构体变量的方式(2)(2)定义类型的同时声明变量。例如,
structdate{intda_year;charda_mon;charda_day;}yesterday,today,tomorrow;声明了3个日期类型的变量:yesterday、today和tomorrow。121三种声明结构体变量的方式(3)(3)直接定义结构体类型变量。例如,
struct{intda_year;charda_mon;charda_day;}yesterday,today,tomorrow;不出现结构体类型名。122程序设计举例例4-5编写一个程序,实现矩阵相乘运算例4-6编写一个用于对整型数组进行排序的程序,排序方法使用简单的交换排序法例4-7编写一个字符串处理程序,将一个字符串之中的所有小写字母转换为相应的大写字母例4-8使用数组编写一个统计学生课程平均分的程序例4-9使用结构体重新编写上题的程序123例4-5实现矩阵相乘运算算法说明:矩阵S(LxN)和矩阵T(NxM)相乘。S是L行、N列;T是N行、M列。要求:S的列数和T的行数必须相同。
124算法说明(续)S=
103211
T=
312201121
SxT=
1*3+0*2+3*11*1+0*0+3*21*2+0*1+3*12*3+1*2+1*1
2*1+1*0+1*22*2+1*1+1*1
=Rr11r12r13r21r22r23
125矩阵乘法算法用两重循环实现对Cij的求值:for(i=0;i<l;i=i+1)for(j=0;i<n;j=j+1)
求Cij;其中“求Cij”又可以细化为:
Cij=0;for(k=0;k<m;k=k+1)
Cij=Cij+Aik×Bkj126//4-5:计算两个矩阵的乘积#include<iostream.h>intmain(){constintL=4; constintM=5;constintN=3; doublea[L*M]={1.0,3.0,-2.0,0.0,4.0, -2.0,-1.0,5.0,-7.0,2.0, 0.0,8.0,4.0,1.0,-5.0, 3.0,-3.0,2.0,-4.0,1.0 }; doubleb[M*N]={4.0,5.0,-1.0, 2.0,-2.0,6.0, 7.0,8.0,1.0, 0.0,3.0,-5.0, 9.0,8.0,-6.0 }; doublec[L*N]; inti,j,k;127//4-5:计算两个矩阵的乘积(续)for(i=0;i<L;i=i+1) for(j=0;j<N;j=j+1) {c[i*N+j]=0; for(k=0;k<M;k=k+1) c[i*N+j]=c[i*N+j]+a[i*M+k]*b[k*N+j]; } cout<<"Theresultisc="<<endl; for(i=0;i<L;i=i+1) { for(intj=0;j<N;j=j+1) cout<<c[i*N+j]<<""; cout<<endl; } return0;}128例4-6冒泡排序算法分析:(1)两两比较相邻元素A(I)和A(I+1)(I=1,2,…N-1),如果A(I)>A(I+1),则交换它们的位置A(I)
A(I+1);(2)对剩下的N-1个元素,再两两进行比较,按同样规则交换它们的位置,经过N-2次比较,将次最大值交换到A(N-1)的位置;(3)如法炮制,经过N-1趟的“冒泡处理”,每趟进行N-i次的比较,全部数列有序。129130//Example4-6:冒泡排序#include<iostream.h>intmain(){ constintCOUNT=16; intlist[COUNT]={503,87,512,61,908,170,897,275, 653,426,154,509,612,677,765,703 }; for(inti=0;i<COUNT;i=i+1) for(intj=COUNT-1;j>i;j=j-1) if(list[j-1]>list[j]) {inttmp=list[j-1];list[j-1]=list[j];list[j]=tmp;} cout<<"Theresultis:"<<endl; for(intk=0;k<16;k++)cout<<list[k]<<""; cout<<endl; return0;}131例4-7将小写字母转换为大写字母#include<iostream.h>intmain(){ charstr[]="Thisisasample"; cout<<"Theoriginalstringis:"<<str<<endl; inti=0; while(str[i]!=0) { if(str[i]>='a'&&str[i]<='z')str[i]=str[i]-'a'+'A'; i=i+1; } cout<<"Aftertransform:"<<str<<endl; return0;}132例4-8统计学生课程平均分的程序定义二维数组student[6][5],其中,给数组student前4列元素读值,第1列为学号,第2列到第4列为4门课程的成绩。第5列为平均分,通过计算求得。133//4-8:统计学生课程的平均分#include<iostream.h>#define PERSON 6#define COURSE 3intmain(){ intstudent[PERSON][COURSE+2]; int i,j; cout<<"Pleaseinputdataofstudent:"<<endl;134
for(i=0;i<PERSON;i=i+1){ cin>>student[i][0];student[i][COURSE+1]=0; for(j=1;j<=COURSE;j=j+1) { cin>>student[i][j];student[i][COURSE+1]=student[i][COURSE+1]+student[i][j]; } student[i][COURSE+1]=student[i][COURSE+1]/COURSE;}135//4-8:统计学生课程的平均分 cout<<"学号高数英语体育平均分"<<endl; cout<<"--------------------------------------"<<endl; for(i=0;i<PERSON;i=i+1) { for(j=0;j<=COURSE+1;j=j+1) cout<<student[i][j]<<"\t"; cout<<endl; } return0;}136例4-9使用结构体重新编写上题的程序。算法定义一个结构体类型StudentType,其中包含学号、各门课程成绩和平均分等数据成员,其值分别通过输入和计算求得。137//Example4-9:统计学生课程的平均分#include<iostream.h>#define PERSON 6#define COURSE 3structStudentType{charid[10]; //学号intscore[COURSE]; //课程成绩intGPA; //平均分};138intmain(){StudentTypexjtuStudent[PERSON]; inti,j; cout<<"Pleaseinputdataofstudent:"<<endl; for(i=0;i<PERSON;i=i+1){ cin>>xjtuStudent[i].id; xjtuStudent[i].GPA=0; 139 for(j=0;j<COURSE;j=j+1) {cin>>xjtuStudent[i].score[j]; xjtuStudent[i].GPA=xjtuStudent[i].GPA+xjtuStudent[i].score[j]; } xjtuStudent[i].GPA=xjtuStudent[i].GPA/COURSE;}140cout<<"学号高数英语体育平均分"<<endl;cout<<"--------------------------------------"<<endl;for(i=0;i<PERSON;i=i+1){ cout<<xjtuStudent[i].id<<"\t"; for(j=0;j<COURSE;j=j+1) cout<<xjtuStudent[i].score[j]<<"\t"; cout<<xjtuStudent[i].GPA<<endl;}return0;}141上机练习题1.使用数组求斐波那挈数列的第n项和前n之和。3.矩阵相加。4.输入10个字符到一维字符数组s中,将字符串置逆。即s[0]与s[9]互换,s[1]与[8]互换,...,s[4]与s[5]互换,输出置逆后的数组s。5.替换加密(恺撒加密法)。7.定义一个名为Circle的结构体(圆),其数据成员是圆的外接矩形的左上角和右下角两点的坐标,计算该圆的面积。142学好计算机的唯一途径是
你的编程能力与你在计算机上投入的时间成
结 束 语上机练习正比143第5章函数5.1函数概述5.2函数的定义5.3函数的调用5.4函数间的参数传递5.5函数与数组5.6局部变量和全局变量5.7函数声明5.8带有缺省参数的函数1445.1函数概述C++语言程序的结构特点:程序整体由一个或多个称为函数的程序块组成每个函数都具有各自独立的功能和明显的界面1455.2函数定义函数定义就是编写完成函数功能的程序块1、函数定义的一般格式<函数值类型><函数名>(<形式参数表>){<函数体>}1462、函数值类型函数返回值所具有的数据类型与变量类型相同。(1)返回值是数值可以是带符号或unsigned的char、int、short、long型以及float、double型(2)返回值是地址类型是指针型(3)函数没有返回值类型是void1473、形式参数(1)形参概念函数可以带有零个或多个形式参数。形参是函数的内部变量。即形式参数的生存期和作用域仅限于函数内部。形式参数只是被初始化的内部变量,即只有当函数被调用,形式参数才被赋予调用函数传递来的实参148(2)形式参数声明表示将从主调函数中接收哪些类型的信息例:doublegrav(doublem1,doublem2,doubledistance)形式参数可以在函数体中引用,可以输入、输出、赋值或参与运算参数说明格式为:
<类型><参数1>,<类型><参数2>,…,<类型><参数n>例:intarray[],intcount149例5.1编写求阶乘n!的函数算法分析:计算公式为:
n!=n×(n-1)×…×3×2×1,且0!=1在子函数中只需一个数据x,故设一个参数n计算结果要返回主函数,故设一个变量resultn的阶乘可在一重循环中实现150例5-1:函数fac()计算阶乘n!//Example5-1:函数fac()计算阶乘n!intfac(intn){ intresult=1; if(n<0) return-1; elseif(n==0) return1; while(n>1) { result*=n; n--; } returnresult;}1515.3函数的调用1、函数调用就是使程序转去执行某个函数体。C++中,除了main函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T-ZLX 088-2024 绿色食品 永嘉早香柚生产技术规程
- 二零二五年度新材料研发股份分红及市场拓展合同模板
- T-ZGZX 0003-2024 成年智力残疾人托养服务指南
- 二零二五年度夫妻共同财产保全与婚后生活规划协议
- 二零二五年度企业合同管理制度与品牌建设合同
- 二零二五年度智慧城市建设抵押贷款协议
- 二零二五年度城市建筑工地渣土车租赁管理协议
- 二零二五年度农村土地承包经营权流转与农业病虫害防治服务合同
- 二零二五年度高科技企业股权合作协议书
- 2025年度生物制药产业合作投资合同
- 医疗行业的病人隐私保护培训
- 第1课 精美绝伦的传统工艺 课件 2023-2024学年赣美版初中美术八年级下册
- 《让我们的家更美好》教学设计
- 自抗扰控制器及其应用
- 热工与流体力学基础课件
- 石膏外固定的健康教育
- LOI意向书中英文模板
- 《防毒面具的使用》课件
- 《金融风险管理》 课程标准
- 销售费用管理制度
- 高维数据分析
评论
0/150
提交评论