2014c语言与程序设计第八讲(下)章

上传人:E**** 文档编号:89082657 上传时间:2019-05-17 格式:PPT 页数:60 大小:3.67MB
返回 下载 相关 举报
2014c语言与程序设计第八讲(下)章_第1页
第1页 / 共60页
2014c语言与程序设计第八讲(下)章_第2页
第2页 / 共60页
2014c语言与程序设计第八讲(下)章_第3页
第3页 / 共60页
2014c语言与程序设计第八讲(下)章_第4页
第4页 / 共60页
2014c语言与程序设计第八讲(下)章_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《2014c语言与程序设计第八讲(下)章》由会员分享,可在线阅读,更多相关《2014c语言与程序设计第八讲(下)章(60页珍藏版)》请在金锄头文库上搜索。

1、C语言程序设计基础,2014.9,第1讲 概述-c程序要素与结构 第2讲 c语言的输入输出 第3讲 数据类型与关系运算 第4讲 c程序设计初步(条件判别、循环、数组初步) 第5讲 教学回顾(变量、语句、函数与程序结构) 第6讲 函数一(概念、形参与实参、函数间的参数传递) 第7讲 函数二(变量值与地址、函数与程序设计、调用形式) 第8讲 函数三(递归算法、指针、二维数组) 第9讲 指针与函数 第10讲 链表一(指针与链表) 第11讲 链表二(结构指针与链表设计) 第12讲 文件、算法初步,课程大纲,第八讲 指针与函数、指针数组与二维数组,指向指针的指针 2级指针的概念 指针数组 指针类型一览

2、二维数组 矢量数组 二维数组的形参与实参 字符串数组 指向二维数组的数组指针 指针与结构 结构封装对象的手段 指向结构的指针 指针访问结构,作业回顾 测试卷第一题 测试卷第四题 练习六第六题 多余的话-学c还是用c? 函数作用域 制作你的头文件,就是一道循环题,建立通项就迎刃而解,第二次试卷第一题序列求和,序列求和(本题30分) input函数(20分)返回如下数列Sn(其第i项由i个x组成,i=1,2,n): x,xx,xxx,xxxxxx x和n都从键盘读入。比如键盘读入的x为2而n为5,则数列S5如下 2,22,222,2222,22222 函数subtotal函数(10分)求数列Sn的

