C语音 文件 实验报告

2024-09-15

C语音 文件 实验报告(精选12篇)

C语音 文件 实验报告 第1篇

实验报告

一、设计思想的简单描述:

在设计要求1中,首先要用只读方式打开文件,然后将文件中的数据读入结构体。之后再通过fopen写入方式打开一个二进制文件CLASS01_1001_15.dat,将结构体中的数据写入二进制文件中。在设计要求2中,首先根据实验要求定义三个结构体,然后将DataForLab8中的数据分别存入这三个结构体中。然后编写输出函数将三中结构体中的数据输出到屏幕上。查询函数即是将学生的某科成绩与两个端点数值比较,在区间内的即可输出。再设计要求3中,首先写一个排序函数,将学生成绩按某科成绩排序,然后将其按照和设计要求1中相类似的方法将其写入相应文件中。然后按照实验要求二中的查询方法查询某一区间内的学生。

二、程序结构及流程的简单描述:

三、实验心得体会: 在这次试验中,利用定义类型的方法定义结构体类型,可使程序变得简单,而且这样使用可以使很多复杂的指针结构简单明了。还有,结构体指针的应用,间接访问结构体中的数据,还能节省大块的空间。链表将整个数据串联在一起,可以通过第一个学生依次找到之后的学生的数据。排序我认为较难,还没有掌握清楚,还需要多加练习掌握。

C语音 文件 实验报告 第2篇

(2011-2012-1)

实验报告1

教学班级: 机械094 学号: 01 姓名:谭亮恩 课程教师:

曹瑛

实验辅导教师:

曹瑛

江西理工大学

P6-4:/*P6-4

表示第6页 第四题*/

int main(){ float r,s;r=15.5;s=2*3.14*r;

printf(“r=%4.2f,s=%f”, r, s);return 0;}

结果是:r=15.5

s=97.34

P32-3-1: /*P32-3-1

表示第6页 第四题 第一小题*/ #include int main(){ printf(“thististcbCtprogram.rTn”);return 0;} 结果是: This is C program.P32-3-2: /*P32-3-2

表示第6页 第四题 第二小题*/ #include int main(){ printf(“*abdbctr*ABCD105x46*”);return 0;}

结果是: *ABCDEF*

C,,,实验报告 第3篇

一、实验目的和要求

了解turbo c++ 3.0的基本操作方法,学会独立使用该系统 编辑、编译、连接和运行一个c程序

通过运行简单的c程序,初步了解c源程序的特点

二、实验内容和原理

1.输入并运行一个简单、正确的程序 # include void main(){ printf(this is a c programn);} 2.输入一个有错误的程序,修改错误,直到程序能正确运行,分析程序运行结果。# include void main(){int a, b, sum a=123;b=456;sum=a+b printf(sum is %dn, sum);} 3.输入并运行一个需要在运行时输入数据的程序,输入数据,观察运行结果。# include void main(){ int max(int x, int y);int a, b, c;scanf(%d, %d, &a, &b);c=max(a, b);printf(max=%d,c);} int max(int x, int y){ int z;z=y;if(x>y)z=x;return(z);}

三、实验环境 1.硬件:pc机;

2.软件:windows操作系统、turboc++ 3.0。

四、算法描述及实验步骤 1.内容1(1)启动tc++3.0,新建一个c文件;(2)输入程序1;(3)保存文件;

(4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功,再次保存文件;

(5)连接程序、运行程序,观察运行结果。2.内容2(1)启动tc++3.0,新建一个c文件;(2)输入程序2;(3)保存文件;

(4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功;(5)连接程序、运行程序,观察运行结果。3.内容3(1)启动tc++3.0,新建一个c文件;(2)输入程序2;(3)保存文件;

(4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功;(5)连接程序、运行程序;(6)输入数据,观察运行结果。

五、调试过程

1.输入后,按alt+f9编译,出现如下信息: 成功编译。

2.输入后,按alt+f9编译,出现如下信息:

经分析是由于int a, b, sum与sum=a+b俩句未加;导致。3.输入后,按alt+f9编译,出现如下信息: 经分析是由于int a, b, c句未加;导致。修改后编译结果如下:

六、实验结果 1.2.3.输入123,654运行结果如下:输入1989,1988运行结果如下:

七、总结

经过本次上机实验,我基本了解turbo c++ 3.0的操作方法,学会在该系统上编辑、编译、连接和运行一个c程序。同时也明白在编译过程中应留心一些细节问题(如一个语句结束要加“;”),也学会通过编译错误信息找出错误,并修正错误。实验名称:数据类型、函数和表达式

八、实验目的和要求 掌握c语言数据类型,熟悉如何定义整型、字符型和实型变量并赋值 掌握不同类型数据之间赋值的规律

学会使用c的有关算法运算符及表达式,特别是自加(++)和自减(--)运算符的使用 进一步熟悉c程序的编辑、编译、连接和运行的过程

九、实验内容和原理

2.输入并运行下面程序,分析运行结果。# include void main(){ char c1, c2;c1=a;c2=b;printf(%c%c, c1, c2)} 3.输入并运行下面程序,分析运行结果。# include void main(){ char c1=a,c2=b,c3=c,c4=101,c5=116;printf(a%c b%ctc%ctabcn,c1,c2,c3);printf(tb%c %c,c4,c5);} 4.输入并运行下面程序,分析运行结果。# include void main(){ int a, b;unsigned c,d;long e,f;a=100;b=-100;e=50000;f=32767;c=a;d=b;printf(%d, %dn, a, b);printf(%u, %un, a, b);printf(%u, %un, c, d);c=a=e;d=b=f;printf(%d, %dn, a, b);printf(%u, %un, c, d);} 5.输入并运行下面程序,分析运行结果。# include void main(){ int i,j,m,n; i=8;j=10;

m=++i;n=j++;printf(%d,%d,%d,%d,i,j,m,n); }

十、实验环境 1.硬件:pc机;

2.软件:windows操作系统、turboc++ 3.0。

十一、算法描述及实验步骤

(1)启动tc++3.0,新建一个c文件;(2)输入程序;(3)保存文件;

(4)编译源程序,观察屏幕上显示的编译信息,修改出现的错误,直到编译成功;(5)连接程序、运行程序,观察分析运行结果。

十二、调试过程1.经分析错误是由于printf(%c%c, c1, c2)后未加;导致。修改后运行如下: 2.

成功运行3.printf(%u, %un a, b);改成printf(%u, %un, a, b);成功运行 4.

成功运行。

十三、实验结果1.2.3.4.十四、总结篇二:c语言实验报告模板完成版 《高级语言程序设计》

学 生 实 验 报 告

专业:计算机科学与技术 学号: 姓名:

实验一 c程序的运行环境和使用方法 1.实验目的

1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。2)了解在该系统上如何编辑、编译、连接和运行一个c程序。3)通过运行简单的c程序,初步了解c程序的特点。2.实验程序清单及运行结果 课后习题1.5 编写一个c程序,输出以下信息: ************************** very good!************************** source #include int main(){ printf(**************************n);printf(very good!n);printf(**************************n);} 课后习题1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。source #include int main(){ int max(int x,int y);int a,b,c,d;scanf(%d %d %d,&a,&b,&c);d=max(a,b);d=max(d,c);printf(%dn,d);return 0;} int max(int x,int y){ int z;if(x>y)z=x;else z=y;return z;} 实验二 顺序结构程序设计 1.实验目的

