第十章:指针结构程序设计(一)

合集下载

C语言程序设计_谭浩强_第二版_CH10

C语言程序设计_谭浩强_第二版_CH10

}
第十章 指针 10.3 数组的指针和指向数组的指针变量 10.3.2 通过指针引用数组元素 例10.5输出数组中的全部元素。 ②通过数组名计算数组中元素的地址,找出元素的值。
main() {
int a[10],i; for(i=0;i<10;i++){scanf(“%d”,&a[i]);} print(“\n”); for(i=0;i<10;i++){printf(“%d”,*(a+i));} print(“\n”);
}
运行结果为: 100,10 100,10
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.1 通过指针变量访问整型变量
pointer_1 &a
a 100 *pointer_1
pointer_2 &b
b 10 *pointer_2
第十章 指针 10.2 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
pointer_1 &a
a 5 *pointer_1
pointer_2 &b
b 9 *pointer_2
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
b 5 *pointer_2
&b
第十章 指针 10.2 变量的指针和指向变量的指针变量
10.2.1指针变量的引用 例10.3 通过指针变量访问整型变量
pointer_1 &a
a 9 *pointer_1

《C程序设计》课程标准

《C程序设计》课程标准

《C程序设计》课程标准一、课程说明:1.本课程的性质:C程序设计是近年来在国内外得到迅速推广应用的一种现代程序设计语言,它以丰富灵活的控制和数据结构,简洁而高效的语句表达、良好的移植性,已被广泛的应用于系统软件和应用软件的开发中。

2.本课程教学目的及任务:教学目的:通过学习C程序设计课程,使学生掌握 C语言的基本内容及程序设计的算法思想与编程技巧,了解进行科学计算的一般思路,培养学生应用计算机解决和处理实际问题的思维方法与基本能力,为以后学习数据结构、操作系统等后继课程创造必备的条件,并为今后从事软件开发打下良好基础。

教学任务:通过理论学习和编程训练,使学生了解C语言特点,理解C语言的基本概念,掌握C语言的语法规则和结构化程序设计的特点、方法及开发工具的使用,激发学生底层编程方向的兴趣,培养学生的编程能力。

3.本课程教学与其他课程的关系:先修课程:《计算机文化基础》后继课程:《数据结构》、《操作系统》、《数据库原理及应用》4.教学时数分配:总学时72,理论52,实验20。

教学时数分配表5.建议教材与参考书谭浩强·《C程序设计》(第三版)·清华大学出版社谭浩强·《C语言程序设计》(第二版)·清华大学出版社·2008主要参考书:谭浩强·《C程序设计》(第三版)·清华大学出版社谭浩强·《C语言程序设计》(第二版)·清华大学出版社谭浩强·《C程序设计题解与上机指导》(第三版)清华大学出版社谭浩强·《C程序设计教程实习指导与模拟试题》6.考核模式:考试二、课程内容:第一章 C语言概述【教学要求】:熟悉TURBO C2.0/VisualC++6.0集成环境的使用了解用计算机解决实际问题的基本步骤掌握C程序的构成和C程序的运行过程。

【本章重点】:C程序的构成和C程序的运行过程【本章难点】:用计算机解决实际问题的基本步骤【教学内容】:第一节:C语言出现的历史背景第二节:C语言的特点第三节:简单的C程序介绍第四节:C程序的上机步骤和方法【参考书目】:谭浩强·《C语言程序设计》(第二版)·清华大学出版社第二章数据类型、运算符与表达式【教学要求】:掌握C语言中的各种数据类型及变量的定义方法。

指针C程序设计课件

指针C程序设计课件

