C语言程序8

合集下载

《C语言程序设计》第8章指针

《C语言程序设计》第8章指针
}
10.3.3 指针变量和数组作函数参数 数组名作形参时,接收实参数组的起始地址;
作实参时,将数组的起始地址传递给形参数组。
引入指向数组的指针变量后,数组及指向数 组的指针变量作函数参数时,可有4种等价形式 (本质上是一种,即指针数据作函数参数):
(1)形参、实参都用数组名 (2)形参、实参都用指针变量 (3)形参用指针变量、实参用数组名 (4)形参用数组名、实参用指针变量
(4)指针变量的++、--与&、*的结合
对于指针变量的++、--与&、*的结合 使用,关键要注意按照运算符的优先级和 结合性进行。
例如: int a=2, *p; p=&a;
•表达式:(*p)++,按运算符的优先级,等价于 a++。其含义为:取出指针变量p所指向的内存单 元的值(即a的值),a的值加1,送回a的内存单 元,a的值变为3,p的值未发生变化,仍然指向 变量a。
程序说明:printf("%s\n",s);语句 通过指向字符串的指针变量s,整体引
用它所指向的字符串的原理:系统首先输出s 指向的第一个字符,然后使s自动加1,使 之指向下一个字符;重复上述过程,直至遇到 字符串结束标志。
main() { char string[ ]=”I love Beijing.”; printf(“%s\n”,string); }
3.数组元素的引用 数组元素的引用,既可用下标法,也可用
指针法。
10.3.2 通过指针引用数组元素 如果有“int a [10],*p=a;” ,则: (1)p+i和a+i都是数组元素a [i]的地址。
(2)*(p+i)和*(a+i)就是数组元素a [i]。 int a [3]; a [0]——*a a [1]——*(a +1) a [2]——*(a +2)

C语言程序设计 项目八

C语言程序设计 项目八

2. fread()函数、fwrite()函数 函数、 函数 函数
将一组数据,如一个数组元素,一个结构变量的值等一次性读写,其输入输 出函数是二进制形式输入输出的函数,在输入输出中不必进行数据的转换,输入 输出速度相对较快。 读写数据块函数调用的一般形式为: 读写数据块函数调用的一般形式为: fread(buffer,size,count,fp); fwrite(buffer,size,count,fp); 说明: buffer:对于fread()来说,指的是 读入数据的存放地址; 对于fwrite来说,是要输出数 据的地址。 size读写数据时,每笔数据的大小 count: 读写数据的笔数 fp: 文件指针
for(i=0;i<10;i++,pp++) fscanf(fp,"%s%d%d%d%f",pp->name,&pp>math,&pp->englist,&pp->chinese,&pp->avg);
fread(yy,sizeof(struct stu),10,fp);
【例8-2】从键盘中输入10个学生的姓名及数学、英语、语文三门课的成绩,计算每个同 学的平均分,然后将此10个同学的姓名、三门课的成绩及平均分写入到文本文件aa.txt中。 printf("请输入十个学生的数据\n"); 程序如下: /*输入十个同学的姓名、成绩并计算每个 输入十个同学的姓名、 输入十个同学的姓名 分析:编写此题的思路是: #include "stdio.h" 同学的平均分*/ 同学的平均分 #include "process.h" (1)需要定义一个结构体数组,用于存放10个同学的姓名、三门课的成绩及平均分; for(i=0;i<10;i++,pp++) /*定义结构体 定义结构体*/ 定义结构体 (2)在键盘上读入10个同学的姓名、三门课的成绩,然后计算每个同学的平均分; 打开件aa.txt {scanf("%s%d%d%d",pp->name,&ppstruct stu 输入的数据如下: (3)将10个同学的姓名、三门课的成绩及平均分写入到文本文件aa.txt中; >math,&pp->english,&pp->chinese); {char name[10]; pp->avg=(pp->math+pp->englist+ppint math,english,chinese; >chinese)/3.0;} float avg;} pp=student; main() /*将十个同学的姓名、三门课成绩、平均 将十个同学的姓名、三门课成绩、 将十个同学的姓名 {stu student[10],*pp; 分写入到文件aa.txt中*/ 分写入到文件 中 FILE *fp; for(i=0;i<10;i++,pp++) int i; fprintf(fp,"%s %d %d %d %.1f\n",pppp=student; >name,pp->math,pp->english,pp/*以写入的形式打开文件 以写入的形式打开文件aa.txt*/ 以写入的形式打开文件 >chinese,pp->avg); if((fp=fopen("aa.txt","w"))==NULL) fclose(fp); //关闭文件 {printf("打不开文件\n"); } exit(1); }