3、和(设值不大于int范围),解:记序列的第i项为 termi,则:,termi= x+10*termi-1,void input(int *p,int *len) int x; printf(“输入长度:“); scanf(“%d“,len); printf(“输入数值:“); scanf(“%d“, ,int subtotal(int *p,int len) int sn=0; for(int i=0;ilen;i+) sn+=*(p+i); return(sn); ,理论上说,除此以外的任何引用库函数的做法都是错误的。解题思路很重要,引以为鉴。,第二次试卷第四题最小公倍数,求n个整数a1,

4、a2,an的最小公倍数(本题10分) 序列的最小公倍数(lowest common multiple)一般记作a1,a2,an 。函数编程: Input函数输入一个长度为n(=5)整数数组array返回给主函数。(5分) lcm函数求array所有元素的最小公倍数(假设该数不大于int类型)并返回给主函数输出。(5分) 比如60,72,96,84=10080,24,18,36=72,int bei(int x,int y) int i=1,j=1,k=1; while(i) if(x*j=y*k)return(x*j); else if(x*jy*k)j+; else k+; ,求x和y的最小

5、公倍数,int lcm(int *p,int len) for(int i=0;ilen-1;i+)*(p+i+1) =bei(*(p+i),*(p+i+1); return(*(p+len-1); ,还是一道循环题,现在的通项是求相邻元素的最小公倍数的函数,将pi和pi+1的最小公倍数放在pi+1,作为下一循环的pi,问题超前,责任在我,测验同学对变量定义域的理解:如何返回一个数组。,用指针访问字符串。编制一个程序,要求实现如下功能: 函数input() 从键盘输入两个由数字组成的字符串(每个字符串的长度不超过10个字符,无空格),并返回给主函数; 函数char *interlaced(ch

6、ar*p1,char *p2) 从字符串p1头部开始,将p1、p2两字符串的数字,依次交错地排成一个新的数字字符串c,并通过return返回给主函数。 主函数循环行,当且仅当输入时,程序结束运行。 举例如下: 输入字符串a是“7777777“,b是“1234,则新字符串c是,练习六第六题变量定义域,练习六第六题牛文细分析,int main() char a10,b10,*pa,*pb,*xxx; pa=a;pb=b; for ( ; ;) char x; input(pa,pb); xxx=interlaced(pa,pb); printf(“交错排列字符为%sn“,xxx); printf(

7、“任意键继续,结束n“); fflush(stdin); x=getchar(); if (x=) break; free(xxx); return(0); ,char* interlaced(char*a,char *b) int t ; t=min(strlen(a),strlen(b); int i; char x20,*px; char *xx=(char*)malloc(100*sizeof(char); for (i=0;istrlen(b) for (i=t;istrlen(a);i+) xt+i=ai; if (strlen(a)strlen(b) for (i=t;istrl

8、en(b);i+) xt+i=bi; xt+i=0; strcpy(xx,x); return(xx); ,int min(int a,int b) if(ab)return(b); if(b=a)return(a); ,谁是xxx?大牛逼?,又是xx的牛逼,为何申请100字节内存?它长度不是strlen(a)+strlen(b)?,去他几个xx的牛逼?,从哪里要来的内存,要还回哪里去,牛逼从哪来的?来了多少次(个)?,循环中申请xxx,却没有释放,程序功能正确,但风格很差。且没有任何注释。,局部变量默认为auto型 register型变量个数受限,且不能为long, double, floa

9、t型 局部static变量具有全局寿命和局部可见性 局部static变量具有可继承性 extern不是变量定义,可扩展外部变量作用域,变量存储类型,函数内声明的变量获得的内存,是静态申请(不是静态变量),仅生存于函数有效期。,函数内申请的内存空间(malloc或new),称之为动态内存,整个项目生命期间有效。,第八讲 指针与函数、指针数组与二维数组,指向指针的指针 2级指针的概念 指针数组 指针类型一览 二维数组 矢量数组 二维数组的形参与实参 字符串数组 指向二维数组的数组指针 指针与结构 结构封装对象的手段 指向结构的指针 指针访问结构,作业回顾 测试卷第一题 测试卷第四题 练习六第六题

10、多余的话-学c还是用c? 函数作用域 制作你的头文件,多余的话-学C还是用C?,/求整数数列array的最小公倍数 #include void input(int *,int *); int lcm(int *,int); int bei(int ,int ); int main() int array10,len; input(array, ,/-输入部分- void input(int *ip,int *len) printf(“输入长度:“); scanf(“%d“,len); for(int i=0;i*len;i+) printf(“输入元素%d= “,i); scanf(“%d“,

11、(ip+i); ,/-处理部分- int lcm(int *p,int len) for(int i=0;ilen-1;i+) *(p+i+1) =bei(*(p+i),*(p+i+1); return(*(p+len-1); /- int bei(int x,int y) int i=1,j=1,k=1; while(i) if(x*j=y*k)return(x*j); else if(x*jy*k)j+; else k+; ,头文件+函数声明,1、假设程序过万条语句,千余个函数,不计其数的头文件引用。 2、假设你在某一函数内部定义(声明)了某些函数,文件中其它函数要么无法引用这些函数,要么

12、函数定义域必须在文件中处于这些函数之后的位置。,函数声明在所有函数之外,并且形成自己的头文件。,多余的话-学C还是用C?,如没有myh.h头文件存在,则定义myh.h头文件的宏,头文件是用宏定义实现的,它描述了自定义头文件的起始: #ifndef myh_h #define myh_h #include void input(int *,int *); int lcm(int *,int); int bei(int ,int ); #endif,定义myh.h头文件范围的宏语句,myh.h的头文件内容,我要做我的头-文件!,多余的话-学C还是用C?,多余的话-学C还是用C?,多余的话-学C还是

13、用C?,多余的话-学C还是用C?,第八讲 指针与函数、指针数组与二维数组,指向指针的指针 2级指针的概念 指针数组 指针类型一览 二维数组 矢量数组 二维数组的形参与实参 字符串数组 指向二维数组的数组指针 指针与结构 结构封装对象的手段 指向结构的指针 指针访问结构,作业回顾 测试卷第一题 测试卷第四题 练习六第六题 多余的话-学c还是用c? 函数作用域 制作你的头文件,*p,指向指针的指针二级指针,一个指针变量的值是另一个指针变量的地址,则称该指针变量为指向指针的指针变量。 若指针指向一个数据变量,通过指针访问该数据变量,称为一级间接访问,即“*”。 若指针指向另一个指针变量,通过指针访问

14、该指针变量,称为二级间接访问,即“*”。 如下语句定义了一个二级字符型指针: char *p; p前面的两个*号可以分解成: char *(*p); 所以,不妨这样理解字符类型的二级指针p:*p是一个指向字符数据的指针变量,char *(*p)是指向一个字符型指针变量的指针,即*p就是p所指向的另一个指针变量。,跟我学C第八章第四节内容,char ch_a,*q,*p;,p=,q=,*p=a;,a,p,q,ch_a,*p,指向指针的指针二级指针,int a,*pa=,0FF040,pa,0FF060,变量名,变量地址,0FF080,0FF081,a,0FF082,变量名,变量地址,20,00,

15、pa初始化指向数据变量a,0FF080,*pa=0020;,用pa间接给数据变量a赋值,int *(*q);,声明一个指向指针变量类型的指针q,q,q=,q取得pa的地址,0FF040,*q= ;,40,00,为什么要区分指针是指向数据类型,还是指向指针类型?,sizeof(char *)=4,sizeof(char)=1,数据变量占用的地址单元数,同类型指针变量占用地址单元数,sizeof(int *)=4,sizeof(int)=4,sizeof(double *)=4,sizeof(double)=8,sizeof(bool *)=4,sizeof(bool)=1,布尔类型,头文件“stdio.h“,指向指针变量时,要使用二级指针的形式,跟我学C练习六第一题-交换指针,函数编程。主函数有2个整数变量i_a和i_b,而指针ip1指向i_a,ip2指向i_b,编程: 以ip1和ip2作为实参,调用input()函数从键盘读入2个整数并通过ip1和ip2返回给主函数的i_a和i_b; 以ip1和ip2作为实参,调用SwapPoint()函数,交换2个指针的指向(ip1指向i_b,ip2指向i_a)。 主函数调用SwapPoint()函数之后,执行如下语句: printf(“交换n“);

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

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

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