1)掌握c语言的数据类型,熟悉如何定义整型、字符型和实型的变量,以及对它 们赋值的方法。

2)掌握不同类型的数据之间赋值的规律。

3)学会用c的有关算术运算符,以及包含这些运算符的表达式。4)掌握c语言中使用最多的一种语句——赋值语句的使用方法。

5)掌握scanf()函数、printf()函数的调用方法,掌握各种类型数据的输入输出的方 法,能正确使用各种格式转换符。

6)掌握字符输入输出函数getchar()、putchar()函数的调用方法。2.运行程序及填空

(一)输入并运行下面的程序,写出运行结果。#include int main(){ char c1 , c2;c1=97;c2=98;printf(?%c,%cn?, c1, c2);printf(?%d,%dn?, c1, c2);return 0;}运行结果:a,b 97,98 【思考题】若将第四行改为:int c1, c2;再使之运行,输出结果一样吗?为什么? 答:一样,因为第六行的printf输出的是%c即字符,任然将c1,c2按照ascii码字以符形式输出。

(二)程序填空:输入一个十进制整数,输出与之相应的八进制数与十六进制数。例如:输入31,输出37(八进制)和1f(十六进制)。源程序如下: #include int main(){ long n;printf(输入一个十进制整数:);scanf(%d,&n);printf(对应的八进制整数是 % o n, n);printf(对应的十六进制整数是 % x n, n);return 0;} 运行程序,输入1234567,显示结果如何? 答:输入一个十进制整数:1234567 对应的八进制整数是 4553207 对应的十六进制整数是 12d687 3.实验程序清单及运行结果 课后习题3.7 要将china译成密码。source #include int main(){篇三:c语言实验报告

实验一 c程序的运行环境和使用方法 1.实验目的

1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。2)了解在该系统上如何编辑、编译、连接和运行一个c程序。3)通过运行简单的c程序,初步了解c程序的特点。2.实验程序清单及运行结果

1.请参照本章例题,编写一个c程序,输出以下信息:。************************** very good!************************** 数*号可看出,very前面9空格,good前面„„*也是输出的一部分,别光打印very good!#include int main(){ printf(**************************n);printf(very good!n);printf(**************************n);} 2.编写一个程序,输入a、b、c三个值,输出其中最大值。#include int main(){ int a,b,c,max;scanf(%d %d %d,&a,&b,&c);if(a>b)max=a;else max=b;if(c>max)max=c;printf(%dn,max);} 实验二 顺序结构程序设计 1.实验目的

1)掌握c语言的数据类型,熟悉如何定义整型、字符型和实型的变量,以及对它 们赋值的方法。

2)掌握不同类型的数据之间赋值的规律。

3)学会用c的有关算术运算符,以及包含这些运算符的表达式。4)掌握c语言中使用最多的一种语句——赋值语句的使用方法。

5)掌握scanf()函数、printf()函数的调用方法,掌握各种类型数据的输入输出的方 法,能正确使用各种格式转换符。

6)掌握字符输入输出函数getchar()、putchar()函数的调用方法。2.运行程序及填空

(一)输入并运行下面的程序,写出运行结果。#include int main(){ char c1 , c2;c1=97;c2=98;printf(“%c,%cn”, c1, c2);printf(“%d,%dn”, c1, c2);return 0;} 【思考题】若将第四行改为:int c1, c2;再使之运行,输出结果一样吗?为什么? 答:一样,因为定义char型时已经包含了int型,且后面赋值为整形,就和赋c1,c2为int型一样。

