C语言程序设计第8章 函数1

合集下载

《C语言程序设计教程(第二版)》习题答案

《C语言程序设计教程(第二版)》习题答案

1 【C语言】《C语言程序设计教程(第二版)》习题答案说明1. 本文所指的《C语言程序设计教程(第二版)》是李凤霞主编、北京理工大学出版社出版的,绿皮。

2 第1章程序设计基础知识一、单项选择题(第23页)1-4.CBBC 5-8.DACA二、填空题(第24页)1.判断条件2.面向过程编程3.结构化4.程序5.面向对象的程序设计语言7.有穷性8.直到型循环9.算法10.可读性11.模块化12.对问题的分析和模块的划分三、应用题(第24页)2.源程序:main(){int i,j,k; /* i:公鸡数,j:母鸡数,k:小鸡数的1/3 */printf("cock hen chick\n");for(i=1;i<=20;i++)for(j=1;j<=33;j++)for(k=1;k<=33;k++)if (i+j+k*3==100&&i*5+j*3+k==100)printf(" %d %d %d\n",i,j,k*3);}执行结果:cock hen chick4 18 788 11 8112 4 843.现计算斐波那契数列的前20项。

递推法源程序:main(){long a,b;int i;a=b=1;for(i=1;i<=10;i++) /*要计算前30项,把10改为15。

*/{printf("%8ld%8ld",a,b);a=a+b;b=b+a;}}递归法源程序:main(){int i;for(i=0;i<=19;i++)printf("%8d",fib(i));}fib(int i){return(i<=1?1:fib(i-1)+fib(i-2));}执行结果:1 123 5 8 13 21 34 5589 144 233 377 610 987 1597 2584 4181 6765 4.源程序:#include "math.h";main(){double x,x0,deltax;x=1.5;do {x0=pow(x+1,1./3);deltax=fabs(x0-x);x=x0;}while(deltax>1e-12);printf("%.10f\n",x);}执行结果:1.32471795725.源程序略。

C语言程序设计第8单元

C语言程序设计第8单元

二维数组的地址
【例8.9】使用指针变量输出二维数组元素 #include<stdio.h> main() { int a[2][3]={{1,2,3},{4,5,6}},*p;
for(p=a[0];p<a[0]+6;p++) { if((p-a[0])%3==0)printf("\n");
printf("%2d",*p); } }
0x62fe3a
0x62fe3b
0x62fe3c
数组指针的运算
对于指针变量p,可以做以下运算: p++,p--,p+i, p-i, p+=i, p-= i等。
#include <stdio.h> main() { int a[]={1,3,6,7,9,12};
int x,*p=&a[2]; x=(*--p)++; printf("x=%d\n",x); printf("a[1]=%d\n",a[1]); }
0x62fe50
二维数组的地址
#include <stdio.h>
main()
{
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,a1是1,1行2指}};针
printf("%x,%x,%x\n",a,a+1,a+2); printf("%x,%x,%x\n",*a,*(a+1),*(a+2)); *a是列指针
二维数组的地址
二维数组名是数组的首地址,二维数组名的基类型不是数组元素类 型,而是一维数组类型,因此,二维数组名a是一个行指针。

2022年C语言程序设计教程(第3版) 谭浩强 课件 最新 8

2022年C语言程序设计教程(第3版) 谭浩强 课件 最新 8
程序对文件的操作(读/写)过程如图8.2所 示。进行文件的读写,首先要为文件建立一个相 应的缓冲区。当要向文件写据时,程序先把数据 送到缓冲区,再把数据送到外部设备的指定文件 中;当要从文件读取数据时,也要先把数据送到 缓冲区,再由变量从缓冲区中提取相应的数据。
程序数据区
输入缓冲区 输出缓冲区
外部介质
一般说,二进制文件节省存储空间而且输入输出的速 度快(因为在输出时不需要把数据由二进制形式转换为字 符代码,在输入时也不需要把字符代码先转换成二进制形 式然后存入内存)。如果存入磁盘中的数据只是暂存的中 间结果数据,以后还要调入继续处理的,一般用二进制文 件以节省时间和空间。如果输出的数据是准备作为文档供 给人们阅读的,一般用字符代码文件,它们通过显示器或 打印机转换成字符输出。一般高级语言都能提供字符代码 文件(ASCII文件)和二进制文件,用不同的方法来读写这 两种不同的文件。
f:\\exe3\\file1.txt 文件名是文件的主要标志,它必须符合C语言关于标 识符的规定。 文件名后缀,用于对文件进行补充说明,一般不超过 三个字符,通常用特定的后缀表明文件的类型。例如.txt 表明是纯字符文件,用.c表示是C语言源程序文件, 用.exe表示是可执行文件等。
8.1.3 文件的位置指针与读写方式
fp1 文 件 1 fp2 文 件 2 fp3 文 件 3
的信息
的信息
的信息