(1)指针的声明 声明指针的一般形式如下: 数据类型标识符 *指针变量名 例如 int *p_iPoint; //声明一个整型指针 float *a,*b //声明两个浮点指针
(2)指针的赋值 指针可以在声明的时候赋值,也可以后期赋值。
在初始化时赋值。 int i=100; int *p_iPoint=&i;
指针
专门用来存放另一个变量地址的变量,就是指针变量。在 C++语言中将存放内存单元地址的数据类型,称为指针类 型。
指针变量和变量的指针,指针也是一种数据类型,通常所 说的指针就是指针变量,它是一个专门用来存放地址的变 量;而变量的指针主要指变量在内存中的地址,变量的地 址在编写代码时int i=100; p_iPoint =&i;
关于指针使用的说明 (1)指针变量名是p,而不是*p。 (2)指针变量不可以直接赋值。 (3)如果强行赋值,使用指针运算符*提取指针所指变量 时会出错。 (4)不能将*p当变量使用。
指针运算符和取地址运算符 *和&是两个运算符 *是指针运算符,&是取值运算符。
&*p和*&a的区别
&和*的运算符优先级别相同,按自右而左的方向结合。因 此&*p先进行*运算,*p相当于变量a;再进行&运算,&*p 就相当于取变量a的地址。*&a先计算&运算符,&a就是取 变量a的地址,然后计算*运算,*&a就相当于取变量a所在 地址的值,实际就是变量a。
指针运算
指针变量存储的是地址值,对指针做运算就等于对地址做 运算

《c语言程序设计》教学大纲

《c语言程序设计》教学大纲

《C语言程序设计》教学大纲课程名称:中文名称:C语言程序设计;英文名称:C Language Programming课程编码:161002学分:4.5分总学时:72学时,其中,理论学时:52学时;上机学时:20学时。

适用专业:全校理工科各专业先修课程:计算机基础执笔人:审订人:一、课程的性质与任务《C语言程序设计》是为全校所有的理工科专业的学生开设的公共基础课,也是一门重要的必修课。

其目的是使学生掌握程序设计的基本方法,培养学生掌握利用计算机处理问题的思维方法与应用能力。

要求学生掌握程序的三种基本结构及结构化的程序设计方法,了解并掌握几种典型的算法,并且能够熟练地运用C语言编写各种应用程序,为进一步学习其它相关课程奠定基础。

二、教学内容与学时分配第一章程序设计基本概念(3学时)本章重点:一、算法及特性;二、结构化程序设计方法。

难点:算法设计及其表示。

第一节程序和程序设计一、程序;二、程序设计。

第二节算法第三节结构化程序设计方法第四节C语言程序的基本结构第二章数据类型、运算符和表达式(5学时)本章重点:一、标识符的正确使用;二、各种基本数据类型的使用;三、算术运算符的优先级和结合性;四、表达式计算中的类型转换。

难点:一、各种类型数据在计算机内存中的存储形式;二、自增自减运算。

第一节C语言的数据类型第二节常量与变量第三节整型数据第四节实型数据第五节字符型数据第六节算术运算符与算术表达式第七节赋值运算符与赋值表达式一、赋值运算符和赋值表达式;二、复合的赋值表达式;三、自加、自减运算符;四、赋值运算中的类型转换。

第八节逗号运算符与逗号表达式第三章顺序结构程序设计(4学时)本章重点:一、printf函数;二、scanf函数。

难点:输入与输出时的格式控制。

第一节C语句概述第二节赋值语句第三节数据的输入与输出一、printf函数;二、putchar函数;三、scanf函数;四、getchar函数第四节顺序结构程序举例第四章选择结构程序设计(4学时)本章重点:一、逻辑值的表示、使用及其运算;二、关系运算符的运算规则及关系表达式;三、逻辑运算符的运算规则及逻辑表达式;四、if语句;五、switch语句的形式与执行过程。

第十章 指针

第十章 指针

19
10.4 字符串与指针
字符串的表示形式
1. 可以用字符数组表示字符串
main() { char string[]=”I love China!”; printf(“%s\n”, string); }
2. 可用字符指针变量来表示
main() { char *string=”I love China!”; printf(“%s\n”, string); }
9
10.2.2 指针变量的引用
& :取地址运算符 * :指针运算符
i_pointer-----指针变量,它的内容是地址量 Eg10.1 *i_pointer----指针的目标变量,它的内容是数据 &i_pointer---指针变量占用内存的地址 main() &*i_pointer等价于i_pointer { (&*i_pointer)++与&*i_pointer++的区别 int a,b; int *pointer_1,*pointer_2; a=100;b=10; pointer_1=&a; pointer_2=&b; printf("%d,%d\n",a,b); printf("%d,%d\n",*pointer_1,*pointer_2); }
21
10.5 指向函数的指针
赋值 函数名代表该函数的入口地址。因此,可用 函数名给指向函数的指针变量赋值。 指向函数的指针变量=[&]函数名;
注意:函数名后不能带括号和参数;函数名前的 “&”符号是可选的。
调用格式 (*函数指针变量)([实参表])
22
用指向函数的指针作函数参数

