语言第十三讲PPT课件_第1页
语言第十三讲PPT课件_第2页
语言第十三讲PPT课件_第3页
语言第十三讲PPT课件_第4页
语言第十三讲PPT课件_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、例1 1:输出字符串 #include void main() char s =“hello”, *ps ; ps=s; while(*ps!=0) putchar(*ps); ps+; main( ) char str80, *p,ch; int i=0; p=str; gets(p); ch=getchar(); for( ; *p!=0;p+) if(*p!=ch) stri+=*p; stri=0; printf(“The new string is:%sn”,str); 例2 2:在输入的字符串中删除指定的字符2000Hp str0 str1 str202000H2001H2002H

2、2003H2004H2005H2006Hch0i运行程序: abcdef c 2000Hstr a b d e f0 a b c d e fcstrprintf(“%s”,ps);或: puts(ps)The new string is: abdef第1页/共18页字符指针(变量)与字符数组的区别字符指针与字符数组:两者均可存储和运算字符串。两者均可存储和运算字符串。主要区别: : 存储格式不同: 字符指针变量中存放的是字符指针变量中存放的是字符串的首地址字符串的首地址(2字节字节);而字符数;而字符数组中存放的是组中存放的是整个字符串整个字符串(一个数组元素存放一个字符)。一个数组元素存放一

3、个字符)。 性质不同:字符数组名是地址常量,不能改变字符数组名是地址常量,不能改变( (指向首字符指向首字符);); 字符指针是地字符指针是地址变量,可以改变址变量,可以改变( (指向不同的字符指向不同的字符) )。 赋值方式不同: 字符指针 char *ps=“Hello”; char *ps; ps=“Hello”;字符数组 char st =“Hello”; char st80; st=“Hello” 或:st =“Hello” 用循环逐个赋值或用strcpy()函数赋值第2页/共18页例: 统计字符串中的各元音字母的个数(P182 例6.15)#includevoid main(voi

4、d) char str80,*p; int a=0,e=0,i=0,o=0,u=0; gets(str); for(p=str;*p!=0;p+) switch(*p) case a: case A: a+; break; case e: case E: e+; break; case i: case I: i+; break; case o: case O: o+; break; case u: case U: u+; printf(a:%3dne:%3dni:%3dno:%3dnu:%3dn,a,e,i,o,u);循环遍历数组元素 判断字母。判断字符串是否结束判断字符串是否结束 第3页/共

5、18页2. 字符串指针做函数参数(见P183 表6-2)#includevoid cpystr(char *s1, char *s2) while(*s2!=0 ) *s1+=*s2+; *s1=0;void main (void ) char str120,str2 =123456abcdef; cpystr(str1,str2); printf(str2: %sn,str2); printf(str1: %sn,str1); 去掉该句,对程序结果是否有影响?例: 编写函数,用指针进行字符串的复制,第4页/共18页6.2.4 指针数组 指针是存放其它数据对象地址的指针是存放其它数据对象地址的

6、变量变量。也可以构成。也可以构成数组数组。每个数组元素均为一个。每个数组元素均为一个指针变量,且在内存中连续存放。指针变量,且在内存中连续存放。1. 指针数组定义格式: type *数组名数组名元素个数元素个数;int *p 4 ; 定义(说明)定义(说明)p是含有是含有4个元素的指针变量,每个元素都是个元素的指针变量,每个元素都是一个指向整型变量的指针一个指向整型变量的指针(二级指针)(二级指针) 。p 0 p 1 p 2 p 3 数组名数组名p为数组的首地址。为数组的首地址。使用前必须让各元素指向对象。使用前必须让各元素指向对象。int i, a34, *p3;for(i=0;i3;i+)

7、 p i =a i ;*(pi+j)=2; /*通过指针数组引用数组元素aij*/ 第5页/共18页2、用指针数组处理多字符串例:用指针数组对字符串进行排序。例:用指针数组对字符串进行排序。#include void main(void ) int i, j ;char *ps = Get, Put, Time, Date, *p ;printf(排序前字符串 :n);for(i=0;i4;i+) puts(psi);for(i=0;i3;i+) for(j=i+1;j0) p=psi; psi=psj; psj=p; printf(排序后字符串 :n);for(i=0;i4;i+) puts

8、(psi);循环实现排序循环实现排序Get0Put0Time0Date0ps0ps1ps2ps3ps第6页/共18页2 2、指针数组访问二维数组通过指针数组输出数组元素的值通过指针数组输出数组元素的值, 分析运行结果。分析运行结果。#include void main( ) int i , j; int a33= 1,2,3, 4,5,6, 7,8,9 ; int *pa3= a0, a1, a2 ; int *p=a0; for (i=0 ; i3 ; i+) for (j=0; j3; j+) printf ( %5d, paij ); printf ( n ) ; for(i=0;i3;