(二)程序填空:输入一个十进制整数,输出与之相应的八进制数与十六进制数。例如:输入31,输出37(八进制)和1f(十六进制)。源程序如下: #include int main(){ long n;printf(输入一个十进制整数:);return 0;} 运行程序,输入

答:输出“4553207和12d687”3.实验程序清单及运行结果 1.要将china译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.例如,字母a后面第4个字母是e.e代替a。因此,china应译为glmre。请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别 为,’c’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’g’、’l’、’m’、’r’、’e’,并输出。

#include int main(){ } 2.设圆半径r,圆柱高h 求圆周长c1、圆面积sa、圆球表面积sb、圆球体积va、圆柱体积vb。用scanf输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。pi=3.14 #include #define pi 3.14 int main(){ float r,h,c1,sa,sb,va,vb;char c1,c2,c3,c4,c5;c1=c;c2=h;c3=i;c4=n;c5=a;printf(%c%c%c%c%cn,c1+4,c2+4,c3+4,c4+4,c5+4);return 0;scanf(%f %f,&r,&h);c1=2*pi*r;sa=pi*r*r;sb=4*pi*r*r;va=(4.0/3)*pi*r*r*r;vb=sa*h;printf(c1=%.2fnsa=%.2fnsb=%.2fnva=%.2fnvb=%.2fn,c1,sa,sb,va,vb);} 3.输入一个华氏温度,要求输出摄氏温度。公式为 c=5(f-32)/9 输出要求有文字说明,取位2小数。

c语言实验报告 第4篇

实验一 上机操作初步和简单的C程序设计

一、实验目的1、熟悉C语言运行环境Turbo C++3.02、会简单的程序调试

3、熟悉C语言各种类型数据的输入输出函数的使用方法

4、掌握顺序结构程序设计

二、实验内容

1、上机运行本章3个例题,熟悉所用系统的上机方法与步骤。(习题1.7)

2、编写一个C程序,输入a、b、c 3个值,输出其中最大者。(习题1.6)

3、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。注意:在Trubo C++ 3.0中不能输入汉字,只能输入英文或拼音。(习题4.8)

4、运行如下程序,写出运行结果。第一┆范文网整理该文章,版权归原作者、原出处所有...#include

void main()

{

int a=1,b=2;

a=a+b;b=a-b;a=a-b;

printf(“%d,%dn”,a,b);

}

三、实验步骤与过程

C语言实验报告 第5篇

第1次实验: 时间 2010-9-15

项目名称:创建第一个C语言程序

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0

实验程序:

1、单击“开始”“程序”“Microsoft Visual Studio 6.0”“Microsoft Visual C++ 6.0”,打开VC++。

2、在菜单中选择“文件”“新建”,在“工程”选项卡中选择“Win32 Console Application”,输入一个名称,点“确定”,新建一个新的工程。

3、再选择“文件”“新建”命令,在“文件”选项卡中选择“C++ Source File”,输入一个

名称,点“确定”,新建一个C++源文件。由于C++全面支持C,因此可以在此输入C语言的源代码,进行实验。

4、在代码框中输入如下代码:

#include

void main()

{

int a,b,sum;

a=123;b=456;

sum=a+b;

printf(“sum is %dn”, sum);

}

5、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中

选择“构建”最后在“编译”中选择“执行”。

实验结果:

sum is 579

讨论:本实验让我们了解了如何创建一个C语言的控制台应用程序,并学会了C语言程序的基本构架和个别特殊语句如“main”“printf”等。

实验地点:3B-20

3第2次实验:时间:2010-10-6

项目名称:顺序结构程序设计实验

(书89页4.9题,先把题抄下来)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0

实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下:

(自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。

实验结果:„„

讨论:„„

实验地点:3B-20

3第3次实验:时间:2010-10-27

项目名称: 选择语句switch的使用

(书111页5.6题,先抄题)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下:

(自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。实验结果:„„ 讨论:„„ 实验地点:3B-20

3第4次实验:时间:2010-11-17 项目名称:循环语句for的使用(书129页6.1,先抄题)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下:

(自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行” 实验结果:„„ 讨论:„„

实验地点:3B-20

3第5次实验:时间: 2010-12-8 项目名称: 数组的应用(书134页例题7.3,先抄题)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下:(自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行” 实验结果:„„ 讨论:„„

实验地点:3B-20

3第二学期实验:

第1次实验: 时间 2011-2-25 项目名称:编写函数

(在主函数中输入两个数,分别调用四个自定义函数,实现两个数的加、减、乘、除并输出结果。)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

6、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下: #include void main(){

int add(int x,int y);int sub(int x,int y);int mul(int x,int y);float div(int x,int y);int c,a,b;float d;

scanf(“%d,%d”,&a,&b);c=add(a,b);

printf(“%d+%d=%dn”,a,b,c);c=sub(a,b);

printf(“%d-%d=%dn”,a,b,c);c=mul(a,b);

printf(“%d*%d=%dn”,a,b,c);

d=div(a,b);printf(“%d/%d=%fn”,a,b,d);}

int add(int x,int y){

return x+y;

}

int sub(int x,int y){}

return x-y;

int mul(int x,int y){} {

return x*y;

float div(int x,int y)

return(float)x/(float)y;

}

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。实验结果:„„ 讨论:„„。

实验地点:3B-20

1第2次实验:时间:2011-3-11 项目名称:指针的应用(书278页10.3,先抄题)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下:(自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。实验结果:„„ 讨论:„„

实验地点:3B-20

3第3次实验:时间:2011-4-8

项目名称:顺序结构程序设计实验(书318页11.3题,先把题抄下来)

仪器设备:电脑一台,操作系统WindowsXP,开发环境Visual C++ 6.0 实验程序:

1、打开VC++6.0,新建一个C++源程序,在代码窗口输入程序如下:

(自己写代码)

2、编译、连接、运行:在“编译”中选择“编译”,没有错误和警告以后,在“编译”中选择“构建”最后在“编译”中选择“执行”。实验结果:„„ 讨论:„„

实验地点:3B-203

9.1

#include

#define S(A,B,T)T=A;A=B;B=T void main(){} 9.6

#include #define PR printf #define NL “n”

int a,b,t;

scanf(“%d,%d”,&a,&b);S(a,b,t);

printf(“%d,%dn”,a,b);

#define F “%6.2f”

#define F1 F NL #define F2 F F NL #define F3 F F F NL void main(){

float a,b,c;a=1;b=2;c=3;PR(F1,a);

PR(F2,a,b);PR(F3,a,b,c);}

作业:

#include

#include

void main(){

void fun1(float a,float b, float c);void fun2(float a,float b ,float c);void fun3(float a,float b, float c);float a,b,c,disc;

scanf(“%f%f%f”,&a,&b,&c);disc=b*b-4*a*c;if(disc>0)fun1(a,b,c);else if(disc==0)fun2(a,b,c);else

fun3(a,b,c);}

void fun1(float a,float b,float c){

float d=b*b-4*a*c;float x1,x2;

x1=(-b+sqrt(b*b-4*a*c))/(2*a);x2=(-b-sqrt(b*b-4*a*c))/(2*a);printf(“%f,%fn”,x1,x2);}

void fun2(float a,float b,float c){

float d=b*b-4*a*c;float x1,x2;

x1=x2=(-b)/(2*a);

printf(“%f,%fn”,x1,x2);}

void fun3(float a,float b,float c){

printf(“此函数无解”);} P278

#include void main(){void aa(int x[],int n);int i,a[10];

for(i=0;i<10;i++)scanf(“%d”,&a[i]);

printf(“交换前:n”);

for(i=0;i<10;i++)printf(“%d,”,a[i]);printf(“n”);aa(a,10);

printf(“交换后:n”);for(i=0;i<10;i++)

printf(“%d,”,a[i]);printf(“n”);

}

void aa(int x[],int n){

int

temp,max=x[0],min=x[0],max_n=0,min_n=0,i;//假设第一个数是最大和最小的数,那么max,min的下标就=0for(i=1;i

max=x[i];max_n=i;}

if(min>x[i]){min=x[i];

min_n=i;

}}

if(min_n!=0){temp=x[0];x[0]=x[min_n];

x[min_n]=temp;

}

if(max_n!=n-1){temp=x[n-1];x[n-1]=x[max_n];x[max_n]=temp;

}

} eee:

#include

void main(){void jiaohuan(int *pt1,int *pt2);int a,b;

scanf(“%d,%d”,&a,&b);printf(“n交换前:n”);printf(“a=%d,b=%dn”,a,b);jiaohuan(&a,&b);printf(“n交换后:n”);printf(“a=%d,b=%dn”,a,b);

}

void jiaohuan(int *pt1,int *pt2){int temp;temp=*pt1;*pt1=*pt2;*pt2=temp;

}

习题11.3 方法一: #include void main(){int i;

struct student{int num;

char name[10];int score[3];

}stu[5]={{101,“A”,50,60,80},{102,“B”,9

0,67,45},{103,“C”,30,40,50},{104,“D”,90,80,70},{105,“E”,60,70,80}};

printf(“NUM

NAME SCOREn”);for(i=0;i<5;i++)

printf(“%4d%8s%8d,%2d,%2dn”,stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);

}

方法二 : #include void main(){int i;

struct student{int num;

char name[10];

int score[3];}stu[5];for(i=0;i<5;i++){

printf(“

学号:”);scanf(“%d”,&stu[i].num);printf(“姓名:”);scanf(“%s”,&stu[i].name);printf(“成绩

”);scanf(“%d,%d,%d”,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);}printf(“NUMNAME SCOREn”);for(i=0;i<5;i++)

c语言实验报告 第6篇

(注意:红字不用抄写,其它必须抄写。实验纸不够用写反面。)

一、实验内容

if语句、ifelse语句、ifelse if语句的练习

二、重点难点

分析题目,正确应用相应的选择语句

三、实验目的掌握if语句、ifelse语句、ifelse if语句的简单用法

四、实验要求

根据题目,编写程序并在vc6.0开发平台运行,查看运行结果是否与期望一致

五、实验题目

输入三角形的三边边长,判断并输出,说明三角形是等边、等腰、直角、一般三角形。

六、实验过程

1.画流程图

2.编写完整的程序

3.写出实验程序运行结果

七、实验总结:(模仿着写三行文字即可)

c语言实验报告 第7篇

2、求圆环的面积。(函数的嵌套调用;定义求圆的面积和圆环面积实现)#include #define PI 3.1415926 float area_ring(float x,float y);float area(float r);void main(){ float r,r1;printf(“input two figures:n”);scanf(“%f,%f”,&r,&r1);printf(“area_ring is %fn”,area_ring(r,r1));

} float area_ring(float x,float y){ float c;c=fabs(area(x)-area(y));return(c);} float area(float r){ return(PI*r*r);}

