C语言10(第1版)

合集下载

c语言 ●第10章 指针-1

c语言 ●第10章 指针-1
a[1] a[2]

19
2.定义时同时赋值
int a[10];
int *p=a; c规定: /* 相当于int *p=&a[0] */
若有 int a[10];
int *p=a; 则 p+1:指向下一个数组元素。

p+i:其指向下移i个元素。
20
说明:若有 int a[10]; int *p=a; (1) p+i *(p+i) = &a[i] a[i]= a+i *(a+i) (2)数组的指针变量也可带下标 a[i] ,p[i], *(a+i),*(p+i) 是等价的。 (3)a与p的区别:a代表数组a的首地址,是常量。 p=a; p也代表数组a的首地址,是变量。 如:p++; 是正确的,而 a++; 是错误的。 (4)引用数组元素有三种方法: 下标法: a[i]或p[i] 地址法:*(a+i) 效率低 指针法:*(p+i) *p++ 效率高
13
讨论: 若将被调函数swap( )改为: swap(int *p1,int *p2) {int *p; *p=*p1; *p1=*p2; *p2=*p; /*中间变量是指针变量所指的对象*/ } p无确定的地址(地址是随机的),可能指向任何单 元,有可能破坏系统(乱放枪)。加上int c;p=&c;就没 有问题了。
3 6 9 …
i j k
2004
3010
2000
i_pointer
3
二.对内存单位的访问 存数—写 取数—读 对内存单位的访问,是通过地址进行的。 如: printf(“%d”,i); 读 再如:scanf(“%d”,&i); 写 直接访问:按变量的地址直接读写变量的值。 如:k=i+j; (1)从2000开始的内存单元中取出i的值3. (2)从2002开始的内存单元中取出j的值6. (3)相加后,送入2004开始的内存单元。 间接访问:将变量a的地址存入另一变量b中,访问a时,先 找b,取出a的地址,再按此地址访问a。

C语言从入门到精通 第10章ppt课件

C语言从入门到精通 第10章ppt课件