《C语言程序设计》课程教学大纲

《C语言程序设计》课程教学大纲

《C语言程序设计》课程教学大纲一、课程教学目的本课程系统研究C语言的基本知识和基本语法,较好地训练学生解决问题的逻辑思维能力以及编程思路和技巧,使学生具有较强的利用C语言编写软件的能力,为培养学生有较强软件开发能力打下良好基础。

二、课程教学要求通过本课程的研究,应熟练掌握C语言中的基本知识、各种语句及程序控制结构,熟练掌握C语言的函数、数组、指针、结构体、链表等数据结构的基本算法;并能熟练地运用C语言进行结构化程序设计;具有较强的程序修改调试能力;具备较强的逻辑思维能力和独立思考能力。

三、课时分配本学科计划学时为246学时,其中理论与实训课时比例为7:3.四、课程教学重、难点课程教学重点:掌握C语言变量类型及不同类型常量的表示;标准的输入输出函数的使用;运算符及常用数学函数的使用;控制流程、数组和指针的使用;结构体、链表的构造使用;函数结构、函数参数传递及递归等方面的知识;基本的文件操作。

难点:指针的使用、结构体链表的构造和使用及函数的参数传递。

五、课程教学方法(或手段)本课程实践性较强,故采用讲授和上机操作相结合的方式进行教学。

六、课程教学内容第一章C言语概述1.教学内容(1)编程历史的回顾、程序设计介绍(过程式,面向对象,函数式,逻辑式);(2) C语言的历史背景、特点;(3) C言语源步伐的格式和步伐结构;(4) C程序的上机步骤。

2.重、难点提醒(1)重点:掌握简单的C程序格式,包括main()函数、数据说明、函数开始和结束标志等;(2)难点:编程入门和对言语的理解。

第二章算法1.教学内容(1)算法的概念及特征;评价算法优劣的方法(时间和空间);(2)简单算法举例;(3)算法的表示(自然语言、流程图、N-S流程图);(4)结构化步伐设计的基本思想及基本步调。

2.重、难点提醒(1)重点:算法流程图三种基本结构(以后各章研究中使用流程图强化对步伐的理解);(2)难点:算法概念和对结构化步伐设计思想的理解。

本科专业认证《程序设计、算法与数据结构(一)》教学大纲

本科专业认证《程序设计、算法与数据结构(一)》教学大纲

《程序设计、算法与数据结构(一)》教学大纲课程编号:0812000217课程名称:程序设计、算法与数据结构(一)英文名称:Programming,Algorithm and Data Structure I学分:3 课程性质:必修总学时:48 其中,讲授48学时,实验0学时,上机0学时,实训0学时适用专业:网络工程建议开设学期: 1先修课程:无开课单位:计算机与通信工程学院一、课程简介《程序设计、算法与数据结构(一)》是计算机科学与技术、软件工程、网络工程、通信工程专业基础课程,是课程群的启蒙课,也是学生进入大学后的第一门程序设计类课程,其目的是以C语言程序设计为基础,使学生熟悉C程序设计的基本语法,通过大量的编程练习,引导学生进入程序设计的殿堂,培养学生基本的数据结构和算法分析能力,为后续课程的学习打下基础。

二、课程目标与毕业要求依据2017培养方案中的毕业要求,考虑本课程与专业毕业要求的支撑关系,制定本课程学习目标。

课程目标1:通过程序三种基本控制结构,函数等知识点的学习,要求学生掌握结构化程序设计的基本思想,深入领会自顶向下、逐步求精的设计方法,识别网络工程项目的设计与开发过程中功能模块划分的问题。

(支持毕业要求 2.1能运用数学、自然科学及网络工程的基本原理,识别和判断网络工程问题的关键环节。

)课程目标2:在程序设计C语言后阶段学习过程中,针对成绩管理信息系统大作业的要求,将同学分组了解系统功能与应用背景,对具体的开发任务进行分工联调并编程实现。