C语言程序设计-第8章 练习题

C语言程序设计-第8章  练习题

一、单项选择题题目1标准输出设备显示器的文件流标识符是()。

a. stdinb. stdoutc. stderrd. stdio题目2表示文件结束符的符号常量EOF的值为()。

a. 0b. -1c. 1d. 127题目3假定一个磁盘数据文件占用n个字节的存储空间,则按字节进行编址的范围是()。

a. 1˜(n-1)b. 0˜(n-1)c. 0˜nd. 1˜n题目4在C语言中,为只写操作打开一个文本文件的方式为()。

b. "w"c. "r"d. "a"题目5在C语言中,文本文件的打开方式共有()。

a. 6b. 9c. 12d. 3题目6在C语言中,为读和写操作打开一个二进制文件,若文件不存在则自动建立空文件的打开方式为()。

a. "ab+"b. "w+"c. "rb+"d. "wb+"题目7从一个文本文件中读取以换行符结束的一个字符串的系统函数为()。

a. fgets()b. fputc()d. fputs()题目8向一个文本文件中写入一个字符的系统函数为()。

a. fputs()b. fputc()c. fgetc()d. fgets()题目9向一个二进制文件中写入数据的系统函数为()。

a. fputc()b. fwrite()c. fread()d. fputs()题目10从一个二进制文件中读取数据的系统函数为fread(),它的参数有()。

a. 2个b. 4个c. 3个d. 5个二、判断题题目11一个磁盘数据文件的文件名由文件主名和扩展名所组成,其中间用圆点分开。

对错题目12当向字符文件输出一个换行符时,实际将输出的是回车符或换行符。

对错题目13C语言系统中提供一个用来描述文件属性的类型标识符为FILE。

对错题目14在数据文件打开方式字符串中,字符r、w和a具有确定的含义,分别代表读、写和追加方式。

C语言程序设计(李圣良)章 (8)

C语言程序设计(李圣良)章 (8)

第8单元 文 件 (3) 关闭文件。关闭文件即表示文件使用完毕,让操作系 统撤消缓冲区。应注意,当文件使用完毕时,必须执行关闭文 件操作,否则数据有可能丢失。原因是在写文件过程中,当缓 冲区没有写满时,系统就不会将数据存到外存文件中,这时若 没有执行关闭文件操作,则关闭操作系统时数据便会丢失。若 执行了正常关闭文件操作,系统就会在撤消缓冲区之前把没有 写满缓冲区中的数据存到外存文件中,就不会造成数据的丢失。
第8单元 文
文件使用方式 "r" "w" "a" "rb" "wb" "ab" "r+" "w+" "a+"
"rb+" "wb+" "ab+"

表 8-1 文件使用方式
含义 只读,为输入打开一个文本文件 只写,为输出新建一个文本文件 追加,向文本文件尾添加数据 只读,为输入打开一个二进制文件 只写,为输出新建一个二进制文件 追加,向二进制文件尾添加数据 读写,为读/写打开一个文本文件 读写,为读/写新建一个文本文件 读写,向文本文件尾添加数据,同时可读 读写,为读/写打开一个二进制文件 读写,为读/写新建一个二进制文件 读写,向二进制文件尾添加数据,同时可读
第8单元 文 件 8.1.2 文件的基本操作
1. 文件指针变量 在缓冲文件系统中,关键的概念就是“文件指针”。对于 每一正在被使用的文件,都会在内存中开辟一个区,专门用来 存放文件的相关信息。其中包括文件的名字、文件的状态以及 文件的当前位置等信息,而这些信息都是保存在一个结构体的 变量中,该结构体类型是由系统定义的,取名为FILE。而在C 语言中,这些文件类型的声明均在“stdio.h”头文件中。

高树芳C语言程序设计--第八章

高树芳C语言程序设计--第八章

