级C语言课堂上机课件第7讲指针

上传人:E**** 文档编号:91093585 上传时间:2019-06-21 格式:PPT 页数:39 大小:1.14MB
返回 下载 相关 举报
级C语言课堂上机课件第7讲指针_第1页
第1页 / 共39页
级C语言课堂上机课件第7讲指针_第2页
第2页 / 共39页
级C语言课堂上机课件第7讲指针_第3页
第3页 / 共39页
级C语言课堂上机课件第7讲指针_第4页
第4页 / 共39页
级C语言课堂上机课件第7讲指针_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《级C语言课堂上机课件第7讲指针》由会员分享,可在线阅读,更多相关《级C语言课堂上机课件第7讲指针(39页珍藏版)》请在金锄头文库上搜索。

1、,复习,2019/6/21,1,有以下程序 main() int m,n,p; scanf(“m=%dn=%dp=%d“, 若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是,2019/6/21,2,A)m=123n=456p=789 B)m=123 n=456 p=789 C)m=123,n=456,p=789 D)123 456 789,2019/6/21,3,原样显示字符串,4 how many words are there in this string? how are you? good luck! happy birthday to

2、you!,2019/6/21,4,#include #include int main() char ch100; int n,len,i,count; scanf(“%d%*c“, ,2019/6/21,5,原样显示字符串,how many words are there in this string? how are you? good luck! happy birthday to you!,2019/6/21,6,7,第7讲 指 针,C 语言程序设计,赵红,2019/6/21,8,#include #define M 5 #define N 7 int fun1(int x,int n

