浙江大学刘加海C语言课件4
浙江大学刘加海C语言课件
第5章指针与函数◆本章重点1. 函数指针的概念、定义及赋值。
2. 函数指针的应用。
3. 指针函数的定义。
4. 命令行参数的应用。
◆本章难点1. 函数指针的概念,函数指针的赋值及调用方法。
尤其是定义及调用中的形式参数及实际参数的使用。
2. 指针函数的概念以及与函数指针的区别。
3. 命令行参数编程中的文件名与命令的关系。
4. 命令行参数的赋值方法。
指针和函数的关系主要包括三个方面的内容:一是指针可以指向某个函数,即函数指针;二是函数的返回值可以是指针类型的变量,即指针函数;三是指针可以作为函数的参数。
5.1 指向函数的指针大家知道,变量a被分配到某个存储区域,若指针变量p的值为该存储区域的首地址,则称p为指向变量a的指针,通过对指针p的间接引用可以访问它所指向的变量a。
函数虽然不是变量,但是它经过编译后,其目标代码在内存中是连续存放的,该代码的首地址就是函数执行时的入口地址,它可以赋给指针变量,使得指针变量指向函数。
利用指向函数的指针变量,可以代替函数名,也可以作为函数的参数传递给其他函数。
也就是说可以用指针变量指向基本类型变量、字符串、数组等,也可指向一个函数。
一个函数在编译时被分配给一个入口地址。
这个入口地址就称为函数的指针。
可以用一个指针变量指向某函数,然后通过该指针变量调用此函数。
5.1.1 用函数指针变量调用函数1.函数指针的声明格式:数据类型(*指针变量名)(函数形参类型标识符列表);其中的“数据类型”是指函数返回值的类型。
例如:char (*f1)(char *,char);int (*f2)(int *,int);上述语句声明两个指向函数的指针:f1指向形参类型依次为char*、char,返回值类型为char的函数;f2指向形参类型依次为int *、int,返回值类型为int的函数。
注意f1、f2是不同类型的指针,因为它们各自所指向的函数的返回值类型,形参个数及各形参的类型不尽相同。
浙大版C语言电子教案.讲义
计算机程序设计基础(C语言)北京石油化工学院信息技术教学与实验中心2008年8月20日C语言程序设计⏹教学要求☐掌握程序设计语言的基本知识☐常用算法☐初步的程序设计能力⏹学习方法☐自主学习☐重视上机实践如何尽快学会用C语言进行程序设计⏹了解程序设计语言(C语言)⏹模仿、改写、编写⏹通过不断的编程实践,逐步领会和掌握程序设计的基本思想和方法。
教材和参考书⏹C语言程序设计,何钦铭、颜晖主编,高等教育出版社,2008⏹C语言编程(第3版),[美]Stephen, G.Kochan,张小潘译,电子工业出版社,2006⏹C语言教程(第4版),[美]Al Kelley, Ira Pohl,徐波译,机械工业出版社,2007⏹标准C语言基础教程(第4版),[美]Gary J.Bronson,单先余等译,电子工业出版社,2006 ⏹C程序设计语言,[美]Brian W. Kernighan,Dennis M. Ritchie,徐宝文等译,机械工业出版社,2006目录⏹Chap 1 引言⏹Chap 2 用C语言编写程序⏹Chap 3 分支结构⏹Chap4 循环结构⏹Chap 5 函数⏹Chap 6 数据类型和表达式目录⏹Chap 7 数组⏹Chap 8 指针⏹Chap 9 结构⏹Chap 10 函数与程序结构⏹Chap 11 指针进阶⏹Chap 12 文件Chap 1 引言⏹一个C语言程序⏹程序与程序设计语言⏹C语言的发展历史与特点⏹实现问题求解的过程本章要点⏹什么是程序?程序设计语言包含哪些功能?⏹程序设计语言在语法上包含哪些内容?⏹结构化程序设计有哪些基本的控制结构?⏹C语言有哪些特点?⏹C语言程序的基本框架如何?⏹形成一个可运行的C语言程序需要经过哪些步骤?⏹如何用流程图描述简单的算法?1.1 一个C 语言程序例1-1求阶乘问题。
输入一个正整数n ,输出n!。
#include <stdio.h> /* 编译预处理命令 */ int main (void) /* 主函数 */ {int n; /*变量定义 */ int factorial (int n); /* 函数声明 */ scanf ("%d", &n); /* 输入一个整数 */ printf (“%d \n”, factorial(n)); /* 调用函数计算阶乘 */ return 0;}int factorial (int n) /* 定义计算 n! 的函数 */ {int i, fact = 1;for(i = 1; i <= n; i++) /* 循环 */ fact = fact * i;return fact;} 输入 4 输出 24 C 程序由函数组成 有且只有一个主函数main1.2 程序与程序设计语言⏹程序☐人们为解决某种问题用计算机可以识别的代码编排的一系列加工步骤。
浙大版《c语言程序设计(第4版)》讲解
浙大版《c语言程序设计(第4版)》讲解《C语言程序设计》是国内C语言教材的重要书籍,高校中的计算机专业等都有教授。
浙大版《C语言程序设计(第4版)》是由著名计算机科学家袁春风编写的C语言教材,该书主要介绍了C语言基础、字符串、数组、指针、结构体、文件操作等内容。
本文将对该书内容做简要概括。
第一部分:C语言基础第一章:概述该章主要介绍了计算机语言的发展与演化,C语言的历史和主要特点,以及C语言的应用领域和发展前景。
第二章:初识C语言该章节主要介绍了C语言的基本概念,例如标识符、关键字、注释等。
并且结合一些简单的例子介绍了C语言的语法格式和执行规则。
第三章:数据类型该章节主要介绍了C语言的数据类型,包括整型、实型、字符型、布尔型等。
并且介绍了类型转换及其规则。
第四章:运算符与表达式该章节主要介绍了C语言的基本运算符及其优先级、结合性和作用。
并且通过实例来介绍了使用运算符和表达式的方法及注意事项。
第五章:分支结构该章节主要介绍了C语言中的分支结构,包括if、if-else、switch等,以及运用分支结构解决问题的方法和技巧。
第二部分:数组、字符串和指针第七章:数组该章节主要介绍了C语言中的数组,包括一维数组、二维数组等,并结合例子介绍了数组的定义、初始化、遍历、赋值等操作。
第八章:字符串该章节主要介绍了C语言中的字符串,包括字符串的定义、初始化、输入、输出等。
并且介绍了使用字符串解决问题的方法和技巧。
第九章:指针第三部分:函数与结构体该章节主要介绍了C语言中的结构体,包括结构体的定义、初始化、访问、结构体数组、结构体指针等。
并且介绍了结构体在程序中的应用。
第四部分:文件操作与其他第十二章:文件操作第十三章:其他语言特性与扩展该章节主要介绍了C语言扩展的特性,包括宏定义、预处理指令、变长参数等。
并且介绍了C语言与其他语言的异同点。
总结:《C语言程序设计(第4版)》是一本权威的C语言教材,该书系统全面地介绍了C语言的基本概念、语法格式、运算符、控制语句、数组、指针、函数、结构体、文件操作等方面的内容,让读者对C语言的掌握更加深入。
浙江大学C语言程序设计复习课件
void main() { struct student s[SIZE];
int k,sub=0; for(k=0; k<SIZE; k++) { scanf("%s%d%d",s[k].name,&s[k].math,&s[k].eng); s[k].aver = (s[k].math+s[k].eng)/2.0 } for(k=1; k<SZIE; k++)
if(s[k].aver>s[sub].aver ) sub = k; printf("%10s%3d%3d\n",s[sub].name,s[sub].math,s [sub].eng); }
(4) 熟练掌握结构指针 (5) 掌握结构中含指针或数组 (6) 掌握嵌套结构 (7) 掌握指向指针的指针(二级) (8) 单向链表 掌握单向链表的建立和遍历 了解插入和删除单向链表中的一个节点
写出下列程序段的输出结果。 float x1, x2; x1=3/2; x2=x1/2; printf("%d, %.1f", (int)x1, x2) ;
表达式 sizeof(“key”) 的值是______。
A、1
B、2
C、3
D、4
static char s[ ]="student"; printf("%d,%c\n",sizeof(s),*(s+2));
2、函数的定义 (1) 熟练掌握函数定义的ANSI C格式 (2) 熟练掌握函数的参数(形式参数和实在参 数)及参数传递,包括指针作为函数的参数 (3) 熟练掌握函数的返回值,包括指针作为函 数的返回值
浙江大学C++教材
void main ( ) {cout<< ” 同学们, 你们好! ”;}
返回
第二章 基本C++程序结构
(1)类型修饰符 :函数返回值的类型。 (2)函数名:非保留字的标识符。 (3)形式参数表:由一系列用逗号隔 开的参数组成。 (4)函数体:包含在一对{ }中的语句序列。
第二章 基本C++程序结构
返回
第二章 基本C++程序结构
4、插入空格:(空格符为’ ’)
如: cout<< 100<< ’ ’ <<200<<100+200; 屏幕输出 :100 200 300
第二章 基本C++程序结构
5、换行输出 ☆换行符号:’\n ’ ☆换行控制符:endl 如:cout<< 100\n<<200; cout<< 100<<endl<<200; 则这两个语句的输出结果相同: 100 200
第一章
C++编程基础
五、集成开发环境(IDE)
1、定义: 集文字处理、编译、连接、项目管理、程 序排误等多功能为一体的软件开发工具。 2、常见的集成开发环境: Borland C++,Visual C++
第一章
六、程序风格
C++编程基础
1、良好的编程风格,不仅有利于 自己对程序的调 试,而且会大 大增加程序的可复用机会。
返回
第二章 基本C++程序结构
六、cout和数据的显示输出 1、 cout:连接显示器的输出流对象。
2、 <<:输出操作符(插入操作符)
C++程序设计课件第4章
1. 变量和常量的声明 2. 数据类型和类型转换 3. 运算符和表达式 4. 条件语句和循环语句
C++数据类型和变量
C++支持多种数据类型,包括整型、浮点型、字符型和布尔型等。变量是存储数据的容器,可以通过声明并赋 值来使用。
整型
用于存储整数值,如int、short、 long等。
C++程序设计课件第4章
本章内容将介绍C++程序设计的基础知识和语法。通过学习本章内容,您将 掌握C++的特点和优势,以及数据类型、运算符、流控制语句等知识。
程序设计的基础知识
编程语言
了解不同编程语言的特点和 应用领域。
算法与流程图
学习如何设计算法和使用流 程图来解决问题。
程序的结构
掌握程序的基本结构,包括 输入、处理和输出。
浮点型
用于存储带有小数部分的数值, 如float、double等。
字符型
用于存储单个字符,如char。
C++的运算符及其优先级
C++提供了丰富的运算符,包括算术运算符、赋值运算符、关系运算符等。了解这些运算符的优先级能够帮助 您正确理解表达式的运算顺序。
算术运算符 赋值运算符 关系运算符
+- * / % = += -= *= /= %= < > <= >= == !=
C++流控制语句
1
条件语句
使用if、else if和else来根据不同条件执
循环语句
2
行不同的代码块。
使用for、while和do- while循环来重复执
《浙大c语言chap》课件
课程安排
演示学习计划和每个主题所 需的时间,以便学习者可以 合理组织学习进度。
C语言基本概念
1
特点和历史
概述C语言的特点和起源,为学习者提供背景和认识C语言发展的意义。
2
编译过程
介绍C语言的编译过程,包括预处理、编译、汇编和链接。
3
程序结构
讲解C语言程序的基本结构,如主函数、标准输入输出和注释。
数据类型与变量
1 基本数据类型
介绍C语言的基本数据类型,如整数、浮点数和字符类型。
2 变量定义与赋值
探讨如何定义和初始化变量,并介绍C语言中的变量赋值操作。
3 数据类型转换
讲解C语言中的数据类型转换,包括隐式转换和显式类型转换。
运算符与表达式
算术运算符
比较运算符
逻辑运算符
介绍语言中的算术运算符,如 加法、减法、乘法、除法和取余。
探讨C语言中的比较运算符,包 括等于、不等于、大于、小于等。
概述C语言中的逻辑运算符,如 与、或、非等。
流程控制结构
1
条件语句
介绍C语言中的条件语句,包括if语句和switch语句。
2
循环语句
讲解C语言中的循环语句,如for循环、while循环和do-while循环。
3
跳转语句
探讨C语言中的跳转语句,如break语句和continue语句。
字符数组
探讨字符数组和字符串的关系, 以及如何在C语言中处理字符和 字符串。
指针的概念与应用
1 指针的基本概念
概述指针的概念和用法, 以及指针变量的定义和初 始化。
2 指针与数组
讲解指针和数组的关系, 并介绍指针操作数组的常 用方法。
3 指针和函数
最新浙江大学Linux程序设计教学大纲与建议学时分配数-金国庆刘加海
浙江大学计算机学院、软件学院《Linux程序设计》教学大纲与教学日历一、课程基本情况课程代码:总学时数:32-64课程类型: 考试课+项目实训适用对象: 计算机专业本、理工科各专业及计算机软件工程师先导课程:C程序设计基础与实验后续课程:Linux数据库程序设计,Linux嵌入式程序设计。
使用教材:Linux程序设计,浙江大学出版社,金国庆、刘加海、季江民主编二、课程性质和目标1、课程的基本特性本课程是一门为计算机软件人员开设的一门计算机专业课程。
Linux作为具有良好特性的操作系统,C语言作为广泛使用的编程语言,两者的结合为用户提供了一个强大的编程环境。
2、课程的教学目标通过本课程的学习,学生能够熟悉Linux操作系统下的基本命令使用、shell程序设计、Linux环境下C程序的编辑、编译、调试及运行,掌握Linux环境下系统函数的使用,掌握文件操作、非缓冲文件的I/O操作,掌握进程控制的程序设计,掌握进程间共享内存、管道、队列及信号等通信的机理及编程方法,掌握图形、动画、文字及简单游戏程序的设计,掌握网络编程设计,掌握串行通信程序设计,初步了解驱动程序设计,使学生掌握Linux操作系统下C程序开发的方法和技巧,并具备开发大型应用程序的能力。
三、课程教学方法与手段本课程的教学主要以理论教学和上机实践教学相结合的方式进行。
四、课程教学内容、要求及重点、难点第一章终端的基本操作(一)主要教学内容第一节 Linux的常用命令第二节文件与网络常用命令第三节Linux的进程命令第四节Linux的安全常用命令(二)学习目的要求1.了解Linux下终端常用命令的操作2.熟悉网络命令的使用;3.熟悉安全命令的使用;(三)重点和难点教学重点:Linux下终端命令的操作。
教学难点:命令的使用格式。
第二章Shell程序设计(一)主要教学内容第一节 shell程序设计初步第二节 shell程序设计中表达式应用第三节循环程序设计第四节分支程序设计第五节综合实例(二)学习目的要求1.了解Linux下shell程序设计方法;2.掌握shell程序的顺序、分支、循环结构的程序设计。
高质量CC++编程讲义
目录前言第1章文件结构1.1 版权和版本的声明1.2 头文件的结构1.3 定义文件的结构1.4 头文件的作用1.5 目录结构第2章程序的版式2.1 空行2.3 代码行内的空格2.4 对齐2.5 长行拆分2.6 修饰符的位置2.7 注释2.8 类的版式第3章命名规则3.1 共性规则3.2 简单的WINDOWS应用程序命名规则3.3 简单的UNIX应用程序命名规则第4章表达式和基本语句4.1 运算符的优先级4.2 复合表达式4.3 IF 语句4.4 循环语句的效率4.5 FOR 语句的循环控制变量4.6 SWITCH语句4.7 GOTO语句第5章常量5.1 为什么需要常量5.2 CONST 与#DEFINE的比较5.3 常量定义规则5.4 类中的常量第6章函数设计6.1 参数的规则6.2 返回值的规则6.3 函数内部实现的规则6.5 使用断言6.6 引用与指针的比较第7章内存管理7.1内存分配方式7.2常见的内存错误及其对策7.3指针与数组的对比7.4指针参数是如何传递内存的?7.5 FREE和DELETE把指针怎么啦?7.6 动态内存会被自动释放吗?7.7 杜绝“野指针”7.8 有了MALLOC/FREE为什么还要NEW/DELETE ?7.9 内存耗尽怎么办?7.10 MALLOC/FREE 的使用要点7.11 NEW/DELETE 的使用要点7.12 一些心得体会第8章C++函数的高级特性8.1 函数重载的概念8.2 成员函数的重载、覆盖与隐藏8.3 参数的缺省值8.4 运算符重载8.5 函数内联8.6 一些心得体会第9章类的构造函数、析构函数与赋值函数9.1 构造函数与析构函数的起源9.2 构造函数的初始化表9.3 构造和析构的次序9.4 示例:类STRING的构造函数与析构函数9.5 不要轻视拷贝构造函数与赋值函数9.6 示例:类STRING的拷贝构造函数与赋值函数9.7 偷懒的办法处理拷贝构造函数与赋值函数9.8 如何在派生类中实现类的基本函数9.9 一些心得体会第10章类的继承与组合10.1 继承10.2 组合第11章其它编程经验11.1 使用CONST提高函数的健壮性11.2 提高程序的效率11.3 一些有益的建议参考文献附录A :C++/C代码审查表附录B :C++/C试题附录C :C++/C试题的答案与评分标准前言软件质量是被大多数程序员挂在嘴上而不是放在心上的东西!除了完全外行和真正的编程高手外,初读本书,你最先的感受将是惊慌:“哇!我以前捏造的C++/C程序怎么会有那么多的毛病?”别难过,作者只不过比你早几年、多几次惊慌而已。
第2章C++简单程序设计
▫ C风格的字符串
采用字符数组
▫ C++风格的字符串
采用标准C++类库中的String类
• 布尔类型
▫ bool类型,只有两个值:true(真) 、false(假) ▫ 常用来表示关系比较、相等比较或逻辑运算的结果
C++语言程序设计(第4版)
2.2 基本数据类型和表达式
13
2.2.1 基本数据类型
类型名
长度(字节)
bool
1
char
1
signed char
1
unsigned char
1
short(signed short)
2
unsigned short
2
int(signed int)
4
unsigned int
4
long(signed long)
4
unsigned long
运行结果: Hello! Welcome to c++!
C++语言程序设计(第4版)
2.1 C++语言概述
6
2.1.4 C++字符集
• 大小写的英文字母:A~Z,a~z • 数字字符:0~9 • 特殊字符:
! # %^ &* _ + =- ~<>/ \ ‘ “; . , : ? ( ) []{}
C++语言程序设计(第4版)
2.2.3 变量
• 变量的声明和定义
▫ 声明语句形式如下:
数据类型 变量名1, 变量名2, ..., 变量名n;
▫ 在定义一个变量的同时,也可以给它赋以初值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章指针与数组◆本章重点1. 指针变量对一维数组元素的引用方法。
2. 指针在一维数组中的应用。
3. 指针变量对字符串的引用。
4. 数组指针在二维数组中的应用。
5. 指针数组的概念。
6. 多级指针概念与应用。
◆本章难点1. 如何用指针变量来表示数组元素及元素的地址。
2. 指针变量在一维数组中的移动。
3. 字符指针变量的赋值方法及运用。
4. 数组指针的理解与应用。
5. 数组指针与指针数组的区别。
6. 对多级指针概念的理解。
4.1 一维数组与指针在第1章已经学习了指针的概念以及指针的基本运算。
指针是一个变量的地址,是一个常量。
而一个指针变量却可以被赋予不同的指针值,是变量。
定义指针的目的是为了通过指针去访问内存单元。
在实际使用中,指针变量通常应用于数组,因为数组在内存中是连续存放的,指针应用于数组将会使程序的概念十分清楚、精练、高效。
下面通过例子来说明一维数组与指针的关系。
首先定义一个一维数组及同数据类型的指针变量,然后指针变量指向数组某元素的地址,如:int a[10];/*定义a为包含10个整型数据的数组*/int *p;/*定义p为指向整型变量的指针*/应当注意,因为数组为int型,所以指针变量也应为指向int型的指针变量。
下面是对指针变量赋值:p=a;把a[0]元素的地址赋给指针变量p。
也就是说,p指向数组a的首地址。
在第一章已经学习第4章指针与数组了一维数组的元素表示与地址表示的方法。
表4.1 一维数组的元素表示法表4.2 一维数组元素的地址表示法注意如有定义:int a=10,*p;p = &a ;p、&a 都为地址,而*p ,a 为内容。
对a来说,&a是成立的,而&*a是无意义的,而对指针p来说,&*p、*&p都是有意义的。
例4.1如有定义:int x=2,*p=&x;以下哪些表达式的含义是不正确的。
(A)*&p (B)*&x (C)&*p (D)&*x解析:指针p再取地址,变量x取地址都是有意义的,指针p取内容即为变量x的值,而变量x不能再取内容,因而(D)错。
例4.2如有定义int a[5];(其中:0<=i<5),不能表示数组元素的是()。
(A)*(a+i)(B)a[5] (C)a[0] (D)a[i]解析:可以用a[i]或*(a+i)表示一维数组元素,其中i的取值为0至4,而a[5]超界,所以答案为B。
例4.3若有以下定义和语句,int a[10],i;且0<=i<10,则对数组元素地址的正确表示是()。
(A)a++ (B)(a+1)(C)*(a+1)解析:对于选项A,由于a代表数组a的首地址,它的值在程序运行期间是不能被改变的,即它应该是常量,因此a++将无法实现。
选项B中的(a+1)表示数组a的第一个元素的地址(从第0个元素开始)。
选项C表示数组a的第一个元素的值,所以正确答案为B。
例4.4编写一程序定义具有10个元素的一维数组,通过数组元素的方法从键盘输入数据,找出比相邻元素大的元素个数(头、尾元素不计在内)。
解析:如数组定义为:int a[10];数组的元素可表示为:*(a+i)、a[i],其元素的地址可表示为:a+i、&a[i]。
统计比相邻元素大的元素个数(头、尾元素不计在内)时可用语句:for(k=0,i=1;i<9;i++)if(a[i]>a[i+1]&&a[i]>a[i-1])k++;完整的程序代码为:#include<stdio.h>void main( ){int a[10],i,k;for(i=0;i<10;i++)scanf(“%d”,a+i);for(k=0,i=1;i<9;i++)if(a[i]>a[i+1]&&a[i]>a[i-1])k++;printf("k=%d\n",k);}例4.5 阅读程序,找出程序中的错误。
#include<stdio.h>void main( ){int *p,i,a[10];p=a;for(i=0;i<10;i++)*p++=i;for(i=0;i<10;i++)printf("a[%d]=%d\n",i,*p++);}分析:指针p指向数组a的首地址,把循环变i的值赋给p所指的地址上,然后p指向数组的下一个元素,当到第二个循环开始时指针已移出数组,此时输出的内容已是一些随机数据而出错。
把上述程序改写为:#include<stdio.h>void main( ){int *p,i,a[10];p=a;for(i=0;i<10;i++)*p++=i;p=a;for(i=0;i<10;i++)printf("a[%d]=%d\n",i,*p++);第4章指针与数组}例4.6将数组a中的n个整数按相反顺序存放。
解析:将a[0]与a[n-1]对换,再a[1]与a[n-2]对换…,直到将a[(n-1/2)]与a[n-int((n-1)/2)]对换。
现用循环处理此问题,设两个位置指示变量i和j,i的初值为0,j的初值为n-1。
将a[i]与a[j]交换,然后使i的值加1,j的值减1,再将a[i]与a[j]交换,直到i=(n-1)/2为止,如图4.1所示。
i m j(b)图4.1(a)交换前,(b)交换后用数组元素的方法程序设计如下:#include<stdio.h>void inv(int x[ ],int n) /*形参x是数组名*/{int temp,i,j,m=(n-1)/2;for(i=0;i<=m;i++){j=n-1-i;temp=x[i];x[i]=x[j];x[j]=temp;}}void main(){int i,a[10]={3,7,9,11,0,6,7,5,4,2};printf("The original array:\n");for(i=0;i<10;i++)printf("%d,",a[i]);printf("\n");inv(a,10);printf("The array has benn inverted:\n");for(i=0;i<10;i++)printf("%d,",a[i]);printf("\n");}用指针的方法程序设计如下:#include<stdio.h>void inv(int *p,int n){int temp,*p1,*p2;p1=p;p2=p+n-1;for( ;p1<p2;p1++,p2--){temp=*p1;*p1=*p2;*p2=temp;}}void main(){int i,a[10]={3,7,9,11,0,6,7,5,4,2},*p=a; printf("原数组为:\n");for(i=0;i<10;i++,p++)printf("%d,",*p);printf("\n");p=a;inv(p,10);printf("反序后的数组为:\n");for(i=0;i<10;i++,p++)printf("%d,",*p);printf("\n");}例4.7用选择法对10个整数排序。
#include<stdio.h>void sort(int x[ ],int n){int i,j,k,t;for(i=0;i<n-1;i++){k=i;for(j=i+1;j<n;j++)if(x[j]>x[k])第4章指针与数组k=j;if(k!=i){t=x[i];x[i]=x[k];x[k]=t;}}}void main(){int *p,i,a[10]={3,7,9,11,0,6,7,5,4,2};printf("The original array:\n");for(i=0;i<10;i++)printf("%d,",a[i]);printf("\n");p=a;sort(p,10);for(p=a,i=0;i<10;i++,p++)printf("%d ",*p);printf("\n");}4.2 字符串与字符指针变量C语言本身并没有设置一种类型来定义字符串变量,字符串的存储完全依赖于字符数组,但字符数组又不等于字符串变量。
本节将对字符串的实现、字符串与字符数组、指针之间的关系,以及字符串的简单应用进行讨论。
4.2.1 字符数组与字符串虽然C语言中没有字符串数据类型,但却允许使用字符串常量。
在C语言中,字符串是借助于字符型一维数组来存放的,以字符‘\0’作为字符串结束标志,它的ASCII代码值为0,‘\0’占用存储空间、不输出,但不计入串的实际长度。
可以用字符数组存放字符串,如char s[10]={'H','e','l','l','o','!','\0'};或:char s[10]="Hello!";但是以下给数组的赋值是不合法的:char s[10];s="Hello!";因为表示字符串“Hello!”的是存储空间的首地址,而数组定义后数组首地址也是常量,两个常量之间不能相互赋值。
如有以下定义:char str1[10]="computer" ,str2[20] ;赋值方式str2=str1;也是错误的。
当然数组元素间赋值可逐个进行,最后人为加入字符串结束标志‘\0’。
例如:for(j=0;str1[j]!=‟\0‟;j++)str2[j] = str1[j];str2[j] = …\0‟; /* 人为加入字符串结束标志‘\0’ */可以在字符数组内存放字符串。
如果一个字符数组用来作为字符串使用,那么在定义该字符数组时,数组的大小就应该比它将要实际存放的最长字符串多一个元素,从而在末尾存放‘\0’留有空间。
当用赋初值方式来定义字符数组大小时,这时定义应写成:char str1[]={'s','t','r','i','n','g','!','\0'};在此定义了有7个字符的字符串,数组str1包含了8个元素的字符数组。