30
8.5 知识拓展
案例8-11 指针的高级应用 [案例任务] 阅读下列程序 ,分析运行结果,了解指 针的各种应用。
程序代码
31
8.5 知识拓展
相关知识:
1.有关指针的数据类型小结 2.案例说明 3.main函数的参数
32
12
8.2 指针变量
[课堂训练8-1] void swap(int *p1,int *p2) { int *t; t=p1; p1=p2; p2=t; }
1.分析下面的程序,写出运行结果。 #include <stdio.h> void main() { void swap(int *p1,int *p2); int *p1,*p2,a=6,b=8; p1=&a; p2=&b; printf(" 交换前:*p1=%d,*p2=%d\n",*p1,*p2); swap(p1,p2); printf(" 交换后:*p1=%d,*p2=%d\n",*p1,*p2); }
17
8.3 指针与数组
案例8-6 [案例任务]
冒泡排序
使用指针指向一维整型数组,使用冒泡排 序法对数组元素从小到大排序并输出。
程序代码
18
8.3 指针与数组
相关知识: 1.冒泡排序法 2.指针变量的其他运算
19
8.3 指针与数组
案例8-7 [案例任务]
逆置一维数组
使用数组名或指针变量作为函数形参与实 参,完成一维数组元素的逆置。请分析程 序运行结果,并对两个方法进行比较。
6
8.2 指针变量
案例8-2 用指针交换两整数 案例8-3 用指针比较两数大小 案例8-4 用指针参数交换两整数

C语言程序设计第四版-8-_谭浩强

C语言程序设计第四版-8-_谭浩强

产生“地址传递”的效果。
数组做函数的参数时,也是“地址传递”。 被调用函数不能改变实参指针变量的值,但
可以改变实参指针变量所指向的变量的值。
指针变量
阅读例8.2-例8.5,上机调试,观察结果,分
析掌握。
要求能够熟练地掌握指针变量及其指向的变
化过程,能够在纸上画图表达分析过程。
访问数组——指针的又一重要用途
பைடு நூலகம்
p是普通的变量 注意这两个*p1的 含义不同,前者说 明p1为指针变量, 后者表示p1所指向 的变量。
void swap(int *p1,int *p2) { int p; p=*p1; *p1=*p2; *p2=p; }
指针变量作为函数的参数
指针作实参,对应的形参是指针变量。 C语言的参数传递是“值传递”。 指针变量做参数时,由于其值为变量的地址,
例. 分析以下程序运行结果
int main() { int n1,n2; int *n1_p=&n1, *n2_p=&n2, *pointer; printf("Input n1:"); scanf("%d",n1_p); 两个指针变量交换 printf("Input n2:"); scanf("%d",n2_p); 了它们的值,也就
指针变量的重要作用之一 ——作为函数的参数,实现地址传递
例 函数调用中的值传递
int main() void swap(int p1,int p2) { void swap(int p1,int p2); { int p; int a,b; p=p1; p1=p2; p2=p; scanf("%d,%d",&a,&b); } if(a<b) swap(a,b); printf("%d,%d\n",a,b); 运行结果:a,b没有交换。 原因:C语言中,实参向形参 return 0; 传递数据采用“值传递”, } 形参单独占用内存单元,交

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语言8进制表示代码

c语言8进制表示代码C语言是一门广泛使用的编程语言,它的语法简洁易学,可以通过掌握一些基础的表示方式来编写出许多有用的代码。

其中一种重要的表示方式就是8进制表示方式。

下面我们来看看如何使用C语言的8进制表示代码。

步骤一:理解8进制在介绍如何使用C语言的8进制表示代码之前,我们需要先了解一下什么是8进制。

8进制是一种计数方式,每个数码由0至7组成,比10进制少了两个数字。

例如,数字7在10进制里表示数字7,而在8进制下则表示数字7;数字8在10进制下表示的是数字8,但在8进制下它表示的是10。

也就是说,8进制每增加一位,其值就会增加8倍。

步骤二:使用8进制表示法在C语言中,我们可以使用前缀“0”来表示8进制数,例如:在标准输出中,我们可以使用以下代码打印出8进制数的值:printf("%o",20);输出结果为:24,因为20在8进制下的值为24。

步骤三:将数字转换为8进制我们可以使用以下代码将任意数字转换为8进制形式:int num = 64;printf("8进制数为:%o",num);这里数字64在8进制下的值为100。

步骤四:使用8进制表示字符串我们也可以使用8进制表示字符串,例如:char str[] = "\x34\x30";printf("字符串为:%s",str);这里字符串"\x34\x30"实际上表示的是8进制数40,用来表示字符'0'的8进制ASCII码。

步骤五:总结使用C语言的8进制表示代码并不是一项困难的任务。

只要我们理解了8进制的基本原理,并掌握了相关转换和表示方式,并能够在编写代码的过程中熟练地应用这些知识,我们就可以很容易地使用8进制进行数据的处理和表示。

同时,使用8进制方法,可以大大减少代码的长度,提高了程序的可读性,使我们的代码更加简洁、有效。

因此,在学习C语言编程过程中,加强对8进制的学习是非常有必要的。

C语言程序设计第八章 优化学生成绩分析系统指针.ppt


C语言程序设计
1 指针与字符串(5)
1.2 使用字符串指针变量与字符数组的区别(续) 例2 分析下面程序的运行结果
main() { char *a="I Love China!";
a=a+7; printf(“%s\n",a); }
运行结果: China!
9
项目八 优化学生成绩分析系统-指针
C语言程序设计
int a,b,c;
例sc6an将f(给"%出d的,%程d"序,&修a,改&b为);使用函数指针变量定义
的c=方m式ax(a,b);
c=(*p)(a,b);
printf("a=%d,b=%d,max=%d",a,b,c);
}
max(int x,int y)
{
int z;
if(x>y) z=x;
else z=y;
指针数组,有4个元素,每个元素 都是指向整型变量指针变量
Int (*p)[4];
由4个整型变量组成的数组的指针
21
项目八 优化学生成绩分析系统-指针
#include <stdio.h> ma3in指()针数组 (2)
C语言程序设计
p[0]
11
{ 3.1 指针数组(续)
22
static int
33
a[3][4]={{11,22,33,44},{55,66,77,88},{99,110,1224,4133}};
【项目分析】
为了保存一个班的C语言成绩需要借助于一维数组,通过指针对其数 据进行操作。将本项目分成两部分,首先借助于指针对一维数组进 行访问,然后介绍一种新的排序算法—选择排序。

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

实验报告八
系(教研室):专业:年级:
实验课程:C语言程序设计姓名:学号:实验室号:1#605
计算机号:实验时间:指导教师签字:成绩:
实验8:函数(2)
一、实验目的和要求
1) 掌握函数的定义方法;
2) 掌握函数的调用及函数声明。

3) 掌握函数实参与形参的对应关系及“值传递”的方式;
4) 掌握函数的嵌套调用和递归调用方法;
二、实验内容和原理
1.输入一个英文语句,统计出其中长度不超过3的单词的个数
2.对比局部变量作为实参实现的两数交换值与交换两个全局变量的值,并说明原因.
3.用递归函数实现斐波那切数列,输出n=20的所有数
4.自选
三、实验环境
1. 硬件:PC机;
2. 软件:Windows操作系统、Visual C++ 6.0 。