8.2.3 文件的打开与关闭——流的创建与 撤销
1. 文件的打开 fopen (文件名,文件操作方式); 说明:
(1)文件名应当包含文件路径、主文件 名和文件后缀,即提供找到文件的有关信 息。
(2)应当理解文件操作用方式的意义。
FILE * fp; char name[20]; int num; float score; if ((fp=fopen(“f:\\C3exe\\file3.txt”,”w”))==NULL) {

C语言程序设计基础 第8章 数据文件处理技术

C语言程序设计基础 第8章 数据文件处理技术

offset为long型的位移量,以ptname为基准,移动 的字节数。
函数返回值:成功移动返回0,否则返回非0。
10. 函数fseek-例 【例1】 fseek (fp, 40L, SEEK_SET); 表示:将当前位置移到离文件头40个字节处。 【例2】 fseek(fp, 20L, SEEK_CUR); 表示:将当前位置移到离当前位置20个字节处。 【例3】 fseek(fp, -30L, SEEK_END);
文件不能打开时,函数 fopen()将返回空指针值 NULL。 程序应考虑到文件不能正常打开的极端情况,应用以下形式 的代码描述打开一个文件的要求: if ((fp = fopen(fname, "r")) == NULL) { printf("不能打开文件 %s。\n", fname); return; }
fputc()和fgetc()函数-例2
【例2】将一个文件中的数据复制到另一个文件中。 #include <stdio.h>
void main()
{ FILE *in, *out; char ch, infile[40], outfile[40]; gets (infile); if (( in = fopen(infile, "r")) == NULL) { printf ("不能打开源文件 %s\n", infile); scanf ("%*c"); return; } /* 起暂停作用 */
12. 成批读数据函数fread() 形式指向的文件读入count*size个字节,存入buffer。 函数返回值:读取成功返回count值,否则返回0。
说明:常用于二进制文件的读。

C语言程序设计 第3版 第8章 函数

C语言程序设计 第3版 第8章 函数

s=a+b;
return s;
}
main()
//主函数
{
int s;
s=sum();
printf("s=%d\n",s);
}
运行结果
2 3↙ s=5
C语言程序设计
2.函数的定义
无返回值无参数 无返回值有参数
有返回值无参数 有返回值有参数
一般形式:
类型标识符 函数名(形式参数表列) {
函数体; return 表达式; }
调用方式
函数调用的一般形式:
函数名(实际参数表) 实际参数表中的参数可以是常数、变量或表达式,各实参之间用逗号分隔。
调用方式:
(1)函数表达式:函数作为表达式中的一项出现在表达式中,这种方式要求函数有返回值。 例如:s=sum(x,y);把sum的返回值赋予变量s。
(2)函数语句:函数调用的一般形式加上分号即构成函数语句,这种方式不要求函数有返回值。 例如:sum(x,y);以函数语句的方式调用函数。
void sum(int a,int b) //自定义函数
{
int s;
s=a+b;
ห้องสมุดไป่ตู้
printf("s=%d\n",s);
} main()
//主函数
{
int x=2,y=3;
sum(x,y);
}
运行结果
s=5
C语言程序设计
2.函数的定义
无返回值无参数 无返回值有参数
有返回值无参数 有返回值有参数
一般形式:
类型标识符 函数名( ) {
函数体; return 表达式; }
注意说明:
(1)函数的类型实际上是函数返回值的类型。

C语言程序设计(第八章)

C语言程序设计(第八章)
字符读写函数fgetc()和fputc()是以字符(字节)为单位
的读写函数。 每次可从文件读出或向文件写入一个字符。
第八章
1.读字符函数fgetc()
fgetc() 函数的功能是从指定的文件中读一个字符,函
数调用的形式为:
字符变量 = fgetc(文件指针);
例如:
ch = fgetc(fp);
的意义是从打开的文件fp中读取一个字符并送入ch中 。
(1)字符读/写函数 :fgetc()/fputc()
(2)字符串读/写函数:fgets()/fputs()
(3)数据块读/写函数:freed/()fwrite()
(4)格式化读/写函数:fscanf()/fprinf()
以上函数原型都在头文件stdio.h中加以声明。
第八章
8.5.1字符读/写函数 :fgetc()/fputc()
关闭文件则断开指针与文件之间的联系,禁止再对该文
件进行操作。
第八章
8.3.1 文件打开的函数fopen()
open函数用于打开一个文件,其调用的一般形式为: 文件指针名 = fopen(文件名, 使用文件方式);
“文件指针名”:必须是被说明为FILE 类型的指针变量。
“文件名”:被打开文件的文件名,“文件名”是字符串常 量、字符数组或字符指针。 “使用文件方式”:指文件的类型和操作要求。
/* 输出系统提示信息 */
上面程序段的意义是,如果返回的指针为空,表示不能 打开test.dat文件,则给出提示信息“打开文件test.dat出 错!”,然后输出系统提示信息,当用户从键盘敲任一键后 执行exit(1)退出程序 。
第八章
8.3.2 文件关闭的函数fclose()

C语言程序设计教程第8章文件

C语言程序设计教程第8章文件

8.2.1 文件的打开与关闭
2. 文件关闭函数fclose() 文件一旦使用完毕,为避免文件数据丢失等错误的发生, 可用文件关闭函数将其关闭。 函数调用的一般形式是: fclose(文件指针); 例如: fclose(fp); 正常完成关闭文件操作时,fclose()函数返回值为0, 如果返回非零值则表示有错误发生。
检查各种输入输出函数对文件进行读写时是否 出错,返回值为0表示未出错,否则表示有错。
8.2.2 文件检测与定位
2.文件的定位函数 在文件内部有一个位置指针,用来指向文件中当前被读写 的字节。 在文件打开时,该指针总是指向文件的第一个字节。 它不同于文件指针,文件指针是指向整个文件的,须在 程序中定义说明,只要不重新赋值,文件指针的值是不变的。 文件内部的位置指针是指示文件内部的当前读写位置, 比如每读写一次,该指针均会向后移动,它不需在程序中定 义说明,而是由系统自动设置的。
在stdio.h中定义了两个文件操作过程中经常用到的符号常量
8.2 文件操作
另外 在stdio.h中定义了两个文件操作过程中经常用到的符号常量 NULL:表示空指针,值为0 EOF: 表示文件末尾,值为-1 通过文件指针就可以完成对文件的操作 文件操作的过程一般有如下步骤:
1. 说明一个文件指针; 2. 通过文件名打开文件,并为文件指针赋值; 3. 通过文件指针对文件进行存取(即读或写操作) ; 4. 关闭文件。
8.2.1 文件的打开与关闭
1. 文件打开函数fopen()
文件在进行读写操作之前要先打开,使用完毕要关闭
所谓打开文件,实际上是建立文件的各种信息,并使 文件指针指向该文件,以便进行其它操作。 fopen()函数用来打开一个文件,其调用的一般形式为:

8章 c语言程序设计 结构体,共用体与枚举类型

8章 c语言程序设计 结构体,共用体与枚举类型

当通过指针变量引用结构体成员时,若表达式中含有++,-等运算符时,应根据运算符优先级来确定表达式含义。例: ++ p-> score 相当于++( p-> score),结果使score加1。 (++ p)-> score 则再访问成员score之前,使p加1。 例:struct abc {char a[20]; int *pt; }p; pt是结构体类型中的成员,则表达式*p->pt引用的是pt所 指存储单元; *p->pt++是再引用了pt所指存储单元后,使 指针pt加1;( *p->pt)++使pt所指向的单元的值加1;而 *p ++ ->pt在访问了pt所指存储单元后,p加1。
例:struct std_info {char name[9]; char sex[3]; float score; struct date birthday; }stud,arr[5],*p; p=& stud; (1)若要引用结构体类型变量stud 中score成员项,可写成: stud. score p-> score *(p). score arr[1] .score /*通过结构体变量引用*/ /*通过指针变量引用*/ /*通过指针变量引用*/
2.将一个结构体变量作为一个整体赋给另一具有相同类型的 结构体变量 例:struct {char name[15]; int num; }stud1,stud2={“wangfang”,01}; 执行赋值语句: stud1=stud2; 则stud2中把每个成员的值依次赋给stud1中对应的同名成员。 C不允许把一个结构体变量作为一个整体进行输入和输出。 例: scanf(“%d”,& stud1); printf(“%d”,stud1);都是错误的 结构体变量有多个不同类型的数据项,必须逐个用相应的格 式像普通变量一样输入和输出。 scanf(“%s,%d”, stud1. name ,& stud1.num); 注意name[15]是数组,数组名本身就是地址。

四川大学《c语言程序设计》课件-第8章 结构体与共用体

四川大学《c语言程序设计》课件-第8章 结构体与共用体
男 1999
90 83 72 82
2 林平之
男 1999
78 92 88 78
3 岳灵珊
女 1999
89 72 98 66
4 任盈盈
女 1999
78 95 87 90
结构体的解决方法
struct STUDENT
{ int studentID;
/*每个学生的序号*/
char studentName[10];/*每个学生的姓名*/
};
结构体变量的指针
struct STUDENT
{
int
studentID;
char
studentName[10];
char
studentSex[4];
struct date timeOfEnter;
int
scoreComputer;
int
scoreEnglish;
int
scoreMath;
int
结构体的内存占用
double 占用内存字节数 = 8 struct 类型用内存字节数 = ? 是所有成员变量的内存总和吗?
用运算符sizeof获得结构体大小 sizeof(变量或表达式) sizeof(类型)
struct number
{ short i; char ch;
float f;
};
printf("%d\n", sizeof(struct number));
struct STUDENT *pStu; /*定义结构体指针*/
pStu = &stu;
通过stu和成员运算符访问结构体成员
– stu. studentID = 1;
通过pStu和指向运算符访问结构体成员

《C语言程序设计》教材习题答案第8章

《C语言程序设计》教材习题答案第8章

一、选择题1.以下数组定义中,错误的是:C)int a[3]={1,2,3,4};2.以下数组定义中,正确的是:B) int a[][2]={1,2,3,4};3.设有定义“int a[8][10];”,在VC中一个整数占用4字节,设a的起始地址为1000,则a[1][1]的地址是:D)10444.已知有数组定义“int a[][3]={1,2,3,4,5,6,7,8,9};”,则a[1][2]的值是:C)65.在以下字符串定义、初始化和赋值运算中,错误的是:A) char str[10];str=”String”;6.设有以下字符串定义,char s1[]={‘S’,’t’,’r’,’i’,’n’,’g’};char s2[]=”String”;则s1和s2:C)长度不同,但内容相同。