3、); int main() int aM=3,4,5,2,6; int bN=1; printf(“%dn”,fun1(a,M); printf(“%dn”,fun1(b,N); return 0; ,int fun1(int x,int n) int i; int max=x0; for(i=1;in;i+) if (maxxi) max=xi; return max; ,如果用一个函数找出最大值及最小值? 注意一个函数只有一个返回值。,2019/6/21,9,2019/6/21,10,复习:,void swap(int x, int y) int z; z=x; x=y; y=z; pri

4、ntf(“nx=%d,y=%d“,x ,y); main( ) int a= 10,b=20; swap(a,b); printf(“na=%d,b=%dn“,a,b); ,解决上面两个问题需要用到指针。 非常重要。,2019/6/21,11,2019/6/21,12,1 地址和指针的概念,main() float x; int y; ,变量的两个物理意义,变量的内容,变量的地址,2019/6/21,13,main() int a,*p= ,2004,2 指针和指针变量,2.2 指针变量的定义,2000,指针变量初始化,2019/6/21,14,main() int a,*p= ,间接存取运算

5、,2004,2 指针和指针变量,2.3 指针的基本运算,2000,*p = ,5,2019/6/21,15,复习:,void swap(int x, int y) int z; z=x; x=y; y=z; printf(“nx=%d,y=%d“,x ,y); main( ) int a= 10,b=20; swap(a,b); printf(“na=%d,b=%dn“,a,b); ,2019/6/21,16,2 指针和指针变量,2.3 指针变量作函数参数,【例3】输入2个整数,按从小到大顺序输出。 void swap(int *x1, int *x2) int t; t=*x1;*x1=*x

6、2;*x2=t; return; void main( ) int a,b; scanf(“%d%d“, ,2019/6/21,17,复习:,写一程序,从键盘接收10个数,然后再显示出来。 main( ) int a10, i,; for (i=0; i10; i+) scanf(“%d“, ,2019/6/21,18,接收数据a5,并输出,用指针完成。,2034:能被3整除的数,Problem Description 找出数组a中能被 3整除的数 要求用数组完成。 Input 输入整数N,代表N组数据。 接下来的N行中,每行的第一个整数M代表这一行共有M个测试数据(M100),接下来是这M个

7、数据的数值。 Output 输出每一组数据中能被3整除的数值,及其所在数组中的位置。注意,按生活中的习惯,下标从1算起。,2019/6/21,19,改成二维数组,如果该测试数据中不含有被3整除的数值,则输出“not found!” 每一组数据对应一行输出。 Sample Input 3 3 9 34 12 4 1 2 4 5 2 6 5 Sample Output a1=9 a3=12 not found! a1=6,2019/6/21,20,2016:判断字符串是否为回文,Problem Description 判断一个字符串是否是回文串,所谓回文串是指一个字符串正序与反序是一样的字符串。

8、Input 输入数据有多组测试实例,每个测试实例的一行,表示要判断的字符串。 Output 对于每组输入数据,输出占一行如果字符串“xxx“是回文,输出“xxx is a palindrome string”,否则输出“xxx is not a palindrome string”.,2019/6/21,21,用指针完成,Sample Input abcba hello wellew Sample Output abcba is a palindrome string hello is not a palindrome string wellew is a palindrome string,

9、2019/6/21,22,参考代码,#include #include int main() char a100; int flag; char *p,*q; while(gets(a) flag=0; p=a; q=a+strlen(a)-1; for(;pq;p+,q-) if(*p!=*q) flag=1; break; if(flag) printf(“%s is not a palindrome stringn“,a); else printf(“%s is a palindrome stringn“,a); return 0; ,2019/6/21,23,2026:求一个字符串的长

10、度,Problem Description 编写自定义函数,求一个字符串的有效长度,在main函数中输入字符串,调用函数并输出其长度。 Input 输入文件首先包含一个整数n,表示测试实例的个数,然后是n段字符串。 Output 对于每一段字符串,输出字符个数,每段的输出占一行,需要必要的提升。,2019/6/21,24,Sample Input 3 china hello world! nice to meet you! Sample Output the length of string is 5 the length of string is 12 the length of strin

11、g is 17,2019/6/21,25,参考代码,#include #include int strlenzh(char *s) char *p=s; int x=0; while(*p!=0) x+; p+; return x; int main() int n; char ch100; scanf(“%d%*c“, ,2019/6/21,26,2019/6/21,27,复习:, 是下标运算符,引用数组元素时,根据数组的首地址和下标数,计算出该元素的实际地址,取出该地址的内容进行操作。 float score5;,如引用 score2: (1)计算 2000+2*4=2008 (2)取出2

12、008的内容,2019/6/21,28, 数组名是该数组的指针 a是数组的首地址(即a0的地址),是一 个指针常量。 a = &a0,a+1 = &a1, ,a+9 = &a9 数组元素的下标表示法: a0,a1, ,ai, ,a9 数组元素的指针表示法: *(a+0),*(a+1), ,*(a+i), ,*(a+9),3指针与数组,3.1 指向数组的指针,1. 一维数组的指针,例如: int a10,*p;,2019/6/21,29,当p指向a0时,用p表示数组元素 下标法: p0,p1, ,pi, ,p9 指针法: *(p+0),*(p+1), ,*(p+i), ,*(p+9),3 指针与

13、数组,3.1 指向数组的指针,1. 一维数组的指针, 指向一维数组元素的指针变量 由于数组元素也是一个内存变量,所以此类指针变量的定义和使用与指向变量的指针变量相同。例如:int a10,*p; p = a;(或 p = ),a,2019/6/21,30,【例5】用数组元素地址,输出数组元素。 main( ) int a10, i, *p; for (i=0; i10; i+) scanf(“%d“, a+i ); for (i=0; i10; i+) printf(“%4d “,*(a+i) ); printf(“n“); for (p=a,i=0; i10; i+) printf(“%4d

14、 “,*(p+i) ); printf(“n“); ,3 指针与数组,3.1 指向数组的指针,1. 一维数组的指针,1 2 3 4 5 6 7 8 9 10,1 2 3 4 5 6 7 8 9 10,1 2 3 4 5 6 7 8 9 10,指针p未动,2019/6/21,31,【例5】用指针法输出数组元素。 main( ) int a10, i, *p; for (p=a; pa+10; p+) scanf(“%d“,p ); for (p=a; pa+10; p+) printf(“%d “,*p ); printf(“n“); ,3 指针与数组,1. 一维数组的指针,10,2019/6/

15、21,32,数组名和指向数组的指针变量的区别: 指针变量p是变量可以赋值, 数组名a是地址常量不能赋值。,数组名是地址,指向数组的指针变量存放的也是地址。 通过指针变量也可以引用数组元素。p = &a0 等效于 p = a。,3 指针与数组,3.1 指向数组的指针,用指针变量引用数组元素, 必须关注其当前值。例如: p = p + 3 *(p-1)、p-1等价于a2,2019/6/21,33,当函数之间需要传递数组时,可以通过传递数组的首地址(即通过指针参数指向域的扩展),完成存取主调函数中数组元素的操作。,3 指针与函数,2. 数组的指针作函数参数, 一维数组的指针作函数参数 例如被调函数abc的定义形式有以下三种: void abc(int b10) void abc(int b ) void abc(int *b) 在主调函数有如下定义: int a10,*p=a; 则调用abc函数时可用 abc(a) 或 abc(p),3.3 指针变量作函数参数,2019/6/2

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号