四、算法描述及实验步骤
1、
#include<stdio.h>
#include<string.h>
int main()
{
int words(char s[]);
int count=0;
char s[100];
gets(s);
count=words(s);
printf("%d\n",count);
return 0;
}
int words(char s[])
{
int i,l,ilen=0,count=0;
l=strlen(s);
for(i=0;i<l;i++)
{
if(s[i]!=' ')
{
ilen++;
if(ilen<=3&&s[i+1]==' ')
{
count++;
ilen=0;
}
}
}
return (count);
}
2、
#include<stdio.h>
int x=5,y=9;
void main()
{
void swap1(int x,int y);
void swap2();
int a=4,b=8;
printf("a=%d,b=%d\n",a,b);
swap1(a,b);
printf("a=%d,b=%d\n",a,b);
printf("x=%d,y=%d\n",x,y);
swap1(x,y);
printf("x=%d,y=%d\n",x,y);
swap2();
printf("x=%d,y=%d\n",x,y);
}
void swap1(int x,int y)
{
int t;
t=x;x=y;y=t;
}
void swap2()
{
int t;
t=x;x=y;y=t;
}
3、
#include<stdio.h>
int main()
long fib(int n);
int i,n=20;
for(i=1;i<=20;i++)
{
if((i-1)%4==0)
printf("\n");
printf("%10ld",fib(i));
}
return 0;
}
long fib(int n)
{
long f;
if(n<=0)
printf("error!\n");
else if(n==1||n==2)
f=1;
else
f=fib(n-1)+fib(n-2);
return (f);
}
4.
#include<stdio.h>
int main()
{
float max(float n,float m,float p);
float a,b,c;
float maxn;
printf("please enter 3 number:\n"); scanf("%f%f%f",&a,&b,&c);
maxn=max(a,b,c);
printf("the max number is %f\n",maxn); return 0;
}
float max(float n,float m,float p)
{
float maxn;
maxn=n;
if(maxn<m)
maxn=m;
if(maxn<p)
maxn=p;
return(maxn);
五、调试过程
1、无错误
2、无错误
3、无错误
六、实验结果
1、
2、
采用变量作为实参实现的两数交换值与交换两个全局变量的值后前者增加了函数的联系渠道,带回多于一个返回值。

部分的节省了内存和执行时间。

3、
4.
七、总结
通过这次实验,掌握了简单的条件语句if和swich的使用和书写。

相关文档
最新文档