通过系统实现强化个体的角色意识和团队意识。

(支撑毕业要求9.1:能够理解多学科背景下的团队中每个角色的定位与责任,具有团队合作意识,能够胜任个体、团队成员的角色任务。

)课程目标3:通过学习标准的C语言程序设计语法,运用函数、线性表、字符串、链表等基本知识,通过学习算法的描述方法,使学生能将实际问题转换成计算机描述的算法问题,培养学生运用程序算法的描述方法进行交流的能力。

指针

指针

The C Programming Language
Chapter 10 Pointers
10.2 变量的指针和指向变量的指针变量
• 指针:一个变量的地址 • 指针变量:专门存放变量地址的变量叫指针变量
指针 2000 …... 整型变量i
变量的地址
2001 2002 2003 2004 2005
10
main() { int *p1,*p2,*p,a,b; 2000 scanf("%d,%d",&a,&b); 2002 p1=&a; p2=&b; 2004 if(a<b) 2006 { p=p1; p1=p2; p2=p;} 2008 printf("a=%d,b=%d\n",a,b); printf("max=%d,min=%d\n",*p1,*p2); }
– 指针变量的定义
• 一般形式: [存储类型] 基类型 *指针名; 例 int *p1,*p2; float *q ; 表示定义指针变量,起类型说明的作用 合法标识符 指针变量本身的存储类型 指针的目标变量的数据类型 static char *name; 不是‘*’运算符 注意: 1、int *p1, *p2; 与 int *p1, p2;的区别 2、指针变量名是p1,p2 ,不是*p1,*p2 3、指针变量只能指向定义时所规定类型的变量 4、指针变量定义后,变量值不确定,应用前必须先赋值
整型变量i 整型变量k
10
10
变量i_pointer 指针变量
The C Programming Language
Chapter 10 Pointers
指针变量与其所指向的变量之间的关系
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