•例如,-5|3的值为-5。-5与3相位或后得11111011,
其真值为-0000101,即-5。
精选ppt课件2021
上一页下13 一页
第10章 共用体与枚举类型
(3)^(按位“异或”) •运算规则为:0^0=0,0^1=1,1^0=1,1^1=0 •例如,-5^3的值为-8。 (4)~(按位“取反”) •运算规则为:~0=1,~1=0 •例如,~7的值为-8。 (5)<<(“左移”) 例如,3<<2,将3左移2位,右边(最低位)补0, 结果为12,相当于3×2×2的结果。
1. 共用体类型的定义 ➢共用体类型定义用关键字union标识, 形式为: union 标识符
{ 成员说明列表 };
精选ppt课件2021
上一页下2 一页
第10章 共用体与枚举类型
➢标识符给出共用体名, 是共用体类型名的主体, 定义的共用体类型由“union 标识符”标识。
例如,定义一个共用体类型, 要求包含一个整型 成员,一个字符型成员和一个单精度型成员:
精选ppt课件2021
上一页下9 一页
第10章 共用体与枚举类型
例10.1 写出下列程序的执行结果
main()
{union exx
{int a,b; struct
运行结果:
{int c,d;}lpp; }e={10};
60,3600
e.b=e.a+20;
e.lpp.c=e.a+e.b;
e.lpp.d=e.a*e.b;
union icf {int i; char c; float f; };
精选ppt课件2021
上一页下3 一页
第10章 共用体与枚举类型

C语言-10循环结构- while 语句

C语言-10循环结构- while 语句

§作业
一台购买价为 28,000 美元的机器在 7 年内以每年 4000 美元的比率折旧。编写并运行一个 C 程序,计算并显示 美元的比率折旧。 程序, 7 年的折旧表,该表应该具有如下的形式: 年的折旧表,该表应该具有如下的形式: 年 ---1 2 3 4 5 6 7 折旧 ---------4000 4000 4000 4000 4000 4000 4000 年终值 ---------24000 20000 16000 12000 8000 4000 0 累计折旧 ---------4000 8000 12000 16000 20000 24000 28000
C语言程序设计
第十课 循环结构- while 语句 循环结构-
§10.1 循环(重复) 10. 循环(重复)
前面几章介绍的程序在 前面几章介绍的程序在演示 C 程序的正确结构,以及构造 程序的正确结构, 输入、输出、赋值和选择功能方面是非常有用的。 基本的 C 输入、输出、赋值和选择功能方面是非常有用的。 大多数程序的实际功能主要表现在它们多次重复相同的计算 或指令序列的能力上,即每次使用不同的数据, 或指令序列的能力上,即每次使用不同的数据,而不必针对每组 新的数据值重新运行程序, 语句, 新的数据值重新运行程序,本章将介绍实现该功能的 C 语句, while、 do语句。 包括 while、for 和 do-while 语句。
§10.3.3 while 应用-更改控制变量的值 10.
我们仍需要更改 count 的值才能最终退出 while 语句,这需要 语句, 这样的条件, 使用像 count=count+l 这样的条件,在每次执行 while 语句时都 的值。事实是, 递增 count 的值。事实是,用于重复单个语句的 while 语句不会妨 的值,我们所要做的就是使用复合 碍我们使用其他语句来更改 count 的值,我们所要做的就是使用复合 语句来替代单个语句 例如: 来替代单个语句, 语句来替代单个语句,例如: count = 1; //将 count 初始化 //将 while( count <= 10 ) { printf("%4d",count); //将count递增 //将count递增 count++; } 现在让我们来分析一下这组完整的指令的工作方式。 现在让我们来分析一下这组完整的指令的工作方式。第一个赋值语 设置为1 然后, 语句, 句将 count 设置为1。然后,进入 while 语句,条件第一次得到赋 10,所以条件成立,并执行复合语句。 值。因为 count 的值小于 10,所以条件成立,并执行复合语句。复 printf()方法来显示 合语句中第一个语句是调用 printf()方法来显示 count 值。接下来 的语句是将 count 中当前存储的值加上 1,使该值等于 2。现在 while 语句循环回来重新测试条件,因为 count 的值仍小于 10,所 语句循环回来重新测试条件, 10, 以将再次执行复合语句, 11。 以将再次执行复合语句,该过程将一直持续到 count 的值达到 11。

c语言第10章指针

c语言第10章指针

3.间接引用指针
间接引用指针时,可获得由该指针变量所指向的变量内容。
例如,int i=10,*ip=&i;
ip
i
cout<<*ip<<endl;
0000:F384 0000:F384 210
运行结果为:10 即指针ip所指向的变量i的内容。
*放在定义过的指针变量之前,称为间接引用操作符; *放在指针变量定义中时,称为指针定义符。 非指针变量不能用间接引用操作符,*只能作用于地址。
例如, double d=1.23,*dp; char c,*cp;
在&和cp*=作&d用; 下,对变量d和dp有如下6种操作: 其d,中d,dpp,=*&d*是cd; ,非*法dp的,;&&d指,dp针&是只d指p能。针指的向地与址其即同二类级型指的针量。 另外,指针除了可指向所有基本类型的变量外,指针也可 指向常量、数组、数组元素、函数、指针以及文件等。
int ii=n1t0;b, a[10]; int *inpt=&*pi;1,//*初p2始; 化为整型变量的地址,但 *ip=p&1=i;&//是b;错误的
注意:p2不=p要1将; “//可in以t *将ip=一&个i;”已与赋“值*i的p=指&i针;”混赋淆给。另一个相同类型的指针 前者是p2定=&义a语[5句];,*是指针定义符,系统为指针变量ip分配一个空间, 并2、用i数的地组址的值地初址始值化;可后用者该是数执组行语的句数,组左名右表两边示类。型例不如匹:配。 指 例3、针如变,ip函n=d*d量t数bodob;up在u的b=b[3使ll6ee].地8[用*d;4d=址]前/p2,/!(;.,*5值;p一)由[定4该]要; 函被数$赋$$以的d$:p一$名$个$字$地来址表值$$$,示$:否$。$$则$例是如很#6某#:危.#8变险量的。 没有被do赋ub值le的s指in针(d变ou量bdlep的x值);是一个随机地址,把6.8赋给内存中的 随机位do置ub,le很(可*p能f)破( 坏); 了另一个变量,甚至修改了栈中的函数返回 地址,pf造=s成in计; 算机死机或进入死循环。

C语言程序设计第10章文件及其应用

C语言程序设计第10章文件及其应用

学一学
1.定义文件指针 一般形式为: FILE * fp; 其中fp就是所定义文件指针。 FILE类型 以及所有的文件读写函数和相关常量都定 义在文件stdio.h中,在源程序的开头要 包含头文件 stdio.h 。
学一学
2.打开文件 C语言中,使用fopen函数来打开文件。打开文件是使 一个文件指针变量指向被打开文件的结构变量,以便通 过该指针变量访问打开的文件。fopen函数的调用形式 如下: fopen(chFileName,mode); 以mode 方式打开文件chFileName。其中,参数 chFileName 是将要读写文件的文件名,mode为文件 的操作方式。若文件打开成功,返回一个文件指针,若 打开失败,则返回空值NULL,NULL在stdio.h中被定 义为0。文件操作方式mode是一个整数,其取值及含 义如表10-1所示。

流程图
开始 定义文件指针fp,定义整型数组 iArray[5],定义循环变量i 以写二进制文件方式打开文件 fp=fopen("test.dat","wb") N i=0
fp==NULL Y
i<5 Y 输入1个整数存入 数组元素iArray[i]
N
i++
把数组iArray中5 个整数写入文件
显示出错信息 关闭文件 exit(0)
试一试
问题10.1编一程序从键盘输入一串字符“may friendship forever! ”,然后保存在文件myInfo.txt中。 【解题步骤】 1.定义文件指针fp; 2.定义字符数组chInfo用来存输入的字符串; 3.以写文本文件方式打开文件myInfo.txt; 4.如果打开文件失败,则输出错误信息并结束程序; 5.否则,打开文件成功,则从键盘输入数据; 5.将字符数组chInfo中的字符写入文件myInfo.txt; 6.关闭文件。

c语言第10章 结构体

c语言第10章 结构体
第10章 结构体 章
李晓勇
lxyonghn@ 信息与电子工程学院
内容
结构体类型定义
结构体变量的定义 结构体变量的引用 结构体变量的初始化 结构数组 结构体和指针 结构体与函数 链表
C语言程序设计 - c语言第8章 结构体 语言第8
2
一, 结构体类型定义 结构体是一种构造数据类型 结构体是一种构造数据类型 用途:把不同类型的数据组合成一个整体-------自定义数据 用途:把不同类型的数据组合成一个整体 自定义数据 类型 结构体类型定义 struct [结构体名 结构体名] 结构体名 { 成员名; 类型标识符 成员名; 类型标识符 成员名; 成员名; ……………. }; ;
num 间接定义法 struct student { int num; char name[20]; char sex; int age; }; struct student stu[2]; 25B name sex age num name sex age stu[1] stu[0]
C语言程序设计 - c语言第8章 结构体 语言第8
C语言程序设计 - c语言第8章 结构体 语言第8
13
六, 结构体和指针
指向结构体变量的指针
定义形式: 结构体指针名; 定义形式:struct 结构体名 *结构体指针名 结构体指针名
例 struct student *p; 使用结构体指针变量引用成员形式 struct (*结构体指针名 成员名 结构体指针名).成员名 结构体指针名->成员名 结构体变量名.成员名 结构体指针名 student 结构体指针名 p成员名 结构体变量名 成员名 num { int num; name char name[20]; stu sex char sex; 例 int n; struct student stu1; int *p=&n; int age; age struct student *p=&stu1; *p=10; }; n=10 stu1.num=101; (*p).num=101 struct student stu ,*p=&stu; p->num=101

C语言全国计算机二级等级考试教程第10章 字符串(章节带习题)

C语言全国计算机二级等级考试教程第10章  字符串(章节带习题)

输出时直到遇第一 char str[ ]=“I love you!” , *p=str; 个‘\0‟结束输出。 字符指针变量 printf(“%s\n” , p); 字符数组名
输入项 字符指针变量
转去介绍
10.3 字符串的输入和输出
字符数组名
输入项
字符指针变量 当字符数组名作为输入项: char str[15]; scanf(“%s”,str); 在内存中的形式是: P R 输入形式为: PROGRAMMING<CR> O G R A M M I N Ga赋初值后的存储示意图
10.4 字符串数组
可以定义字符型指针数组并通过赋初值来构成一个类似的字符串数组。 例如:char *pa[3]={“a”, ”bb”, ”ccc”}; 定义了一个字符型指针数组,该数组中含有3个元素pa[0] 、pa[1]、 pa[2],且每一个 元素都是一个指向字符串的指针。
则在str中存入的只是字符串“APROGRAM”,而不是字符串“APROGRAM MING
10.3 字符串的输入和输出
10.3.3 调用gets、puts函数在终端输入或输出一行字符串
调用gets函数来输入字符串,例如: char str[15]; gets( str ); 在内存中的形式是: A P 若从键盘上依次输入: APROGRAM MING<CR> R O G R A M M I N G \0 \0
★ 两个字符串分别占有不同的存储空间。 ★ 指针变量pmark中的地址可以改变而指向另外一个长度 不同的字符串。
10.3 字符串的输入和输出
10.3.1 输入和输出字符串时的必要条件
输入和输出的格式说明符为 %s 对字符串输入输出时的必要条件: 字符串常量 输出项 字符数组名 printf(“%s\n” , ”I love you!”); char str[ ]=“I love you!”; printf(“%s\n” , str); I love you!

C语言 选择题库第10章 结构体与共用体

C语言 选择题库第10章 结构体与共用体

第10章结构体与共用体1.以下叙述中错误的是()。

A) 可以通过typedef增加新的类型B) 可以用typedef将已存在的类型用一个新的名字来代表C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:A【解析】关键字typedef的作用只是将C语言中的已有的数据类型作了置换,并不是增加新的类型,所以A)错误。

