基本控制结构与导出数据类型_第1页
基本控制结构与导出数据类型_第2页
基本控制结构与导出数据类型_第3页
基本控制结构与导出数据类型_第4页
基本控制结构与导出数据类型_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基本控制结构与导出数据类型2023/7/101第1页,课件共52页,创作于2023年2月

2023/7/102第2页,课件共52页,创作于2023年2月 高等教育出版社

2004年第2版

高级语言C++程序设计

第4章基本控制结构与导出数据类型2023/7/103第3页,课件共52页,创作于2023年2月.2023/7/104第4页,课件共52页,创作于2023年2月※C++语句 (1)赋值与表达式语句 i++;a=10; (2)变量声明语句 inta,b,;charstr[80]; (3)函数调用语句 printf(“a+b=%d”,a+b); (4)程序控制语句 if---elsefor(;;)while()… (5)复合语句 {语句1;语句2;...语句n;} (6)其它语句 ●文件包含语句 #include <stdio.h> ●宏定义语句 #define PI 3.1415926 ●函数声明语句 intfun(int,int); ●自定义类型语句 typedeffloat REAL (7)空语句 ;2023/7/105第5页,课件共52页,创作于2023年2月

《程序控制语句》

(1)分支语句

if(x>=60) if(x>=0) if(x>=90&&x<=100)n1++;n++; n1++; elseif(x>=80&&x<90)n2++; else elseif(x>=70&&x<80)n3++; n2++; elseif(x>=60&&x<70)n4++; elsen5++;2023/7/106第6页,课件共52页,创作于2023年2月

(2)switch语句

【例】switch(x/10) { case10: case9: printf(“成绩优秀.“);break; case8: printf(“成绩良好.“);break; case7: printf(“成绩中等.“);break; case6: printf(“成绩及格.“);break; default: printf(“成绩不及格.“); }

2023/7/107第7页,课件共52页,创作于2023年2月

(3)for语句【格式】for(表达式1;表达式2;表达式3){语句;}

【例】

#include<iostream.h>main(){ inti,n,x; n=0; for(i=1;i<=30;i++) { cout<<"输入1个分数:"; cin>>x; if(x>=60) n++; } cout<<n;}2023/7/108第8页,课件共52页,创作于2023年2月

(4)while语句#include <iostream>usingnamespacestd;voidmain(){ intn=0; charstr[80]="Abc+mNp-xyZ"; cout<<str<<endl; while(str[n]!='\0') str[n++]=str[n]>='a'&&str[n]<='z'? str[n]-'a'+'A':str[n]; cout<<str<<endl;}2023/7/109第9页,课件共52页,创作于2023年2月

(5)do~while语句

#include <iostream>usingnamespacestd;main(){ intx,n1=0,n2=0; do { cout<<"Input-1toquit!"; cin>>x; if(x>=60)n1++; else n2++; }while(x>=0); cout<<"Passed:"<<n1 <<"Nopassed:"<<n2-1<<endl;}2023/7/1010第10页,课件共52页,创作于2023年2月

(6)break语句功能:强制结束当前的循环,或结束switch语句。格式: break;【例】 switch(整数或字符常量表达式) { case常量表达式1:语句1;【break;】 case常量表达式2:语句2;【break;】 ... case常量表达式n:语句n;【break;】 default: 语句n+1;

}2023/7/1011第11页,课件共52页,创作于2023年2月

(7)continue;功能:跳过continue后面的语句,继续下一轮循环。格式:

continue;【例】输出数组中的正数。

#include <iostream.h> voidmain() { inta[6]={2,5,-6,4,-9,10},i; for(i=0;i<6;i++) { if(a[i]<0)continue; cout<<a[i]<<""; }2023/7/1012第12页,课件共52页,创作于2023年2月

(8)return语句功能:将函数的运算结果返回到调用函数。格式: return表达式;或return(表达式);【例】#include <iostream.h>floattemp(floatc) { floatf; f=(9.0/5)*c+32; returnf; } voidmain() {floatc; cin>>c; cout<<temp(c); }2023/7/1013第13页,课件共52页,创作于2023年2月一.数组的主要特征

1.数组下标从0开始,至(下标上界减1);

2.一维数组从下标0开始依次排列;二维数组按先行后列方式依次排列;

3.数组名为数组第一个数组元素a[0]或b[0][0]的地址,可以代替指针使用,如:*(a+i)相当于a[i].4.利用下标变量可以逐一地引用数组元素,但不能对整个数组操作;

5.便于循环处理:

for(i=0;i<10;i++)cina[i]; ------输入