3、设计求n!的函数(分别使用连乘和递归法)再调用函数求x!-y!+z!。递归

#include int fac(int n){ int i,t=1;for(i=1;i<=n;i++)

t*=i;return t;} void main(){ { unsigned int n;printf(“input a unsignded interger number:n”);scanf(“%d”,&n);printf(“%d!=%10ldn”,n,fac(n));} {

模拟文件系统实验报告 第8篇

实验

告姓名:XX 班级:软件工程110x 学号:201126630xxx

一、名称

操作系统大型试验。

二、目的

用C++编写出一个简单的模拟文件系统,实现目录的添加、删除、重命名,文件的添加、删除、重命名、文件和目录、文件的拷贝。

三、要求

开发工具:word,vc win32api 1.设计和实现一个简单的文件系统,要求包括目录、普通文件和文件的存储 2.文件系统的目录结构采用类似Linux的树状结构; 3.要求模拟的操作包括:

a)目录的添加、删除、重命名; b)目录的显示(列表)

c)文件的添加、删除、重命名 d)文件和目录的拷贝

4.用户进入时显示可用命令列表;用户输入help时显示所有命令的帮助文档; 输入某个命令+?时显示该条命令的使用说明

5.用户输入exit时退出该系统 6.实验实现基于windows平台; 7.实验开发语言可以选用C/c++等

四、设计

1.主要思路说明

本模拟系统通过一个大小固定的数组要代表物理盘块,假设共有1024块,新增目录占一块,新增文件占一块,文件中可输入内容,内容假设定义为5个字符占一块,超出则应新申请空间。模拟物理盘块的数组中,数组内容为-99代表改物理盘块内容为空,可使用,其他数字均代表该物理盘块被占用,其中-3代表是占用文件的末结点,其他整数代表是文件内容的下一个寻址下标,另有一个string类型的数组来存储内容,模拟文件写入了对应下标的物理盘块中。设置了一个全局指针指向根结点,一个全局指针指向当前操作目录。搜索空白物理盘块时采用顺序搜索物理盘块数组。存储形式主要采用类似二叉树结构,如目录为根,目录下的第一个文件或目录存在根的子节点,目录下的其他文件或目录存在第一个文件或目录的兄弟节点,以此类推。

本程序仅seperate()函数使用现成代码,此函数功能为将输入命令串分离,仅仅起到美观作用,其余所有代码均为原创!

2.申优功能:

1)能实现动态增长,即当输入文件的内容大小大于分配的模拟物理盘块时系统能够自动寻找空物理盘块并分配,将超出的内容保存在新的物理盘块中,若超出模拟磁盘大小,则超出部分不保存且返回提示。

2)能实现级联删除,即当删除目录(文件夹)时,目录下的所有内容也应当删除并正确释放物理盘块空间。

3)能实现目录的复制,即复制目录时(文件夹)时,该目录下的所有文件和目录也应准确复制至目标目录中,并正确分配物理盘块空间。3.主要函数和类的定义

1)主要函数定义

#define show_bnum 20

//显示物理盘块的块数

#define block_size 1024

//物理盘块块数 int block[block_size];

//假设有block_size块物理盘块 string content[block_size];//存放文件内容 int Msize=5;

//此处为模拟磁盘大小为输入5个字符 fnode *root=new fnode(“WP:”,0,0);

//设置根目录 fnode *current_path=new fnode();

fnode *seek_flag=new fnode();

fnode *cp_flag=new fnode();

void initialize();

int seekTarget(string name);

int seek_log(string name);

void delete_node(string name);

int freeblock(fnode *);

int seekfreeblock();

void show_current_path();

void add_file(string name,int t);

void show_curpath_all();

void rename_file(string Oname,string Nname);void seperate();

void cd();

void add_File();

void add_Log();

void delete_file();

void show_memory();

void re_name();

void help();

void show_content();

void write_file();

void Clear_();

void Exit();

void cp();

void cp_log(fnode *target,fnode *source);void cp_file(fnode *target,fnode *source);void cp_node(fnode *target,fnode *source);int find_target_log();

int calculate_logsizeMain(fnode *);

int calculate_logsize(fnode *);2)文件节点类的定义: class fnode {

public:

//当前路径 //作为查找标志 //作为复制的位置标志 //初始化 //搜索文件或目录 //搜索目录 //删除节点 //释放物理盘块 //搜索可用物理盘块 //显示当前路径 //增加目录、文件 //显示当前目录下的所有文件//重命名 //分离命令 //进入目录 //增加文件功能入口 //增加目录功能入口 //删除文件或目录功能入口 //显示物理盘块占用情况 //重命名功能入口 //查看帮助 //查看文件内容 //写文件 //清屏 //退出 //复制功能入口 //复制目录 //复制文件 //复制节点 //找到复制的目标目录 //计算目录大小

string filename;

//文件名

int type;

//文件类型,1为普通文件,0为目录文件

fnode *parent;

//父节点

fnode *child;

//子节点

fnode *brother;

//兄弟节点

int block_num;

//表示占用的物理盘块块号

int isBro;

//表示是否是在同级目录下,0表示不是,1表示是

int isCld;

//是否为目录下第一个节点,1表示是,0表示不是

fnode()

//初始化

{

type=-1;

parent=NULL;

child=NULL;

brother=NULL;

block_num=-1;

isBro=0;

isCld=0;

}

fnode(string n,int t,int b)

//根节点初始化

{

type=t;

filename=n;

parent=NULL;

child=NULL;

brother=NULL;

block_num=b;

block[block_num]=-3;

isBro=0;

isCld=0;

}

fnode(fnode *p,string name,int t,int b)//文件节点初始化

{

parent=p;

filename=name;

type=t;

child=NULL;

brother=NULL;

block_num=b;

block[block_num]=-3;

isBro=0;

isCld=0;

}

void copy(fnode *cp)

//拷贝函数

{

filename=cp->filename;

type=cp->type;

parent=cp->parent;

child=cp->child;

brother=cp->brother;

block_num=cp->block_num;

}

};4.命令:

命令 echo md del cd cp dir ren typ wrt mem cls exit

解释

echo命令可以在当前目录下创建一个文件,具体格式:echo+name md命令可以在当前目录下创建一个目录文件,具体格式:md+name del命令可以在当前目录下删除一个已存在的文件或目录(支持级联删除),具体格式:del+name

cd命令可以进入下一级目录或返回上级目录、根目录,具体格式:cd+name或cd+.或cd+..cp命令可以复制当前目录下一个指定的文件或目录至指定的目录,具体格式:cp+name+road

dir命令可以显示当前目录下的所有文件和目录,具体格式:del ren命令可以重命名一个存在于当前目录下的文件或目录,具体格式:ren+name +new name typ命令可以查看当前目录下一个文件的内容,具体格式:typ+name wrt命令可以在当前目录下写内容至一个已存在的文件,具体格式:wrt+name +content mem命令可以查看模拟物理盘块的使用情况,具体格式:mem cls命令为清屏命令,具体格式:cls exit命令为退出命令,具体格式:exit

五、关键技术流程图及说明

提示:若图中文字无法看清,可用Micorsoft Visio打开压缩包下“部分程序流程图”文件夹的绘图文件查看。

1.增加文件或目录(此功能比较简单,流程图写的较详细就不做说明):

2.删除目录(实现级联删除):

说明:删除目录时删除文件和删除目录本身放在同一个函数中,删除目录下的所有文件放在freeblock函数里,这样比较好处理。下面给只给出递归函数的流程图。

3.将内容写入文件(实现动态增长):

说明:图中Msize为模拟规定的文件块字符串大小,比如Msize=5,那么一个物理盘块只能存5个字符,超出则要申请新的空间。主要采用双重循环方法写入,外层循环为需要的块数,内层循环为Msize,用string累加字符串内容,内层循环退出后新申请一个空间并将对应下标赋给上一个物理盘块数组,再将对应内容存入content(为string类型的数组,模拟存储内容)数组中,直至退出外层循环。

4.复制目录:

说明:这里和删除目录一样,写了两个复制函数,这样写同样因为递归调用是比较方便,第一个函数传入参数为目标目录指针和被复制的目录的指针,第一个函数里新建了一个阶段复制被复制的目录的内容,然后将新建节点的子节点和被复制目录的子结点传入下一个递归调用函数(因为目录的内容存于目录的子节点,与兄弟节点无关),第二个函数就是递归调用函数cp_node,下面就只给出cp_node的流程图(复制之前同样进行了路径的判误操作,内存大小的判断操作,是否重名的判断操作,被复制目录是否存在判断操作,这些操作在递归函数之前完成,所以下面的递归函数不体现这些操作)。

六、运行结果

1.主界面展示:

图:主界面展示

2.help命令展示:

图:help命令展示

3.echo命令展示:

图:echo命令展示

4.del命令展示:

图:del命令展示-普通删除

说明:创建了目录log1,在log1中创建一系列文件和目录,磁盘使用情况显示已分配,实用del删除命令后查看磁盘分配证明级联删除是可靠的。

图:del命令展示-级联删除 5.md命令展示:

图:md命令展示

6.cd命令展示:

说明:图中展示了cd+name、cd+.、cd+..三种cd命令的使用和判别情况。

图:cd命令展示

7.dir命令展示:

图:dir命令展示

8.typ命令展示:

图:typ命令展示

9.ren命令展示:

图:ren命令展示

10.wrt命令展示:

图:wrt命令展示 说明:此处为了实验方便,将磁盘大小限定为5,每块磁盘输入的字符数限2,输入的内容***899需要9块磁盘块,而磁盘块为5,根目录占用一块,只能输入4块大小的内容,即11223344,所有文件file只写入了11223344。

图:wrt动态增长展示

11.mem命令展示:

图:mem命令展示

12.cls命令展示:

图:cls命令展示-1

图:cls命令展示-2

13.cp命令展示:

说明:图中根目录(WP:)下创建了目录a(md a)、目录b(md b),在a目录下创建了b目录(md b),在b目录中创建了文件a(echo a)、目录c(md c),文件a中输入1111122222(wrt a 111112222)内容代表占了两块物理盘块(程序中Msize模拟大小,设为5个字符了),再进入目录c(cd c),c中先创建目录f(md f)再创建文件g(与之前创建顺序不同说明程序在不同情况下能正常运行),在g中输入5个3,5个2,5个1(wrt g ***)代表占用3块物理盘块空间,再返回目录a(cd.cd.),将目录a下的目录b复制给目录WP下的目录c(cp b WP:c),再将目录a中的目录b删除(del b证明的确是复制而非简单指针指向),进入WP下的目录c查看刚复制的内容(dir)。物理盘块使用情况中第一个-3为根目录占用,第二个-3是目录a,第三个-3是目录c,接下来的8个-99是目录a中原目录b占用的空间(此处证明删除是可靠的),图中显示目录c中确实成功复制了目录b及目录下的所有内容(使用dir命令查看)。

