下载
请从群里下载Microsoft Visual Studio.rar。
将下载的文件Microsoft Visual Studio.rar解压后即可使用。
请直接运行文件“Microsoft Visual Studio\\Common\\MSDev98\\Bin\\MSDEV.EXE”
实验一 认识C语言
【实验目的】
1.熟悉C程序设计编程环境 Visual C ++,掌握运行一个C程序设计的基本步骤,包括编辑、编译、连接和运行。
编辑:编写源程序文件.c 编译:生成目标文件.obj 连接:生成可执行文件.exe 运行:执行.exe文件。
2.掌握C语言程序设计的基本框架,能够编写简单的C程序。 3.了解程序调试的思想,能找出并改正C程序中的语法错误。
【实验内容】
1-1 在磁盘上新建一个文件夹,用于存放C程序,文件夹的名字可以是学号,如 D:\\3050888。
1-2 编程示例,在屏幕上显示一个短句“Hello World!”。
源程序
# include printf(\"Hello World! \\n\"); } 运行结果 Hello World! 作为第一个实验,在Visual C++编程环境下,以上述C语言源程序为例,介绍运行一个C程序的基本步骤,请读者按照以下步骤操作。 (1)启动VC++ 执行“开始”—>“程序”—>“Microsoft Visual Studio 6.0”—> “Microsoft Visual C++ 6.0”,进入VC++编程环境(如图1.1所示)。 图1.1 VC++窗口 (2)新建文件 执行“文件/File”—>“新建/New”,单击“文件/Files”选项卡(如图1.2所示),先在“文件/File name”栏中输入test,把C源(程序)文件命名为test.cpp,在“目录/Location”框中选择你已经建立的文件夹,如,D:\\3050888,然后选中“C++ Sourse Files”,单击“确定”按钮,在D:\\3050888下就新建了文件test.cpp,并显示编辑窗口和信息窗口(如图1.3所示)。 图1.2 新建文件 思考:我们讲过C语言的源程序文件的扩展名为.c,可现在建立的文件名为.cpp,这可以编译执行吗? 解答:vc++6.0是c和c++语言的编程环境,c++语言的扩展名为.cpp,并且c++语言完全包括的c语言的语法内容,所以在c++文件中写c语言的内容是可以编译的。 如果想将源程序文件的扩展名改为.c,只需要在上图中文件一栏中填写test.c就可以了,如果只写test就是只写一个文件名的话扩展名会自动为.cpp,所以我们可以指定扩展名为.c就可以了。 (3)编辑和保存 在编辑窗口(如图1.3所示)中输入源程序,然后执行“文件/File”—>“保存/Save”或“文件/File”—>“另存为/Save As”,保存源文件。 编辑窗口 信息窗口 图1.3 编辑源程序 (4)编译 执行“编译/Build”—>“编译/Compile”或Ctrl + F7(如图1.4所示),在“产生工作区”对话框中(如图1.5所示)选择“是/Y”,开始编译,并在信息窗口显示编译信息(如图1.6所示)。 图1.4 编译源程序 图1.5 产生一个工作区 图1.6 编译正确 图1.6信息窗口中出现的“test.obj - 0 error(s), 0 warning(s)”,表示编译正确,没有发现(语法)错误和警告,并生成了目标文件test.obj。 请查看目录D:\\3050888\\Debug中是否有test.obj文件。 如果显示有错误error(s),指程序中存在致命的错误,必须要改正;如果显示有警告warning(s),虽然不影响生成目标文件,但通常也应该改正。 (5)连接 执行“编译/Build”—>“构件/Build”或F7,也可用“重建全部/Rebuild All”,开始连接,并在信息窗口显示连接信息(如图1.7所示)。 图1.7信息窗口中出现的“test.exe - 0 error(s), 0 warning(s)”表示连接成功,产生了可执行文件test.exe。 操作完成请查看目录D:\\3050888\\Debug中是否有test.exe文件。 图1.7 连接成功并产生运行文件(.exe) (6)运行 执行“编译/Build”—>“执行/Execute”或Ctrl + F5(如图1.8所示),自动弹出运行窗口(如图1.9所示),显示运行结果“Hello World!”,其中“Press any key to continue”提示读者按任何键退出DOS窗口,返回到VC++编辑窗口。 图1.8 运行程序 图1.9 运行窗口 也可以进入源文件的目录双击test.exe进行执行。(Window操作系统都是这样运行一个可执行的程序。 (7)关闭程序工作区 执行“文件/File”—>“关闭工作区/Close Workspace”(如图1.10所示),在出现的对话框(如图1.11所示)中选择“是/Y”,关闭工作区。 图1.10 关闭程序工作区 图1.11 关闭所有文档窗口 (8)打开文件 如果要再次打开C源文件,可以执行“文件/File”—>“打开/Open”,在文件夹D:\\3050888下选择文件test.cpp (9)查看C源文件、目标文件和可执行文件的存放位置 经过编辑、编译、连接和运行后,在文件夹D:\\3050888(如图1.12所示)和D:\\3050888\\Debug(如图1.13所示)中存放着有关的文件,其中源文件test.cpp在文件夹D:\\3050888中,目标文件test.obj和可执行文件test.exe都在文件夹D\\3050888\\Debug中。 图1.12 文件夹“D:\\3050888” 图1.13 文件夹“D:\\3050888\\debug” 1-5 调试示例,在屏幕上显示一个短句“Welcome to You!”。 源程序(有错误的程序) # include printf(Welcome to You! \\n\") } 运行结果(改正后程序的运行结果) Welcome to You! (1)按照实验内容1-2中介绍的步骤先关闭工作区(点击菜单Fileclose Wordspace),然后再参照上边的步骤创建源程序error1_1.cpp。 (2)编译,执行“编译/Build”—>“编译/Compile”,信息窗口中显示编译出错信息(如图1.14所示)。 (3)找出错误,在信息窗口中双击第一条出错信息,编辑窗口就会出现一个箭头指向程序出错的位置(如图1.14所示),一般在箭头的当前行或上一行,可以找到出错语句。图1.14中箭头指向第4行,出错信息指出Welcome是一个未定义的变量,但Welcome并不是变量,出错的原因是Welcome前少了一个双引号。 图1.14 编译产生的错误信息 (4)改正错误,在Welcome前加上双引号后,重新编译,信息窗口显示本次编译的出错 信息,第一条出错信息是“missing ';' before '}'”,双击该出错信息,箭头指向最后一行,出错信息指出在右大括弧 }前少了分号。 (5)再次改正错误,在 }前补上一个分号后重新编译信息窗口显示编译正确(如图1.15所示)。 图1.15 编译正确 (6)连接,执行“编译/Build”—>“构件/Build”或F7。信息窗口显示连接出错信息(如图1.16所示)。仔细观察、分析后发现,主函数名main拼写错误,被误写为“mian”。 图1.16 连接产生的错误信息 (7)改正错误,把“mian”改为“main”后,重新连接,信息窗口显示连接正确(如图1.17所示)。 图1.17 连接正确 (8)运行,执行“编译/Build”—>“执行/Execute”或Ctrl + F5 ,自动弹出运行窗口(如图1.18所示),显示运行结果,与题目要求的结果一致,程序调试结束,读者按任意键返回。 图1.18 程序运行窗口 1-6 改错,改正下列程序中的错误,在屏幕上显示以下3行信息。 按照实验内容1-2中介绍的步骤先关闭工作区(点击菜单Fileclose Wordspace),然后再参照上边的步骤创建源程序error1_2.cpp ************* Welcome ************* 源程序(有错误的程序) # include printf(\"*************\\n\"); printf(\" Welcome\\n\") printf(\"*************\\n); } 实验二 常量 【实验目的】 1. 学会使用字符常量、字符串常量、整型常量、实型常量、及符号常量 2. 学会使用转义字符、占位符 3. 学会使用常量之间的运算 4. 学会使用vc++6.0编程环境中的wordspace、project、files 【实验内容】 1. 编写程序,使用printf输出以下内容: Hello! Welcome to China! 1 2 3 4 5 6 7 8 9 3.141593 3.141593 „‟ “” 说明及要求: 第一行要使用字符常量进行输出(使用字符的占位符%c) 第二行要使用字符串常量(使用字符串的占位符%s) 第三行要使用整型常量,注意每个数字中间是空格。(使用整型的占位符%d) 第四行要使用实型常量,并且要用实型常量小数形式(使用实型的占位符%f) 第五行要使用实型常量,并且要用实型常量指数形式(使用实型的占位符%f) 第六行输出两个单引号,并且要用字符常量(使用转义字符) 第七行输出两个双引号,并且要用字符串常量(使用转义字符) 参考答案(请同学们将下面的程序补充完整输出第三行及后两行的内容): #include printf(\"%c%c%c%c%c%c\\n\ printf(\"%s\\n\ printf(\"%f\\n\ printf(\"%f\\n\} 2. 运行下边的程序,想想是为什么。 #include main(){ printf(\"A=%d\\n\ printf(\"65=%c\\n\ printf(\"B=%d\\n\ printf(\"66=%c\\n\} 结论:字符型也是整型,并且字符可以于整型相互转换。通过%d、%c转换。 根据教材的122页附录3练习字符和整型的转换。 3. 编写程序,使用printf输出字母A、B、C的ASCII码值。 输出结果为: A=65,B=66,C=67 提示:字符型对应的占位符为%c,如果printf中使用%c则会输出A、B、C这三个字母。 大家都知道C语言中字符数据在内存中其实存储的是该字符对应的ASCII码的值,ASCII码值为整型,所以要想输出字符对应的ASCII码的值,printf中的占位符要用整型对应的占位符。 4. 编写程序使用printf输出以下内容: 3.1415926758 说明及要求: 要使用实型常量输出,小数或指数形式不限制。(注意占位符%f的使用,显示小数位数问题) 请参考P.17printf格式说明一节的内容,关于本程序的所用的知识请参考18页的第(3)。 参考答案: #include printf(\"%1.10f\\n\} 请尝试练习教材第17页至第19页表2.1到表2.8中的格式控制符。每个类型的格式控制符都要练习一下。 5. 将第一题中的后四行改为符号常量输出 提示: 符号常量使用方法:首先要先用#define 定义符号常量,定义格式为: #define 符号常量名称 常量值 然后在printf中将原来常量的位置替换成符号常量名称即可。 例如: 要输出以下内容: 100*3=300 100/3=33 我们把100定义成符号常量,名称为num。可以这样写程序: #include printf(\"%d*3=%d\\n\ printf(\"%d/3=%d\\n\ } 定义符号常量的作用是,如果我们想得到另一个数乘以3的结果、另一个数除以3的结果,我们就可以直接修改符号常量num 的值为另一个数就行了。 比如我们想求200*3、200/3 的结果,上边的程序我们只需要 将 #define num 100 改为 #define num 200 就行了。 请同学们自己试试看。 6. 在第一题中尝试使用错误的占位符,看会出现什么问题 例如: 第四行占位符不用%f而用%d。 试验完成后要得出一个结论!!! 7. 学会使用算术运算符和算术表达式 先了解一下C语言的算术运算符和算术表达式。 学习基本的算术运算符 加法运算符“+”:加法运算符为双目运算符,即应有两个量参与加法运算。如 4+8等。 减法运算符“-”:减法运算符为双目运算符。但“-”也可作负值运算符,此时为 单目运算符(只有一个量参加运算),如-5等。 乘法运算符“*”:双目运算符。参与运算量均为整型时,结果也为整型,舍去小 数。如果运算量中有一个是实型,则结果为实型。 除法运算符“/”:双目运算符。参与运算量均为整型时,结果也为整型,舍去小 数。如果运算量中有一个是实型,则结果为实型。 求余运算符(又叫模运算符)“%”:双目运算。要求参与运算的量均为整型。 求 余运算的结果等于两数相除后的余数。值的符号与被除数相同。 例子: # include printf(\"%d\\n\ } 本例输出100除以3所得的余数1。 学习算术表达式 用算术运算符和括号将运算对象(也称操作数,变量、常量)连接起来的、符合C语法规则的式子。 以下是算术表达式的例子: 4+8 (5*2)/3 算术表达式算出的值称为该算术表达式的值,比如以上4+8这个表达式的值为12。 看过上边基本算术运算符的规则后请编写运行以下的程序自己思考为什么输出是这样的: #include printf(\"100*3=%d\\n\ printf(\"100*3=%f\\n\ printf(\"100/3=%d\\n\ printf(\"100/3=%f\\n\ printf(\"100/3=%1.2f\\n\ printf(\"100%c3=%d\\n\ printf(\"-100%c3=%d\\n\ printf(\"100%c-3=%d\\n\ } 根据以要求编写程序 使用printf输出以下算术表达式的值: 1+2+3+4 1*2*3*4 1/2 (应输出0.5) 1/3 (保留4位小数应输出0.3333) 10%3 -10%3 10%-3 提示:注意占位符的正确使用,算术表达式求出的结果一定要和占位符的对应的类型匹配(注意:字符型也属于整型) %f中间可以加(整数1.整数2)例如:%2.1f、%4.2f 整数表示显示数据的总宽度(包括:整数部分、小数点、小数部分的总位数),整数2表示显示数据的小数位数,如果整数1小于实际要输出的位数则按照小数点前整数部分实际的位数输出。如果整数1大于实际要输出的位数则将多余的位数在前边补0。 例如: printf(\"100/3=%1.3f\\n\ 由于%1.3f中的1比小数位数还小则按照小数点前整数部分实际的位数输出 输出:33.333 printf(\"100/3=%7.3f\\n\ 由于小数位数3加上小数点及两位整数的位数才6,%1.3f中的7比6大1则要在前边补一个空格,输出: 33.333 请同学们自行练习教材第17到19页的格式控制符的使用。 8. 编写程序实现求一个十进制数的八进制、十六进制,比如:13的八进制为015,十六 进制为0xd,执行程序输出13=015=0xd。 要求使用printf及占位符。 并且要用符号常量,如下边符号常量要表示13。 提示: 八进制的占位符为%o,十六进制占位符为%x,十进制的占位符为%d或%i 八进制和十进制和十六进制可以互相转换,具体转换成什么进制完全由占位符决定。 请参看第17页的表2.1、第19页表2.8 可参考下边的例子进行编写。 例子: #include printf(\"%d=%#o \\n\ } 注意:printf(\"%d=%#o \\n\中的“#”号。看看去掉#和加上#程序输出有什么区别。 9. 进一步学习Vc++6.0的编程环境。 问题:现在我们调试一下c程序就是先将所有的工作关闭了然后再建立源文件、编译、连接生成.exe、执行。 如果我们不关闭原来的工作区直接在里边建立源文件可以吗? 试验步骤: 我们在一个工作区中建立一个c源程序为ddd.c编译运行一切正常。 我们在不关闭工作区的情况下再建立一个c源程序为eee.c,我们进行编译,可以正常输出eee.obj文件表明编译正常。 我们再进行连接构建成exe文件就出错了。 如下错误: 提示内容显示main在ddd.obj中已经定义。可见这种方式不行。 学习工作区、工程、文件的使用 点击菜单FileNew,系统弹出窗口: 上边包括了Files(文件)、Projects(工程)、Workspaces(工作区)、other Documents(其它文档) 工作区:我们要使用vc++6.0的编程环境首先必须要创建一个工作区,我们才能在这个工作区里边工作、编写程序。就算我们刚开始直接创建源程序文件当你编译时系统也会提示必须先创建一个工作。 工程:工程是包括在工作区内的概念,工程是所有源程序文件的家,就好比一个图书管理系统这个软件,如果我们用vc++6.0开发这个软件那么该软件需要编写的所有文件都必须放在一个工程里边,并且一个工程里边只有一个main。现在我们知道为什么不能在一个工程里边建立两个都包含main的源程序文件了吧。 文件:包括很多类型的文件,我们正在编写练习的就是C的源程序文件,文件必须包含在工程里边。 下边我们可以按照由大到小的顺序分别创建工作区、工程、文件。 第一步: 创建一个计算机等级考试练习的工作区。 选择Workspaces标签: 按照下图内容填写: 点击ok进入如下界面: 这表明工作区创建成功查看D盘的test目录内会有计算机等级考试练习的目录,并且目录内的文件为: 第二步:创建工程: 在上图中右键单击工作区的名称 在出现的菜单中点击“Add New project to workspace…”系统打开如下界面: 在左边我们选择“Win32 Console Application”,右边上边的Project name一栏我们填写工程的名字:helloword。点击ok。 点击Finish。 点击“OK”。 系统进入下一个界面: 左边工作区下边多了一个工程。 第三步:创建源文件 我们选中要加入源文件的工程: 点击vc++6.0的菜单FileNew 我们选中“C++ Source File”,右边File一栏我们填写文件的名字main.c 点击OK 我们开始输入源程序内容。 我们编译、运行程序。 我们点击左边工程前边的加号: 得出 原来我们编写的源程序文件main.c在这里。 查看目录D:\est\\计算机等级考试练习\\helloword中就是main.c并且还有Debug目录。 下边我们在同一个工作区中再创建一个工程。 和上边我们创建工程的方法一样。 工程的名字不要和第一个创建的工程名相同。第二个我们定为test2。 按照上边的步骤创建工程完成: 在左边就出现了两个工程。 我们选择第二个工程 按照上边的步骤创建文件: 由于现在我们创建的文件和刚才我们创建的源程序文件不在同一个工程里边,所以文件名可以相同,我们都把它叫为main.c。 输入源程序文件的内容。 对于两个工程同时在一个工程区内,如果要编译、执行其中一个工程需要将该工程设置为当前选中工程。 比如现在我们要编译执行第二工程,首先我们需要先选中该工程,然后右键单击,在出现的菜单中点击“Set as active Project”项就可以了。 这时我们编译运行就是第二个工程。 如果想编译运行第一个工程我们就在第一个工程右键单击“Set as active Project”。 这样的话我们就可以在一个工作区内进行练习不用练习一个程序就关闭工作区,这样太麻烦了。 我就是这样练习的,一个工作区可以建多个工程。 需要运行哪个工程就将那个工程设置为“Set as active Project” 实验三 变量 【实验目的】 1. 学会使用字符变量、整型变量、浮点型(实型)变量的定义和赋值 2. 学会使用输入函数 3. 学会编写数学运算的程序 【实验内容】 1、 输出以下程序的结果: #include char letter1,letter2; letter1=letter2='A'; letter2=letter1+1; letter2=letter1++; printf(\"%c,%c\\n\} 程序输出: B,A 要求:在printf前边加一条语句,使程序输出为A,A,使程序输出B,B。 用++或――运算符实现。 2、 编写程序实现以下内容。(该程序主要练习变量的定义、赋值操作。) 定义一个字符变量,变量名为letter,将字母A赋给该变量 然后输出该变量的值 再给该变量赋值为字母B 然后再输出该变量的值 输出结果应该为: A B 注意:输出结果为两行。 提示:定义一个字符变量的方法为:char 字符变量名称; 赋值的方法为:字符变量名称=变量值或算术运算表达式; 输出变量的值可以使用printf。注意占位符要使用和变量类型一样的,比如变量类型为整型,则占位符就必须为%d或%i。 可参考下边的例子进行编程: #include printf(\"%c \\n\} 3、 编写程序实现如下要求 定义两个整型变量num1、num2(请参考教材第4页第三节),分别给这两个整型变量赋个任意的初值,求这个两个整型变量的和并将它们的和存入num1中,并输出第一个变量 的 值。 4、 把下边的程序编写完整: #include int number=1234; int n1,n2,n3,n4; //在这里添加代码(行数不限,可以再定义变量可以参考下边例子编写)通过使用算术运算表达式计算出number的个位、十位、百位、千位上的数值依次存入变量:n1,n2,n3,n4,最后程序将这四个数输出 //…. //…. printf(\"%d,%d,%d,%d \} 例子(该例子实现功能是输出12的每一位上的数值): #include 5、 把下边的程序编写完整: #include double number=1234.567; //在这里添加代码(行数不限,可以再定义变量可以参考下边例子编写)通过使用算术运算表达式将number的值修改为1234.56,即小数点后只有两位小数。(注意:不要使用%7.2f) //…. //…. printf(\"%lf \} 例子(该例子实现功能是修改number值,使其小数点后只有一位有效数字): #include float number=12.34; int number_temp= number*10; number= (float)number_temp/10;或number= number_temp*1.0/10; printf(\"%f\} 6、 请编写教材第5页下边的程序并运行。 说明:sizeof的作用是得到类型占内存的空间大小。如:第一行的sizeof(int) 得到int型在内存中占几个字节的空间。 如果得到int占两个字节则说明: int的数据范围为-32768~32767 无符号int的范围为:0~65535 如果得到int占四个字节则说明: int的数据范围为-2147483648~2147483647 无符号int的范围为:0~4294967295 下面以int所占四个字节为例,请同学们运行如下程序: #include int int_num=2147483647; unsigned int unsigned_int_num=4294967295; printf(\"%d \ printf(\"%u \printf(\"\\n\"); int_num=2147483647+1; unsigned_int_num=4294967295+1; //由于表达式结果超出基本整型的最大值2147483647所以输出的值不对,这称为溢出 printf(\"%d \ //由于表达式结果超出无符号整型的最大值4294967295所以输出的值不对,这称为溢出 printf(\"%u \ } 注意上面程序中%u的用法。它是无符号整型数的占位符。 结论:常量后面什么也不加的编译系统会默认为是基本整型常量。可在后面加L或l来表示长整型常量。也可加UL或ul也可以表达无符号长整型常量。(LU两个字母可以交换位置,大小写不区分) 7、 编写调试以下程序看看数据存储到内存中是怎么溢出的。 #include printf(\"%d\} 程序输出: 32767 大家知道2个字节的数据在内存中存储的有符号数据的范围是:-32768到32767 上边的程序如果改为:short a=32767+1; 大家看看是不是输出327688???想想为什么?? 8、 下面程序的功能是输出整型变量num中的个位数、十位数、百位数的值,表修改程序 的错误使之可以正确运行。注:“***********found***********”下边的代码有错误。 说明:num1存放百位数,num2存放十位数,num3存放个位数 #include int num3=num-num1*100-num2*10; printf(“%d,%d,%d”,num1,num2,num3); } 9、 下面程序的功能是将num1和num2进行合并,比如:num1和num2分别为12和34, 合并之后就是1234。就是将num1的十位数作为合并后数的千位数,个位数作为合并后数的百位数。Num2的十位数作为合并后数的十位数,个位数作为合并后数的个位数。 注:“***********found***********”下边的代码有错误。 #include int num1_1=12/10; int num1_2=12%10; int num2_1=34/10; int num2_2=34%10; ***********found*********** num=num2_1*1000+num2_2*100+num1_1*10+num1_2; ***********found*********** printf(\"%d,%d,%f\printf(\"\\n\"); } 10、 下面程序的功能是将实型变量里的值进行四舍五入,保留两位小数。 注:“***********found***********”下边的代码有错误。 #include float num=12.345; int num_l=num*100; ***********found*********** num=num_l/100.0; printf(\"%f\} 11、 编写程序将整型变量num中的数倒序存储。比如:num中存储123,通过该程序要该 变量的值改为321。 实验四 函数 【实验目的】 1. 学会使用常用的数学函数、库函数 2. 学会自定义函数 【实验内容】 1、 运行下面的程序尝试学习使用putchar 函数(字符输出函数) #include main(){ char a='B',b='o',c='k'; putchar(a);putchar(b);putchar(b);putchar(c);putchar('\'); putchar(a);putchar(b); putchar('\\n'); putchar(b);putchar(c); } 运行程序输出: Book Bo Ok 思考‟\‟表示什么意思? 尝试修改程序使程序输出: Book Bo ok ok 编程要求只允许增加putchar语句。 2、 通过运行程序尝试使用getchar函数(键盘输入函数) 程序的功能:输入单个字符再将其输出到屏幕上。 #include printf(\"input a character\\n\"); c=getchar(); putchar(c); } 思考程序的后两行:c=getchar(); putchar(c); 怎么用一行表示。 3、 我们学过在C语言中想输出数据到显示器我们用printf,如果想从键盘输入数据到计算 机中在C语言是使用scanf。 例子: 从键盘输入三个整数值,分别存入变量a、b、c中,然后将这三个变量的值输出到计算机显示器上。 源程序如下: # include main(){ int a,b,c; printf(\"input a,b,c\\n\"); scanf(\"%d%d%d\ printf(\"a=%d,b=%d,c=%d\ } 我们对以上程序进行编译运行。 注意:输入a、b、c的三个值时,中间要用空格隔开,输入完成再按回车键结束输入。 程序运行步骤如下: 首先程序输出一行提示: input a,b,c (在第二行闪烁着光标) 现在我们开始输入a 、b、c的值, 我们分别输入1、2、3,并且中间用空格分开 三个值输入完毕了我们按键盘上的回车键。 程序输出以下内容: 对照以上的程序我们分析程序的运行原理。 C语言中输入指令scanf的格式为: scanf(“格式控制字符串”,变量序列); 例如:scanf(\"%d%d%d\ 前边的“格式控制字符串”和printf中一样,也用到了%d这样的占位符 后边的变量序列和前边的占位符是一一对应,有几个占位符就有几个变量名,并且每个变量名前边要加“&”符号,变量名之间用逗号分隔开。 4、 编写程序输入三个小数1.1、 2.2、3.3 分别存入变量i、j、k中,并将这三个变量的值 输出,仿照上边的例子编写。 要求输出为:a=1.1,b=2.2,c=3.3 提示:注意小数对应占位符的格式。小数形式的变量要用float定义而不是用int。 另外关于printf中小数位数的控制。(参考C程序教材第7页下边) 5、 请将下边的程序补充完整,实现的功能是:求两个输入实数的和并输出到计算机显示器 上。 提示: 使用C语言的scanf输入指令从键盘输入两个实数(不是整数),并将输入的两个值存入到定义的两个变量中,然后再求出两个变量的值使用printf输出(printf可以输出两常量的算术运算结果同样可以输出两个变量的算术运算结果)。输出数据要求保留两位小数。 关于保留两位小数,请参考C程序教材第1页例1.2和第18页表2.4。 #include float num1,num2; scanf(\"%f%f\//请在这里补充 printf(\"%f\} 6、 请将下面的程序编写完整实现如下功能: 输入一个字母,要求输出该字母的下一个字母. 例如:输入大写字母A, 程序会输出大写字母B 输入小写字母a 程序会输出小写字母b. 要求:运行时不要输入Zz这两个字母,因为它们都是最后一个。 提示:一个字母就是一个字符,字符型其实就是整型也是可以进行加1、减1这些算术运算的。请参考实验二的第二题。 #include char letter; printf(“请输入一个字母:”); scanf(\"%c\//请在这里补充 printf(\"%c\\n\} 7、 请将下面的程序编写完整实现如下功能: 输入一个小写字母,要求输出该字母的大写字母. #include char letter; printf(“请输入一个小写字母:”); scanf(\"%c\//请在这里补充 printf(\"%c\\n\} 8、 求一个数的平方根。 程序要求:输入一个实数,程序求出该数的平方根后进行输出。 提示:C语言中求平方根属于数学运算,需要在程序的最开头将math.h该头文件包括进来。 求平方根在C语言中使用sqrt(), 比如:一个变量为A的里边存储4的平方根,应该这样写:A=sqrt(4.5);这个A是实型变量用float定义。 例子: #include float num=4.5; num=sqrt(num);//该句求出num的平方根存入变量num中。 printf(\"%f\} 参照上边的程序尝试用scanf给变量num赋值。完成本题的要求。 9、 调试以下程序: #include int main(void) { } 执行结果是: First Line. Second Line. 10、 运行下边的程序学习自定义函数, 程序功能:输入两个整型数程序求出它的和并它们的和输出 printf(\"\\n\"); printf(\"First Line.\\n\"); newline(); printf(\"Second Line.\\n\"); return 0; #include //函数功能:求两个数的和并将求的和值返回 int sum(int x, int y) { int z=x+y; return z; } main() { int a=2,b=3,c; c=sum(a,b); printf(“%d+%d=%d”,a,b,c); } 11、 请补充下边函数的内容。 程序功能:输入一个小写字母将其转为大写字母并输出。 #include //该函数的功能实现小写字母转为大写字母再返回 char toupper(char letter){ } main(){ char letter; printf(“请输入一个小写字母:”); scanf(\"%c\letter=toupper(letter); printf(\"%c\\n\} 12、 请补充下边函数的内容。 程序功能:输入一个小写字母将其下一个小写字母转为大写字母并输出。 #include //该函数的功能实现小写字母转为大写字母再返回 char toupper(char letter){ } char nextletter(char letter){ letter= letter+1; return letter; } main(){ char letter; printf(“请输入一个小写字母:”); scanf(\"%c\letter= nextletter (letter); letter=toupper(letter); printf(\"%c\\n\ } 13、 修改下边程序的错误。 下边程序的功能:输入两个实型数据,求出这两个数的和并输出。 注:“***********found***********”下边的代码有错误。 #include //该函数的功能实现求出两个实型数据的和再返回 ***********found*********** int sum(float num1,float num2){ return num1+ num2; } main(){ float num1, num2,num3; printf(\"请输入两个小数:\"); ***********found*********** scanf(\"%f%f\num3= sum(num1,num2); ***********found*********** printf(\"%f+%f=%d\} 14、 修改下边程序的错误。 下边程序的功能:输入两个整型数据,求出这两个数的商并输出。 注:“***********found***********”下边的代码有错误。 #include //该函数的功能实现求出两个整型数据的商再返回 ***********found*********** int div(int num1,num2){ double num3=num1*1.0; return num3/num2; } main(){ int num1, num2; double num3; printf(\"请输入两个3位数的整数:\"); ***********found*********** scanf(\"%d%d\num3= div(num1,num2); ***********found*********** printf(\"%f/%f=%d\ } 15、 进一步学习scanf,运行下边的程序,程序功能是输入两个整数求这两个整数的和并输 出。 #include int num1,num2; scanf(\"%d,%d\ int sum=num1+num2; printf(\"\\n\"); printf(\"%d+%d=%d\} 运行时注意scanf上边红色显示,它表示,输入两个数中间以“,”逗号隔开。 尝试修改scanf的格式控制字符串的内容看看和输入的内容有什么联系。 实验五 判断/分支 【实验目的】 1. 学会使用判断分支语句 2. 运用判断分支解决实际的问题 【实验内容】 1、 运行下边的程序。 程序功能:输入两个实型数,输出较大的一个数。 #include //该函数的功能求出两个数中较大的并返回 double max(double num1,double num2){ if(num1>num2) return num1; else return num2; } /* 以上代码也可以用{}扩起来,扩起来的C语句称为复合语句。 if(num1>num2){ return num1; }else{ return num2; } */ main(){ double num1,num2,num3; printf(\"请输入两个小数:\"); scanf(\"%lf%lf\num3= max(num1,num2); printf(\"%lf\} 2、 运行下边的程序。 程序功能:输入三个实型数,求出最大的一个数并输出。 #include //该函数的功能求出三个数中较大的并返回 double max(double num1,double num2,double num3){ double max_num; if(num1>num2) max_num=num1; else max_num=num2; if(max_num>num3){ return max_num; }else{ return num3; } } main(){ double num1,num2,num3,num4; printf(\"请输入三个小数:\"); scanf(\"%lf%lf%lf\num4= max(num1,num2,num3); printf(\"%lf\} 3、 参考上边的程序,编写程序实现功能:输入三个实型数据,将最小一个输出。 4、 将下边的程序补充完整,求出四个数中最大的数,并输出。 #include //该函数的功能求出两个数中较大的并返回 double max(double num1,double num2){ if(num1>num2) return num1; else return num2; } main(){ double num1,num2,num3,num4,max_num; printf(\"请输入四个小数:\"); scanf(\"%lf%lf%lf%lf \//请在此补充程序,可以补充多行 printf(\"%lf\} 5、 运行下边的程序。 程序功能:输入学生的分数,如果分数在60分以下则输出不及格,如果在60分以上80分以下输出及格,如果80到90分(不包括90分)输出良好,如果90以上输出优秀。 #include float num; printf(\"请输入学生的分数:\"); scanf(\"%f\ if(num>=0 && num<60){ printf(\"不及格\\n\"); }else if(num>=60 && num<80){ printf(\"及格\\n\"); }else if(num>=80 && num<90){ printf(\"良好\\n\"); }else if(num>=90){ printf(\"优秀\\n\"); } } 或: #include float num; printf(\"请输入学生的分数:\"); scanf(\"%f\ if(num>=0 && num<60){ printf(\"不及格\\n\"); } if(num>=60 && num<80){ printf(\"及格\\n\"); } if(num>=80 && num<90){ printf(\"良好\\n\"); } if(num>=90){ printf(\"优秀\\n\"); } } 思考以上两种实现方式的区别??? 6、 运行下边程序。程序功能:输入1到7的整数,输入星期的中文和英文表示。比如输入 1程序输出“星期一:Monday”。 #include 星期一:Monday 星期二:Tuesday 星期三:Wednesday 星期四:Thursday 星期五:Friday 星期六:Saturday 星期日:Sunday */ main(){ int num; printf(\"请输入星期1-7:\"); scanf(\"%d\ if(num==1){ printf(\"星期一:Monday\\n\"); }else if(num==2){ printf(\"星期二:Tuesday\\n\"); }else if(num==3){ printf(\"星期三:Wednesday\\n\"); }else if(num==4){ printf(\"星期四:Thursday\\n\"); }else if(num==5){ printf(\"星期五:Friday\\n\"); }else if(num==6){ printf(\"星期六:Saturday\\n\"); }else if(num==6){ printf(\"星期日:Sunday\\n\"); } } 或 #include 星期一:Monday 星期二:Tuesday 星期三:Wednesday 星期四:Thursday 星期五:Friday 星期六:Saturday 星期日:Sunday */ main(){ int num; printf(\"请输入星期1-7:\"); scanf(\"%d\ switch(num){ case 1: printf(\"星期一:Monday\\n\"); break; case 2: printf(\"星期二:Tuesday\\n\"); break; case 3: printf(\"星期三:Wednesday\\n\"); break; case 4: printf(\"星期四:Thursday\\n\"); break; case 5: printf(\"星期五:Friday\\n\"); break; case 6: printf(\"星期六:Saturday\\n\"); break; case 7: printf(\"星期日:Sunday\\n\"); break; default: printf(\"输入无效!\\n\"); break; } } 7、 请将第五题学生分数判断方式修改为switch方式。 8、 请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入 (规 定实型数为正数)。 例如:实型数为 1234.567, 则函数返回 1234.57; 实型数为 1234.564, 则函数返回 1234.56。 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include int main(void) { float a; printf (\"Enter a: \"); scanf ( \"%f\ printf ( \"The original data is : \" ); printf ( \"%f \\n\\n\ printf ( \"The result : %f\\n\NONO( ); return 1; } 9、 函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合 并的方式是:将a中的十位和个位数依次放在变量c的十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。 例如,当a=45,b=12。调用该函数后,c=5241。 注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include int main(void) { int a,b; long c; printf(\"Input a, b:\"); scanf(\"%d%d\ c=fun(a, b); printf(\"The result is: %ld\\n\ NONO(); return 0; } 实验六 循环 【实验目的】 1. 学会使用循环语句 2. 运用循环解决实际的问题 【实验内容】 1、 运行下边的程序,程序功能是求1-100的整数的和并输出。学习循环的几种用法。 第一种方法: #include int i,sum=0; i=1; while(i<=100) { sum=sum+i; i++; } printf(\"%d\\n\} 第二种方法: #include int i,sum=0; i=1; do { sum=sum+i; i++; }while(i<=100); printf(\"%d\\n\ } 第三种方法: #include int i,sum=0; i=1; for(i=1; i<=100; i++)sum=sum+i; printf(\"%d\\n\} 第四种方法: #include int i,sum=0; i=1; loop: if(i<=100) {sum=sum+i; i++; goto loop;} printf(\"%d\\n\} 2、 请修改上边的程序(任意选择一种方法),完成功能:求1-100的整数中所有偶数的和。 提示:能被2整除的数为偶数。可以使用if先判断是否是偶数再进行相加。 3、 运行下边的程序。 程序功能:输入10个学生的分数,统计及格和不及格(0-59分为不及格)的人数。 要求:请在程序的每一条语句后面加上注释说明该条语句的意义。 #include int num1,num2; num1=num2=0; printf(“请输入学生分数:”); for(n=1;n<=10;n++){ float number; scanf(“%f”,& number); if(number<60){ num2++; }else{ num1++; } } printf(“及格%d,不及格%d”,num1,num2); } 4、 修改下边程序的错误,程序的功能是输入一个不大于100的整数,求该整数的阶乘, 并输出。 #include void main() { int number; scanf(\"%d\ if(number>100){ printf(\"请输入小于100的整数!\"); return; } int i; //***************found**************** int m=1; //***************found*************** for(i=1;i 5、 运行下面的程序,程序功能:输入整数存入变量m中,通过程序运行来判断m是否素 数。 提示:素数是只能被1和本身整除的数。 要求:请在程序的每一条语句后面加上注释,说明该条语句的意义。 #include printf(\"%d 是素数\\n\else printf(\"%d 不是素数\\n\ } 6、 运行下面的程序,程序功能:求100至200间的全部素数,并进行输出。 要求:请在程序的每一条语句后面加上注释,说明该条语句的意义。 #include int m,i,k,n=0; for(m=101;m<=200;m=m+2) { k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0)break; if(i>=k+1) { printf(\"%d \ n=n+1; if(n%5==0)printf(\"\\n\"); } } printf(\"\\n\"); } 7、 请完善下面的程序,程序功能:求100至200间的全部非素数,并进行输出。 #include #include //该函数的功能是判断一个数是否是素数,如果是则函数返回1,否则返回0。 int Test(int num){ } main() { int m,i,k,n=0; for(m=101;m<=200;m=m+2) { if(!Test(m))//判断m,如果不是素数则满足条件 { printf(\"%d \ n=n+1; if(n%5==0)printf(\"\\n\"); } } printf(\"\\n\"); } 8、 将下边的程序编写完整,程序功能是从键盘输入小写字母程序执行后输出大写字母,如 果输入的不是小写字母则提示用户:请输入小写字母(a-z),如果用户输入结束标记0则退出程序。 #include //请将下面的函数补充完整,函数功能是将小写字母转换为大写字母并返回 char toupper(char letter){ } void hint(){ printf(\"请输入小写字母:(0 结束输入)\"); } void main() { char letter; hint(); while(1) //无限循环 { letter=getchar(); //接收从键盘输入的字符 if(letter==10) continue; //将输入字符后的回车过虑掉 if(letter=='0'){ //如果输入结束标记退出程序 printf(\"The end!\\n\"); break; //退出循环体 } if(letter>='a'&& letter<='z') //判断必须从键盘输入的字符必须是a-z { printf(\"%c\\n\ hint(); }else{ printf(\"您输入的字符不对!\"); } } 9、 根据公式求圆周率 } hint(); #include printf(\"Input eps:\") ; scanf(\"%lf\ printf(\"\\neps = %lf, PI=%lf\\n\} 10、给定程序MODI1.C中函数fun的功能是:找出一个大于形参m且紧随m的素数,并作为函数值 返回。 请改正程序中的错误(/**************found**************/下边语句行中有错),使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include for (i = m + 1 ; ; i++) { for (k = 2 ; k < i ; k++) /**************found**************/ if (i % k != 0) break ; /**************found**************/ if (k < i) return(i); } } void main() { int n ; n = fun(20) ; printf(\"n=%d\\n\ } 11、给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位上的数,依次 构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:7654321时,t中的数为:642。 请将函数补充完整。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include //7654321 //函数功能:输入一个整数通过运算处理将偶数位的数拿出来按顺序组成一个整数。例如, 当s中的数为:7654321时,t中的数为:642。 long fun(long s){ } main(){ long s, t; printf(\"\\nPlease enter s:\"); scanf(\"%ld=fun(s); printf(\"The result is: %ld\\n\} 12、 编写程序,程序功能:根据输入的正整数,输出相应的图形。 输入4程序输出如下图形: 输入6程序输出如下图形: 实验七 指针 【实验目的】 1. 学会函数的传址调用,学习指针定义、赋值、应用。 2. 学会指针作为函数参数传递。 3. 返回地址的函数 【实验内容】 1、 运行下面的程序,认识指针变量。 #include int *pointer_1, *pointer_2; a=100;b=10; pointer_1=&a; pointer_2=&b; printf(\"%d,%d\\n\ printf(\"%d,%d\\n\} 2、 读下边的程序看看程序运行结果是什么,再运行下边的程序看看是否和自己得出的一 样。 输入1,2 #include int *p1,*p2,*p,a,b; scanf(\"%d,%d\ p1=&a;p2=&b; if(a} printf(\"\\na=%d,b=%d\\n\ printf(\"max=%d,min=%d\\n\} 3、 运行下面的程序,程序功能:交换变量num1和num2的值。原来num1的值为5,num2 的值是10,通过函数swap处理,num1中的值为变为了10,num2中的值变为了5。 #include int num1,num2; num1=5; num2=10; printf(\"%d,%d\\n\ swap(&num1,& num2); printf(\"%d,%d\} 4、 运行下面的程序,学会函数返回值为指针(地址)类型。 #include int x,y,*z; printf(\"input two numbers:\\n\"); scanf(\"%d%d\ z=max(x,y); printf(\"maxmum=%d\} 实验八 数组、字符串 【实验目的】 1. 基本类型数组的定义,赋值、参数传递等应用,学会冒泡排序。 2. 字符串的定义,使用。 3. 递归函数 【实验内容】 1、 运行上边的程序,认识数组。 程序功能:输入10个整数,求出最大的数并输出。 #include int i,max,a[10]; printf(\"input 10 numbers:\\n\"); for(i=0;i<10;i++) scanf(\"%d\ max=a[0]; for(i=1;i<10;i++) if(a[i]>max) max=a[i]; printf(\"maxmum=%d\\n\} 2、 运行下边的程序。 程序功能:输入10个学生的分数,统计及格和不及格(0-59分为不及格)的人数。 程序执行最后要把刚才输入的学生分数以每五个为一行(中间以空格隔开)进行输出。 最后输入统计的分类情况。及格:XX人,不及格:XX人。 #include int num1,num2; num1=num2=0; float mark[10]; printf(\"请输入学生分数:\"); //输入学生的分数 for(n=0;n<10;n++){ float number; scanf(\"%f\ mark[n]=number; } //开始打印输出 printf(\"学生成绩统计如下:\"); printf(\"\\n\"); for(n=0;n<10; n++){ printf(\"%f \ if((n+1)%5==0) printf(\"\\n\"); if(mark[n]<60){ num2++; }else{ } } printf(\"\\n\"); printf(\"及格:%d人,不及格:%d人\printf(\"\\n\"); } 3、 学习用指针访问数组。 将上边的程序修改为如下所示,再进行运行: 屏蔽掉下边的程序段: /* for(n=0;n<10; n++){ printf(\"%f \ if((n+1)%5==0) printf(\"\\n\"); if(mark[n]<60){ num2++; }else{ } } */ 将屏蔽的代码替换为下边的代码。 float *mark_point; mark_point=mark; for(n=0;n<10; n++){ printf(\"%f \ if((n+1)%5==0) printf(\"\\n\"); if(*mark_point<60){ num2++; }else{ num1++; num1++; num1++; } mark_point++; } 4、 将上边的程序中统计及格与不及格的人数的功能封装成一个函数。 #include fun(float number[],int *num1,int *num2){ } main(){ int n; int num1,num2; num1=num2=0; float mark[10]; printf(\"请输入学生分数:\"); //输入学生的分数 for(n=0;n<10;n++){ float number; scanf(\"%f\ mark[n]=number; } //开始打印输出 printf(\"学生成绩统计如下:\"); printf(\"\\n\"); fun(mark,&num1,&num2); for(n=0;n<10; n++){ printf(\"%f \ if((n+1)%5==0) printf(\"\\n\"); } printf(\"\\n\"); printf(\"及格:%d人,不及格:%d人\printf(\"\\n\"); } 5、 学习排序算法,算法1(冒泡排序)。 程序功能:将数组num里的数由小到大排序。 #include int num[]={4,3,55,3,4,34,67}; int i,j,temp; for(i=0;i 程序功能:将数组num里的数由小到大排序。 #include int num[]={4,33,55,3,4,34,67}; int i,j,temp; for(i=0;i num[j]=temp; for(j=0;j num[j+1]=temp; } } 6、 将上边的程序封装成一个函数,函数功能是把数组的内容由小到大排序。 #include sort(int num[]){ int i,j,temp; for(i=0;i for(i=0;i 平均成绩。 for(j=i+1;j num[j]=temp; Math C Foxpro 张 80 75 92 王 61 65 71 李 59 63 70 赵 85 87 90 周 76 77 85 可设一个二维数组a[5][3]存放五个人三门课的成绩。再设一个一维数组v[3]存放所求得各分科平均成绩,设变量average 为全组各科总平均成绩。编程如下: #include int i,j,s=0,average,v[3],a[5][3]; printf(\"input score\\n\"); for(i=0;i<3;i++) { for(j=0;j<5;j++) { scanf(\"%d\ s=s+a[j][i]; } v[i]=s/5; s=0; } average =(v[0]+v[1]+v[2])/3; printf(\"math:%d\\nc languag:%d\\ndbase:%d\\n\ printf(\"total:%d\\n\} 8、 上边的程序可改为如下所示,学习将数组作为函数参数传递。 #include for(j=0;j<5;j++) { s=s+a[j][i]; } v[i]=s/5; s=0; } return v; } main() { int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}}; int average,*v; v=fun(a); average =(v[0]+v[1]+v[2])/3; printf(\"math:%d\\nc languag:%d\\ndbase:%d\\n\ printf(\"total:%d\\n\} 9、 认识字符串。学习字符串的初始化 #include char c1[]={'c', ' ','p','r','o','g','r','a','m'}; char c2[]={'c', ' ','p','r','o','g','r','a','m','\\0'}; char c3[]={\"C program\ char *c4=\"C program\"; printf(\"%s\\n\ printf(\"%s\\n\ printf(\"%s\\n\printf(\"%s\\n\} 10、 认识字符串。学习字符串的初始化 #include //char a[][5]={{'B','A','S','I','C'},{'d','B','A','S','E'}}; char a[][6]={\"BASIC\ for(i=0;i<=1;i++) { for(j=0;j<=4;j++) printf(\"%c\ printf(\"\\n\"); } //printf(\"%s\//printf(\"%s\} 11、请编写一个函数fun, 其功能是: 将ss所指字符串中所有下标为奇数位置上的字母转换 为大写(若该位置上不是字母, 则不转换)。 例如, 若输入\"abc4EFg\",则应输出\"aBc4EFg\"。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入你编写的若干语句。 #include #include void main( void ) { char tt[51]; printf( \"\\nPlease enter an character string within 50 characters:\\n\" ); gets( tt );//输入一个字符串 printf( \"\\n\\nAfter changing, the string\\n \\\"%s\\\"\fun(tt) ;//输出一个字符串 printf( \"\\nbecomes\\n \\\"%s\\\"\} 12、 把下边的程序补充完整。程序功能输入一个小于100的整数,求该整数的阶乘。 例如输入5,程序计算出5*4*3*2*1的值,并输出m!=60。 #include void main() { int number; scanf(\"%d\ if(number>100){ printf(\"请输入小于100的整数!\"); return; } int i; double m=1; m=multiply(number); printf(\"%d!=%lf\ } 实验九 结构体、共用体 【实验目的】 1. 学会结构体和共用体的定义、应用,及它们的区别。 2. 结构体指针、结构体数组使用。 【实验内容】 1、 运行下边的程序,学会结构体的定义、赋值。 程序功能:输入学生的信息(学号、姓名、成绩),再进行输出显示。要求使用结构体存储学生的信息。 #include { /*定义结构体变量用于存储学生信息*/ struct stu { int num;//学号 char name[10];//姓名 float score;//成绩 }; struct stu boy1,boy2; printf(\"====开始输入学生信息====\"); printf(\"\\n\"); printf(\"请输入学生的学号:\"); scanf(\"%d\ printf(\"\\n\"); printf(\"请输入学生的姓名:\"); scanf(\"%s\ printf(\"\\n\"); printf(\"请输入学生的成绩:\"); scanf(\"%f\ printf(\"\\n\"); printf(\"学生信息如下:\"); printf(\"\\n\"); printf(\"学号:%d\ printf(\"\\n\"); printf(\"姓名:%s\ printf(\"\\n\"); printf(\"成绩:%f\ printf(\"\\n\"); } 2、 运行下边的程序学会使用结构体指针: #include int num; char *name; char sex; float score; } boy1={102,\"Zhang ping\main() { pstu=&boy1; printf(\"Number=%d\\nName=%s\\n\ printf(\"Sex=%c\\nScore=%f\\n\\n\ printf(\"Number=%d\\nName=%s\\n\ printf(\"Sex=%c\\nScore=%f\\n\\n\ printf(\"Number=%d\\nName=%s\\n\ printf(\"Sex=%c\\nScore=%f\\n\\n\} 3、 运行下边的程序,学会结构体数组。 程序功能:输入10个学生的学号(整型)和分数,统计及格和不及格(0-59分为不及格)的人数。 程序执行最后要把刚才输入的学生的学号、分数进行输出。每一行输出结果为学号:分数。 最后输入统计的分类情况。及格:XX人,不及格:XX人。 #include int num; float mark; }; main(){ int n; int num1,num2; num1=num2=0; struct stu student[10]; printf(\"请输入学生的学号和分数(学号和分数中间以冒号:分开):\"); int num_temp; float mark_temp; for(n=0;n<2;n++){ float number; scanf(\"%d:%f\ student[n].num=num_temp; student[n].mark=mark_temp; if(mark_temp<60){ num2++; }else{ num1++; } } //开始打印输出 printf(\"学生成绩统计如下:\"); printf(\"\\n\"); for(n=0;n<10; n++){ printf(\"%d:%f\ printf(\"\\n\"); } /* float *mark_point; mark_point=mark; for(n=0;n<10; n++,mark_point++){ printf(\"%f \ if((n+1)%5==0) printf(\"\\n\"); } */ printf(\"\\n\"); printf(\"及格:%d人,不及格:%d人\printf(\"\\n\"); } 4、 已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编 写函数 fun,函数的功能是:找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #define N 10 typedef struct { char num[10]; int s; } STU; fun( STU a[], STU *s ) { } int main (void) { STU int i; printf(\"***** The original data *****\\n\"); for ( i=0; i< N; i++ ) printf(\"No = %s Mark = %d\\n\ fun ( a, &m ); printf (\"***** THE RESULT *****\\n\"); printf (\"The lowest : %s , %d\\n\ return 1; } 参考答案: int i; *s=a[0]; for(i=1;i 5、 公用体(联合体)学习 定义方法: union stu { int num; char *name; a[N]={ {\"A01\ {\"A04\ {\"A07\ char sex; float score; }; union stu boy; 注意:共用体的特点: a>每一瞬间只有一个成员起作用. b>起作用的是最后一次存放的成员. c>共用体变量的地址和它的各成员的地址都是同一个地址. d>不能对共用体变量名赋值,也不能引用共用体变量名来获得一个值.不能在定义共用体是对其初始化.(结构体可以) e>不能把共用体作为函数参数,返回值也不能是共用体.(因为它的类型不定)但可以使用指向共用体变量的指针. 实验十 文件操作 【实验目的】 1. 学习使用文件操作函数。 【实验内容】 1. fgetc fputc fgetc 表头文件 include 函数说明 fgetc()从参数stream所指的文件中读取一个字符。若读到文件尾而无数据时便返回EOF。 返回值 getc()会返回读取到的字符,若返回EOF则表示到了文件尾。 fputc 表头文件 include 定义函数int fputc(int c,FILE *stream); 函数说明 fputc 会将参数c 转为unsigned char 后写入参数stream 指定的文件中。 返回值 fputc()会返回写入成功的字符,即参数c。若返回EOF则代表写入失败。 #include fp = fopen(\"c:\\in.dat\ wf = fopen(\"c:\\out2.dat\while((c=fgetc(fp))!=EOF) { printf(\"%c\ fputc(c,wf); } fclose(fp); } 2. fgets fputs fgets(由文件中读取一字符串) 表头文件 include 定义函数 har * fgets(char * s,int size,FILE * stream); 函数说明 fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。 返回值 gets()若成功则返回s指针,返回NULL则表示有错误发生。 fputs(将一指定的字符串写入文件内) 表头文件 #include 定义函数 int fputs(const char * s,FILE * stream); 函数说明 fputs()用来将参数s所指的字符串写入到参数stream所指的文件内。 返回值 若成功则返回写出的字符个数,返回EOF则表示有错误发生。 #include void main( void ) { char tt[51], ch; FILE *rf, *wf ; int len ; rf = fopen(\"c:\\in.dat\ wf = fopen(\"c:\\out.dat\ while(fgets( tt, 50, rf )!=NULL) { printf(\"%s\ len = strlen(tt) - 1 ; ch = tt[len] ; if(ch == '\\n' || ch == 0x1a) tt[len] = 0 ; //fprintf( wf, \"%s\\n\ fputs(tt,wf); fputs(\"\\n\ } fclose(rf) ; fclose(wf) ; } 3. fscanf fprintf #include typedef struct { char num[10]; int s; } STU; int fun( STU a[], STU *s ) { int i; *s=a[0]; for(i=1;i int main (void) { STU int i; printf(\"***** The original data *****\\n\"); for ( i=0; i< N; i++ ) printf(\"No = %s Mark = %d\\n\ fun ( a, &m ); printf (\"***** THE RESULT *****\\n\"); printf (\"The lowest : %s , %d\\n\ NONO( ); return 1; } int NONO(void) { a[N]={ {\"A01\ {\"A04\ {\"A07\ FILE *rf, *wf ; STU a[N], m ; int i ; rf = fopen(\"c:\\in.dat\ wf = fopen(\"c:\\out.dat\ for(i = 0 ; i < 10; i++) fscanf(rf, \"%s %d\\n\ fun(a, &m) ; fprintf (wf, \"The lowest : %s, %d\\n\ fclose(rf) ; fclose(wf) ; return 1; } 因篇幅问题不能全部显示,请点此查看更多更全内容