7.设有定义“int a[10]={0};”,则说法正确的是:A)数组a有10个元素,各元素的值为0.8.设已定义“char str[6]={‘a’,’b’,’\0’,’c’,’d’,’\0’};”,执行语句“printf(“%s”,str)”后,输出结果为:B)ab9.引用数组元素时,数组元素下标不可以是:C)字符串10.已定义字符串S1和S2,以下错误的输入语句是:C)gets(s1,s2);11.下面程序段的运行结果是:A)123void main(){char a[]=”abcd”,b[]=”123”;strcpy(a,b);printf(“%s\n”,a);}12.下面程序段的运行结果是:A)123void main(){char a[]=”123”,b[]=”abcd”;if(a>b)printf(“%s\n”,a);else printf(“%s\n”,b);}二、编程题1.一维数字a的值已经,请把数组中的值按逆序存放,然后输出数组。

例如数组中原来的值为3,4,2,1,6,颠倒后变成6,1,2,4,3.#include<stdio.h>main(){int i,a[5]={2,3,45,12,5},t;printf("转换前:");for(i=0;i<5;i++)printf("%d\t",a[i]);for(i=0;i<5/2;i++){t=a[i];a[i]=a[5-i-1];a[5-i-1]=t;}printf("\n转换后:");for(i=0;i<5;i++)printf("%d\t",a[i]);}2.输入一个整数(位数不确定),从高位到低位依次输出各位数字,其间用逗号分隔。