9、i+) printf(%d,%d,%dn,ai2-i,*ai,*(*(a+i)+i); for(i=0;i=y?x:y);2400H函数指针变量的定义:type ( *p )( );函数的类型。函数的类型。指针变量名指针变量名函数函数使用步骤: 定义函数定义函数fname和指向函数的指针和指向函数的指针p; 指针指向函数;指针指向函数; p=fname; 通过指针引用函数。通过指针引用函数。 格式:格式:(* p)(实参表实参表); main( )第8页/共18页举例:求举例:求a、b的最大值。的最大值。#include int lmax(int,int);void main(void) in

10、t a,b,c; int (* funp)( ); funp=lmax; scanf(“%d,%d”,&a,&b) c=(*funp)(a,b); printf(“Max. is %dn”,c);int lmax(int x, int y) return (xy?x:y);说明指向函数的指针。说明指向函数的指针。指针指向函数。指针指向函数。funplmax通过指针引用函数。通过指针引用函数。 lmax2100H2100H第9页/共18页6.3.2 返回指针的函数返回指针的函数 概念:概念:函数可以返回一个值,也可以返回一个地址(指针),如果函数返回函数可以返回一个值,也可以返回

11、一个地址(指针),如果函数返回指针,称为指针,称为返回指针的函数。返回指针的函数。定义:定义:type *函数名(形参表)函数名(形参表) /* 函数体函数体 */int *max(int a, int b)注意: int (*p)( ) 和 int *p( ) 的区别: int (*p)( ) 是定义一个 变量(p是一个指向函数入口的指针变量); int *p( ) 则是定义一个函数(p是一个返回值为指针的函数),它还有函数体部分。第10页/共18页例: 输入一个17之间的整数,输出对应的星期名。 char *day_name(int n) char *name =“Illegal day”

12、,”Monday”,”Tuesday”,”Wednesday”, “Thursday”,”Friday”,”Saturday”,”Sunday”; return (n7) ? name0: namen) ; #include main ( ) int i; printf ( “Input Day No: n”); scanf ( “%d”, &i ) ; if (i %s n”, i ,day_name( i ); 定义一个指针型函数, 其返回值指向一个字符串形参 n 为星期名对应的整数exit为一库函数,exit(1)有错退出程序,exit(0)正常退出name为一指针数组,每个元素

13、均为指针变量。运行结果:Input Day No:2Day No: 2 -Tuesday第11页/共18页6.3.3 main函数的参数函数的参数如DOS命令:C:test aa bb cc可执行文件名可执行文件名命令参数命令参数 主函数主函数main()也可以带参数,由于也可以带参数,由于main()不能被其他函数调用,故无法在程序不能被其他函数调用,故无法在程序内部取得实参值。它的参数来自内部取得实参值。它的参数来自dos提示符命令行提示符命令行(如用命令行运行编译连接好如用命令行运行编译连接好的的.exe文件文件),实参就是命令行输入的字符串。,实参就是命令行输入的字符串。主函数一般有两

14、个参数。主函数一般有两个参数。void main(int argc, char *argv ) (函数体) 整型变量。存放命令行整型变量。存放命令行字符串的个数字符串的个数(以空格分以空格分隔隔) 。 指向字符的指针数组。分指向字符的指针数组。分别存放各字符串参数的地址。别存放各字符串参数的地址。第12页/共18页举例:编程显示命令行输入的参数。举例:编程显示命令行输入的参数。#include void main(int argc, char *argv ) int i; printf(argc=%dn, argc); for(i=0; iargc 4argv0argv1argv2argv3t

15、est0How0are0you?0第13页/共18页*举例:在字符串中查找特定的字符。举例:在字符串中查找特定的字符。#include #include char *lstrchar ( char * , char ) ;void main ( void) char c , *p , str80 ; gets (str ) ; scanf ( “ %c ” , &c ) ; p=lstrchar (str ,c ) ; if (p=NULL ) printf (“char %c not foundn”, c ) ; else printf (“The position is %d” ,

16、p-str ) ;char *lstrchar (char *s , char ch ) char *chp=NULL ; while (*s+!=0) if (*s=ch) chp = s ;break ; return chp ;返回指针的函数。返回指针的函数。指向空!指向空!第14页/共18页 课堂作业:#includemain() int i; char s5,*p; for(i=0; is;p-) printf(%s,%cn,p,*p); 写出下列程序运行结果。#includeint f(int *a,int n) if(n1) return *a+f(a+1,n-1); else

17、return *a;void main() int aa10=1,2,3,4,5,6,7,8,9,10,s; s=f(aa+1,4); printf(%dn,s);第15页/共18页 思考题: 作业题:作业题: p188习题习题 一、选择题一、选择题 720。 二、填空题二、填空题 47。 三、程序运行题三、程序运行题13。 四、程序填空题四、程序填空题2、4。 五、程序设计题五、程序设计题 2、3、6。 上机验证上机验证 p178 例例 6.19 ,分析,分析行指针定义行指针定义(*p)n和和指针数组定义指针数组定义*pn的异同点,的异同点,进一步理解和记忆二维数组中数组元素和其地址的表示方法。进一步理解和记忆二维数组中数组元素和其地址的表示方法。第16页/共18页编程题:#include#define N 3void ss(int c3,int *s1,int *s2);void main(void) int aNN,bN; int i,j,k,sum1,sum2; for(i=0;iN;i+) for(j=0;jN;j+) scan

温馨提示

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

评论

0/150

提交评论