for(i=0;i<10;i++) cout<<a[i]<<“”; ------输出二.数组的主要用法《一维数组:》 ●统计同一类数据:最大值,最小值,平均值,总和,排序...... ●字符处理:大小写字母的转换,逆序排列,字符串复制,......《二维数组:》 ●矩阵的处理; ●班级多门成绩的统计:4.3数组2023/7/1014第14页,课件共52页,创作于2023年2月●数组------指由若干相同类型的数据按一定顺序组成的数据集,使用一个数组名和下标唯一地确定数组中的某一个数组元素。一.一维数组的定义 格式:数据类型名数组名[长度];

功能:按指定数据类型,定义若干数据为一个数组,分 别为:数组名[0],数组名[1],数组名[2],...

数组名[长度-1],

例:inta[10]; chars1[100];

a[0]

a[1]

a[2]

a[3]

a[4]

a[5]

a[6]

a[7]

a[8]

a[9]4.3.1一维数组与二维数组2023/7/1015第15页,课件共52页,创作于2023年2月

1.一维数组的初始化

------在定义的同时为数组元素赋值。 格式:数据类型数组名[下标上界]={初值表}; 方式1:对全部数组元素赋初值

例:inta[10]={0,1,2,3,4,5,6,7,8,9};

方式2:省略数组下标,对全部数组元素赋初值 例:inta[]={0,1,2,3,4,5}; (相当于inta[6])

方式3:\全部初值为0.

例:inta[10]={0};

方式4:对部分数组元素赋初值,其余为0.

例:inta[10]={0,1,2,3};2.一维数组元素的引用

1.引用格式:数组名[下标]

(下标为整型表达式,取值0~长度-1)2023/7/1016第16页,课件共52页,创作于2023年2月

2.一般一维数组处理方式------单循环方式

(1)输入数组元素值

for(i=0;i<N-1;i++) cina[i]; (2)输出数组元素值

for(i=0;i<N-1;i++) cout<<a[i]<<“”;3.一维数组程序设计举例

【例】从键盘输入10个字符,然后按相反方向输出。

#include <iostream> usingnamespacestd; voidmain() {chara[10]; inti; for(i=0;i<10;i++) cin>>a[i]; for(i=9;i>=0;i--) cout<<a[i]<<“”; }2023/7/1017第17页,课件共52页,创作于2023年2月【例5-6】求斐波那契数列中前20个元素.#include <iostream>#include <iomanip>usingnamespacestd;voidmain() //数组的应用{ intfibonaci[20]={0,1}; cout<<setw(6)<<fibonaci[0]<<setw(6)<<fibonaci[1]; for(intn=2;n<20;n++) { fibonaci[n]=fibonaci[n-2]+fibonaci[n-1]; if(n%5==0)cout<<endl; cout<<setw(6)<<fibonaci[n]<<setw(6); } cout<<endl;}输出结果:01123 58132134 5589144233377 6109871597258441812023/7/1018第18页,课件共52页,创作于2023年2月二.二维数组

1.二维数组的定义 格式:数据类型数组名[行下标上界][列下标上界];

0行 例:inta[3][5];

功能:定义一个3行5列的整型数据类型的二维数组。 (行下标和列下标都从0开始。) 二维数组元素以先行后列的次序排列。(如图所示)

2.二维数组数组元素的初始化

格式:数据类型数组名[行下标上界][列下标上界] 1行

={{行初值表1},{行初值表2},...};

(1)全部元素赋初值 ①分行方式

inta[2][3]={{1,2,3},{4,5,6}}; ②不分行方式 2行

inta[2][3]={1,2,3,4,5,6}; ③省略行下标方式

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

a[0][0]a[0][1]a[0][2]a[0][3]a[0][4]a[1][0]a[1][1]a[1][2]a[1][3]a[1][4]a[2][0]a[2][1]a[2][2]a[2][3]a[2][4]2023/7/1019第19页,课件共52页,创作于2023年2月

(2)部分元素赋初值-------其余为0 ①只为每行前几个元素赋值

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

或:inta[][3]={{1},{4,5}};/*行下标可以省略*/ ②只为前几行的前几个元素赋值

inta[2][3]={{1,2}};3.二维数组元素的引用 引用格式:数组名[行下标][列下标]

4.二维数组程序设计举例

【例5-12】矩阵转置

123 14A矩阵:456B矩阵25 36

基本算法:b[i][j]=a[j][i];/*行变为列,列变为行*/2023/7/1020第20页,课件共52页,创作于2023年2月程序:voidmain() {inta[2][3],b[3][2],i,j; for(i=0;i<2;i++) for(j=0;j<3;j++) cin>>a[i][j]; //赋值

for(i=0;i<3;i++) for(j=0;j<2;j++) b[i][j]=a[j][i]; /*矩阵转置*/ for(i=0;i<3;i++) { for(j=0;j<2;j++) cout<<setw(8)<<b[i][j]; /*输出矩阵*/ cout<<endl; } }2023/7/1021第21页,课件共52页,创作于2023年2月

