第8章 善于利用指针
《C语言》章节列表
第1章程序设计和C语言1第2章算法——程序的灵魂16第3章最简单的C程序设计——顺序程序设计第4章选择结构程序设计85第5章循环结构程序设计114第6章利用数组处理批量数据1426.1怎样定义和引用一维数组1426.1.1怎样定义一维数组1436.1.2怎样引用一维数组元素1446.1.3一维数组的初始化1456.1.4一维数组程序举例1466.2怎样定义和引用二维数组1486.2.1怎样定义二维数组1496.2.2怎样引用二维数组的元素1506.2.3二维数组的初始化1516.2.4二维数组程序举例1526.3字符数组1546.3.1怎样定义字符数组1546.3.2字符数组的初始化1556.3.3怎样引用字符数组中的元素1556.3.4字符串和字符串结束标志1566.3.5字符数组的输入输出1596.3.6使用字符串处理函数1616.3.7字符数组应用举例165习题168第7章用函数实现模块化程序设计1707.1为什么要用函数1707.2怎样定义函数1727.2.1为什么要定义函数1727.2.2定义函数的方法1737.3调用函数1747.3.1函数调用的形式1747.3.2函数调用时的数据传递1757.3.3函数调用的过程1777.3.4函数的返回值1787.4对被调用函数的声明和函数原型1797.5函数的嵌套调用1827.6函数的递归调用1847.7数组作为函数参数1927.7.1数组元素作函数实参1937.7.2数组名作函数参数1947.7.3多维数组名作函数参数1977.8局部变量和全局变量1997.8.1局部变量1997.8.2全局变量2007.9变量的存储方式和生存期2047.9.1动态存储方式与静态存储方式2047.9.2局部变量的存储类别2057.9.3全局变量的存储类别2087.9.4存储类别小结2127.10关于变量的声明和定义2147.11内部函数和外部函数2157.11.1内部函数2157.11.2外部函数215习题218第8章善于利用指针2208.1指针是什么2208.2指针变量2228.2.1使用指针变量的例子2228.2.2怎样定义指针变量2238.2.3怎样引用指针变量2248.2.4指针变量作为函数参数2268.3通过指针引用数组2308.3.1数组元素的指针2308.3.2在引用数组元素时指针的运算2318.3.3通过指针引用数组元素2338.3.4用数组名作函数参数2378.3.5通过指针引用多维数组2458.4通过指针引用字符串2558.4.1字符串的引用方式 2558.4.2字符指针作函数参数2598.4.3使用字符指针变量和字符数组的比较263 8.5指向函数的指针2668.5.1什么是函数指针2668.5.2用函数指针变量调用函数2668.5.3怎样定义和使用指向函数的指针变量268 8.5.4用指向函数的指针作函数参数2708.6返回指针值的函数2748.7指针数组和多重指针2778.7.1什么是指针数组 2778.7.2指向指针数据的指针2808.7.3指针数组作main函数的形参2828.8动态内存分配与指向它的指针变量2858.8.1什么是内存的动态分配2858.8.2怎样建立内存的动态分配2858.8.3void指针类型 2878.9有关指针的小结288习题291第9章用户自己建立数据类型2939.1定义和使用结构体变量2939.1.1自己建立结构体类型2939.1.2定义结构体类型变量 2959.1.3结构体变量的初始化和引用2979.2使用结构体数组3009.2.1定义结构体数组3009.2.2结构体数组的应用举例3019.3结构体指针3039.3.1指向结构体变量的指针3039.3.2指向结构体数组的指针3049.3.3用结构体变量和结构体变量的指针作函数参数306 9.4用指针处理链表3099.4.1什么是链表 3099.4.2建立简单的静态链表3109.4.3建立动态链表3119.4.4输出链表3159.5共用体类型3179.5.1什么是共用体类型3179.5.2引用共用体变量的方式3189.5.3共用体类型数据的特点3199.6使用枚举类型3239.7用typedef声明新类型名326习题330第10章对文件的输入输出33110.1C文件的有关基本知识33110.1.1什么是文件33110.1.2文件名33210.1.3文件的分类33210.1.4文件缓冲区33310.1.5文件类型指针33310.2打开与关闭文件33510.2.1用fopen函数打开数据文件33510.2.2用fclose函数关闭数据文件33710.3顺序读写数据文件33810.3.1怎样向文件读写字符33810.3.2怎样向文件读写一个字符串34110.3.3用格式化的方式读写文件34410.3.4用二进制方式向文件读写一组数据34510.4随机读写数据文件34910.4.1文件位置标记及其定位34910.4.2随机读写 35210.5文件读写的出错检测353习题354第11章常见错误分析355附录370附录A在Visual C++ 6.0环境下运行C程序的方法370附录B常用字符与ASCII代码对照表377附录CC语言中的关键字378附录D运算符和结合性378附录EC语言常用语法提要380附录FC库函数384参考文献390第4章选择结构程序设计854.1选择结构和条件判断854.2用if语句实现选择结构874.2.1用if语句处理选择结构举例874.2.2if语句的一般形式 894.3关系运算符和关系表达式914.3.1关系运算符及其优先次序914.3.2关系表达式924.4逻辑运算符和逻辑表达式924.4.1逻辑运算符及其优先次序934.4.2逻辑表达式944.4.3逻辑型变量964.5条件运算符和条件表达式974.6选择结构的嵌套1004.7用switch语句实现多分支选择结构1024.8选择结构程序综合举例106习题112第5章循环结构程序设计1155.1为什么需要循环控制1155.2用while语句实现循环1165.3用do…while语句实现循环1185.4用for 语句实现循环1215.5循环的嵌套1255.6几种循环的比较1265.7改变循环执行的状态1265.7.1用break语句提前终止循环1275.7.2用continue语句提前结束本次循环1285.7.3break语句和continue语句的区别1295.8循环程序举例132习题141第6章利用数组处理批量数据1436.1怎样定义和引用一维数组1436.1.1怎样定义一维数组1446.1.2怎样引用一维数组元素1456.1.3一维数组的初始化1466.1.4一维数组程序举例1476.2怎样定义和引用二维数组1496.2.1怎样定义二维数组1506.2.2怎样引用二维数组的元素1516.2.3二维数组的初始化1526.2.4二维数组程序举例1536.3字符数组1556.3.1怎样定义字符数组1556.3.2字符数组的初始化1566.3.3怎样引用字符数组中的元素156 6.3.4字符串和字符串结束标志1576.3.5字符数组的输入输出1606.3.6使用字符串处理函数1626.3.7字符数组应用举例166习题169第7章用函数实现模块化程序设计171 7.1为什么要用函数1717.2怎样定义函数1737.2.1为什么要定义函数1737.2.2定义函数的方法1747.3调用函数1757.3.1函数调用的形式1757.3.2函数调用时的数据传递1767.3.3函数调用的过程1787.3.4函数的返回值1797.4对被调用函数的声明和函数原型181 7.5函数的嵌套调用1837.6函数的递归调用1857.7数组作为函数参数1937.7.1数组元素作函数实参1937.7.2数组名作函数参数1957.7.3多维数组名作函数参数1987.8局部变量和全局变量2007.8.1局部变量2007.8.2全局变量2017.9变量的存储方式和生存期2057.9.1动态存储方式与静态存储方式205 7.9.2局部变量的存储类别2067.9.3全局变量的存储类别2097.9.4存储类别小结2137.10关于变量的声明和定义2157.11内部函数和外部函数2167.11.1内部函数2167.11.2外部函数216习题219第8章善于利用指针2218.1指针是什么2218.2指针变量2238.2.1使用指针变量的例子2238.2.2怎样定义指针变量2248.2.3怎样引用指针变量2258.2.4指针变量作为函数参数2278.3通过指针引用数组2328.3.1数组元素的指针2328.3.2在引用数组元素时指针的运算2338.3.3通过指针引用数组元素2348.3.4用数组名作函数参数2398.3.5通过指针引用多维数组2478.4通过指针引用字符串2578.4.1字符串的引用方式 2578.4.2字符指针作函数参数2618.4.3使用字符指针变量和字符数组的比较265 8.5指向函数的指针2688.5.1什么是函数指针2688.5.2用函数指针变量调用函数2688.5.3怎样定义和使用指向函数的指针变量270 8.5.4用指向函数的指针作函数参数2728.6返回指针值的函数2768.7指针数组和多重指针2798.7.1什么是指针数组 2798.7.2指向指针数据的指针2828.7.3指针数组作main函数的形参2848.8动态内存分配与指向它的指针变量2878.8.1什么是内存的动态分配2878.8.2怎样建立内存的动态分配2878.8.3void指针类型 2898.9有关指针的小结290习题293第9章用户自己建立数据类型2959.1定义和使用结构体变量2959.1.1自己建立结构体类型2959.1.2定义结构体类型变量 2979.1.3结构体变量的初始化和引用2999.2使用结构体数组3029.2.1定义结构体数组3029.2.2结构体数组的应用举例3049.3结构体指针3059.3.1指向结构体变量的指针3059.3.2指向结构体数组的指针3069.3.3用结构体变量和结构体变量的指针作函数参数3089.4用指针处理链表3119.4.1什么是链表 3119.4.2建立简单的静态链表3129.4.3建立动态链表3139.4.4输出链表3179.5共用体类型3199.5.1什么是共用体类型3199.5.2引用共用体变量的方式3209.5.3共用体类型数据的特点3219.6使用枚举类型3259.7用typedef声明新类型名328习题332第10章对文件的输入输出33310.1C文件的有关基本知识33310.1.1什么是文件33310.1.2文件名33410.1.3文件的分类33410.1.4文件缓冲区33510.1.5文件类型指针33510.2打开与关闭文件33710.2.1用fopen函数打开数据文件33710.2.2用fclose函数关闭数据文件33910.3顺序读写数据文件34010.3.1怎样向文件读写字符34010.3.2怎样向文件读写一个字符串34310.3.3用格式化的方式读写文件34610.3.4用二进制方式向文件读写一组数据34710.4随机读写数据文件35110.4.1文件位置标记及其定位35110.4.2随机读写 35410.5文件读写的出错检测355习题356第11章常见错误分析374附录390附录A在Visual C++ 6.0环境下运行C程序的方法390 附录CC语言中的关键字398附录D运算符和结合性398附录EC语言常用语法提要400附录FC库函数404参考文献410。
职业技术学院教师职位试讲题目
第十八课 二、生词
初级汉语教材
杨寄洲
北京汉语大学出版社
17381职业技术学院教师职位试讲题目 Nhomakorabea序号
专业名称
课程名称
章节
教材名称
作者
出版社
书号
1
计算机科学与技术
C程序设计
第8章善于利用指针
第一节和第二节
C程序设计(第四版)
谭浩强
清华大学出版社
24464
2
旅游管理
导游业务知识
第三章第二节全陪导游服务程序
导游业务知识
新疆维吾尔自治区旅游局编
旅游教育出版社
21948
3
财务管理
基础会计
第二章会计6要素
基础会计
赵丽生
东北财经大学出版社
10246
4
审计
审计学原理
第四章审计风险
审计(第三版)
胡中艾
东北财经大学出版社
04757
5
物流管理
配送管理
第五章第三节商品拣选
配送中心管理与运作
朱华
高等教育出版社
36880
6
电子商务
电子商务概论
第二章第二节B2C电子商务模式
电子商务概论
宋文官
清华大学出版社
90964
7
土木工程
建筑工程测量
第2章第四节
水准测量的方法
建筑工程测量
周建郑
中国建筑工业出版社
96879
8
机械电子工程
电子技术基础
第五章集成运放基本单元电路
电子技术基础
庞程山
北京高等教育出版社
6578
9
体育
第8章 善于利用指针zsq
*(*(a+i)+j)代表什么?
a a+1 a+2
行指针
a[0] a[0]+1 a[0]+2 a[0]+3 列指针 a[0] a[1] a[2] 1 9 17 3 11 19 5 13 21 7 15 23
2. 指向多维数组元素的指针变量
(1) 指向数组元素的指针变量
例7.3 有一个3×4的二维数组,要求用 指向元素的指针变量输出二维数组各元 素的值。
a[0]+2代表a[0][2]的地址
a[0]+3代表a[0][3]的地址 a[0] a[0]+1 a[0]+2 a[0]+3 列指针 a[0] a[1] a[2] 1 9 17 3 11 19 5 13 21 7 15 23
a a+1 a+2
行指针
a[1]代表谁的地址? a[1]+1代表谁的地址?
(2) 指针法,如*(a+i)或*(p+i) 其中a是数组名,p是指向数组元素的指针 变量,其初值p=a或p=&a[0]
7.2.1 指针与一维数组
例7.2 输出整型数组a[10]的全部元素。
解题思路:引用数组中各元素的值有3种 方法:(1)下标法;(2)通过数组名计算 数组元素地址,找出元素的值;(3) 用指 针变量指向数组元素 分别写出程序,以资比较分析。
(1) 下标法。 #include <stdio.h> int main() { int a[10]; int i; printf(“enter 10 integer numbers:\n"); for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf(“%d ”,a[i]); printf("%\n"); return 0; }
精品课件-C程序设计(第三版)(荣政)-第8章
第八章 指针
指针类型是对所有类型的指针的总称,指针的类型是指 针所指对象的数据类型。例如,pc是指向字符变量的指针, 简称字符指针。字符指针是基本类型的指针之一,除各种基 本类型之外,允许说明指向数组的指针、指向函数的指针、 指向结构体和共用体的指针以及指向各类指针的指针。在C 语言中只有指针被允许用来存放地址的值,其它类型的变量 只能存放该类型的数据。(很多书中用指针一词来指地址值, 或用指针变量来代表指针,阅读中应注意其具体含义。)
例8.2中指向整型的指针point在定义之后直接使用了,这 两条语句在编译时不会出现语法错误,但在使用时却几乎肯定 会出问题。表面上看,scanf()函数的参数要求给出的是地址, 而point的值就代表的是地址,但是point的值究竟是多少,也 就是说point究竟指向哪里,我们无法得知,在这种情况下就 对point指向的单元进行输入操作,将冲掉point指向的单元的 原有内容,假如这个单元是操作系统的所在处,就破坏了操作 系统,显然是一件危险的事。
为了理解指针的概念,程序员要有关于计算机如何在存储 器中存储信息的基本知识。以下简单地介绍个人计算机中存储 器存储的情况。
第八章 指针
个人计算机中CPU可以直接访问的,用来存储程序和数据 的记忆部件称为内存储器,内存储器由成千上万个顺序存储单 元组成,每个单元由一个惟一的地址标识。给定计算机的存储 器地址范围为从0到所安装的存储器数量的最大值。在计算机 上运行的每一个程序都要使用存储器。例如,操作系统要占用 一些计算机存储空间,每个应用程序也要占用计算机存储空间。 按照面向过程的结构化程序设计方法,程序代码和程序要处理 的数据是分开存储的,所以,一个程序在内存中要占两部分空 间:数据部分和指令代码部分。
第八章 指针
善于利用指针 PPT课件
50
*i_pointer=50;
将i的地址 存到这里
间接存取
i
直接存取
2000
3
间接存取
i_pointer
2000
*i_pointer
3 2000
为了表示将数值3送到变量中,可以有两 种表达方法: (1) 将3直接送到变量i所标识的单元中,例 如:i=3; (2) 将3送到变量i_pointer所指向的单元 (即变量i的存储单元),例如: *i_pointer=3; 其中*i_pointer表示 i_pointer指向的对象
8.1 指针是什么
内存区的每一个字节有一个编号,这就是 “地址”,它相当于旅馆中的房间号。 在地址所标识的内存单元中存放数据,这相 当于旅馆房间中居住的旅客一样。 由于通过地址能找到所需的变量单元,我们 可以说,地址指向该变量单元。 将地址形象化地称为“指针”
务必弄清楚存储单元的地址和存储 单元的内容这两个概念的区别 例如:
指向就是通过地址来体现的
假设i_pointer中的值是变量i的地址 (2000),这样就在i_pointer和变量i之间 建立起一种联系,即通过i_pointer能知道i 的地址,从而找到变量i的内存单元
由于通过地址能找到所需的变量单元,因 此说,地址指向该变量单元
将地址形象化地称为“指针”。意思是通 过它能找到以它为地址的内存单元
#include <stdio.h> 此处*与类型名在一起。 此时共同定义指针变量 int main() { int a=100,b=10; int *pointer_1, *pointer_2; pointer_1=&a; pointer_2=&b; printf(“a=%d,b=%d\n”,a,b); printf(“*pointer_1=%d,*pointer_2= %d\n”,*pointer_1,*pointer_2); return 0; 此处*与指针变量一起使用。此 } 时代表指针变量所指向的变量
C语言 第8章 善于利用指针
第8章善于利用指针指針是什么⏹如果在程序中定义了一个变量,在对程序进行编译时,系统就会给该变量分配内存单元⏹内存区的每一个字节有一个编号,这就是“地址”,它相当于旅馆中的房间号。
⏹在地址所标识的内存单元中存放数据,这相当于旅馆房间中居住的旅客一样。
⏹由于通过地址能找到所需的变量单元,我们可以说,地址指向该变量单元。
⏹将地址形象化地称为“指针”⏹务必弄清楚存储单元的地址和存储单元的内容这两个概念的区别指针变量2怎样定义指针变量⏹定义指针变量的一般形式为:类型*指针变量名;如:i n t*p o i n t e r_1,*p o i n t e r_2;•i n t是为指针变量指定的“基类型”•基类型指定指针变量可指向的变量类型•如p o i n t e r_1可以指向整型变量,但不能指向浮点型变量2怎样定义指针变量⏹下面都是合法的定义和初始化:f l o a t*p o i n t e r_3;c h a r*p o i n t e r_4;i n t a,b;i n t*p o i n t e r_1=&a,*p o i n t e r_2=&b;3怎样引用指针变量⏹在引用指针变量时,可能有三种情况:•给指针变量赋值。
如:p=&a;•引用指针变量指向的变量。
如有p=&a;*p=1;则执行p r i n t f(“%d”,*p);将输出1•引用指针变量的值。
如:p r i n t f(“%o”,p);3怎样引用指针变量⏹要熟练掌握两个有关的运算符:(1)&取地址运算符。
&a是变量a的地址(2)*指针运算符(“间接访问”运算符)如果:p指向变量a,则*p就代表a。
k=*p;(把a的值赋给k)*p=1;(把1赋给a)4指针变量作为函数参数通过指针引用数组1数组元素的指针⏹所谓数组元素的指针就是数组元素的地址⏹可以用一个指针变量指向一个数组元素i n t a[10]={1,3,5,7,9,11,13,15,17,19};i n t*p;p=&a[0];⏹在指针指向数组元素时,允许以下运算:•加一个整数(用+或+=),如p+1•减一个整数(用-或-=),如p-1•自加运算,如p++,++p•自减运算,如p--,--p•两个指针相减,如p1-p2(只有p1和p2都指向同一数组中的元素时才有意义)3通过指针引用数组元素⏹引用一个数组元素,可用下面两种方法:(1)下标法,如a[i]形式(2)指针法,如*(a+i)或*(p+i)其中a是数组名,p是指向数组元素的指针变量,其初值p=a 4用数组名作函数参数⏹用数组名作函数参数时,因为实参数组名代表该数组首元素的地址,形参应该是一个指针变量⏹C编译都是将形参数组名作为指针变量来处理的通过指针引用字符串1字符串的引用方式⏹字符串是存放在字符数组中的。
浙江师范大学886软件工程综合基础2020年考研专业课初试大纲
浙江师范大学硕士研究生入学考试初试科目考 试 大 纲科目代码、名称:886软件工程综合基础适用专业:083500软件工程(一级学科)、085400电子信息(软件工程领域)一、考试形式与试卷结构(一)试卷满分及考试时间本试卷满分为150分,考试时间为180分钟。
(二)答题方式答题方式为闭卷、笔试。
试卷由试题和答题纸组成;答案必须写在答题纸(由考点提供)相应的位置上。
(三)试卷题型结构(一)C程序设计部分,满分60分,其中:1、单项选择题:10小题,每小题3分,共30分2、程序设计题:3小题,每小题10分,共30分(二)软件工程基础部分,满分90分,其中:1、分析设计题:3小题,每小题15分,共45分2、综合论述题:3小题,每小题15分,共45分二、考查目标(复习要求)软件工程专业全日制学术型研究生入学考试科目《软件工程综合基础》的考试内容包括C程序设计和软件工程基础两部分。
其中:C程序设计部分要求考生掌握C语言的基本内容及程序设计的基本方法、常用算法与编程技巧,掌握结构化程序设计思想,选择适当的数据类型表示实际问题,能使用函数进行模块化程序设计,掌握应用计算机解决和处理实际问题的思维方法与基本能力。
软件工程基础部分要求考生掌握软件工程的基本概念、基本原理、基本方法和技术,理解规范化、文档化在软件生命周期过程中的重要性,并能运用相关理论和方法解决软件工程中的实际问题。
三、考查范围或考试内容概要C程序设计部分第一章程序设计与C语言1.了解计算机语言的基本概念。
2.了解C语言的背景、特点。
3.掌握C语言程序的结构。
第二章算法——程序的灵魂1.了解算法的概念、特性。
2.了解结构化程序设计方法。
3.掌握算法的描述方法。
第三章最简单的C程序设计——顺序程序设计1.掌握C语言的常量与变量;整型、浮点型、字符型数据。
c第8章 指 针
8.2.2 指针变量的引用
有两个有关的运算符: (1) &:取地址运算符。 (2) *:指针运算符(或称“间接访问”运算符)。 例如:&a为变量a的地址,*p为指针变量p所指向的变量。 【例8.1】指针变量的引用。 main() { int a,b; int *pointer_1,*pointer_2; a=100;b=10; pointer_1=&a; /*把变量a的地址赋给pointer_1*/ pointer_2=&b; /*把变量b的地址赋给pointer_2*/ printf("%d,%d\n",a,b); printf("%d,%d\n",*pointer_1,*pointer_2); } 运行结果为: 100,10 100,10
8.3.2 指针的关系运算
运算规则是:当两个指针变量的值(地址值)满足关系运算时,结果为1(真) ;否则结果为0(假)。所以两个指针变量进行关系运算的结果也是逻辑值。 关系运算可以用于地址常量、指针变量、地址常量与指针变量及地址型表 达式之间的比较。例如,定义了数组a和同类型的指针变量px,py;使px指向数 组元素a[2];py指向数组元素a[3]。看下列的关系表达式及其运算结果: px<py 结果为1(真)。 px++==py 结果为0(假),注意++是后缀。 --py==px 结果为1(真),注意—是前缀。 px<&a[5] 结果为1(真),&a[5]地址是地址常量。 py>=px+2 结果为0(假),px+2是地址型表达式,代表a[4]的地址。 指针的运算应注意以下几点: 指针变量只能和整数或整型变量相加减,而不能和实型数或实型变量相加 减。如px+3.5是错误的.。 指针变量不能进行乘法和除法运算。如px*2或px/4都是错误的。 两个指针变量相减,必须指向同一个数组,否则不能进行减法运算。
善于利用指针
例
整型变量i
i = 3;
-----直接访问
2000 2001 2002 2003 2004
20 3 10
变量i_pointer
2000
2005
2006
指针变量
例 *i_pointer = 20;
-----间接访问
…...
2、指针变量与其所指向的变量之间的关系
i_pointer
2000 变量i 3 *i_pointer i &i i=3; *i_pointer i_pointer *i_pointer=3;
4、指针变量的赋值 初始化赋值
[存储类型] 基类型 *指针名 = 初始地址值;
例
赋给指针变量, int i; int *p = &i; 不是赋给目标变量
例
int i; *p = &i; int int *p = &i; int i; int *q = p;
变量必须已说明过 类型应一致
用已初始化指针变量作初值
(main) 2000 2002 2004
2006 2008
200A 200C 200E 2010
9 5 5 9 2000 2002
(swap)
2000 2002 5
...
…...
整型变量a 整型变量b 指针p_1
指针p_2
指针p1 指针p2
整型p
【例】将数从大到小输出
void swap(int *p1, int *p2) { int p; p = *p1; *p1 = *p2; 地址传 *p2 = p; 递 } void main ( ) { int a, b; int *p_1, *p_2; scanf ("%d,%d", &a, &b); p_1 = &a; p_2 = &b; if (a < b) swap (p_1, p_2); printf ("\n%d,%d\n", a, b); }
湖州师范学院硕士研究生入学考试初试科目
2.设计求解三角形面积的程序,通过键盘输入三个顶点的二维坐标,输出这三个点所构成的三角形的面积。在这个问题中,你认为应该设计几个结构体类型?这些结构体类型分别应包含哪些成员?
……
五、算法/程序阅读题(共×题,每题×分,共×分)
3.掌握字符数组的使用方法。
第七章用函数实现模块化程序设计
1.掌握函数的定义、函数参数的传递方式。
2. 掌握函数调用、函数的嵌套调用和递归调用、数组作为函数参数。
3.掌握局部变量和全局变量概念。
4.了解变量的存储类别和生存期。
5. 了解变量的声明和定义。
6. 了解内部函数和外部函数。
第八章善于利用指针
C.在一个函数内定义的变量只在本函数范围内有效
D.在一个函数内的复合语句中定义的变量在本函数范围内有效
8.已知字符‘A’的ASCII代码值是65,字符变量c1的值是‘A’,c2的值是‘D’。执行语句“printf(“%d,%d”,c1,c2-2);”后,输出结果是________。
A. A,B B. A,68 C. 65,66 D. 65,68
C.fwrite(student,sizeof(struct st),50,fp);
D.for(i=0;i<50;i++) fwrite(student+i,sizeof(struct st),1,fp);
7.以下叙述不正确的是________。
A.在不同的函数中可以使用相同名字的变量
B.函数中的形式参数是局部变量
long f ( int n )
{ int i ; long s ;
(1);
c语言程序设计第五版课后答案谭浩强第八章课后答案
c语⾔程序设计第五版课后答案谭浩强第⼋章课后答案c语⾔程序设计第五版课后答案谭浩强习题答案第⼋章善于利⽤指针本章习题均要求使⽤指针⽅法处理。
1. 输⼊3个整数,要求按由⼩到⼤的顺序输出。
解题思路:先获取到三个变量的地址,然后获取三个数据,通过指针进⾏⽐较转换即可答案:#include <stdio.h>void swap(int *p_a, int *p_b){int temp = *p_a;*p_a = *p_b;*p_b = temp;}int main(){int a, b, c, *p_a = &a, *p_b = &b, *p_c = &c; // 获取每个变量空间的地址printf("Please enter three numbers:");scanf_s("%d%d%d", p_a, p_b, p_c);if (*p_a > *p_b) {swap(p_a, p_b);//通过指针进⾏指向空间内的数据交换}if (*p_a > *p_c) {swap(p_a, p_c);}if (*p_b > *p_c) {swap(p_b, p_c);}printf("%d %d %d\n", *p_a, *p_b, *p_c);system("pause");return 0;}2. 输⼊3个字符串,要求按由⼩到⼤的顺序输出。
解题思路:字符串的⽐较可以使⽤strcmp函数,返回值>0表⽰⼤于,返回值⼩于0表⽰⼩于,返回追等于0表⽰相同。
其他的⽐较排序思路与数字的排序交换没有区别,逐个进⾏⽐较先找出最⼤的,然后找出第⼆⼤的。
答案:#include <stdio.h>int main(){char str[3][32];char *p[3];printf("Please enter three strings:");for (int i = 0; i < 3; i++) {p[i] = str[i];scanf_s("%s", p[i], 32);//后边的数字限制缓冲区边界,防⽌缓冲区溢出访问越界}//让p[0]和p[1]/p[2]分别进⾏⽐较,找出最⼤的字符串,i+1之后,则让p[1]和p[2]进⾏⽐较,找出第⼆⼤//i循环总个数-1次,最后⼀个是不需要⽐较的for (int i = 0; i < 2; i++) {for (int j = i + 1; j < 3; j++) {if (strcmp(p[i], p[j]) > 0) {char *tmp = p[i]; p[i] = p[j]; p[j] = tmp;}}}printf("%s %s %s\n", p[0], p[1], p[2]);system("pause");return 0;}3. 输⼊10个整数,将其中最⼩的数与第⼀个数对换, 把最⼤的数与最后⼀个数对换。
C语言程序设计第八章 指针的使用
第八章指针的使用【学习目标】本章将详细介绍在C语言中如何使用指针。
学习要点包括如下几点:(1)掌握指针和指针变量的概念,了解指针变量的特点以及直接访问数据和间接访问数据的原理。
(2)掌握指针变量的定义、赋值方法及指针运算符的使用,熟练运用指针访问简单变量。
(3)熟悉指针和一维数组的关系,掌握指向一维数组的指针变量的定义方法,熟练使用指针变量访问一维数组元素。
(4)了解指针与字符串的关系,能熟练使用指针处理字符串。
(5)熟练掌握用指针变量作函数的参数时函数的定义和调用方法、数组名作函数的参数用法。
(6)指向指针的指针的运用。
【学习导航】本章的在整个课程中的位置如图5-1所示。
图8-1 本章学习导航在本书的第一章介绍C语言有一个灵活性的特点,那么它的灵活性具体体现在哪里呢?其实就是指针。
指针是C语言的精华部分,通过利用指针,我们能很好地利用内存资源,使其发挥最大的效率。
有了指针技术,我们可以描述复杂的数据结构,对字符串的处理可以更灵活,对数组的处理更方便,使程序的书写简洁,高效。
8.1 地址和指针指针是C语言的一种数据类型,类似于整型、字符型等。
既然指针也是一种类型,那么也可以定义该类型的变量,称为指针变量。
指针变量和其他类型的变量的区别是:指针变量存储的是地址。
所以要学好指针,就一定要明白数据在内存中是如何存储的。
计算机所有数据都是存储在存储器里,系统的内存可看作编了号的小房间,如果要取房间的东西(读取数据)就需要得到房间编号。
地址就是内存区中对每个字节的编号。
下面通过两个整型变量来说明。
整型变量x、y(基本整型需4个字节)在内存中的存储如图8-2所示(假设内存编号是从2000开始)。
把变量所占用的存储单元首字节的地址作为变量的地址。
C语言中利用取地址运算符“&”获取变量的存储地址。
例如,&c将返回c的首地址;&x将返回x的首地址。
2000H2004H2008H2012H...图8-2 变量x和y在内存中的存储图8-2中2000H和2004H就是内存单元的地址。
谭浩强所著的《C程序设计》(第5版,清华大学出版社)善于利用指针【圣才出品】
表 8-1 以变量名和数组名作为函数参数的比较
5.通过指针引用多维数组 (1)多维数组元素的地址 如图 8-5 所示是一个多维数组元素地址示意图。其中 a 代表的是首行(即序号为 0 的行) 的首地址、a+1 与 a+2 分别为序号为 1 和 2 的行。
5 / 51
圣才电子书 十万种考研考证电子书、题库视频学习平台
图 8-3 指针变量指向数组元素 2.在引用数组元素时指针的运算
3 / 51
圣才电子书 十万种考研考证电子书、题库视频学习平台
当指针指向数组元素的时候,允许对指针进行加和减的运算。 (1)运算分类 ①加一个整数(用+或+=),如 p+1。 ②减一个整数(用-或-=),如 p-1。 ③自加运算,如 p++,++p。 ④自减运算,如 p--,--p。 ⑤两个指针相减,如 p1-p2(只有 p1 和 p2 都指向同一数组中的元素时才有意义)。 (2)详细说明 ①指针变量 p+1 或 p-1 是加上或减去一个数组元素所占用的字节数。 ②如果 p 的初值为&a[0],则 p+i 和 a+i 是指数组元素 a[i]的地址,如图 8-4 所示。
【C语言】第八章 指针5
例8.24 有两个整数a和b,由用户输入 1,2或3。如输入1,程序就给出a和b中大 者,输入2,就给出a和b中小者,输入3, 则求a与b之和。 解题思路:与例8.23相似,但现在用一个 函数fun来实现以上功能。
#include <stdio.h> int main() {void fun(int x,int y, int (*p)(int,int)); int max(int,int); int min(int,int); int add(int,int); int a=34,b=-21,n; printf("please choose 1,2 or 3:"); scanf(“%d”,&n); if (n==1) fun(a,b,max); else if (n==2) fun(a,b,min); else if (n==3) fun(a,b,add); return 0; }
int fun(int x,int y,int (*p)(int,int)) { int resout; 输入的选项为1时 resout=(*p)(x,y); printf(“%d\n”,resout); 相当于max(x,y) } int max(int x,int y) { int z; if(x>y) z=x; else z=y; printf("max=" ); return(z); }
P 指针数组
P[0] &a &b &c &d a
p[1]=&b;
p[2]=&c; p[3]=&d;
P[1]
P[2] P[3]
b
c d
*p[0]等价于a
1. 什么是指针数组
C语言 第8章 善于利用指针
错!!! 无确定的指向
{ int *temp; *temp=*p1; *p1=*p2; *p2=*temp; }
#include <stdio.h> 错!!! 无法交换a,b int main() {…… if (a<b) swap(a,b); printf(“max=%d,min=%d\n”,a,b); return 0; a } 5 void swap(int x,int y) { int temp; temp=x; x=y; y=temp; 5 9 }
&a &b &b &a p2
a 5 9 b
p1
p
#include <stdio.h> int main() { int *p1,*p2,*p,a,b; printf(“integer numbers:"); scanf(“%d,%d”,&a,&b); p1=&a; p2=&b; if(a<b) { p=p1; p1=p2; p2=p; } printf(“a=%d,b=%d\n”,a,b); printf(“%d,%d\n”,*p1,*p2); return 0; }
第8章 善于利用指针
8.1 指针是什么
8.2 指针变量 8.3 通过指针引用数组 8.4 通过指针引用字符串 8.5 指向函数的指针
8.6 返回指针值的函数
8.7 指针数组和多重指针
8.8 动态内存分配与指向它的指针变量
8.9 有关指针的小结
8.1 指针是什么
如果在程序中定义了一个变量,在对程序进行 编译时,系统就会给该变量分配内存单元 编译系统根据程序中定义的变量类型,分配一 定长度的空间
《高级语言程序设计》 考试大纲
湖北工程学院2021年普通专升本:《高级语言程序设计(C语言)》考试大纲一、基本要求:考生应按本大纲的要求,正确理解C语言的结构、语法与环境;C语言的基本概念、函数及其调用;各类语句的语法,语义和各种数据类型的使用特点;问题的分析、设计及C语言实现及调试方法,并得到充分的程序设计训练。
本大纲对内容的要求由低到高,对概念和理论分为“了解”和“理解”两个层次;对运算和程序分为“掌握”和“应用”两个层次。
二、考试方法和时间:考试方法为闭卷考试,考试时间为120分钟。
三、考试题型大致比例:选择题:30分,填空题:20分,程序阅读:40分,程序填空:24分,程序设计:36分满分:150分。
四、考试内容和要求:第1章程序设计和C语言考试内容:(1)什么是计算机程序;(2)什么是计算机语言;(3)C语言的发展及其特点;(4)C语言程序的结构;(5)运行C程序的步骤与方法;(6)程序设计的任务。
考试要求:(1)了解:C语言的发展历史及其特点;(2)掌握:运行C程序的步骤和方法;(3)应用:用C语言编写简单的屏幕输出程序第2章算法----程序的灵魂考试内容:(1)算法的概念;(2)算法的特性;(3)算法的几种表示方法;(4)结构化程序设计方法;考试要求:(1)了解:最基本的算法;(2)理解:结构化程序设计方法第3章最简单的C程序设计----顺序程序设计考试内容:(1)数据的表现形式及其运算;(2)运算符和表达式;(3)C语句;(4)数据的输入输出;考试要求:(1)掌握:几种基本数据类型的表示形式,以及定义于基本数据类型之上的各种运算(算术、赋值、关系、逻辑、条件、逗号等);(2)掌握:常量的意义及几种基本数据类型的常量的表示形式,符合常量的定义与使用,变量的定义及自定义标识符的规范;(3)掌握:混合运算的表达式中各种运算符的优先级及结合方向;(4)掌握:输入、输出函数的使用规范第4章选择结构程序设计考试内容:(1)选择结构和条件判断;(2)关系运算符和关系表达式,逻辑运算符和逻辑表达式,条件运算符和条件表达式;(3)if选择控制语句;(4)switch选择控制语句。
《高级语言程序设计》考试大纲
《高级语言程序设计》考试大纲
I.考试的性质
我校本科插班生考试(以下简称“插班生考试”)《高级语言程序设计》科目的考试,是普通高等学校(含高职班和各类成人高校从普通高考招生的普通班)应届和往届专科毕业生,以及通过自学考试、成人教育等国民教育系列获得大专毕业证书的人员,升入我校计算机科学与技术本科专业就读的必考科目。
II.考试内容及要求
《高级语言程序设计》课程主要任务是训练学生能灵活运用C语言的基本技能设计程序、编写程序和调试程序的能力,培养学生综合运用所学知识进行综合实验的能力,最终让学生提高分析问题、并运用计算机技能解决实际问题的能力。
Ⅲ.参考书目
考试主要参考书为《C程序设计(第四版)》,谭浩强,清华大学出版社,2013年4月。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
&a &b &b &a p2
a 5 9 b
home back first prev next last
25
p1
p
#include <stdio.h> int main() { int *p1,*p2,*p,a,b; printf(“integer numbers:"); scanf(“%d,%d”,&a,&b); p1=&a; p2=&b; if(a<b) { p=p1; p1=p2; p2=p; } printf(“a=%d,b=%d\n”,a,b); printf(“%d,%d\n”,*p1,*p2); return 0; }
home back first prev next last
22
例8.2 输入a和b两个整数,按先大后小的顺 序输出a和b。 • 解题思路:用指针方法来处理这个问题。 不交换整型变量的值,而是交换两个指针 变量的值。
home back first prev next last
23
p1
p
#include <stdio.h> int main() { int *p1,*p2,*p,a,b; printf(“integer numbers:"); scanf(“%d,%d”,&a,&b); p1=&a; p2=&b; if(a<b) 成立 { p=p1; p1=p2; p2=p; } printf(“a=%d,b=%d\n”,a,b); printf(“%d,%d\n”,*p1,*p2); return 0; }
6
int i=3,j=6,k; k=i+j; 从这里取3 从这里取6
将9送到这里
直接存取
home back first prБайду номын сангаасv next last
7
int i=3,j=6,k; 定义特殊变量i_pointer i_pointer=&i;
50
*i_pointer=50;
将i的地址 存到这里
间接存取
8.2.1使用指针变量的例子 8.2.2 怎样定义指针变量 8.2.3 怎样引用指针变量 8.2.4 指针变量作为函数参数
home back first prev next last
15
8.2.1使用指针变量的例子
例8.1 通过指针变量访问整型变量。 • 解题思路:先定义2个整型变量,再定 义2个指针变量,分别指向这两个整型 变量,通过访问指针变量,可以找到它 们所指向的变量,从而得到这些变量的 值。
home back first prev next last
27
• 注意:
– a和b的值并未交换,它们仍保持原值 – 但p1和p2的值改变了。p1的值原为&a,后来变 成&b,p2原值为&b,后来变成&a – 这样在输出*p1和*p2时,实际上是输出变量b和 a的值,所以先输出9,然后输出5
home back first prev next last
3
8.1 指针是什么
• 内存区的每一个字节有一个编号,这就是 “地址”,它相当于旅馆中的房间号。 • 在地址所标识的内存单元中存放数据,这相 当于旅馆房间中居住的旅客一样。 • 由于通过地址能找到所需的变量单元,我们 可以说,地址指向该变量单元。 • 将地址形象化地称为“指针”
home back first prev next last
11
• 由于通过地址能找到所需的变量单元,因 此说,地址指向该变量单元 • 将地址形象化地称为“指针”。意思是通 过它能找到以它为地址的内存单元
home back first prev next last
12
• 一个变量的地址称为该变量的“指针” 例如,地址2000是变量i的指针 • 如果有一个变量专门用来存放另一变量的 地址(即指针),则它称为“指针变量” • i_pointer就是一个指针变量。指针变量就是 地址变量,用来存放地址的变量,指針变 量的值是地址(即指针)
home back first prev next last
17
#include <stdio.h> 此处*与类型名在一起。 此时共同定义指针变量 int main() { int a=100,b=10; int *pointer_1, *pointer_2; pointer_1=&a; pointer_2=&b; printf(“a=%d,b=%d\n”,a,b); printf(“*pointer_1=%d,*pointer_2= %d\n”,*pointer_1,*pointer_2); return 0; 此处*与指针变量一起使用。此 } 时代表指针变量所指向的变量
home back first prev next last
20
8.2.3 怎样引用指针变量
• 在引用指针变量时,可能有三种情况:
– 给指针变量赋值。如:p=&a; *p相当于a – 引用指针变量指向的变量。如有 p=&a; *p=1; 则执行printf(“%d”,*p); 将输出1 – 引用指针变量的值。如:printf(“%o”,p); 以八进制输 出a的地址
home back first prev next last
使p指向a
21
8.2.3 怎样引用指针变量
• 要熟练掌握两个有关的运算符:
(1) & 取地址运算符。 &a是变量a的地址 (2) * 指针运算符(“间接访问”运算符) 如果: p指向变量a,则*p就代表a。 k=*p; (把a的值赋给k) *p=1; (把1赋给a)
home back first prev next last
13
• “指针”和“指针变量”是不同的概念 • 可以说变量i的指针是2000,而不能说i的指 针变量是2000 • 指针是一个地址,而指针变量是存放地址 的变量
home back first prev next last
14
8.2 指针变量
4
• 务必弄清楚存储单元的地址和存储单 元的内容这两个概念的区别 例如:
home back first prev next last
5
int i=3,j=6,k; printf(“%d”,i); 通过变量名i
找到i的地址 2000,从而从存 储单元读取3
home back first prev next last
home back first prev next last
29
#include <stdio.h> int main() {void swap(int *p1,int *p2); int a,b; int*pointer_1,*pointer_2; printf("please enter a and b:"); scanf(“%d,%d”,&a,&b); pointer_1 a pointer_1=&a; &a 5 pointer_2=&b; if (a<b) swap(pointer_1,pointer_2); printf(“max=%d,min=%d\n”,a,b); return 0; }
2
8.1 指針是什么
• 如果在程序中定义了一个变量,程序运行时, 系统就会给该变量分配内存单元 • 系统根据程序中定义的变量类型,分配一定 长度的空间 • 例如,VC++为整型变量分配4个字节,对单 精度浮点型变量分配4个字节,对字符型变 量分配1个字节
home back first prev next last
home back first prev next last
19
8.2.2 怎样定义指针变量
• 下面都是合法的定义和初始化:
float *pointer_3; char *pointer_4; int a,b; int *pointer_1=&a,*pointer_2=&b;
pointer_3=2000; 错误 pointer_1=&a; *pointer_1=&a; 错误 pointer_3=&a; 正确
28
8.2.4 指针变量作为函数参数
例8.3 题目要求同例8.2,即对输入的两个整 数按大小顺序输出。现用函数处理,而且用 指针类型的数据作函数参数。 • 解题思路:定义一个函数swap,将指向两 个整型变量的指针变量作为实参传递给 swap函数的形参指针变量,在函数中通过 指针实现交换两个变量的值。
home back first prev next last
8
i
直接存取
2000
3
间接存取
i_pointer
2000
*i_pointer
3 2000
home back first prev next last
9
• 为了表示将数值3送到变量中,可以有两 种表达方法: (1) 将3直接送到变量i所标识的单元中,例如: i=3; (2) 将3送到变量i_pointer所指向的单元(即变 量i的存储单元),例如:*i_pointer=3; 其中 *i_pointer表示i_pointer指向的对象
&a &b p2
a 5 9 b
home back first prev next last
24
p1
p
#include <stdio.h> int main() { int *p1,*p2,*p,a,b; printf(“integer numbers:"); scanf(“%d,%d”,&a,&b); p1=&a; p2=&b; if(a<b) { p=p1; p1=p2; p2=p; } printf(“a=%d,b=%d\n”,a,b); printf(“%d,%d\n”,*p1,*p2); return 0; }