《C语言程序设计基础》习题集(含答案)

《C语言程序设计基础》习题集(含答案)

第一章C语言概述1.1、选择题(1)一个C语言程序是由()组成。

A. 一个主程序及若干个子程序B. 一个主程序C. 一个主函数及若干个子函数D. 一个主函数(2) 一个C语言程序总是从()开始执行。

A. 主过程B. 主函数C. 子程序D. 主程序(3) main函数在源程序中的位置()。

A. 必须在最开始B. 必须在子函数的后面C. 可以任意D. 必须在最后(4) 一个C程序的执行是从()。

A. 本程序的第一个函数开始,到最后一个函数结束B. 本程序的main函数开始,到最后一个函数结束C. 本程序的main函数开始,通常也在main函数结束D. 本程序的第一个函数开始,到main函数结束(5) 以下叙述不正确的是()。

A. 一个C程序可由一个或多个函数组成B. 一个C程序必须包含一个main函数C. 在C程序中,注释只能位于一条语句的最后面D. C程序的基本组成单位是函数1.2、编程题(1)参照本章例题,编程输出如下信息:**********Very good!**********(2)编写一个C程序,输出以下信息:******Turbo C ** * * * *1.3 请根据自己的认识,写出C语言的主要特点。

1.4 简述C程序主要由哪些部分构成?1.5 用户编写的C程序上机运行要经过哪些步骤?第二章基本数据类型和表达式2.1 单项选择题(1) 以下不能用作变量名的是()A)_26 B)case C)scanf D)Double(2) 以下合法的八进制数是()A)0135 B)068 C)013.45 D)o7(3) 若变量已正确定义,以下非法的表达式是()A)a/=b+c B)a%(4.0) C)a=1/2*(x=y=20,x*3) D)a=b=c (4) 设x 为int 类型,其值为11,则表达式:(x++*1/3)的值是()A)3 B)4 C)11 D)12(5) 若题中各变量已正确定义并赋值,下面符合C 语法的表达式是()A )a%=7.6; B)a++,a=7+b+c C)int(12.3)%4 D)a=c+b=a+7 (6) 设k 和x 均为int 型变量,且k=7,x=12,则能使值为3的表达式是()A)x%=k%=5 B)x%=(k-k%5) C)x%=k-k%5 D)(x%=k)- (k%=5) (7) 能正确表示数学公式|)sin(|x ,的C 语言表达式是()A)sqrt(abs(sin(x*π/180)))B)sqrt(abs(sin(x*3.14/180))) C)sqrt(sin(x))D)sqrt (fabs (sin(x*3.14/180)))(8) 以下变量x 、y 、z 均为double 型且已正确赋值,不能正确表示代数式z y x的C 语言表达式是()A)x/y*z B)x*(1/(y*z)) C)x/y*1/z D)x/y/z (9) 以下叙述中正确的是()A ) A )C 程序中,赋值运算符的优先级最低。