printf("result is:%ld.\n",*p);
}
运行结果:
输入:1
输出:1
输入:32
输出:3
输入:897
输出:8
程序2:利用指针,实现数据交换
程序代码如下:
#include <stdio.h>
main()
{ int m,n,*pm,*pn,temp;
pm=&m; pn=&n;
scanf("%d%d",&m,&n);
pointer_1=&a;pointer_2=&b; if(a<b) swap(pointer_1,pointer_2); printf("\n%d,%d\n",a,b); } 例10.4输入a、b、c这3个整数,按大小顺序输出。
swap(int *pt1, int *pt2) { int temp; temp=*pt1;
main() { int *p1,*p2,*p,a,b; scanf("%d,%d",&a,&b); p1=&a;p2=&b; if(a<b) { p1=&b;p2=&a;} printf("\na=%d,b=%d\n\n",a,b); printf("max=%d,min=%d\n",*p1,*p2); } 例10.3题目同例10.2,即对输入的两个整数按大小顺序输出。今用函数处 理,而且用指针类型的数据作函数参数。
char a[]=“good”; char *P;P=a;
A.‘d’
b.‘\0’
C.存放‘d’的地址 .
D.‘0’
6.以下程序运行后x的值为(D)
int a[9]={1,2,3,4,5,6,7,8,9};
int *p,*q;
int i,x;
p=&a[0]; p等价于(a+0)
q=&a[8];
q等价于(a+8)
第十章:指针结构程序设计(一)
实验时间:2009年5月18日 实验地点:
实验人:
专业:
班级:
实验题目:指针结构程序设计(一)
实验目的:通过实验熟悉指针、指针变量的概念,会使用指针变量、指 针运算符进行初步编程。
实验过程:
一、书本中的例子:
例10.1通过指针变量访问整型变量 main()
{int a,b; int *pointer_1,*pointer_2; a=100;b=10; pointer_1=&a; pointer_2=&b; printf("%d,%d\n",a,b); printf("%d,%d\n",*pointer_1,*pointer_2); } 例10.2输入a和b两个整数,按先大后小的顺序输出a和b。
for (i=O;i<3;i++)
if(*(p+i)==*(q-i) )
x=*(p+i)*2;
A. 2
b. 4
C. 6
D.不确定
7.以下程序运行段运行后x的值为( D )
int a[]={1,2,3,4,5,6,7,8};
int i,x *p;
x=1;
p=&a[2];
for(i=0,i<3,i++)
} (2) 通过数组名计算数组元素地址,找出元素的值。 main() { int a[10]; int i; for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(i=0;i<10;i++) printf("%d",*(a+i)); } (3) 用指针变量指向数组元素。
swap(int *p1,int *p2) { int temp; temp=*p1; *p1=*p2; *p2=temp;
} main()
{ int a,b; int *pointer_1,*pointer_2; scanf("%d,%d",&a,&b);
C、语句printf(“%d”, p);输出20
D、p指向数组元素a[1]
4、以下程序段运行后*(++p)的值为(C)
char a[6]=“work”;
char *p;
p=a;
A、‘w’ b、存放‘w’的地址 C、‘O’ D、存放的‘O’地

5.以下程序运行后*(P+3)的值为( A )*(P+3)等价于p[3] a[3]
x*=(p+i);
A. 不确定
b. 24
C. 120 D. 60
8、下面程序的输出结果是(A)
#include<stdio. h>
void main ( )
{
int i;
char *s=“abc”; 定义一个指向字=0 ; i<3; i++)
printf ( “% s\n ” , s+i );
main() { int a[10]; int*p,i; for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(p=a;p<(a+10);p++) printf("%d ",*p);
*pt1=*pt2; *pt2=temp;
} exchange(int *q1, int *q2, int *q3) { if(*q1<*q2) swap(q1,q2); if(*q1<*q3) swap(q1,q3); if(*q2<*q3) swap(q2,q3); }
(*(a+i))
*(a+i)等价于数组a ,是一个常数,不是一个地址
3、在16位编译系统上,若有定义int a [ ]={10,20,30},*p=&a(该
星号只起标识作用,标识p为指针变量。表达式对指针变量附值);当
执行p++;后下列叙述错误的是( A )
A、p向高地址移了一个字节(看书)
b、p与a+1等价
}
二、补充程序题:
程序1:利用指针,实现输入一个整数,输出其最高位。 程序代码如下:
main() { long i,*p;
p=&i; printf("please input positive integer"); scanf("%ld",p); 与scanf("%ld",&i);等价 while(*p>=10) *p/=10; *p与i等价
赋值语句是( b )
A. P=*fun
b. P=fun; C. P=fun(i,j) D. P=&
fun
2.设有以下语句,则( D )是对数组元素的不正确引用,其中.int
a[10]={0,1,2,3,4,5,6,7,8,9},*p=a
A.a[p-a]
b.*(&a[i])
C.p[i]=(p+i)
D.*
(1) 下标法。 main()
{ int a[10]; int i;
for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(i=0;i<10;i++) printf("%d",a[i]);
temp=*pm;
*pm=*pn;
*pn=temp;
printf("%d,%d\n",m,n);
printf("%d,%d\n",*pm,*pn);
}
运行结果:
输入:3 4
输出:4 3
43
三、选择题:
1.若函数fun的函数头为:int fun(int i,int j)且函数指针变量P
定义如下:int (*P)(int i,int j);则要使指针P指向函数fun的
}
a
ab
abc
abc
c
bc
c
bc
abc
abc
bc
c
.
A
b
C
D
9.执行以下程序段的输出结果是( b ) int a=10,*p=&a ; printf(“%d”,++*p);
A.10 B.11 C.变量a的地址 D.变量a的地址加1 *p=&a(该星号只起标识作用,没有特殊意义,标识p为指针变量。表达 式对指针变量附值) ++*p 中的星号为指针运算符,整个表达式表示指针变量所指向的变量 数组变量赋值:scanf(“%c”,a); 注意区分他们的区别 但&a 和a都是 地址 整型变量赋值:scanf(“%d”,&a);
main() { int a,b,c,*p1,*p2,*p3;
scanf("%d,%d,%d",&a,&b,&c); p1=&a;p2=&b;p3=&C; exchange(p1,p2,p3); printf("\n%d,%d,%d\n",a,b,c); } 例10.5输出数组中的全部元素。假设有一个a数组,整型,有10个元素。要 输出各元素的值有三种方法:
相关文档
最新文档