图:cp命令展示 14.exit命令展示:

图:exit命令展示

15.综合展示:

说明:echo a在根目录(WP:)下创建了文件a,md b在根目录(WP:)下创建了目录b,dir显示根目录下的所有文件和目录,wrt a aaaaabbbbbccccc在文件a中输入了一串内容,typ a显示文件a中的内容,cd b进入目录b,md a在目录b下创建了目录a,cd a进入目录a,cd.返回目录b,cd.返回根目录WP:,ren b newname将目录b重命名为newname,mem显示内存情况,第一个-3代表根节点占用,第二个3代表文件a占用且下一块盘块下标为3,第三个-3代表目录b占用,之后的4代表被文件a占用且的下一块盘块的寻找下标为4,下一个-3代表文件a的末盘块,下一个-3代表目录b内的目录a占用,del a在根目录WP:下删除文件a,mem查看物理盘块实验情况,图中显示原文件a占用的内存空间已经变为-99,代表成功删除a并释放磁盘空间(-99代表磁盘空间空闲可用),dir显示根目录WP:下所有文件和目录,显示只有newname,则证明重命名和删除操作是成功的。

图:综合展示

七、心得体会和调试中遇到的问题及解决办法

编写调试过程中遇到许多问题,一类是指针指向空还继续操作造成程序停止运行,经检查后修改正确,一类是逻辑上出现错误导致级联删除或者目录复制出错,经改正后成功实现。

主要的难点在于兄弟结点和子结点的处理,所以再程序中引入了isBro这个标志位来判断是否是兄弟结点即与父节点是否在同级目录,若不在同级目录则父节点为真父节点(是指向本目录而非本目录中上个文件)。还有一个难点是在进行递归调用删除或复制目录时发现处理目录和目录下的内容不太合适放在同一个递归程序中,所以单独写了两个函数处理目录的复制或删除,然后对应两个递归程序处理目录下的所有内容。实验总结及有待改进的问题。

因为时间比较紧张,在几门考试中抽空写了这个小程序,所以并没有实现存盘,另因为对输入命令字符串的处理上有点瑕疵,所有在写文件内容中只能写入连续的字符串(中间不能插入空格),否则会被判定为命令输入错误,并且只实现了文件的写入,不能修改或插入,有待改进。没有实现目录树的展示,只能显示目录下所有文件,有待改进。但相信时间再充裕一些这些小问题都能很好地解决。

八、源代码

c语言实验报告实验4.doc 第9篇

1、实验目的、要求

(1)C语言表示逻辑量的方法。

(2)学会正确使用逻辑运算符和逻辑表达式。

(3)熟悉掌握if语句和switch语句。

(4)掌握简单的算法及程序调试。

2、实验内容:

(1)输入程序并运行,观察运行结果并分析。

#include

int main()