C语言程序设计教程第8章北京邮电大学出版社.

C语言程序设计教程第8章北京邮电大学出版社.

第8章 指针
18
说明: 对于不同基类型的指针,指针变量“加上” 或“减去”一个整数n所移动的字节数(= sizeof( 指针所指对象的数据类型 ) )是不同的。 例如: float a[10], *p=a, *x; x=p+3; /*实际上是p加上3*4个字节赋给x, x依然指向数组的第三个分量*/
C语言程序设计教程
第 8 章 指针
8.1 8.2 8.3 8.4 8.5 8.6 指针与指针变量 指针与函数 指针与数组 指针与字符串 指针数组与命令行参数 程序举例
第8章 指针
2
8.1 指针与指针变量
8.1.1 指针的概念
1.内存与变量地址 内存地址:内存是计算机用于存储数据的存储 器,以一个字节作为存储单元,为了便于访问,给 每个字节单元一个唯一的编号,第一字节单元编号 为0,以后各单元按顺序连续编号,这些单元编号 称为内存单元的地址 。 变量地址:变量所分配存储空间的首字节单元 地址(字节单元编号)。
2018/9/14
C语言程序设计教程
第8章 指针
3
在程序中,对变量的操作实际上是通过地址来完成的。 • 定义时:定义变量→分配内存单元(按类型)→地址 (即内存中的编号) • 存取操作:程序 →变量名 →内存单元 →存取 • 实际上: 程序 →编译 →变量名 →变量的地址
2.访问方式
直接存取:把直接按变量名或地址存取变量值的方式 称为 “直接存取”方式。
2018/9/14
C语言程序设计教程
第8章 指针
10
8.1.3 指针运算
指针运算实际上是地址的计算,包括赋值运算、算术运算、 关系运算三种。
1. 指针的赋值运算 (1)将变量地址值赋给指针变量,使指针指向该变 量。

《C语言程序设计》课后习题答案第八章

《C语言程序设计》课后习题答案第八章

8.1 编写两个函数,分别求两个证书的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果,两个整数由键盘输入。

void main(){ int Mgy(int x,int y);int Mgb(int z);int a,b,mgy,mgb;printf("请输入两个数:\n");scanf("%d,%d",&a,&b);mgy=Mgy(a,b);mgb=Mgb(a,b,mgy);printf("两个数的最大公约数为%d,最小公倍数为%d\n",mgy,mgb);}int Mgy(int x,int y){ int r,temp;if(x<y){ temp=x;x=y;y=temp;}while(x%y!=0){ r=x%y;x=y;y=r;}return y;}int Mgb(int x,int y,int z){ return (x*y/z);}8.2 求方程ax²+bx+c=0的根,用三个函数分别求当b²-4ac大于零、等于零和小于零时的根,8.3编写一个判素数的函数,在主函数输入一个整数,输出是否是素数的信息。

#include<math.h>void main(){ int Isprime(int a);int m,temp=0;printf("请输入一个数:\n");scanf("%d",&m);temp=Isprime(m);if(temp==0) printf("%d不是素数。

\n",m);else printf("%d是素数。

\n",m);}int Isprime(int a){ int i,k,flag;if(a==0||a==1) flag=0;else{ k=sqrt(a);for(i=2;i<=k;i++)if(a%i==0) flag=0; }return flag; }8.8 写一个函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字间空一格空8.9编写一个函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符8.10 写一个函数,输入一行字符,将此字符串中最长的单词输出。

C语言程序设计 Chapter8 结构体与共用体

C语言程序设计 Chapter8 结构体与共用体