●数组名即数组的首地址;指针即地址!

------指向一维数组的指针变量的使用

1.定义指向一维数组的指针变量:

格式:数据类型*指针变量=一维数组名; 例:inta[10],*p=a; //相当于p=&a[0];

(或者在程序中为指针赋值:p=a;)

2.

一维数组元素的引用

(1)下标法:p[i]或

a[i] (2)指针法:*(p+i)或*(a+i)//数组名是地址常量!故a++,P=&a非法!

3.指向一维数组的指针变量的运算

(1)指针变量和整数的运算 指针变量+整数n------相当于指针向后移动了n个数组元素的位置 指针变量-整数n------相当于指针向前移动了n个数组元素的位置 指针变量++------先用指针的值,然后向后移动了1个数组元素的位置 指针变量--------先用指针的值,然后向前移动了1个数组元素的位置

++指针变量------指针向后移动了1个数组元素的位置

--指针变量------指针向前移动了1个数组元素的位置4.3.2数组与指针的关系

2023/7/1022第22页,课件共52页,创作于2023年2月【例5-7】 //使用数组名作指针的例子#include <iostream>usingnamespacestd;voidmain() { inta[]={1,2,3,4,5}; *(a+4)=34; for(inti=0;i<5;i++) cout<<“a[i]:”<<a[i]<<“或*(a+i)

:"<<*(a+i)<<endl; cout<<endl;}运行结果:a[i]:1或*(a+i)1 //即可用下标方式,也可用指针方式

a[i]:2或*(a+i)2

a[i]:3或*(a+i)3

a[i]:4或*(a+i)4

a[i]:34或*(a+i)34

2023/7/1023第23页,课件共52页,创作于2023年2月【例5-8】 //数组与指针的关系#include <iostream>usingnamespacestd;voidmain() { inta[]={1,2,3,4,5},*p=a; for(inti=0;i<5;i++)

//演示3种输出方式 cout<<a[i]<<""<<*(a+i)<<""<<*(p+i)<<""; cout<<endl<<a<<","<<p<<endl;

//演示a即数组地址 for(inti=0;i<5;i++)

//演示指针使用下标 cout<<p[i]<<""; for(;p<a+5;++p)

//演示从a[0]开始输出至a[4] cout<<*p<<""; for(--p;p>=a;--p)

//演示从a[4]开始输出至a[0] cout<<*p<<""; cout<<endl;}输出结果:111222333444555 0012FF6C,0012FF6C 1234512345123452023/7/1024第24页,课件共52页,创作于2023年2月一.字符数组 定义格式:char数组名[长度]={初值表}; 举例:charch[3]={‘a’,‘b’,‘\0’};二.应用举例

【例5-17】从键盘输入一行字符,将其中小写字母改为大写字母,然 后逆向输出。 设计思想:

(1)小写字母ch的识别 方法:if(‘a’<=ch&&ch<=‘z’)... (2)将小写字母ch改为大写字母 方法1:ch-=32;

方法2:利用字符处理函数ch=toupper(ch);

程序设计:4.3.3一维字符串数组

2023/7/1025第25页,课件共52页,创作于2023年2月#include <iostream>#include <string.h>usingnamespacestd;voidmain(){ chara[40]; inti,n; cin>>a; n=strlen(a); for(i=0;i<n;i++) if('a'<=a[i]&&a[i]<='z') a[i]-=32; for(i=0;i<n;i++) cout<<a[i]; cout<<endl;}2023/7/1026第26页,课件共52页,创作于2023年2月三.字符串

1.字符串的定义与初始化 定义格式:char字符串名[长度]={“字符串”}; 或:char字符串名[长度]=“字符串”; 例:charstr[100]=“CProgramming.”; 2.字符串的赋值

(1)输入 cin>>字符串名; (2)字符串输入函数 gets(字符串名);(注意二者区别) 3.字符串复制函数

strcpy(str1,str2); /*将str2复制到str1*/ strncpy(str1,str2,n);/*将str2的前n个字符复制到str1*/ 4.字符串输出

(1)cout<<str); (2)字符串行输出puts(str); (输出字符串后自动换行)

2023/7/1027第27页,课件共52页,创作于2023年2月5.指针与字符串

------用指针可以显示部分字符串,也可以访问串中的某一个字符.

(1)指向字符串的指针的初始化 方式1:chars[100]=“1234567890”,*p=s;

方式2:char*p=“1234567890”;

方式3:char*p;p=“1234567890”; (2)访问字符串中的单个字符或部分字符串 例:inti;

chars[11]=“1234567890”,*p=s; for(i=0;i<10;i++) { cout<<*(p+i); cout<<p+i<<endl; }

输出结果是:

2023/7/1028第28页,课件共52页,创作于2023年2月【例5-21】将输入的字符串s1复制到字符串s2中。#include <iostream>usingnamespacestd;#include<stdio.h>voidmain(){ chars1[100],s2[100]; inti=0; cin>>s1; while(s1[i]!=‘\0’) { s2[i]=s1[i]; i++; } s2[i]=‘\0’; cout<<s1<<endl<<s2<<endl;}2023/7/1029第29页,课件共52页,创作于2023年2月四.常用字符串处理函数

1.字符串输出函数 puts(字符串);(自动回车换行) 2.字符串输入函数 gets(字符串);(以回车换行结束) 3.测试字符串长度 strlen(字符串);(不包括结束标记) 4.字符串复制函数 strcpy(str1,str2); strncpy(str1,str2,n);(将str2中前n个字符复制到str1) 5.字符串比较函数 格式1:strcmp(str1,str2);

正整数------str1>str2

返回值0 ------str1=str2

负整数------str1<str2

格式2:strncmp(str1,str2,n); ------只比较前n个字符。

6.字符串连接函数

strcat(str1,str2);------将两个字符串连接起来,存入字符串str1.

2023/7/1030第30页,课件共52页,创作于2023年2月五.字符数组程序设计举例

1.将一字符串中的小写字母改成大写字母。

#include <iostream> usingnamespacestd; main() {inti=0; charstr[80]; cin>>str; while(str[i]!=‘\0’) /*第一空*/ { if(‘a’<=str[i]&&str[i]<=‘z’) /*第二空*/ str[i]-=‘a’+‘A’; i++; /*第三空*/ } cout<<str<<endl; }2023/7/1031第31页,课件共52页,创作于2023年2月2.从键盘输入一个字符串(长度小于80),统计该字符串的长度并输出。

#include <iostream> usingnamespacestd; voidmain() { chars[80]; intn,i; cin_________; /*第一空*/ i=0,n=0; /*第二空*/ while(s[i++]!=‘\0’) n++; /*第三空*/ cout<<n<<endl; }2023/7/1032第32页,课件共52页,创作于2023年2月●指针数组------数组元素都是指针类型的数组.一.指针数组的定义 格式:数据类型*指针数组名[长度],...

例:inta,b,c; int*p[3]={&a,&b,&c};二.指针数组元素的使用 引用格式:

(1)指针数组元素的赋值:p[下标]=地址表达式;

(2)引用所指向的变量或数组元素:*p[下标]

(3)参加(算术)运算:p[下标]

+n(整数) p[下标]

-n(整数) ++p[下标]或--p[下标]

p[下标]++或p[下标]--4.3.4指针数组

2023/7/1033第33页,课件共52页,创作于2023年2月二.指向一维数组的指针变量的使用

1.定义指向一维数组的指针变量:

格式:数据类型*指针变量=一维数组名; 例:inta[10],*p=a;

(或者在程序中为指针赋值:p=a;)

2.

一维数组元素的引用

(1)下标法:p[i]或a[i] (2)指针法:*(p+i)或*(a+i) 3.指向一维数组的指针变量的运算

(1)指针变量和整数的运算 指针变量+整数n------相当于指针向后移动了n个数组元素的位置 指针变量-整数n------相当于指针向前移动了n个数组元素的位置

指针变量++------先用指针的值,然后向后移动了1个数组元素的位置

指针变量--------先用指针的值,然后向前移动了1个数组元素的位置

++指针变量------指针向后移动了1个数组元素的位置

--指针变量------指针向前移动了1个数组元素的位置2023/7/1034第34页,课件共52页,创作于2023年2月

(2)指针变量和指针变量的减法运算 若p1和p2指向同一数组,则

p2–p1

表示它们所指向的数组运算下标的差值. 【注】两个指针变量不能进行加的运算。

(3)指针变量的关系运算------同类型指针可以进行关系运算.

格式:指针变量1关系运算符指针变量2三.指向字符串的指针变量

1.指向字符串常量 方法1:char*p=“abcd”;

方法2:char*p; p=“abcd”; 2.指向字符串常量的指针变量的使用

(1)处理整个字符串(p如同字符串变量名一样)

cin>>p;------输入字符串

cout<<p;------输出字符串

(2)处理字符串中的单个字符

char*p=“abcdefgh”; while(*p){*p-=32;p++;}2023/7/1035第35页,课件共52页,创作于2023年2月

3.指向存放字符串的字符数组的指针变量的使用

(1)定义chars[100],*p=s; (2)引用字符数组元素*(p+i)(i相当于下标)

应用举例:2008年(上) 31题:将从键盘输入的字符串逆序显示出来. #include <iostream> usingnamespacestd; #include <stdlib.h> //用于gets(str) voidmain() {intn;charstr[80],*p; cout<<“Inputastring:”;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论