2.以下关于typedef的叙述错误的是A) 用typedef可以增加新类型B) typedef只是将已存在的类型用一个新的名字来代表C) 用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D) 用typedef为类型说明一个新名,通常可以增加程序的可读性参考答案:A【解析】typedef并不是增加了新类型,而是用一个新名字替代已存在的类型,不能为变量说明一个新名,使用typedef可以增强移植性。

所以A选项错误。

3.若有以下语句typedef struct S{ int g; char h; } T;以下叙述中正确的是A) 可用S定义结构体变量B) 可用T定义结构体变量C) S是struct 类型的变量D) T是struct S类型的变量参考答案:B【解析】本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。

4.设有以下语句typedef struct TT{ char c; int a[4]; } CIN;则下面叙述中正确的是A) CIN是struct TT类型的变量B) TT是struct类型的变量C) 可以用TT定义结构体变量D) 可以用CIN定义结构体变量参考答案:D【解析】本题考查typedef重新声明一种结构体类型,其中CIN为结构体类型名,而不是结构体变量,所以D 选项正确。

5.以下叙述中错误的是A) 可以用typedef将已存在的类型用一个新的名字来代表B) 可以通过typedef增加新的类型C) 用typedef定义新的类型名后,原有类型名仍有效D) 用typedef可以为各种类型起别名,但不能为变量起别名参考答案:B【解析】本题考查typedef的用法,typedef并不是增加一种新的类型,而是对已存在的类型用一个新的名字来代表,所以B选项错误。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