struct date_type { int year; 结构体数组 int month; int day; 结构体数组的定义 }; ; struct stud_type { char name[10]; long num; char sex; struct date_type birthday; float score; char address[10]; }s1[3]; struct stud_type s2[5];
struct ym_type { 输入一个职工的工资信息, 例. 输入一个职工的工资信息,整体 int y; 赋值给另一个变量,在屏幕上输出。 赋值给另一个变量,在屏幕上输出。 int m; }; struct salary_type { char num[5]; char name[17]; struct ym_type ym; float salary; float other; float cost; };
#define N 5
char name[11]; int score; }t,s[N]; main() { /*输入基本信息 输入基本信息*/ 输入基本信息 /*选择排序成绩 选择排序成绩*/ 选择排序成绩 /*输出基本信息 输出基本信息*/ 输出基本信息 }
/*选择排序成绩 选择排序成绩*/ 选择排序成绩 for(i=0;i<N-1;i++) { k=i; for(j=i+1;j<N;j++) if(s[k].score<s[j].score) k=j; if(k!=i) { t=s[i]; s[i]=s[k]; s[k]=t; } }
第8章 结构体与共用体
概述
在事务处理中,常需要将一些关系密切但 在事务处理中 常需要将一些关系密切但类型不同的 并为其取一个整体名字, 数据项组织在一起,并为其取一个整体名字,形成一 并为其取一个整体名字 个结构。 语言中,就称其为 个结构。 语言中 就称其为结构体。 C语言中 结构体通常由不同数据类型的数据项(成员)组成 组成 一个结构体可包含若干成员,每个成员具有自己 一个结构体可包含若干成员 每个成员具有自己 的名字及数据类型。 的名字及数据类型。

C语言程序设计_2 第8章 数组

C语言程序设计_2 第8章  数组

