1、实验一 C程序集成开发环境实验一 C程序集成开发环境一、实验目的l 1. 熟练掌握Windows操作系统下Visual C+6.0集成开发环境,了解DOS操作系统下Turbo C 2.0的基本操作方法。l 2. 熟悉C程序编辑、编译、连接和运行程序的基本过程。l 3. 了解C程序常见的两类语法错误(Error/Warning)及修改方法。实验一 C程序集成开发环境二、实验内容【题目1-1】熟悉Visual C+6.0集成开发环境的使用及调试方法,并设计简单的求和程序,以计算两个整数的和值。1.测试数据测试数据输入:1234,5678输出:69122.题目分析题目分析(1)利用scanf函数,从
2、键盘输入两个整数,并存放于指定变量a,b中。(2)用户自定义Sum函数,将a,b变量的内容传入该函数的形参x,y中。(3)调用Sum函数,并用printf函数将和值输出。实验一 C程序集成开发环境二、实验内容3.参考代码参考代码#include int Sum(int x,int y) int z; z=x+y; return z;main() int a,b; scanf(“%d,%d”,&a,&b); printf(“Sum is %dn”,Sum(a,b);实验一 C程序集成开发环境4操作过程操作过程(1)Visual C+6.0集成开发环境启动Visual C+6.0Visual C+
3、6.0的启动,可以使用菜单操作,选择开始菜单-所有程序-Microsoft Visual Studio 6.0- Microsoft Visual C+ 6.0。启动后的界面见图1-1所示实验一 C程序集成开发环境编辑操作编辑操作选择“File-new”菜单,如图1-2所示。在出现的“New”对话框中选择“Files”选项卡,再在列表中选择“C+ source File”,注意在右边“File”中填写文件名,比如Test.c,在“Location”中填写源程序文件存放的位置,比如将Test.c存放在E盘。参见图1-3。实验一 C程序集成开发环境编辑操作编辑操作选择“File-new”菜单,如图
4、1-2所示。在出现的“New”对话框中选择“Files”选项卡,再在列表中选择“C+ source File”,注意在右边“File”中填写文件名,比如Test.c,在“Location”中填写源程序文件存放的位置,比如将Test.c存放在E盘。参见图1-3。实验一 C程序集成开发环境编辑操作在文件编辑窗口输入源程序,如图1-4。实验一 C程序集成开发环境 编译操作 选择Build-Compile命令,编译源程序Hello.c,出现提示窗口,单击是(Y)按钮,如图1-5所示。实验一 C程序集成开发环境 连接操作 选择Build-Build Hello.exe 命令,进行连接操作,如果没有错误,
5、则显示Hello.exe - 0 error(s), 0 warning(s),生成了可执行文件Hello.exe。 运行程序 选择Build-Execute Hello.exe命令,可以运行Hello.exe程序,键盘输入1234,5678,则输出程序运行结果,如图1-6。 退出实验一 C程序集成开发环境(2)调试与跟踪)调试与跟踪 打开文件 打开已经保存的源程序文件,可以选择File-Open命令。如果在上一小节第(3)步中已经创建了工作区,则在文件类型中选择Workspaces类型,文件名选择Hello,如图1-7所示。实验一 C程序集成开发环境如果没有创建工作区,则在文件类型中选择C+
6、 Files类型,文件名选择Hello,如图1-8所示。实验一 C程序集成开发环境错误提示及修改如果是普通的语法错误,例如在程序int a, b语句中,缺失了“;”,则在执行Build-Compile命令后,会给出错误原因error C2146: syntax error : missing ; before identifier scanf,用户可以在该错误上按鼠标右键,在弹出菜单中选择Go To Error/Tag,转到错误语句上进行修改,如图1-9。实验一 C程序集成开发环境对于函数定义错误,例如在定义函数名时,将函数定义为int Summ(int x,int y),在执行Build-C
7、ompile命令,只会给出警告提示,但是在执行Build- Build Hello.exe 命令命令后,则会给出错误提示Hello.obj : error LNK2001: unresolved external symbol _Sum,如图1-10所示。实验一 C程序集成开发环境单步跟踪如果用户希望单步执行程序,以考察执行效果,可以单击键盘F10按键,每次单击F10均可执行一条语句,例如在图1-11中为2次单击F10后,用户输入1234,5678后,箭头代表将要执行的下一条语句(即printf),并可以在Auto窗口中看到变量a,b的内存地址(以&a,&b表示)和内容。实验一 C程序集成开发
8、环境转入函数内部如果希望进入函数体内部,可以单击F11键,此时程序将转入到sum函数中,注意在图1-12中箭头指向sum函数的起始行,以及形参x,y的内容。实验一 C程序集成开发环境运行到光标处用户也可以将光标定位到return z;行,按Ctrl+F10组合键,一步执行到光标所在行,并得到z的返回值,如图1-13所示。实验一 C程序集成开发环境运行到光标处用户也可以将光标定位到return z;行,按Ctrl+F10组合键,一步执行到光标所在行,并得到z的返回值,如图1-13所示。实验二 数据类型、运算符和表达式实验二 数据类型、运算符和表达式一、实验目的l 1. 熟练掌握C语言各种数据类型
9、的含义。l 2. 理解常量和变量的区别。l 3. 熟练掌握变量定义和使用。l 4. 熟悉常用的运算符包括算术、赋值、强制类型转换、自增(减)、逗号和位运算等。实验二 数据类型、运算符和表达式二、实验内容【题目2-1】编写整型、实型和字符类型的简单测试程序,并输出以验证是否正确。1.测试数据测试数据输入:无。输出:略。2.题目分析题目分析(1)整型数据采用十进制、八进制和十六进制表示。(2)字符型数据采用单引号限界字符和转义字符来表示。(3)大小写字母的ASCII值相差32。实验二 数据类型、运算符和表达式3.参考代码参考代码#include stdio.h#define PI 3.14159
10、/* 符号常量 */main()int n1=10,n2=017,n3=0 xFF; /* 整型数据3种表示方法 */ float f1=3.14E5,f2=12.34f; /* 实型数据的表示方法 */char c,c1=A,c2=101,c3=0 x61,c4=; /* 字符型数据的几种表示方法 */ /* 整型数据以原进制输出 */printf(n1=%d,n2=%o,n3=%xn,n1,n2,n3);/* 整型数据以十进制输出*/printf(n1=%d,n2=%d,n3=%dn,n1,n2,n3); /* 实型数据输出*/实验二 数据类型、运算符和表达式3.参考代码参考代码/* 符号
11、常量的输出*/ printf(PI=%fn,PI);/* 字符型数据的输出 */printf(c1=%c,c2=%c,c3=%c,c4=%cn,c1,c2,c3,c4); c=c1+32; /*字母转换为小写*/printf(c1=%c,c=%cn,c1,c); 实验二 数据类型、运算符和表达式4.参考参考结果结果实验二 数据类型、运算符和表达式【题目0205】取整数1234的各个数位上的数字,并编程上机验证。1.测试数据测试数据输入:无。输出:12342.题目分析题目分析(1)取千位上的数字i/1000。(2)取百位上的数字i%1000/100。(3)取十位上的数字i%100/10。(4)取
12、个位上的数字i%10。实验二 数据类型、运算符和表达式3.参考代码参考代码#include stdio.hmain() int i=1234; int n1,n2,n3,n4; n4=i/1000; n3=i%1000/100; n2=i%100/10; n1=i%10; printf(%d%d%d%dn,n4,n3,n2,n1);实验二 数据类型、运算符和表达式4.参考参考结果结果实验三 顺序结构程序设计实验三 顺序结构程序设计一、实验目的l 1. 熟练掌握scanf和printf函数格式控制字符的含义以及输出方法的设计。l 2. 培养编制程序框图和顺序结构程序的编写能力。实验三 顺序结构程
13、序设计二、实验内容【题目3-1】输入学生平时成绩(占10%)、实验成绩(占20%)和考试成绩(占70%),程序计算出该学生的总成绩,保留2位小数。1.测试数据测试数据输入:85 76 92输出:平时成绩(占%10):85 实验成绩(占%20):76 考试成绩(占%70):92 总成绩为88.10实验三 顺序结构程序设计2.题目分析题目分析(1)三科成绩定义为整型类型。(2)总成绩应定义为实型类型。(3)保留2位小数采用”%.2f”格式。(4)程序流程图如下:实验三 顺序结构程序设计3.参考参考代码代码#include stdio.hmain() int attendance,laborator
14、y,quiz; float final; printf(n请输入平时成绩:); scanf(%d,&attendance); printf(n请输入实验成绩:); scanf(%d,&laboratory); printf(n请输入考试成绩:); scanf(%d,&quiz); final=0.1*attendance+0.2*laboratory+0.7*quiz; printf(n平时成绩(占%10):%d 实验成绩(占%20):%d 考试成绩(占%70):%dn,attendance,laboratory,quiz); printf(n总成绩为:%.2fnn,final); 实验三 顺
15、序结构程序设计4.参考参考结果结果实验三 顺序结构程序设计【题目0302】利用海伦公式计算三角形面积,保留3位小数。1.测试数据测试数据输入:3,4,5输出:三角形的面积为:6.0000002.题目分析题目分析(1)定义三边长分别为a、b、c,三角形的面积area,类型为实型。(2)p为半周长,定义类型为实型,公式为p=(a+b+c)/2(3)面积公式为area= 。开方可采用sqrt函数(需要包含头文件”math.h”)。(4)程序流程图。由读者自行设计。实验三 顺序结构程序设计3.参考代码参考代码#include math.h#include stdio.hmain() float a,b
16、,c,p,area; printf(请输入三边边长:n); scanf(%f,%f,%f,&a,&b,&c); p=(a+b+c)/2; area=sqrt(p*(p-a)*(p-b)*(p-c); printf(三角形的面积为:%fn,area);实验三 顺序结构程序设计4.参考参考结果结果实验四 选择结构程序设计实验四 选择结构程序设计一、实验目的l 1.熟练掌握关系、逻辑运算符及其表达式。l 2. 掌握if语句及嵌套if的使用。l 3. 掌握switch语句的使用实验四 选择结构程序设计二、实验内容【题目4-1】有如下分段函数,要求输入x的值,求y的值。 1.测试数据测试数据输入:2输出
17、:y=-6.000000输入:-5输出:y=5.000000实验四 选择结构程序设计二、实验内容2.题目分析题目分析(1)x,y定义为实型类型。(2)三条支路,可采用if-else if-else结构实现。(3)绝对值可采用数学库abs(x)函数。(4)部分流程图如下:实验四 选择结构程序设计3.参考代码参考代码#include math.h#include stdio.hmain() float x,y;printf(请输入变量x的值n);scanf(%f,&x);if(x=3)y=x+1;else if(x=0)y=abs(-x)-8;elsey=sqrt(x*x);printf(y=%f
18、n,y); 实验四 选择结构程序设计4.参考参考结果结果实验四 选择结构程序设计【题目4-2】设计程序,将给出的百分制成绩,转换等级输出。例如90分及以上为优秀,8089分为良好,7079分为中等,6069分为及格,60分以下为不及格。1.测试数据测试数据输入:67输出:及格实验四 选择结构程序设计2.题目分析题目分析(1)成绩变量score定义为整型类型。(2)五条支路,最好采用switch结构实现。(3)利用score/10将分数区间转换为与若干常量相对应。(4)部分流程图如下:实验四 选择结构程序设计#include stdio.hmain() int score;printf(请输入学
19、生的成绩n);scanf(%d,&score);if(score0)printf(输入成绩有误!n);elseswitch(score/10)case 6:printf(及格n); break;case 7: printf(中等n); break;case 8:printf(良好n); break;case 9: case 10: printf(优秀n); break;default: printf(不及格n); 实验四 选择结构程序设计4.参考结果参考结果实验五 循环结构程序设计实验五 循环结构程序设计一、实验目的l 1. 熟练掌握while,do-while,for循环的语法结构和使用方式
20、。l 2. 了解多重循环的循环执行过程。l 3. 掌握continue和break语句的特点和使用方式。实验五 循环结构程序设计二、实验内容【题目5-1】根据例5-8,编写求解100500之间所有素数的程序。1.测试数据测试数据输入:无。输出:略。2.题目分析题目分析(1)采用两层循环,内层循环用于判断某个数是否为素数,外层循环用于在100500循环选数。(2)count%10=0每行显示10个素数。(3)程序流程图参见例5-8。实验五 循环结构程序设计3.参考代码参考代码#includestdio.h#includemath.hvoid main() int n,k,j,count=0;fo
21、r(n=101;n500;n+=2) k=sqrt(n);for(j=2;j=k+1)printf(%d ,n);count+;if(count%10=0) printf(n);实验五 循环结构程序设计4.参考结果参考结果实验五 循环结构程序设计【题目0503】输入两个整数,用辗转相除法求它们的最大公约数和最小公倍数。1.测试数据测试数据输入:32,48输出:32和48的最大公约数为16 32和48的最小公倍数为962.题目分析题目分析(1)最大公约数算法:输入两个数m,n(默认mn)。k为m除以n的余数(k=m%n),如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,将k的值存入
22、n中(n=k),n的值存入m中(m=n),重复以上过程,直到k值为0。(2)最小公倍数为m0*n0/m,其中m0*n0为原始两个数m,n的乘积,m为最大公约数。实验五 循环结构程序设计(3)部分程序框图如下:实验五 循环结构程序设计3.参考代码参考代码#include stdio.hmain()int m,n,k=1,temp;int m0,n0;scanf(%d,%d,&m,&n);m0=m;n0=n;if(mn) temp=m; m=n;实验五 循环结构程序设计3.参考代码参考代码 n=temp;while(k!=0)k=m%n;m=n;n=k; printf(%d和%d的最大公约数为%d
23、n,m0,n0,m); printf(%d和%d的最小公倍数为%dn,m0,n0,m0*n0/m);实验五 循环结构程序设计4.参考结果参考结果实验六 数组实验六 数组一、实验目的l 1.了解数组的特点,掌握一维数组及二维数组的定义、初始化及其使用方法;l 2. 熟练使用一维及二维数组解决实际问题;l 3. 掌握字符数组的使用;l 4. 掌握与数组有关的算法。实验六 数组二、实验内容【题目6-1】在一个有序的数组中插入一个元素,并保持数组有序。1.测试数据测试数据输入:11 22 33 44 55 66 77 88 30输出:11 22 30 33 44 55 66 77 882.题目分析题目
24、分析(1)原始数组要有足够的存储空间,以便能继续存放后插入的元素;(2)插入操作需要先确定待插入的位置,然后将此位置及后面的数组元素后移,空出这个位置,最后将待插入元素放在这个位置上。实验六 数组3.参考代码参考代码#includevoid main()int a10; int x,i; printf(请输入数组:); for(i=0;i=7;i+) scanf(%d,&ai); printf(请输入待插入元素:); scanf(%d,&x); /* 输入待插入元素x */ i=7; while(x=0) /* 从后向前查找x的位置,同时将大于x的数组元素后移 */实验六 数组3.参考代码参考
25、代码 ai+1=ai; i-; ai+1=x; printf(操作后结果:); for(i=0;i=8;i+) printf(%3d,ai); printf(nn);实验六 数组4.参考参考结果结果实验六 数组【题目0604】由键盘输入两个字符串,编写程序实现这两个字符串的比较功能。1.测试数据测试数据输入:China Chinese输出:China Chinese2.题目分析题目分析(1)需要使用两个字符数组存放被比较的两个字符串,注意数组长度要足够容纳字符串。另外,需要设定一变量i,用于在字符串中逐个标识字符的下标。(2)字符串比较是基于字母序原理,因此需要做循环逐个比较对应位置上字符AS
26、CII码的大小。实验六 数组3.参考代码参考代码 #include void main() char str130,str230; int i=0; printf(请输入两个字符串:n); gets(str1); gets(str2); while(str1i!=0)&(str2i!=0) /* 当两字符串都不空时,逐个字符比较 */ if(str1i!=str2i) break; i+; 实验六 数组3.参考代码参考代码 if(str1istr2i) printf(判断结果:%s%sn,str1,str2); else if(str1istr2i) printf(判断结果:%sc&a+cb&
27、b+ca&a0.0&b0.0&c0.0) printf(此三角形面积为:%-7.2fnn,area(a,b,c); 实验七 函数3.参考代码参考代码/* 以下是计算任意三角形面积的函数 */float area(float a,float b,float c) float s,area_s; s=(a+b+c)/2.0; area_s=sqrt(s*(s-a)*(s-b)*(s-c); return(area_s);实验七 函数4.参考参考结果结果实验七 函数【题目0703】利用函数递归调用的思想编写程序,将一个整数的低位变成高位,高位变成低位组成另一个整数。1.测试数据测试数据输入:1234
28、 输出:43212.题目分析题目分析定义一个递归函数实现整数变换,变换思路为func(1234,0)= func(123,4)= func(12,43)= func(1,432)= func(0,4321)=4321。实验七 函数3.参考代码参考代码 #include stdio.h int func(int n, int m) if (n=0) return m; else return func(n/10, m*10+n%10); /* 递归调用 */ void main( ) int n; printf(输入一个整数:); scanf(%d,&n); printf(变换后的整数:%dnn
29、,func(n, 0); 实验七 函数4.参考参考结果结果实验八 预处理命令实验八 预处理命令一、实验目的l 1. 掌握宏定义的方法l 2. 掌握文件包含处理的方法l 3. 掌握条件编译的方法实验八 预处理命令二、实验内容【题目0801】定义一个带参数的宏,使两个参数的值互换。要求由键盘输入的两个数作为使用宏时的实参。1.测试数据测试数据测试数据输入:55 33输出:33 55 2.题目分析题目分析注意宏参数和函数参数的不同。实验八 预处理命令3.参考代码参考代码#include #define swap(a,b) t=b;b=a;a=t;void main() int a,b,t; prin
30、tf(输入两个整数:); scanf(%d %d,&a,&b); swap(a,b); printf(两个整数互换:%d %dnn,a,b);实验八 预处理命令4.参考参考结果结果实验八 预处理命令【题目0802】用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出:一为原文输出;一为将字母变成其下一个字母(如a变成b,z变成a),其它非字母字符不变。用#define命令来控制是否要译成密码。例如: #define CHANGE 1则按密码形式输出。若 #define CHANGE 0则按原码形式输出。实验八 预处理命令1.测试数据测试数据测试数据输入:abcxyz ABCXYZ输出
31、:bcdyza BCDYZA 2.题目分析题目分析如果想按原文形式输出,将下面程序中第3行改为:#define CHANGE 0即可。实验八 预处理命令3.参考代码参考代码#include stdio.h#define MAX 80#define CHANGE 1void main()char strMAX;int i;printf(输入原文:);gets(str);#if (CHANGE) for (i=0;i=a& stri=A& striZ) stri+=1; else if (stri=z|stri=Z) stri-=25; #endifprintf(输出译文:%snn,str);实验
32、八 预处理命令4.参考参考结果结果实验九 指针实验九 指针一、实验目的l 1.掌握指针的概念,掌握定义和使用指针变量的方法;l 2.掌握指向数组的指针变量的用法;l 3.掌握指向字符串的指针变量的用法;l 4.掌握指向函数的指针变量的用法;l 5.了解二级指针的概念及其使用方法。实验九 指针二、实验内容【题目0901】由键盘输入两个整数,编写程序实现两个数的互换,使用指针作函数参数的方式实现。1.测试数据测试数据输入: 55 33 输出: 33 552.题目分析题目分析(1)定义一个子函数swap( ),实现两数互换,swap函数的形参是两个指向整型数据的指针;(2)在main函数中将两个整型
33、变量的地址作实参,传递给swap函数;(3)注意swap函数中,用于两数互换的临时变量temp应定义为整型,而不是指针型。实验九 指针3.参考代码参考代码#include stdio.hvoid swap( int *p1, int *p2 ) int temp;temp=*p1;*p1=*p2;*p2=temp;int main( ) int a,b; int *pa,*pb;printf(输入两个整数:);实验九 指针3.参考代码参考代码scanf(%d%d, &a, &b);pa=&a; pb=&b;swap( pa, pb );printf(输出互换结果:%d %dn,a,b);实验九
34、 指针4.参考参考结果结果实验九 指针【题目0904】根据零点定理求方程式f(x)=0的解。设f(x)在区间a, b上连续,且f(a) f(b)0。根据零点定理,f(x)在该区间内必存在零点。编写程序求方程式f(x)=0在区间a, b上的解。令误差为110-12。并求方程 在区间0, 2上的解及方程 在区间2, 7 上的解。1.测试数据测试数据输入: 0, 2 输出: 1.299550输入: 2, 7 输出: 3.000000实验九 指针2.题目分析题目分析(1)依题,需要设计3个子函数,bisection()、f1()、f2(),分别完成利用零点定理求解和表达两个方程式左式的功能;(2)函数
35、bisection的定义形式非常重要,将它调用函数的参数定义为指向函数的指针。这样,每次调用bisection()就可以求解不同方程的解。定义形式为:double bisection(double (*f)(double x), double a, double b);其中f是指向函数的指针,a和b代表求解区间上下界。实验九 指针3.参考代码参考代码#include#includeconst double eps=1e-12;double bisection(double (*f)(double x),double a,double b)double mid=(a+b)/2; if(f(mid
36、)=0)|(b-aeps) return mid; else if(f(a)*f(mid)0)return bisection(f,a,mid); else return bisection(f,mid,b);double f1(double x)return 1/(pow(x-0.3),2)+0.01)+1/(pow(x-0.9),2)+0.04)-6;double f2(double x)return pow(x-2),2)-1;实验九 指针3.参考代码参考代码void main()double a,b,result; printf(输入方程式1求解区间:); scanf(%lf,%lf,
37、&a,&b); result=bisection(f1,a,b); printf(方程式1的解= %lfn,result); printf(输入方程式1求解区间:); scanf(%lf,%lf,&a,&b); result=bisection(f2,a,b); printf(方程式1的解= %lfn,result);实验九 指针4.参考参考结果结果实验十 结构体与共用体实验十 结构体与共用体一、实验目的l 1.掌握结构体类型变量的定义及使用l 2.掌握结构体变量的引用形式,结构体数组的应用l 3.理解结构体作为不同数据类型的一个整体在实际编程中的应用实验十 结构体与共用体二、实验内容【题目1
38、0-1】有3名学生的基本信息,每名学生的基本信息包括:学号、姓名、语文成绩、数学成绩、总分、平均分等数据项。根据各科成绩计算总分和平均分,并输出这3名学生的信息。1.测试数据测试数据输入:无输出:参见4。2.题目分析题目分析利用结构体类型数组元素存放3名学生的信息,并根据要求求出总分和平均分。实验十 结构体与共用体3.参考代码参考代码#define N 3#include stdio.hstruct student char num8; char name20; float chi_score,math_score; float sum; float average;main() int i;
39、 struct student studN=201201,Zhao,80,90,201202,Qian,70,60,201201,Sun,80,60; /*计算学生的总分和平均分*/实验十 结构体与共用体3.参考代码参考代码for(i=0;iN;i+) studi.sum=studi.chi_score+studi.math_score;studi.average=studi.sum/3;/*输出学生的基本信息情况*/printf(nNumber Name Chinese Math Sum Average);printf(n-);for(i=0;iN;i+) printf(n%-8s%-4s%
40、,studi.num,studi.name); printf(%8.1f%8.1f,studi.chi_score,studi.math_score); printf(%8.1f%8.1f,studi.sum,studi.average);printf(n-nn);实验十 结构体与共用体4.参考参考结果结果实验十 结构体与共用体【题目10-2】每个用户的信息包括姓名和电话号码。编写程序将用户信息按姓名以字母序输出。要求利用指向结构体的指针实现。1.测试数据测试数据输入:无输出:参见4。2.题目分析题目分析(1)需定义一个包含用户姓名和电话号码两个成员的结构体类型USER。由于字符串以n作为结束
41、标志,所以数组长度应至少比实际数据长度多1。main函数中定义一个长度为N的USER类型结构体数组user,用于存放N位用户的信息。(2)子函数SortUser( )利用选择法将N位用户按其姓名以字母序排列;子函数OutputUser( )将重新排列的用户信息屏幕输出;两个子函数均采用指向结构体的指针变量作形参,因此子函数对结构体数组元素的修改能够体现在主函数中。main函数顺次调用这两个子函数,采用结构体数组名作实参,将数组首地址传递给形参指针。实验十 结构体与共用体 3.参考代码参考代码 #include #include #define N 3 typedef struct /* 定义结
42、构体类型USER,表征用户信息 */ char name20; char tel15; USER; void SortUser(USER *u, int n) /* 实现用户信息按姓名排序功能 */ int i,j,k; USER temp; 实验十 结构体与共用体 3.参考代码参考代码for(i=0;in-1;i+) k=i; for(j=i;jn;j+) if(strcmp(uj.name,uk.name)0) k=j; if(k!=i) temp=uk; uk=ui; ui=temp; 实验十 结构体与共用体 3.参考代码参考代码void OutputUser(USER *u, int
43、n) /* 实现输出用户信息功能 */ int i; printf(Sorted users:n); for (i=0;i=n-1;i+) printf(%6s%10sn,ui.name,ui.tel); printf(nn); void main() /* 主函数中依次调用各子函数 */ USER userN=Zhao,80010000,Qian,80010001,Sun,80010002; SortUser(user,N); OutputUser(user,N);实验十 结构体与共用体 4.参考参考结果结果实验十一 文件实验十一 文件一、实验目的l 1. 掌握文件的打开和关闭方式。l 2.
44、 ASCII和二进制文件读写函数的使用方法。l 3. 状态检测函数的使用方法。实验十一 文件二、实验内容【题目11-1】使用字符文件输入输出函数,将用户从键盘上输入的字符存入到指定的文件中,直到遇到”#”结束输入。1.测试数据测试数据输入:d:output.txt I Love China!#输出:I Love China!2.题目分析题目分析(1)字符显示采用putchar函数。(2)接受用户输入字符使用getchar函数。(3)文件存入操作采用fputc函数。实验十一 文件3.参考代码参考代码#include stdio.hvoid main()char ch;char FileName2
45、0;FILE *fp;printf(请输入存入的文件名n);scanf(%s,FileName);if(fp=fopen(FileName,w)=NULL)printf(无法打开文件!n);exit(0);实验十一 文件3.参考代码参考代码printf(请输入要保存的文本内容n);ch=getchar();while(ch!=#) putchar(ch); fputc(ch,fp); ch=getchar(); fclose(fp);printf(n);实验十一 文件4.参考结果参考结果实验十一 文件【题目11-2】使用格式化文件输入输出函数,完成如下功能(1)输入若干学生的数据(学号,姓名,
46、成绩),并存储在文件d盘文件stud.txt中;(2)从文件读出学生数据,打印全部的学生的相关信息. 1.测试数据测试数据输入:3001 WANG 78002 FANG 67003 HAN 98输出:001 WANG 78.000000002 FANG 67.000000003 HAN 98.000000实验十一 文件2.题目分析题目分析(1)文件存入采用语句fprintf(fp,%s %s %f ,stu.no,stu.name,stu.score)。(2)文件读出采用语句fscanf(fp,%s%s%f,stu.no,stu.name,&stu.score)。 3.参考代码参考代码#inc
47、lude stdio.hstruct studentchar no20,name20;float score;void main()struct student stu;int n,i;FILE *fp;实验十一 文件 3.参考代码参考代码if(fp=fopen(d:stu.txt,w)=NULL)printf(“无法打开文件!n”);exit(0); printf(请输入学生人数n);scanf(%d,&n);printf(请输入学生的学号、姓名和成绩n);for(i=0;in;i+)scanf(%s%s%f,stu.no,stu.name,&stu.score);fprintf(fp,%s
48、 %s %f ,stu.no,stu.name,stu.score); fclose(fp);if(fp=fopen(d:stu.txt,r)=NULL)实验十一 文件 3.参考代码参考代码printf(“无法打开文件!n”);exit(0);printf(文件中保存的学生信息如下:n);fscanf(fp,%s%s%f,stu.no,stu.name,&stu.score);while(!feof(fp)printf(%st%st%fn,stu.no,stu.name,stu.score);fscanf(fp,%s%s%f,stu.no,stu.name,&stu.score); fclos
49、e(fp);实验十一 文件 4.参考参考结果结果实验十一 文件【题目11-3】使用数据块输入输出函数,完成【题目1102】同样的功能1.测试数据测试数据输入:3001 WANG 78002 FANG 67003 HAN 98输出:001 WANG 78.000000002 FANG 67.000000003 HAN 98.000000实验十一 文件2.题目分析题目分析(1)先使用malloc函数动态分配内存块,利用scanf函数给该内存块初始化。(2)使用fwrite函数将该内存块的内容写入到文件中。(3)使用fread函数将文件的内容读入到内存块中,使用printf函数将内存块内容显示到屏幕
50、上。(4)使用free函数释放内存。实验十一 文件3.参考代码参考代码#include #include struct studentchar no20,name20;float score;void main()struct student *p,stu;int n,i;FILE *fp; if(fp=fopen(stu.dat,wb)=NULL)printf(“无法打开文件!n”);exit(0);实验十一 文件3.参考代码参考代码printf(请输入班级人数n);scanf(%d,&n);printf(请输入学生的学号、姓名和成绩n);for(i=0; ino,p-name,&p-sco