The c programming language
2 字符串的复制
形式: strcpy(字符数组名1,字符串2) 功能:把字符串2复制到字符数组1中 说明:(1)字符数组1必须足够大,以能放下字符串2 (2)字符串2 既可是字符数组,也可是字符串常量 如:strcpy(str1,“abcdfef”); 再如: { char str1[20],str2[ ]=“He is a boy”; strcpy(str1,str2); printf(“%s”, str1); } 运行: He is a boy (3)不能用赋值语句直接给字符数组赋值, 只能通过字符串复制函数strcpy进行。 如:str1={“He is a boy”}; 错 str1=str2; 错
例: 输入三个字符串,找出其中最大 的串。 既可以把三个串赋给三个一维数组 又可把三个串赋给一个二维数组: str[3][15] str[3][15]有三行,每行假定最多放15个字符 str[0] C h i n a \0 \0 … \0 str[1] J a p a n \0 \0 … \0 str[2] I n d i a \0 \0 … \0
9 9 8 8 6 6 4 4 1 3 3 1 i=5 j=6
n个数 ,i:1 ~ (n-1) j:i+1 ~ n
main( ) { int x[11] , i, j, t; printf(“输入10个成绩:\n”); for (i=1;i<=10;i++) scanf(“%d”, &x[i] ); for (i=1; i<=9;i++) for (j=i+1; j<=10 ; j++) if (x[i] < x[j]) {t=x[i]; x[i]=x[j]; x[j]=t;} printf(“排序成绩为:\n”); for (i=1;i<=10;i++) printf(“%3d”,x[i]); }
1 字符串的连接
形式: strcat(字符数组名1,字符数组名2) 功能:把字符串2连接到字符串1后面,结果在字符串1中 说明:(1)字符数组1必须足够大,能放下连接后的新串 (2)连接后,串1后“\0”取消,串2后“\0”保留 例:main( ) {char c1[40]=“The c programming”; char c2[ ]= “ language”; strcat(c1,c2); printf(“%s”,c1); }
注意:(1) 命令中是str,不是&str 数组名str代表数组的首地址 (2) 输入多个字符串时, 用空格分隔 如:How are you! 要当成三个字符串输入 char c1[5],c2[5],c3[5]; H o w scanf(“%s%s%s”,c1,c2,c3); printf(“%s %s %s”,c1,c2,c3); a r e y o u 输入: How are you! 输出: How are you! 若: char c[13]; scanf(“%s”,c); printf(“%s ”,c); 输入: How are you! 输出: How H o w \0 \0 \0 \0 \0 \0 \0 \0
str[3][15]; ; for (i=0;i<3;i++) ①定义:char str[i] ②循环给三个数组赋值:for(……) gets (____); ③前两串比较,大者拷贝到string中; 用strcmp,strcpy ④string 与第三串比较,串三大则复制到string
main() { char string [15]; /*放大串*/ char str[3][15]; int i; for (i=0;i<3;i++) /*循环给三个串赋值*/ gets (str[i]); strcmp (str[0],str[1])>0) ______ strcpy (string, str[0]); if(________ else strcpy(string,str[1]); if (strcmp(string,str[2])<0) strcpy(string , str[2]); printf(“最大的串为:%s\n”, string); } 若定义三个一维数组,应何改? 定义:str1[15],str2[15],str3[15], 赋值时要一个一个赋: gets (str1);gets(str2); gets(str3);
(1)以下对一维整数型数组y的正确说明是: A)int y(10) ; B)int k=10,y[k]; C) int k; D)#define SIZE 8 scanf("%d",&k); int y[SIZE]; int y[k]; E) int k=10; int y[k]; (2)执行下面的程序段后,变量k中的值为: int k=3,s[2]; s[0]=k;k=s[1]*10; A) 不定值 B)30 C)33 D)10
printf(“%d”, r); } 若c2为“ABC”, 则结果为 ? 结果:68
说明: 两字符串的比较不能用:if (c1==c2) printf(“两串相等”); 只能用比较函数if (strcmp(c1,c2)==0) printf(“两串相等”);
4 求字符串长度函数
形式:strlen(字符数组名) 功能:测字符串的实际长度(不包括‘\0‟) char c[10]=“Hello”; 结果为: 5 printf(“%d”,strlen( c )); 注意:不是10,也不是6。 也可以直接测常量: printf(“长度为%d”,strlen(“Hello”));
\0 \0 \0 \0 ! \0
\0 \0
2 用gets 函数输入一个字符串 getchar函数:一次只能输入一个字符 gets 函数:一次可以输入一个字符串 形式: gets(字符数组名) 如: char str[13]; gets(str); 输入: How are you! 系统将“How are you!\0”放入字符数组中
四、字符数组的输入输出 (一)字符数组的输入 1 用scanf函数 (1)用格式符%c: 一次输入一个单字符 如: char str[6]; int i; for (i=0;i<6;i++) scanf(“%c”,&str[i]); 输入:abc123 结果:str[0]=„a‟, str[1]=„b‟, str[2]=„c‟, str[3]=„1‟, str[4]=„2‟, str[5]=„3‟ (2)用%s将整个字符串一次输入 如: char str[6]; scanf(“%s”,str); 输入:China 系统自动在字符串末尾加结束标志“\0”
7.3 字符数组
字符数组是用来存放字符数据的数组 字符数组中的每个元素只能存放一个字符 一、定义 形式:char c[5] 包含5个元素:c[0]、c[1]、 c[2]、 c[3]、 c[4] c[0] c[1] c[2] C h i c[3] n c[4] a
说明: char c[5]; 也可写成 int c[5];
注意: scanf(“%s”,a)与gets(a)的区别: scanf:遇到空格结束 gets:遇到回车结束,中间可有空格
(二)字符数组的输出 1 用printf输出 (1)用%c一次输出一个字符 (2)用%s一次输出一个字符串 printf(“%s”,字符数组名) 2 用puts 函数输出一个字符串 形式: puts(字符数组名) 功能:将指定字符数组中的字符串输出,遇到“\0”停 止 说明:字符数组输出后,自动换行 如: char str[ ]={“How are you!”}; puts(str); printf(“%s”,str) ;
*
三、字符串和字符串结束标志 C语言中将字符串用字符数组来表示 1 用“\0”作为字符串的结束标志 “\0”——ASCII码为“0”的控制字符,这里代表结束 2 字符串常量的初始化 如:char c[ ]={“How are you”}; 或:char c[ ]=“How are you” ; 系统可以自动识别c数组的长度为12 相当于:char c[ ]={„H‟,„o‟,„w‟, „ ‟ ,„a‟,„r‟,„e‟, „ ‟,„y‟,„o‟,„u‟,„\0‟}; H o w a r e y o u \0
选择法排序——由大到小 1. 将第一个数a[1]依次与后面的数a[j] 比较, 若大不动,若小则换(第一个元素是最大数) 2. 再将第二个数a[2]依次与后面的数a[j]比较, 若大不动,若小则换(第二个元素是第二大数) …...
4 9 1 1 9 4 6 6 8 8 3 3 趟数 i=1 比较对象 j=2~6
方法1 char a[ ]={“I love China ”}; printf(“%s”,a); char c[15]; printf(”请输入字符串:”); gets(c); puts(c);
方法2
五、字符串的处理 字符串的处理包括字符串的连接、复制、比 较等操作 上述操作是通过常用字符串函数来实现的 使用字符串函数前要引入头文件“string.h”
3 字符串的比较
形式:strcmp(字符串1, 字符串2) 功能:比较串1和串2 规则:两串从左至右比较,直到出现不同或‘\0‟为止 结果:串1=串2→返回0 串1>串2 →正整数 两字符ASCII码的差值 串1<串2 →负整数 例: { char c1[ ]={“ABCDE”}, c2[ ]=“ABCF”; int r ; 结果:-2 r=strcmp(c1,c2);
5 大小写的转换
大写字母转换为小写函数: strlwr(字符串) (Lowercase) 小写字母转换为大写函数: strupr(字符串) (Uppercase) 如:printf(“%s”, strlwr(“ABC”); 结果:abc
相关文档
最新文档