int a[3][3]={{1,2,3},{4,5,6},{7,8,9}} a[3][3]={{1 },{4 },{7
.2). 按行连续赋值 把数组元素顺序赋值。例如: 把数组元素顺序赋值。例如:
int a[5][3]={1,2,3,4,5,6,7,8,9} a[5][3]={1
通常写为如下矩阵形式,比较直观: 通常写为如下矩阵形式,比较直观:
二维数组存储是按行排列的, 二维数组存储是按行排列的, 即放完一行之后顺次放入第二 行。
8.2.2 二维数组元素的表示方法
二维数组的元素也称为双下标变量,其表示的形式为: 二维数组的元素也称为双下标变量,其表示的形式为:
数组名[下标1][下标 数组名[下标1][下标2] 下标2
其中下标应为整型常量或整型表达式。例如: 其中下标应为整型常量或整型表达式。例如:
8.2 二维数组
只有一个下标的数组称为一维数组, 只有一个下标的数组称为一维数组,其数组 元素称为单下标变量。 元素称为单下标变量。有多个下标的数组称为 多维数组, 其数组元素称为多下标变量。 多维数组, 其数组元素称为多下标变量。 最 常用的是二维数组, 常用的是二维数组,更高维数的数组与二维数 组相似。 组相似。
8.1.2 数组元素的表示方法
数组元素是数组的基本单元,它是一种变量,其标识方法为 数组元素是数组的基本单元, 它是一种变量, 数组名后跟一个下标。下标指定元素在数组中的顺序号。 数组名后跟一个下标。下标指定元素在数组中的顺序号。数组元 素的一般形式为: 素的一般形式为:
数组名[下标] 数组名[下标]
例如,单独使用一个下标变量: 例如,单独使用一个下标变量:
int a[10]; a[10] a[7]=6; a[7]=6

《c语言程序设计教学资料》第8章---数组

《c语言程序设计教学资料》第8章---数组
printf(“%d”, a[i]);
一维数组的初始化
不为自动数组初始化,数组中的元素值是不确定的 不为静态或外部数组初始化,则对数值型数组元素, 初值为0,而对字符型数组元素,初值为空字符 ‘\0’ 对数组元素初始化的实现方法:
1.在定义数组时对数组元素赋以初值。
例如: int a[10]={0,1,2,3,4,5,6,7,8,9}; 将数组元素的初值依次放在一对花括弧内。经过上 面的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2, a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8, a[9]=9。
0
30
b1]
1
34
b[2]
2
38
b[3]
3

3c
b[4]
4
40
c
52
44
a
61
48
i
14678910235
4c
b[8]
8
50
b[9]
9
54
b[10]
10
58
c和a的值因数组越界编辑p而pt 被破坏了 b[11]
11
5c
二维数组程序举例
例: 将一个二维数组行和列元素互换,存到另一个二维数 组中。
数组名 [下标] 下标可以是整型常量或整型表达式。例如: a[0]=a[5]+a[7]-a[2*3]
注意
定义数组时用到的“数组名[常量表达式]” 和引用数 组元素时用到的“数组名[下标]” 是有区别的。 例如∶ int a[10]; // 定义数组长度为10
t=a[6]; //引用a数组中序号为6的元素
sizeof(数组名)
编辑ppt

c语言程序设计第五版课后答案谭浩强第八章课后答案

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语言程序设计第八章 指针的使用

第八章指针的使用【学习目标】本章将详细介绍在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语言)第8章 查找和排序算法

程序设计基础(C语言)第8章 查找和排序算法
mid = low + (high - low) / 2;
8.2.3二分查找的实际应用
• 【例8.3】用二分法求下面的
一元三次方程 x3 x 1 0
在区间[1, 3]上误差不大于 10-6的根。先从键盘输入迭 代初值 x0和允许的误差 , 然后输出求得的方程根和所 需的迭代次数。
//函数功能:用二分法计算并返回方程的根 double Iteration(double x1, double x2, double eps) {
8.1.2线性查找算法的程序实现
#include <stdio.h>
#define N 40
int ReadRecord(int num[], int weight[]);
int LinSearch(int num[], int key, int n);
//主函数
int main(void)
{
int num[N], weight[N], n, pos, key;
double x0; do{
return BinSearch(num, key, mid+1, high); //在后一子表查找 } else if (key < num[mid]) {
return BinSearch(num, key, low, mid-1); //在前一子表查找 } return mid; //找到,返回找到的位置下标 }
序排列的。
int BinSearch(int num[], int key, int low, int high) {
int mid = (high + low) / 2; //取数据区间的中点 if (low > high) //递归结束条件 {
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(6) 从函数的形式看,函数分两类: ① 无 参 函 数 . 如 例 8.1 中 的 printstar 和 print_message就是无参函数.在调用无参函数 时,主调函数不向被调用函数传递数据.无参 函数一般用来执行指定的一组操作.
§8.2函数定义的一般形式 §8.2.1. 无参函数的定义一般形式
§8.3函数参数和函数的值 §8.3.1形式参数和实际参数
在定义函数 定义函数时,函数名后面括弧中的变量名称 定义函数 为"形式参数"(简称"形参 形参"); 形参 在调用函数 调用函数时,函数名后面括弧中的参数称 调用函数 为"实际参数"(简称"实参 实参"). 实参 return后面的括弧中的值()作为函数带回的 函数返回值). 值(称函数返回值 函数返回值
通过函数调用, 通过函数调用,使两个函数中的数据发生联系
关于形参与实参的说明: 关于形参与实参的说明: (1) 在定义函数中指定的形参,在未出现函数 调用时,它们并不占内存中的存储单元.只 有在发生函数调用时,函数max中的形参 才被分配内存单元.在调用结束后,形参所 占的内存单元也被释放. (2) 实参可以是常量,变量或表达式,如: max(3,a+b); 但要求它们有确定的值 有确定的值.在调用时将实参的 有确定的值 值赋给形参.
#include "stdio.h" int max( int x, int y) { int z; z=(x>y)? x : y; return z;} void main() { int a, b; puts("input two number: "); scanf("%d%d", &a,&b); printf("输入的两个数中大数是 输入的两个数中大数是:%d", max(a,b)); 输入的两个数中大数是 }
(3)在定义函数时指定的函数类型一般应该和 return语句中的表达式类型一致. return语句中的表达式类型一致. 语句中的表达式类型一致
如果函数值的类型和return语句中表达式的值不一致, 则以函数类型为准.对数值型数据,可以自动进行类 型转换.即函数类型决定返回值的类型.
找出以下程序中的错误: 找出以下程序中的错误:
多数情况下,主调和被调用函数之间有数据 传递的关系. 传递数据的方法有:
◆ ◆ ◆
参数:通过形式参数和实际参数 参数 返回值:用return语句返回计算结果 返回值 全局变量:外部变量 全局变量
例8.2调用函数时的数据传递 8.2
#include "stdio.h" int max( int x, int y) { int z; z=(x>y)? x : y; return z;} void main() { int a, b, c; puts("input two number: "); scanf("%d%d", &a,&b); c=max(a,b); printf("输入的两个数中大数是 输入的两个数中大数是:%d", c); 输入的两个数中大数是 }
写出下列程序的执行结果
#include "stdio.h" void main() { int i=1,x; x=f(i,i+1); printf("%d",x); } int f(int a, int b) { int c; c=a; if (a>b) c=1; else if (a==b) c=0; else c=-2; return(c); }
定义有参函数的一般形式为: 定义有参函数的一般形式为 有参函数的一般形式为 函数名(形式参数表列) 类型标识符 函数名(形式参数表列) { 声明部分 语句部分
传统定义举例 int add(x, y) iadd ( int x, int y) {…… }
别编译,提高调试效率 .一个源程序文件可以为多 别编译 ,
个C程序公用.
(2) C程序是以源程序文件为单位进行编译 )
的,而不是以函数为单位进行编译的.
(3)C程序的执行是从main函数开始在 )
main函数中结束整个程序的运行.
(4) 函数的定义是互相独立的.一个函数并 )
不从属于另一函数,即函数不能嵌套定义.
§8.3.2
函数的返回值
函数的返回值是通过函数中的return return语句 (1)函数的返回值是通过函数中的return语句 获得的. 获得的.
如果需要从被调用函数带回一个函数值供主调函 数使用,被调用函数中必须包含return语句.如果 不需要从被调用函数带回函数值可以不要return语 句.
§8.4 函数的调用 8.4 §8.4.1 函数调用的一般形式 8.4
函数调用的一般形式为: 函数名(实参表列) 函数调用的一般形式为: 函数名(实参表列) 如果是调用无参函数 调用无参函数,则"实参表列"可以没 调用无参函数 有,但括弧不能省略. 如果实参表列包含多个实参 实参表列包含多个实参,则各参数间用逗 实参表列包含多个实参 号隔开.实参与形参的个数应相等,类型应匹 配.实参与形参按顺序对应,一一传递数据.
(5)函数间可以互相调用,但不能调用ma )
in函数.main函数是系统调用的.
(5)从用户使用的角度看,函数有两种: ① 标准函数 标准函数,即库函数.这是由系统提供的 ,用户不必自己定义这些函数,可以直接使 用它们.应该说明,不同的C系统提供的库函 数的数量和功能会有一些不同,当然许多基 本的函数是共同的. ② 用户自己定义的函数 用户自己定义的函数.用以解决用户的专 门需要.
函数的返回值应当属于某一个确定的类型, (2) 函数的返回值应当属于某一个确定的类型, 在定义函数时指定函数返回值的类型. 在定义函数时指定函数返回值的类型.
例如:下面是3个函数的首行: 例如:下面是3个函数的首行:
int max(float x,float y) /* 函数值为整型 */ char letter(char c1,char c2) /* 函数值为字符型 */ double min(int x,int y) /* 函数值为双精度型 */ 在C语言中,凡不加类型说明的函数,自动按整型处 理.例8.2中的max函数首行的函数类型int可以省 写,用Turbo C 2.0编译程序时能通过,但用Turbo C ++ 3.0编译程序时不能通过,因为C++要求所有函数 都必须指定函数类型.因此,建议在定义时对所有函数 都指定函数类型.
第八章
本课程公共邮箱: 本课程公共邮箱: chenym.gdut@ 密码: 密码:chenyiming
例8.1 一个函数调用的简单例子
#include <stdio.h> void printstar() /*定义 定义printstar函数 函数*/ 定义 函数 { printf("* * * * * * * * * * * * * * * *\n"); } /*定义 定义print_message函数 函数*/ void print_message() 定义 函数 { printf("How do you do!\n"); } void main() { printstar(); print_message(); printstar(); }
§8.2.3 空函数
定义空函数的一般形式为: 定义空函数的一般形式为 空函数的一般形式为 函数名() 类型标识符 函数名() { } 例如: 例如: dummy( void dummy() {}
调用此函数时,什么 工作也不做.在主调 函数中写上"dum my();"表明 "这里要调用一个函 数",而现在这个函 数没有起作用,等以 后扩充函数功能时补 充上.
(3) 在被定义的函数中,必须指定形参的类 型. (4) 实参与形参的类型应相同或赋值兼容. 例8.2中实参和形参都是整型.如果实参为 整型而形参x为实型,或者相反,则按第3章 介绍的不同类型数值的赋值规则进行转换. 例如实参值a为3.5,而形参x为整型,则将实 数3.5转换成整数3,然后送到形参b.字符型 与整型可以互相通用.
#include "stdio.h" int max( float x, float y) { return void main() { float a, b, c; puts("input two number: "); scanf("%f%f", &a,&b); printf("大数是 大数是:%f", max(a,b)); 大数是 } (x>y)? x : y; }
(4)对于不带回值的函数,应当用"void"定 对于不带回值的函数,应当用"void 定 义函数为"无类型" 或称"空类型").这 义函数为"无类型"(或称"空类型").这 系统就保证不使函数带回任何值, 样,系统就保证不使函数带回任何值,即禁止 在调用函数中使用被调用函数的返回值. 在调用函数中使用被调用函数的返回值.此时 在函数体中不得出现return语句. return语句 在函数体中不得出现return语句.
定义无参函数的一般形式为: 定义无参函数的一般形式为 无参函数的一般形式为 函数名() 类型标识符 函数名() { 声明部分 语句部分 } void printstar() { int i=3; printf("打印 打印%d个星 个星:\n", i); } 打印 个星
在定义函数时要 用"类型标识符" 指定函数值的类 型,即函数带回 来的值的类型.
相关文档
最新文档