{int a=1,b=3,c=5,d=4,x;

if(a

If(c

Else „„„„„„„„„„„„„„„„„„„„„„„„2

If(a

If(b

Else x=3;„„„„„„„„„„„„„„„„„„„„„„„„4

Else x=6;„„„„„„„„„„„„„„„„„„„„„„„„2

Else x=7;„„„„„„„„„„„„„„„„„„„„„„„„1

printf(“x=%dn”,x);

Return(0);}

实验前分析:因已知:A,B,C,D分别为1,3,5,4,故可知只有A

(2)、编写程序:

Y=X(X<1);Y=2X-1(1==10).要求用SCANF输入X的值,输出Y的值。

程序编写如下:

#include

Int main()

{int x,y;

Scanf(“%d”,x);

If(x<1)y=x;

If(x>=1&&x,10)y=2*x-1;

If(x>=10)y=3*x-11;

Printf(“%d”,y);

Return(0);}

进行检验,发现程序有错误,无法运行。

将程序改为:

#include

Int main()

{int x,y;

Scanf(“%d”,x);

If(x<1)y=x;

Else if(x>=1&&x<10)y=2*x-1;

Else if(x>=10)y=3*x-11;

Printf(“%d”,y);

Return(0);}

实验分析:

1、在if语句中,要注意IF和ELSE的配合使用,不能单独使用IF。

2、此程序中还应注意if语句的嵌套和各层之间的逻辑关系。

3、再输入该程序时,涉及到乘法运算的表示,应注意计算机语言与书面语言的区别,在C语言中,*表示乘法运算。

在程序中加入clrscr()运算符,清空遗留数据:

#include

Int main()

{int x,y;

Scanf(“%d”,x);

Clrscr();

If(x<1)y=x;

Else if(x>=1&&x<10)y=2*x-1;

Else if(x>=10)y=3*x-11;

Printf(“%d”,y);

Return(0);}

运行该程序,得到预期结果,但输入数据被清除;将clrscr()移动到scanf之前。再次运行,得到了预期的输入和输出数据,故可知,clrscr()函数的作用是清楚该语句之前的所有的输出的数据和输入的数据。以后用此语句时要注意输入位置。

(3)补足程序并运行。

输入两个数,将较小者输出,应用条件运算符。

#include

Int main()

{int a, b,min;

Printf(“n please input two numbersn”);

Scanf(“%d%d”,&a,&b);

Min=min(a,b);

Printf(“min=%d”,min);

Return(0;)}

运行该程序,显示程序错误,无法输出结果。

将程序改为:

#include

Int main()

{int a, b,min;

Printf(“n please input two numbersn”);

Scanf(“%d%d”,&a,&b);

Min=(a>b?b:a);

Printf(“min=%d”,min);

再次运行程序,屏幕上显示“please input two numbers”,输入两个数字6和9,输出数字为6,再换多组数字,结果与与其相同,可知实验成功。

实验分析:输入比较两数大小的函数时,不能想当然,如认为“min=min(a,b)”就是输出较小数的函数,而应使用三目运算符(A?B:C)来表示。

(5)给出一个百分制成绩,要求输出成绩等级A,B,C,D,E:90分以上为A,80——89分为

B,70——79分为C,60——69分为D,60分以下为E。

1、分别用IF和SWITCH语句来实现。

2、输入成绩为大于100分或小于0分时,显示出错成绩,程序结束。

用IF函数表示:

#include

Int main()

{int a;

Printf(“n please input your scoren ”);

Scanf(“%d”,&a);

If(a>=90&&a<=100)printf(“A”);

Else if(a>=80&&a<=89)printf(“B”);

Else if(a>=70&&a<=79)printf(“C”);

Else if(a>=60&&a<=69)printf(“D”);

Else if(a>=0&&a<=59)printf(“E”);

Else printf(“data error”);

Return(0);}

检查无错误,运行程序,无论输入数值为多少,输出结果均为“data error”。

将程序改为:

#include

Int main()

{int a;

Printf(“n please input your scoren ”);

Scanf(“%d”,&a);

{If(a>=90&&a<=100)printf(“A”);

Else if(a>=80&&a<=89)printf(“B”);

Else if(a>=70&&a<=79)printf(“C”);

Else if(a>=60&&a<=69)printf(“D”);

Else if(a>=0&&a<=59)printf(“E”);

Else printf(“data error”);}

Return(0);}

即在if函数外套一组大括号,使之成为一个语句。再次输入数据,得到正确结果。实验分析:

1、注意if和else的配套使用,不能遗漏。

2、逻辑运算符&&表示“并且”,除此之外,“!”表示“非”,“||”表示“或”,以后使用注

意区分。

3、使用switch语句:

#include

{int a,b;

Printf(“n please input your scoren”);

Scanf(“%d”,&a);

If(a<=100&&a>=0)

{b=a/10;

Switch(b)

{case 10 printf(“A”);break;

Case 9 printf(“A”);break;

Case 8 printf(“B”);break;

Case 7 printf(“C”);break;

Case 6 printf(“E”);break;

Case 5 printf(“E”);break;

Case 4 printf(“E”);break;

Case 3 printf(“E”);break;

Case 2 printf(“E”);break;

Case 1 printf(“E”);break;

Case 0 printf(“E”);break;

Default printf(“data error”);}}

Else printf(“data error);

Return(0);}

运行程序,显示程序有误,经检验,错误为case语句后没有加冒号,加上后,限制结果与预期相同。

实验改进:该程序中,反复输入case语句,效率低下,可将条件相同的情况进行合并,进行简化,变成如下形式:

#include

Int main()

{int a,b;

Printf(“n please input your scoren”);

Scanf(“%d”,&a);

If(a<=100&&a>=0)

{b=a/10;

Switch(b)

{case 10:Case 9 :printf(“A”);break;

Case 8 :printf(“B”);break;

Case 7 :printf(“C”);break;

Case 6 :Case 5 :Case 4 :Case 3 :Case 2 :Case 1 :Case 0:printf(“E”);break;Default printf(“data error”);}}

Else printf(“data error);

Return(0);}

运行后,得到相同的结果,故简化成功。

实验分析:此实验中,应注意break语句的使用,不能遗漏;case语句应用大括号括住,表示整体的使用;条件允许可以对程序进行适当的简化,提高运算效率;区分IF和SWITCH函数的共性与区别,提高对两者的认识。

实验心得:

1、注意IF语句的使用规则,要与ELSE搭配使用,掌握了多层IF函数的使用方法。

2、掌握了关系运算符与逻辑运算符“与”“或”“非”的使用法方法,“&&”“||”“!”。

3、注意区分数学表达语句与计算机语句的区别,了解计算机语句的特点。

4、必要时可以利用辅助设计语句对程序进行改进,或对程序进行简化,便于加深理解,方

便操作。

C语言实验报告要求 第10篇

1.指导书程序只是例子,在例程基础上自己重新设计并实验

2.实验报告内容除了对实验内容总结以外,还需对实验相关在课本

内容总结

3.写出自己在心得体会

C语言实验报告(一) 第11篇

一、实验题目:顺序结构

二、实验目的:(略)

三、实验内容

1.程序验证(略)

2.程序设计

1)编写程序,已知圆半径radius=1.25,求圆周长和面积。

源代码:运行结果:

2)编写程序完成单个字母的大小写转换。

源代码:运行结果:

3)任意从键盘输入一个三位整数,要求正确分离出它的个位、十位和百位数,并分别在屏幕上显示。

C语言实验报告格式 第12篇

一.实验目的二.实验重点

三.实验难点

四.实验内容

1.程序清单:

#include“stdio.h”

main()

{……}

2.调试过程:error(s), 3 warning(s)

(1)错误位置……,错误原因……

(2)警告位置……,警告原因……

3.运行结果

……

五.实验小结

……

姓名:xxx

上一篇:老年专科护士培养简章下一篇:高中数学教学计划表