《C语言程序设计》实训指导书
《-C语言程序设计》实验指导书
《-C语言程序设计》实验指导书实验一:C语言程序结构与运行机制实验目的:1. 了解C语言基本程序结构和运行机制;2. 掌握C语言程序的编译、运行和调试过程;3. 熟悉常用的编程工具,如编译器和集成开发环境。
实验器材:1. 计算机;2. C语言编译器。
实验内容:1. 实验一介绍C语言是一种广泛应用于系统开发、嵌入式设备和科学计算等领域的高级编程语言。
本实验旨在让学生通过实例了解C语言的基本程序结构和运行机制,并掌握使用C语言进行编程的基本方法。
2. 实验环境搭建(1)选择适合的C语言编译器,如GCC、Visual Studio等,并进行安装;(2)配置编译器的环境变量,以便在命令行中能够直接调用编译器;(3)确保编译器的版本和系统的兼容性,以避免出现不必要的问题。
3. 编写第一个C程序(1)打开任意文本编辑器,新建一个以.c为后缀名的文件,如hello.c;(2)在文件中编写以下代码:```C#include <stdio.h>int main() {printf("Hello, C!\n");return 0;}```(3)保存文件,并使用编译器进行编译。
(4)在命令行中转到保存的文件所在的目录,并执行以下命令:```gcc hello.c -o hello```(5)执行编译后的可执行文件:```./hello```(6)观察程序输出结果是否为"Hello, C!"。
4. 理解程序结构(1)程序的第一行`#include <stdio.h>`是一个预处理指令,用于引入标准输入输出库,使得我们可以使用printf等函数。
(2)`int main()`是C程序的主函数,程序从这里开始执行,花括号内的代码是程序的主体部分。
(3)`printf("Hello, C!\n");`是一个输出语句,将字符串"Hello, C!"输出到屏幕上。
C语言程序设计实验实验指导书及答案
实验一熟悉C程序运行环境班级学号姓名成绩一、实验目的1. 熟悉C语言Visual C++调试环境。
2. 掌握C程序的编辑、调试及运行。
二、实验内容项目1. 调试并运行下面程序,并写出运行结果:#include <>int main(){printf(“Good morning!\n”);printf(“Hello,world!\n”);return 0;}运行结果(注意,按照屏幕输出格式写):项目2. 调试并运行下面程序,并写出运行结果:#include <>int main(){int a , b , sum; /*定义变量*/a=23; b=56; /*为变量赋值*/sum=a+b; /*计算两个变量的和*/printf(“sum is %d\n”,sum); /*输出计算结果*/ return 0;}运行结果:项目3. 调试并运行下面程序,并写出运行结果:#include <>int max(int,int);int main(){int a , b , c; /*定义变量*/a=23; b=56; /*为变量赋值*/c=max(a,b); /*调用max函数,将得到的值赋给c*/printf(“max is %d\n”,c); /*输出c的值*/return 0;}int max(int x,int y) /*定义max函数,函数值为整型*/ {int z; /*定义变量*/if(x>y)z=x;elsez=y;return(z); /*将z的值返回*/}运行结果:三、提高部分1.试想,如果求10个数中的最大者,则程序该如何编写。
程序代码运行结果:实验二数据及其运算班级学号姓名成绩一、实验目的1. 掌握C数据类型的概念、熟悉整型、字符型和实型基本类型的常量的用法;学会三种基本类型变量的定义、赋值和使用方法。
2. 掌握算术表达式、关系表达式及逻辑表达式的特点及用法。
C程序设计-实训指导书
项目三 循环结构程序设计
一、项目(实训)名称
循环结构程序设计
二、项目(实训)学时数
4课时
三、项目(实训)目标
四、项目(实训)中的具体任务
1、分别用while语句、do-while语句编写程序,计算e≈1+1/1!+1/2!+...+1/n!
2.如果一个数恰好等于它的所有因子(包括1但不包括自身)之和,则称之为“完数”。例如6的因子是1,2,3,且6=1+2+3,因此6是完数。编写程序找出1000之内的所有完数及这些完数的和。
2、说明调试过程中出现的现象
3、实训报告
获得的知识:
1、程序调试和结果验证的过程
2、解题思路
十四、项目(实训)中的具体任务
1、调试下列程序,使之具有如下功能:输入a、b、c三个整数,求最小值并验证结果。
#include <stdio.h>
intmain()
{
int a,b,c;
scanf("%d%d%d",a,b,c);
if((a>b)&&(a>c))
if(b<c)
printf("min=%d\n",b);
else
printf("min=%d\n",c);
if((a<b)&&(a<c))
printf("min=%d\n",a);
C语言程序设计实验指导书
C 语言程序设计实验指导书电子工程学院2012-2实验一 C程序的运行环境和编辑、调试、运行简单C程序一、实验目的1.了解 Turbo C 的基本操作方法,学会独立使用该系统。
2.掌握在该系统上如何编辑、编译、运行一个C程序。
二、实验内容及步骤1.进入C的工作环境1)在Windouws环境下:“开始”→“程序”→“MS-DOS”屏幕上进入 MS-DOS窗口2)在Dos环境下:键入命令c:\> cd c:\tc↙c:\tc> tc↙屏幕上出现Turbo C的工作环境2.熟悉Turbo C的工作环境了解Edit窗口与Message窗口了解主菜单的8个菜单项File Edit Compile Project Option Debug break/watch 3.输入并运行一个简单的程序File→New输入源程序:main(){printf("This is a C program.\n");printf("OK\n");}按F9进行编译和连接,观察屏幕上显示的编译信息。
如果出现出错信息,则应找出原因并改正。
按Run→Run(或按Ctrl+F9) 编译、连接、运行一起完成。
按Run→User screen(或按Alt+F5) 察看运行结果。
按任一键从用户屏切换回TC窗口。
4.输入并编辑第二个C程序File→New输入源程序:main ( ){int a,b,sum;a=123; b=456;sum=a+b;printf("sum is %d\n", sum);}编辑、运行、调试该程序。
5.编辑、运行、调试自己编写的程序(至少一个程序)如:输入上底、下底和高,计算梯形面积。
观察屏幕上显示的编译信息。
如果出现出错信息,则应找出原因并改正。
用File→Save (或F2)保存程序(程序名为a1.c)三、实验报告要求写明:1.实验目的2.实验内容与步骤3.编写的程序(题目,经调试、运行后正确的程序)4.编译过程中出现的错误信息。
《C语言程序设计实验》指导书
《C语言程序设计实验》指导书以下是为大家整理的《c语言程序设计实验》指导书的相关范文,本文关键词为c语言程序设计实验,指导书,c语言程序设计实验,简明版,中北,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在教育文库中查看更多范文。
《c语言程序设计实验》指导书(简明版)中北大学软件学院20XX年10月实验一顺序结构程序设计(2学时)一、实验目的1、熟悉c编译环境、简单c程序结构及书写方式、以及c程序的编辑、编译、连接、运行、调试的步骤;2、掌握c语言的基本数据类型及其输入输出格式,以及输入输出函数的使用方法;3、掌握c语言的算术运算符(特别是自增、自减运算符)、赋值运算符、关系运算符、逻辑运算符、条件运算符、逗号运算符的使用;4、掌握c语言顺序结构程序的执行流程、设计方法,能够根据实际问题灵活使用顺序结构,画出程序的算法流程图,设计出逻辑合理、思路清晰、结果正确的顺序结构程序。
二、实验内容及要求1、实验内容包括8道题目,分为基本内容和选做内容两部分。
要求:(1)基本内容中的实验题目是必须要完成的,选做内容中的实验题目可以根据自己的情况选做或全做(越多越好,适当加分);(2)在实验之前编写出基本内容、选做内容中的所有程序,实验前检查(视未完成情况适当扣分);(3)对于设计型题目,要求画出程序流程图(传统流程图和n-s 图);(4)在上机实验过程中,注意总结和体会上机步骤(编辑、编译、连接、运行、调试、结果分析),注意培养观察、分析和排除编译错误、连接错误和程序逻辑错误的初步能力;(5)上机结束后,应按要求认真书写实验报告(格式见附件)。
2、基本内容(1)[验证型]编辑下列程序,然后进行编译、连接和运行,观察结果,并简要总结简单c程序的结构、书写格式以及上机过程;#includeintmain(){printf(\return0;}(2)[验证型]通过运行下列程序,分析各种格式符的使用方法。
C语言程序设计实验指导书
二、实验环境 Windows + Visual C++
6
三、实验步骤 (一)阅读程序
int main()
{ int a,b,sum,minus;
a=123;b=456;
sum=a+b; minus=a-b;
printf("a+b=%d\na-b=%d\n",sum,minus);
return 0;
}
printf 中删除 a+b=和 a-b= 分析结果
printf 中删除第一个\n printf 中删除 a+b=和 a-b= 运行结果 printf 中删除第一个\n
scanf("%f",&x);
7
printf("\n2.4*x-1/2=%f",2.4*x-1.0/2); printf("\nx%%2/5-x=%f",(int)(x)%2/5-x); printf("\n(x-=x*10,x/=10)=%d\n",(x-=x*10,x/=10)); return 0; }
行号 #include <stdio.h>
1 int main()
2{
3
int x,y,a;
4
scanf("%x,%y",&x,&y);
5
a=(x+y)/2;
6
c语言程序设计 实验指导书
c语言程序设计实验指导书C语言程序设计实验指导书一、引言C语言是一种通用的高级编程语言,广泛应用于计算机科学和软件开发领域。
为了帮助学生更好地理解和掌握C语言的编程技巧,我们编写了本实验指导书。
本指导书旨在引导学生完成一系列的C语言实验,从简单的程序设计入门开始,逐步深入学习C语言的各个方面。
二、实验一:Hello World程序1. 实验目的通过编写一个简单的Hello World程序,学习C语言的基本语法和编程环境的搭建。
2. 实验内容编写一个C程序,在屏幕上输出"Hello World"字样。
3. 实验步骤1) 打开C语言编译器,新建一个源文件。
2) 在源文件中编写C程序,使用printf函数输出"Hello World"。
3) 编译并运行程序,观察输出结果。
4. 实验结果在屏幕上显示出"Hello World"字样。
三、实验二:变量和数据类型1. 实验目的了解C语言中的变量和数据类型的概念,学习如何声明和使用变量。
2. 实验内容编写一个C程序,演示各种数据类型的声明和使用。
3. 实验步骤1) 在源文件中声明各种数据类型的变量,如int、float、char等。
2) 对各种变量进行赋值和运算操作。
3) 使用printf函数输出各种变量的值。
4. 实验结果屏幕上显示出各种变量的值。
四、实验三:控制语句1. 实验目的学习C语言中的控制语句,掌握条件语句和循环语句的用法。
2. 实验内容编写一个C程序,演示条件语句和循环语句的使用。
3. 实验步骤1) 使用if语句判断某个条件是否成立,根据条件的结果执行相应的操作。
2) 使用for循环语句实现某个操作的重复执行。
3) 使用while循环语句实现某个操作的反复执行,直到某个条件不再满足。
4. 实验结果根据条件的不同,程序执行相应的操作,循环语句可以重复执行某个操作。
五、实验四:函数和数组1. 实验目的学习C语言中的函数和数组的概念,掌握函数的定义和调用,以及数组的声明和使用。
C语言实训指导书
C语言程序设计课程设计(实训)指导书河南工程学院计算机学院系统结构教研室适用专业:数学班级:数学与应用数学1341、1342C语言程序设计课程设计(实训)指导书一、课程基本知识1、实训目的通过实训,学会为涉及的数据定义适当的结构体,使用结构体设计;另一方面,通过实训,复习巩固二进制磁盘文件的建立,使用结构体数组作磁盘文件输入输出的中介,使用二进制磁盘文件存盘,增强数据抽象能力和程序设计的能力,为后续课程,特别是软件编码打下坚实的知识基础。
2、课程设计主要目的教育目标是在学生学习了C语言程序设计的基本知识、基本理论的基础上,通过综合实训,培养学生的动手能力,培养学生学习新知识的能力,提高学生分析问题和解决问题的综合能力,培养学生的团队合作精神,为今后从事专业工作打下必要的基础。
知识教学目标:(1)掌握模块化程序设计的方法;(2)进一步学习和掌握C语言中的文件操作函数及其应用;(3)学习和掌握C语言中的图形处理函数及其应用能力培养目标:(1)能正确分析现实生活中的问题,并抽象成数学模型,进行模块分析和编程;(2)在程序调试过程中,能根据运行环境给出的错误提示,正确解决程序中的语法错误;(3)在程序调试过程中,能根据运行结果,运用相应的手段,正确地找出并解决程序中的逻辑错误;(4)在实训过程中,适当进行小组分工,培养团队谐调和团队合作的能力;(5)提交课程实训任务书,培养专业文档书写的能力3、实训内容:剪刀石头布游戏、猜数游戏、简单计算器、万年历的制作和小型通讯录。
4、实训所用设施:PC机、VC6.0语言编辑、编译运行工具等。
5、实训任务及要求:根据提供的实习题目,认真完成软件设计的全部过程,并以最终软件设计成果来证明其独立完成实际任务的能力,从而,反映出理解和运用C程序知识的水平和能力,最后完成软件设计和程序调试并提交文档:课程实训报告书,报告书中包含设计的算法及部分程序代码。
二、实训基本操作方法1、按照系统用户手册及文档规范要求进行操作,养成查阅手册、文档的良好习惯;2、对特殊疑难问题采用讨论、协作等方式进行解决,有意识地训练团队合作意识;3、实训报告应多包含在实训过程中出现的错误及解决方法。
C语言程序设计实验指导书(新编)
C语言程序设计实验指导书(新编) C语言程序设计实验指导书(新编)1. 指导书简介本指导书是为了帮助学习C语言程序设计的学生更好地完成实验任务而编写的。
它包含了实验的具体内容、实验目的、实验要求、实验步骤和实验注意事项等内容,旨在引领学生掌握C语言程序设计的基本原理和实际应用。
2. 实验一:C语言程序结构与基本语法2.1 实验目的本实验旨在帮助学生了解C语言程序的基本结构和语法要求,掌握编写简单C程序的方法。
2.2 实验内容在本实验中,学生将学习C程序的基本结构和语法规则,并编写一个简单的C程序。
该程序要求实现从键盘输入两个整数,然后计算它们的和并输出结果。
2.3 实验步骤2.3.1 打开C语言编译器首先,打开C语言编译器,如Dev-C++或Code::Blocks等。
2.3.2 新建一个C文件在编译器中选择新建一个C文件,以便编写程序代码。
2.3.3 编写程序代码按照C语言的语法规则,编写程序代码。
首先,声明所需的变量,然后通过scanf函数从键盘输入两个整数,接着计算它们的和,并利用printf函数输出结果。
2.3.4 编译和运行程序完成程序代码的编写后,点击编译按钮进行编译。
如果没有出现错误,再点击运行按钮运行程序。
2.4 实验要求学生需要独立完成实验,并能够理解和解释编写的C程序代码。
2.5 实验注意事项在实验过程中,注意遵循C语言的语法规则,注意代码的格式和缩进,及时保存程序代码,避免数据输入错误。
3. 实验二:控制语句和函数的应用3.1 实验目的本实验旨在帮助学生掌握C语言中的控制语句和函数的应用,理解条件语句和循环语句的使用方法。
3.2 实验内容在本实验中,学生将学习条件语句和循环语句的基本概念和用法,并编写一个具有条件判断和循环操作的C程序。
3.3 实验步骤3.3.1 分析问题和设计算法首先,分析给定的问题,设计相应的算法。
确定使用的条件语句和循环语句的类型。
3.3.2 编写程序代码按照分析的算法,编写程序代码。
c语言程序设计实验指导
c语言程序设计实验指导
《C 语言程序设计实验指导》是与《C 语言程序设计》课程配套的实验教材,主要内容包括:
1. C 语言程序设计基础:包括 C 语言的基本数据类型、运算符和表达式、程序控制结构等。
2. 数组与字符串:介绍数组和字符串的定义、初始化和使用方法。
3. 函数:详细讲解函数的定义、调用、参数传递和递归函数等内容。
4. 指针:介绍指针的概念、指针与数组、字符串的关系以及指针的应用。
5. 结构体与共用体:讲述结构体和共用体的定义、初始化和使用方法。
6. 文件操作:介绍文件的打开、读写和关闭等操作。
每个实验都提供了明确的实验目的、实验内容和步骤,以及相应的示例程序和思考问题。
通过实验,可以帮助学生更好地理解和掌握 C 语言程序设计的基本概念、方法和技巧,提高学生的编程能力和解决实际问题的能力。
此外,本书还提供了一些常见的错误和调试方法,帮助学生在编程过程中及时发现和解决问题。
本书可作为高等院校计算机及相关专业 C 语言程序设计课程的实验教材,也可供自学 C 语言的读者参考。
C语言实训指导书
1、实训的目的上机实训是学习程序设计语言必不可少的实践环节, 特别是C 语言灵活, 简洁, 更需要通过编程的实践来真正掌握它. 对于程序设计语言的学习目的, 可以概括为学习语法规定, 掌握程序设计方法, 提高程序开发能力, 这些都必须通过充分的实际上机操作才能完成. 课程上机实训的目的, 不仅仅是验证教材和讲课的内容, 检查自己所编的程序是否正确, 课程安排的上机实训的目的可以概括为如下几个方面:.加深对课堂讲授内容的理解.熟悉程序开发环境, 学习计算机系统的操作方法.学习上机调试程序.2、实训的主要内容(1)主要内容熟悉C程序的运行环境、运行C程序的方法、C语言的数据类型、算术运算符的运用。
熟悉编制简单C程序过程,掌握赋值语句的使用,及输入输出方法的使用,顺序结构程序设计,循环控制语句while、for、do-while的运用,编制排序程序,掌握数组的使用,函数、指针的应用,预处理命令及结构体的应用。
(2)实践重点与难点实践课程重点在对三大结构的掌握和应用,还有数组,指针,函数结构体的应用。
难点在于指针、数组和结构体的使用。
3、实践仪器、设备1、实训场地:校内程序设计实训室2、实训设备:PC机3、实训工具及材料4、实训的方法与步骤按照知识点循序渐进的方法进行实训,其实训的顺序及步骤如下:1、编写并调试C语言的数据类型、算术运算符运用的相关程序。
2、熟悉编制简单C程序过程,掌握赋值语句的使用,及输入输出的应用程序。
3、编写并调试顺序结构的应用程序。
4、编写并调试循环控制语句while、for、do-while的应用程序。
5、编写并调试排序程序,掌握数组的应用程序。
6、编写并调试函数、预处理命令的应用程序。
7、编写并调试数组及函数在结构体中的应用程序。
C语言程序设计实验指导书
C语言程序设计实验指导书1. 实验概述本实验指导书旨在帮助学生掌握C语言程序设计的基本原理和技巧,并能够独立开发简单的C语言程序。
通过实验的完成,学生将学会如何运用C语言进行程序设计,掌握程序的调试和错误处理方法。
2. 实验环境本实验要求学生具备一台安装了C语言开发环境的计算机。
推荐使用类UNIX系统,如Linux或Mac OS X,以便于使用标准的C编译器。
3. 实验步骤3.1 实验准备在开始实验之前,学生需要安装合适的C语言开发环境,并确保该环境能够正常运行。
同时,学生需要了解常用的C语言编程工具,如编译器和调试器的使用方法。
3.2 实验目标本实验要求学生完成以下任务:a) 掌握C语言的基本语法和关键字;b) 熟悉C语言程序的开发流程;c) 学会使用C语言编写简单的程序;d) 掌握程序的调试和错误处理技巧。
3.3 实验内容本实验包括以下几个部分:a) C语言程序的基本结构:学生需要了解C语言程序的基本结构,包括头文件的引用、全局变量、函数声明和主函数等。
b) C语言程序的输入输出:学生需要学会使用C语言进行输入输出操作,如用printf函数输出、用scanf函数输入等。
c) C语言程序的控制结构:学生需要掌握C语言的条件判断和循环结构,如if语句和for循环等。
d) C语言程序的函数和数组:学生需要了解C语言中函数和数组的用法,并能够编写包含函数和数组的程序。
e) C语言程序的调试和错误处理:学生需要学会使用调试器调试程序,并能够处理程序中出现的错误和异常情况。
4. 实验要求4.1 实验报告学生需要按照实验指导书的要求编写实验报告,并提交给指导教师。
实验报告需要包括以下内容:a) 实验目标和要求的描述;b) 实验过程和方法的详细记录;c) 实验结果的展示和分析;d) 实验中遇到的问题和解决办法。
4.2 实验评估指导教师将根据学生的实验报告和实验成果对其进行评估。
评估内容将包括学生对C语言的掌握程度、程序设计能力以及实验报告的质量。
C语言程序设计实验指导书
实验1 C语言的编程环境一.实验目的1.初步了解C程序的编译、连接和运行的过程。
2.掌握和理解C程序的结构。
二.实验内容1.使用TC2.运行一个简单的C程序三.实验环境PC微机;DOS操作系统或Windows 操作系统;Turbo C 程序集成环境。
四.实验步骤1.启动Turbo C如果用户计算机系统已经安装了Turbo C编译系统,则在DOS命令状态下键入命令tc。
进入Turbo C集成环境后,首先在屏幕上显示Turbo C主菜单窗口。
在该窗口,有8个菜单条目。
每一个菜单的意义如下:File 处理文件(包括装入、存盘、选择、建立、换名写盘),目录操作(包括列表、改变工作目录),退出系统及调用DOS 。
Edit 建立、编辑源文件。
Run 控制运行程序。
如果程序已经编译连接好,且Debug/Source Debugging以及Option/Compiler/Code generation/OBJ Debug Information开关置为On,则可以用此菜单初始化调试阶段。
Compile 编译并生成目标程序与可执行文件。
Project 允许说明程序中包含哪些文件的管理条目。
Options 可以选择集成环境任选项(如存储模式、编译时的任选项、诊断及连接任选项)及定义宏;也可以记录Include Output及Library文件目录,保存编译任选项和从配置文件加载任选。
Debug 检查、改变变量的值,查找函数,程序运行时查看调用栈。
选择程序编译时是否在执行行代码中插入调试信息。
Break/Watch 增加、删除、编辑监视表达式,及设置、清除、执行至断点。
特别要指出的是,除了Edit项外,每一个菜单又有对应的子菜单。
而选择Edit项目后,只是进入编辑器。
为了从主菜单中选择所需要的功能,可以用以下两种方式之一:(1)按F10键后,可以看到屏幕上部主菜单中有反白显示,此时,利用左、右光标移动键(←与→)选择需要的菜单,然后按回车(Enter)键。
C语言程序设计--实验指导书
C语言程序设计指导书目录实验一 C语言的运行环境和运行过程实验二数据类型及顺序结构实验三选择结构程序设计实验四循环控制实验五数组实验六函数实验七指针实验八编译预处理实验九结构体和共用体实验十位运算实验十一文件实验一 C语言的运行环境和运行过程一、实验目的1、了解Windows环境下C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使用该系统。
2、了解在该系统上如何编辑、编译、连接和运行一个C程序。
3、通过运行简单的C程序,初步了解C源程序的特点。
二、实验要求上机实验应一人一组,独立实验。
上机过程中出现的问题,除了是系统的问题以外,不要轻易举手问老师。
尤其对“出错信息”,应善于分析判断,找出出错的行,然后检查该行或其上一行。
三、实验内容1、Visual C++的启动以及工作环境介绍。
2、在Visual C++环境中运行C语言源程序。
四、实验的步骤1.双击桌面Visual C++快捷方式进入Visual C++,或通过执行“开始=>程序=>Microsoft Visual Studio 6.0=> Microsoft Visual C++6.0”。
2.单击“文件”菜单的“新建”命令。
3.在打开的“新建”对话框中选择“文件”标签。
4.选择C++ Source File,选择文件保存位置,然后在文件输入栏中输入文件名。
如图所示: 5.输入源程序。
输入下面的程序,注意区分大小写。
#include <stdio.h>void main(){printf("This is a C program.\n");}6.编译程序:按“Ctrl+F7”或通过“编译”菜单中的“编译”命令,或使用工具栏中的相应工具进行编译编译连接运行若程序有错则找到出错行修改程序。
7.连接:若程序没有语法错误,则可按功能键F7或执行“编译”菜单中的“构件”命令或通过工具栏中的相关工具(编译工具右边工具),进行连接生成可执行文件。
C语言程序设计实训指导书1
重庆正大软件职业技术学院《C语言程序设计》实验(上机)指导书作者:杨业令时间:2008-2版本:V1.0目录实验名称一:C语言程序设计工具的使用 (3)实验名称二:数据类型、定义及赋值 (5)实验名称三:运算符和表达式 (7)验名称四:顺序程序设计 (9)实验名称五:表达式 (12)实验名称六:if语句和switch语句 (14)实验名称七:goto语句和while循环 (16)实验名称八:for循环 (19)实验名称九:一维数组 (22)实验名称十:二维数组与字符数组 (24)实验名称十一:函数 (27)实验名称十二:指针 (30)实验名称十三:指针 (32)实验名称一:C语言程序设计工具的使用一、实验编号:Zb3140094.01二、实验名称:C语言程序设计工具的使用三、课时:2学时四、实验目的:掌握C语言程序设计工具Turboc的使用方法、熟悉C语言程序的操作。
掌握程序的编译过程。
五、实验环境:个人电脑一台、Turboc编译软件。
六、预备知识:需要有C语言的基础知识、C语言的特点。
七、实验内容(步骤):练习一:#include<math.h>#include<stdio.h>main(){double x,s;printf("input number:\n");scanf("%lf",&x);s=sin(x);printf("sine of %lf is %lf\n",x,s);}练习二:include <stdio.h>void main(){float a,b,c,max=0.0,min=0.0;printf("请输入三个整数:");scanf("%f%f%f",&a,&b,&c);if(a>b){max=a;if(max<c)max=c;};if(a<b){min=a;if(min>c)min=c;};printf("三个数最大的是:%f;\n最小的是:%f\n",max,min);}八、实验要求:熟悉C语言操作环境九、考核标准:是否完成了教材的例子和课后的练习实验名称二:数据类型、定义及赋值一、实验编号:Zb3140094.03二、实验名称:数据类型、定义及赋值三、课时:2学时四、实验目的:理解常量、变量,掌握数据类型的表示及转换。
《C语言程序设计》项目实训指导书(精)
1、初步完成总体设计,搭好框架,确定人机对话界面,确定函数个数;
2、建立一个文件,将每位职工的信息写入文件中并能显示于屏幕上。
3、计算职工工资总额和平均工资,可按工资进行排序,并能够找出工资级别相同的职工名单。
任务五:题目:高速公路计费系统设计
功能:在某高速公路出口收费处,对三种类型的车辆计费,大型车每公里0.5元,中型车每公里0.4元,小型车每公里0.3元,来车验条,乘公里数即得该收的款项。在交班时要统计出总数。
8.数据的删除(选做:根据输入的学号删除指定的数据记录。(可选
9.数据的修改(选做:根据输入要修改的学生学号,返回该学生的信息后,再逐个修改每个学生的基本信息,最后保存修改; (,确定人机对话的界面,确定函数个数;
2、完成最低要求:建立房间列表,完成登记入住、查询房间入住情况功能。
3、进一步要求:完成计费和费用查询功能。
任务二:题目:酒店房间登记与计费管理系统
功能:
1、屏幕上出现一个界面,让操作员能够方便的选择所需要进行的操作,包括登记入住、查询房间的入住情况、查询当前费用、结账退房等操作。
2、对不同标准的房间实施不同的收费标准,也可以按天收费或按小时收费,可根据顾客需要在登记的入住的时候进行选择。
1、输入功能:录入学生信息(包括学生学号、姓名、性别、出生年月、专业等;
2、显示功能:完成学生记录的显示。
3、查找功能:完成按学号或姓名查找学生的相关记录,并显示。
分步实施:
1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。
2、建立一个文件,将每位学生的信息写入文件中(人数利用宏定义设定并能显示于屏幕上。
1、课程设计项目以1-4人为单位,完成实训要求的实训内容。本次课程设计的实施步骤为:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《c语言程序设计》实训指导书实训学时:24学时班级:计控07、08班在为期二周的实训中,同学们可以自已选择一个题目,以下以选择通讯录管理系统为例,来说明实训的方法。
实训课题:通讯录管理系统一、问题描述:通过该系统实现对通讯录信息进行录入、显示、修改、删除、插入、排序、保存等操作的管理。
二、功能要求:1、本系统采用一个包含N个数据的结构体数组,每个数据的结构应当包括:编号、姓名、电话号码、地址。
2、本系统显示这样的菜单:请选择系统功能项:a. 通讯信息录入b. 通讯信息显示c. 通讯信息保存d. 通讯信息删除e. 通讯信息修改f. 通讯信息查询(1)按编号查询(2)按姓名查询(3)按电话号码查询g. 退出系统3、执行一个具体的功能之后,程序将重新显示菜单。
4、将通讯信息保存到文件中。
三、算法提示:1、数据结构:结构体类型数组2、数据库结构:下表构成该系统的基本数据库。
纪录数20五、其它:对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。
六、通讯录源程序:/******tongxunlu.c*********/#include "stdio.h" /*I/O函数*/#include "stdlib.h" /*标准库函数*/#include "string.h"/*字符串函数*/#include "ctype.h" /*字符操作函数*/#define M 50 /*定义常数表示记录数*/typedef struct /*定义数据结构*/{char name[20]; /*姓名*/char units[30]; /*单位*/char tele[10]; /*电话*/}ADDRESS;/******以下是函数原型*******/int enter(ADDRESS t[]); /*输入记录*/void list(ADDRESS t[],int n); /*显示记录*/void search(ADDRESS t[],int n); /*按姓名查找显示记录*/int delete(ADDRESS t[],int n); /*删除记录*/int add(ADDRESS t[],int n); /*插入记录*/void save(ADDRESS t[],int n); /*记录保存为文件*/int load(ADDRESS t[]); /*从文件中读记录*/void display(ADDRESS t[]); /*按序号查找显示记录*/void sort(ADDRESS t[],int n); /*按姓名排序*/void qseek(ADDRESS t[],int n); /*快速查找记录*/void copy(); /*文件复制*/void print(ADDRESS temp); /*显示单条记录*/int find(ADDRESS t[],int n,char *s) ; /*查找函数*/int menu_select(); /*主菜单函数*//******主函数开始*******/main(){int i;ADDRESS adr[M]; /*定义结构体数组*/int length; /*保存记录长度*/clrscr(); /*清屏*/for(;;)/*无限循环*/{switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/ {case 0:length=enter(adr);break;/*输入记录*/case 1:list(adr,length);break; /*显示全部记录*/case 2:search(adr,length);break; /*查找记录*/case 3:length=delete(adr,length);break; /*删除记录*/case 4:length=add(adr,length); break; /*插入记录*/case 5:save(adr,length);break; /*保存文件*/case 6:length=load(adr); break; /*读文件*/case 7:display(adr);break; /*按序号显示记录*/case 8:sort(adr,length);break; /*按姓名排序*/case 9:qseek(adr,length);break; /*快速查找记录*/case 10:copy();break; /*复制文件*/case 11:exit(0); /*如返回值为11则程序结束*/}}/*菜单函数,函数返回值为整数,代表所选的菜单项*/menu_select(){char s[80];int c;gotoxy(1,25);/*将光标定为在第25行,第1列*/printf("press any key enter menu......\n");/*提示压任意键继续*/getch(); /*读入任意字符*/clrscr(); /*清屏*/gotoxy(1,1);printf("********************MENU*********************\n\n");printf(" 0. Enter record\n");printf(" 1. List the file\n");printf(" 2. Search record on name\n");printf(" 3. Delete a record\n");printf(" 4. add record \n");printf(" 5. Save the file\n");printf(" 6. Load the file\n");printf(" 7. display record on order\n");printf(" 8. sort to make new file\n");printf(" 9. Quick seek record\n");printf(" 10. copy the file to new file\n");printf(" 11. Quit\n");printf("***********************************************\n");do{printf("\n Enter you choice(0~11):"); /*提示输入选项*/scanf("%s",s); /*输入选择项*/c=atoi(s); /*将输入的字符串转化为整型数*/}while(c<0||c>11); /*选择项不在0~11之间重输*/return c; /*返回选择项,主程序根据该数调用相应的函数*/}/***输入记录,形参为结构体数组,函数值返回类型为整型表示记录长度*/ int enter(ADDRESS t[]){int i,n;char *s;clrscr(); /*清屏*/printf("\nplease input num \n"); /*提示信息*/scanf("%d",&n); /*输入记录数*/printf("please input record \n"); /*提示输入记录*/printf("name unit telephone\n");printf("------------------------------------------------\n");for(i=0;i<n;i++)scanf("%s%s%s",t[i].name,t[i].units,t[i].tele); /*输入记录*/printf("----------------------------------------------\n");}return n; /*返回记录条数*/}/*显示记录,参数为记录数组和记录条数*/void list(ADDRESS t[],int n){int i;clrscr();printf("\n\n*******************ADDRESS******************\n"); printf("name unit telephone\n");printf("------------------------------------------------\n");for(i=0;i<n;i++)printf("%-20s%-30s%-10s\n",t[i].name,t[i].units,t[i].tele);if((i+1)%10==0) /*判断输出是否达到10条记录*/{printf("Press any key continue...\n"); /*提示信息*/getch(); /*压任意键继续*/}printf("************************end*******************\n");}/*查找记录*/void search(ADDRESS t[],int n){char s[20]; /*保存待查找姓名字符串*/int i; /*保存查找到结点的序号*/clrscr(); /*清屏*/printf("please search name\n");scanf("%s",s); /*输入待查找姓名*/i=find(t,n,s); /*调用find函数,得到一个整数*/if(i>n-1) /*如果整数i值大于n-1,说明没找到*/printf("not found\n");elseprint(t[i]); /*找到,调用显示函数显示记录*/}/*显示指定的一条记录*/void print(ADDRESS temp){clrscr();printf("\n\n********************************************\n"); printf("name unit telephone\n");printf("------------------------------------------------\n");printf("%-20s%-30s%-10s\n",,temp.units,temp.tele);printf("**********************end***********************\n"); }/*查找函数,参数为记录数组和记录条数以及姓名s */int find(ADDRESS t[],int n,char *s){int i;for(i=0;i<n;i++)/*从第一条记录开始,直到最后一条*/{if(strcmp(s,t[i].name)==0) /*记录中的姓名和待比较的姓名是否相等*/ return i; /*相等,则返回该记录的下标号,程序提前结结束*/}return i; /*返回i值*/}/*删除函数,参数为记录数组和记录条数*/int delete(ADDRESS t[],int n){char s[20]; /*要删除记录的姓名*/int ch=0;int i,j;printf("please deleted name\n"); /*提示信息*/scanf("%s",s);/*输入姓名*/i=find(t,n,s); /*调用find函数*/if(i>n-1) /*如果i>n-1超过了数组的长度*/printf("no found not deleted\n"); /*显示没找到要删除的记录*/else{print(t[i]); /*调用输出函数显示该条记录信息*/printf("Are you sure delete it(1/0)\n"); /*确认是否要删除*/scanf("%d",&ch); /*输入一个整数0或1*/if(ch==1) /*如果确认删除整数为1*/{for(j=i+1;j<n;j++) /*删除该记录,实际后续记录前移*/{strcpy(t[j-1].name,t[j].name); /*将后一条记录的姓名拷贝到前一条*/ strcpy(t[j-1].units,t[j].units); /*将后一条记录的单位拷贝到前一条*/ strcpy(t[j-1].tele,t[j].tele); /*将后一条记录的电话拷贝到前一条*/}n--; /*记录数减1*/}}return n; /*返回记录数*/}/*插入记录函数,参数为结构体数组和记录数*/int add(ADDRESS t[],int n)/*插入函数,参数为结构体数组和记录数*/{ADDRESS temp; /*新插入记录信息*/int i,j;char s[20]; /*确定插入在哪个记录之前*/printf("please input record\n");printf("************************************************\n");printf("name unit telephone\n");printf("--------------------------------------------------\n");scanf("%s%s%s",,temp.units,temp.tele); /*输入插入信息*/printf("------------------------------------------------\n");printf("please input locate name \n");scanf("%s",s); /*输入插入位置的姓名*/i=find(t,n,s); /*调用find,确定插入位置*/for(j=n-1;j>=i;j--) /*从最后一个结点开始向后移动一条*/{strcpy(t[j+1].name,t[j].name); /*当前记录的姓名拷贝到后一条*/strcpy(t[j+1].units,t[j].units); /*当前记录的单位拷贝到后一条*/strcpy(t[j+1].tele,t[j].tele); /*当前记录的电话拷贝到后一条*/}strcpy(t[i].name,); /*将新插入记录的姓名拷贝到第i个位置*/ strcpy(t[i].units,temp.units); /*将新插入记录的单位拷贝到第i个位置*/ strcpy(t[i].tele,temp.tele); /*将新插入记录的电话拷贝到第i个位置*/n++; /*记录数加1*/return n; /*返回记录数*/}/*保存函数,参数为结构体数组和记录数*/void save(ADDRESS t[],int n){int i;FILE *fp; /*指向文件的指针*/if((fp=fopen("record.txt","wb"))==NULL) /*打开文件,并判断打开是否正常*/ {printf("can not open file\n");/*没打开*/exit(1); /*退出*/}printf("\nSaving file\n"); /*输出提示信息*/fprintf(fp,"%d",n); /*将记录数写入文件*/fprintf(fp,"\r\n"); /*将换行符号写入文件*/for(i=0;i<n;i++){fprintf(fp,"%-20s%-30s%-10s",t[i].name,t[i].units,t[i].tele);/*格式写入记录*/ fprintf(fp,"\r\n"); /*将换行符号写入文件*/}fclose(fp);/*关闭文件*/printf("****save success***\n"); /*显示保存成功*/}/*读入函数,参数为结构体数组*/int load(ADDRESS t[]){int i,n;FILE *fp; /*指向文件的指针*/if((fp=fopen("record.txt","rb"))==NULL)/*打开文件*/{printf("can not open file\n"); /*不能打开*/exit(1); /*退出*/}fscanf(fp,"%d",&n); /*读入记录数*/for(i=0;i<n;i++)fscanf(fp,"%20s%30s%10s",t[i].name,t[i].units,t[i].tele); /*按格式读入记录*/ fclose(fp); /*关闭文件*/printf("You have success read data from file!!!\n"); /*显示保存成功*/ return n; /*返回记录数*/}/*按序号显示记录函数*/void display(ADDRESS t[]){int id,n;FILE *fp; /*指向文件的指针*/if((fp=fopen("record.txt","rb"))==NULL) /*打开文件*/{printf("can not open file\n"); /*不能打开文件*/exit(1); /*退出*/}printf("Enter order number...\n"); /*显示信息*/scanf("%d",&id); /*输入序号*/fscanf(fp,"%d",&n); /*从文件读入记录数*/if(id>=0&&id<n) /*判断序号是否在记录范围内*/{fseek(fp,(id-1)*sizeof(ADDRESS),1); /*移动文件指针到该记录位置*/ print(t[id]); /*调用输出函数显示该记录*/printf("\r\n");}elseprintf("no %d number record!!!\n ",id); /*如果序号不合理显示信息*/ fclose(fp); /*关闭文件*/}/*排序函数,参数为结构体数组和记录数*/void sort(ADDRESS t[],int n){int i,j,flag;ADDRESS temp; /*临时变量做交换数据用*/for(i=0;i<n;i++){flag=0; /*设标志判断是否发生过交换*/for(j=0;j<n-1;j++)if((strcmp(t[j].name,t[j+1].name))>0) /*比较大小*/{flag=1;strcpy(,t[j].name); /*交换记录*/strcpy(temp.units,t[j].units);strcpy(temp.tele,t[j].tele);strcpy(t[j].name,t[j+1].name);strcpy(t[j].units,t[j+1].units);strcpy(t[j].tele,t[j+1].tele);strcpy(t[j+1].name,);strcpy(t[j+1].units,temp.units);strcpy(t[j+1].tele,temp.tele);}if(flag==0)break; /*如果标志为0,说明没有发生过交换循环结束*/}printf("sort sucess!!!\n"); /*显示排序成功*/}/*快速查找,参数为结构体数组和记录数*/void qseek(ADDRESS t[],int n){char s[20];int l,r,m;printf("\nPlease sort before qseek!\n"); /*提示确认在查找之前,记录是否已排序*/ printf("please enter name for qseek\n"); /*提示输入*/scanf("%s",s); /*输入待查找的姓名*/l=0;r=n-1; /*设置左边界与右边界的初值*/while(l<=r) /*当左边界<=右边界时*/{m=(l+r)/2; /*计算中间位置*/if(strcmp(t[m].name,s)==0) /*与中间结点姓名字段做比较判是否相等*/{print(t[m]); /*如果相等,则调用print函数显示记录信息*/return ; /*返回*/}if(strcmp(t[m].name,s)<0) /*如果中间结点小*/l=m+1; /*修改左边界*/elser=m-1; /*否则,中间结点大,修改右边界*/}if(l>r) /*如果左边界大于右边界时*/printf("not found\n"); /*显示没找到*/}/*复制文件*/void copy(){char outfile[20]; /*目标文件名*/int i,n;ADDRESS temp[M]; /*定义临时变量*/FILE *sfp,*tfp; /*定义指向文件的指针*/clrscr();/*清屏*/if((sfp=fopen("record.txt","rb"))==NULL) /*打开记录文件*/{printf("can not open file\n"); /*显示不能打开文件信息*/exit(1); /*退出*/}printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示信息*/ scanf("%s",outfile); /*输入目标文件名*/if((tfp=fopen(outfile,"wb"))==NULL) /*打开目标文件*/{printf("can not open file\n"); /*显示不能打开文件信息*/exit(1); /*退出*/}fscanf(sfp,"%d",&n); /*读出文件记录数*/fprintf(tfp,"%d",n);/*写入目标文件数*/fprintf(tfp,"\r\n"); /*写入换行符*/for(i=0;i<n;i++){fscanf(sfp,"%20s%30s%10s\n",temp[i].name,temp[i].units,temp[i].tele); /*读入记录*/fprintf(tfp,"%-20s%-30s%-10s\n",temp[i].name,temp[i].units,temp[i].tele); /*写入记录*/fprintf(tfp,"\r\n"); /*写入换行符*/}fclose(sfp); /*关闭源文件*/fclose(tfp); /*关闭目标文件*/printf("you have success copy file!!!\n"); /*显示复制成功*/}11、学生成绩统计源程序/***********xuesheng.c***********//******头文件(.h)***********/#include "stdio.h" /*I/O函数*/#include "stdlib.h" /*其它说明*/#include "string.h" /*字符串函数*/#include "conio.h" /*屏幕操作函数*/#include "mem.h" /*内存操作函数*/#include "ctype.h" /*字符操作函数*/#include "alloc.h" /*动态地址分配函数*/#define N 3 /*定义常数*/typedef struct z1 /*定义数据结构*/{char no[11];char name[15];int score[N];float sum;float average;int order;struct z1 *next;}STUDENT;/*以下是函数原型*/STUDENT *init(); /*初始化函数*/STUDENT *create(); /*创建链表*/STUDENT *delete(STUDENT *h); /*删除记录*/ void print(STUDENT *h); /* 显示所有记录*/void search(STUDENT *h); /*查找*/void save(STUDENT *h); /*保存*/STUDENT *load(); /*读入记录*/void computer(STUDENT *h); /*计算总分和均分*/ STUDENT *insert(STUDENT *h); /*插入记录*/ void append(); /*追加记录*/void copy(); /*复制文件*/STUDENT *sort(STUDENT *h); /*排序*/ STUDENT *index(STUDENT *h); /*索引*/void total(STUDENT *h); /*分类合计*/int menu_select(); /*菜单函数*//******主函数开始*******/main(){int i;STUDENT *head; /*链表定义头指针*/head=init(); /*初始化链表*/clrscr(); /*清屏*/for(;;) /*无限循环*/{switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/{ /*值不同,执行的函数不同,break 不能省略*/case 0:head=init();break; /*执行初始化*/case 1:head=create();break; /*创建链表*/case 2:head=delete(head);break; /*删除记录*/case 3:print(head);break; /*显示全部记录*/case 4:search(head);break; /*查找记录*/case 5:save(head);break; /*保存文件*/case 6:head=load(); break; /*读文件*/case 7:computer(head);break; /*计算总分和均分*/case 8:head=insert(head); break; /*插入记录*/case 9:copy();break; /*复制文件*/case 10:head=sort(head);break; /*排序*/case 11:append();break; /*追加记录*/case 12:head=index(head);break; /*索引*/case 13:total(head);break; /*分类合计*/case 14:exit(0); /*如菜单返回值为14程序结束*/}}}/*菜单函数,返回值为整数*/menu_select(){char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/ " 0. init list", /*初始化*/" 1. Enter list", /*输入记录*/" 2. Delete a record from list", /*从表中删除记录*/" 3. print list ", /*显示单链表中所有记录*/" 4. Search record on name", /*按照姓名查找记录*/" 5. Save the file", /*将单链表中记录保存到文件中*/" 6. Load the file", /*从文件中读入记录*/" 7. compute the score", /*计算所有学生的总分和均分*/" 8. insert record to list ", /*插入记录到表中*/" 9. copy the file to new file", /*复制文件*/" 10. sort to make new file", /*排序*/" 11. append record to file", /*追加记录到文件中*/" 12. index on nomber", /*索引*/" 13. total on nomber", /*分类合计*/" 14. Quit"}; /*退出*/char s[3]; /*以字符形式保存选择号*/int c,i; /*定义整形变量*/gotoxy(1,25); /*移动光标*/printf("press any key enter menu......\n"); /*压任一键进入主菜单*/getch(); /*输入任一键*/clrscr(); /*清屏幕*/gotoxy(1,1); /*移动光标*/textcolor(YELLOW); /*设置文本显示颜色为黄色*/textbackground(BLUE); /*设置背景颜色为蓝色*/gotoxy(10,2); /*移动光标*/putch(0xc9); /*输出左上角边框┏*/for(i=1;i<44;i++)putch(0xcd); /*输出上边框水平线*/putch(0xbb); /*输出右上角边框┓*/for(i=3;i<20;i++){gotoxy(10,i);putch(0xba); /*输出左垂直线*/gotoxy(54,i);putch(0xba);} /*输出右垂直线*/gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/for(i=1;i<44;i++)putch(0xcd); /*输出下边框水平线*/putch(0xbc); /*输出右下角边框┛*/window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/ clrscr(); /*清屏*/for(i=0;i<16;i++) /*输出主菜单数组*/{gotoxy(10,i+1);cprintf("%s",menu[i]);}textbackground(BLACK); /*设置背景颜色为黑色*/window(1,1,80,25); /*恢复原窗口大小*/gotoxy(10,21); /*移动光标*/do{printf("\n Enter you choice(0~14):"); /*在菜单窗口外显示提示信息*/ scanf("%s",s); /*输入选择项*/c=atoi(s); /*将输入的字符串转化为整形数*/}while(c<0||c>14); /*选择项不在0~14之间重输*/return c; /*返回选择项,主程序根据该数调用相应的函数*/}STUDENT *init(){return NULL;}/*创建链表*/STUDENT *create(){int i; int s;STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/for(;;){info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/if(!info) /*如果指针info为空*/{printf("\nout of memory"); /*输出内存溢出*/return NULL; /*返回空指针*/}inputs("enter no:",info->no,11); /*输入学号并校验*/if(info->no[0]==’@’) break; /*如果学号首字符为@则结束输入*/inputs("enter name:",info->name,15); /*输入姓名,并进行校验*/printf("please input %d score \n",N); /*提示开始输入成绩*/s=0; /*计算每个学生的总分,初值为0*/for(i=0;i<N;i++) /*N门课程循环N次*/{do{printf("score%d:",i+1); /*提示输入第几门课程*/scanf("%d",&info->score[i]); /*输入成绩*/if(info->score[i]>100||info->score[i]<0) /*确保成绩在0~100之间*/printf("bad data,repeat input\n"); /*出错提示信息*/}while(info->score[i]>100||info->score[i]<0);s=s+info->score[i]; /*累加各门课程成绩*/}info->sum=s; /*将总分保存*/info->average=(float)s/N; /*求出平均值*/info->order=0; /*未排序前此值为0*/info->next=h; /*将头结点做为新输入结点的后继结点*/h=info; /*新输入结点为新的头结点*/}return(h); /*返回头指针*/}/*输入字符串,并进行长度验证*/inputs(char *prompt, char *s, int count){char p[255];do{printf(prompt); /*显示提示信息*/scanf("%s",p); /*输入字符串*/if(strlen(p)>count)printf("\n too long! \n"); /*进行长度校验,超过count值重输入*/ }while(strlen(p)>count);strcpy(s,p); /*将输入的字符串拷贝到字符串s中*/}/*输出链表中结点信息*/void print(STUDENT *h){int i=0; /* 统计记录条数*/STUDENT *p; /*移动指针*/clrscr(); /*清屏*/p=h; /*初值为头指针*/printf("\n\n\n****************************STUDENT******************************* *\n");printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");while(p!=NULL){i++;printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0] ,p->score[1],p->score[2],p->sum,p->average,p->order);p=p->next;}printf("**********************************end*********************************\n"); }/*删除记录*/STUDENT *delete(STUDENT *h){STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/char s[11]; /*存放学号*/clrscr(); /*清屏*/printf("please deleted no\n"); /*显示提示信息*/scanf("%s",s); /*输入要删除记录的学号*/q=p=h; /*给q和p赋初值头指针*/while(strcmp(p->no,s)&&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/{q=p; /*将p指针值赋给q作为p的前驱指针*/p=p->next; /*将p指针指向下一条记录*/}if(p==NULL) /*如果p为空,说明链表中没有该结点*/printf("\nlist no %s student\n",s);else /*p不为空,显示找到的记录信息*/{printf("*****************************have found***************************\n"); printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");printf("|----------|---------------|----|----|----|--------|-------|-----|\n");printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("********************************end*******************************\n"); getch(); /*压任一键后,开始删除*/if(p==h) /*如果p==h,说明被删结点是头结点*/h=p->next; /*修改头指针指向下一条记录*/elseq->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/free(p); /*释放p所指结点空间*/printf("\n have deleted No %s student\n",s);printf("Don’t forget save\n");/*提示删除后不要忘记保存文件*/}return(h); /*返回头指针*/}/*查找记录*/void search(STUDENT *h){STUDENT *p; /* 移动指针*/char s[15]; /*存放姓名的字符数组*/clrscr(); /*清屏幕*/printf("please enter name for search\n");scanf("%s",s); /*输入姓名*/p=h; /*将头指针赋给p*/while(strcmp(p->name,s)&&p!=NULL) /*当记录的姓名不是要找的,或指针不为空时*/p=p->next; /*移动指针,指向下一结点*/if(p==NULL) /*如果指针为空*/printf("\nlist no %s student\n",s); /*显示没有该学生*/else /*显示找到的记录信息*/{printf("\n\n*****************************havefound***************************\n"); printf("|nO | name | sc1| sc2| sc3| sum | ave |order|\n");printf("|----------|---------------|----|----|----|--------|-------|-----|\n");printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);printf("********************************end*******************************\n"); }}/*插入记录*/STUDENT *insert(STUDENT *h){STUDENT *p,*q,*info; /*p指向插入位置,q是其前驱,info指新插入记录*/char s[11]; /*保存插入点位置的学号*/int s1,i;printf("please enter location before the no\n");scanf("%s",s); /*输入插入点学号*/printf("\nplease new record\n"); /*提示输入记录信息*/info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/if(!info){printf("\nout of memory"); /*如没有申请到,内存溢出*/return NULL; /*返回空指针*/}inputs("enter no:",info->no,11); /*输入学号*/inputs("enter name:",info->name,15); /*输入姓名*/printf("please input %d score \n",N); /*提示输入分数*/s1=0; /*保存新记录的总分,初值为0*/for(i=0;i<N;i++) /*N门课程循环N次输入成绩*/{do{ /*对数据进行验证,保证在0~100之间*/printf("score%d:",i+1);scanf("%d",&info->score[i]);if(info->score[i]>100||info->score[i]<0)printf("bad data,repeat input\n");}while(info->score[i]>100||info->score[i]<0);s1=s1+info->score[i]; /*计算总分*/}info->sum=s1; /*将总分存入新记录中*/info->average=(float)s1/N; /*计算均分*/info->order=0; /*名次赋值0*/info->next=NULL; /*设后继指针为空*/p=h; /*将指针赋值给p*/q=h; /*将指针赋值给q*/while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/{q=p; /*保存指针p,作为下一个p的前驱*/p=p->next; /*将指针p后移*/}if(p==NULL) /*如果p指针为空,说明没有指定结点*/if(p==h) /*同时p等于h,说明链表为空*/h=info; /*新记录则为头结点*/elseq->next=info; /*p为空,但p不等于h,将新结点插在表尾*/ elseif(p==h) /*p不为空,则找到了指定结点*/{info->next=p; /*如果p等于h,则新结点插入在第一个结点之前*/ h=info; /*新结点为新的头结点*/}else{info->next=p; /*不是头结点,则是中间某个位置,新结点的后继为p*/q->next=info; /*新结点作为q的后继结点*/}printf("\n ----have inserted %s student----\n",info->name); printf("---Don’t forget save---\n"); /*提示存盘*/return(h); /*返回头指针*/}/*保存数据到文件*/void save(STUDENT *h){FILE *fp; /*定义指向文件的指针*/STUDENT *p; /* 定义移动指针*/char outfile[10]; /*保存输出文件名*/printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示文件名格式信息*/scanf("%s",outfile);if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,如没有则建立*/{printf("can not open file\n");exit(1);}printf("\nSaving file......\n"); /*打开文件,提示正在保存*/p=h; /*移动指针从头指针开始*/while(p!=NULL) /*如p不为空*/{fwrite(p,sizeof(STUDENT),1,fp);/*写入一条记录*/p=p->next; /*指针后移*/}fclose(fp); /*关闭文件*/printf("-----save success!!-----\n"); /*显示保存成功*/}/* 从文件读数据*/STUDENT *load(){STUDENT *p,*q,*h=NULL; /*定义记录指针变量*/FILE *fp; /* 定义指向文件的指针*/char infile[10]; /*保存文件名*/printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*输入文件名*/if((fp=fopen(infile,"rb"))==NULL) /*打开一个二进制文件,为读方式*/{printf("can not open file\n"); /*如不能打开,则结束程序*/exit(1);}printf("\n -----Loading file!-----\n");p=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/{printf("out of memory!\n"); /*如没有申请到,则内存溢出*/return h; /*返回空头指针*/}h=p; /*申请到空间,将其作为头指针*/while(!feof(fp)) /*循环读数据直到文件尾结束*/{if(1!=fread(p,sizeof(STUDENT),1,fp))break; /*如果没读到数据,跳出循环*/p->next=(STUDENT *)malloc(sizeof(STUDENT)); /*为下一个结点申请空间*/ if(!p->next){printf("out of memory!\n"); /*如没有申请到,则内存溢出*/return h;}q=p; /*保存当前结点的指针,作为下一结点的前驱*/p=p->next; /*指针后移,新读入数据链到当前表尾*/}q->next=NULL; /*最后一个结点的后继指针为空*/fclose(fp); /*关闭文件*/printf("---You have success read data from file!!!---\n");return h; /*返回头指针*/}/*追加记录到文件*/void append(){FILE *fp; /*定义指向文件的指针*/STUDENT *info; /*新记录指针*/int s1,i;char infile[10]; /*保存文件名*/printf("\nplease new record\n");info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/if(!info){printf("\nout of memory"); /*没有申请到,内存溢出本函数结束*/return ;}inputs("enter no:",info->no,11); /*调用inputs输入学号*/inputs("enter name:",info->name,15); /*调用inputs输入姓名*/printf("please input %d score \n",N); /*提示输入成绩*/s1=0;for(i=0;i<N;i++){printf("score%d:",i+1);scanf("%d",&info->score[i]); /*输入成绩*/if(info->score[i]>100||info->score[i]<0)printf("bad data,repeat input\n");}while(info->score[i]>100||info->score[i]<0); /*成绩数据验证*/s1=s1+info->score[i]; /*求总分*/}info->sum=s1; /*保存总分*/info->average=(float)s1/N; /*求均分*/info->order=0; /*名次初始值为0*/info->next=NULL; /*将新记录后继指针赋值为空*/printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*输入文件名*/ if((fp=fopen(infile,"ab"))==NULL) /*向二进制文件尾增加数据方式打开文件*/{printf("can not open file\n"); /*显示不能打开*/exit(1); /*退出程序*/}printf("\n -----Appending record!-----\n");if(1!=fwrite(info,sizeof(STUDENT),1,fp)) /*写文件操作*/{printf("-----file write error!-----\n");return; /*返回*/}printf("-----append sucess!!----\n");fclose(fp); /*关闭文件*/}/*文件拷贝*/void copy(){char outfile[10],infile[10];FILE *sfp,*tfp; /*源和目标文件指针*/STUDENT *p=NULL; /*移动指针*/clrscr(); /*清屏*/printf("Enter infile name,for example c:\\f1\\te.txt:\n");scanf("%s",infile); /*输入源文件名*/if((sfp=fopen(infile,"rb"))==NULL) /*二进制读方式打开源文件*/{printf("can not open input file\n");exit(0);}printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示输入目标文件名*/scanf("%s",outfile); /*输入目标文件名*/if((tfp=fopen(outfile,"wb"))==NULL) /*二进制写方式打开目标文件*/{printf("can not open output file \n");exit(0);}while(!feof(sfp)) /*读文件直到文件尾*/{if(1!=fread(p,sizeof(STUDENT),1,sfp))break; /*块读*/fwrite(p,sizeof(STUDENT),1,tfp); /*块写*/}fclose(sfp); /*关闭源文件*/fclose(tfp); /*关闭目标文件*/printf("you have success copy file!!!\n"); /*显示成功拷贝*/}/*排序*/STUDENT *sort(STUDENT *h){int i=0; /*保存名次*/STUDENT *p,*q,*t,*h1; /*定义临时指针*/h1=h->next; /*将原表的头指针所指的下一个结点作头指针*/h->next=NULL; /*第一个结点为新表的头结点*/while(h1!=NULL) /*当原表不为空时,进行排序*/{t=h1; /*取原表的头结点*/h1=h1->next; /*原表头结点指针后移*/p=h; /*设定移动指针p,从头指针开始*/q=h; /*设定移动指针q做为p的前驱,初值为头指针*/while(t->sum<p->sum&&p!=NULL) /*作总分比较*/{q=p; /*待排序点值小,则新表指针后移*/p=p->next;}if(p==q) /*p==q,说明待排序点值大,应排在首位*/{t->next=p; /*待排序点的后继为p*/h=t; /*新头结点为待排序点*/}else /*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/ {t->next=p; /*t的后继是p*/q->next=t; /*q的后继是t*/}}p=h; /*已排好序的头指针赋给p,准备填写名次*/while(p!=NULL) /*当p不为空时,进行下列操作*/{i++; /*结点序号*/p->order=i; /*将名次赋值*/p=p->next; /*指针后移*/}printf("sort sucess!!!\n"); /*排序成功*/return h; /*返回头指针*/}/*计算总分和均值*/void computer(STUDENT *h){STUDENT *p; /*定义移动指针*/int i=0; /*保存记录条数初值为0*/long s=0; /*总分初值为0*/float average=0; /*均分初值为0*/p=h; /*从头指针开始*/while(p!=NULL) /*当p不为空时处理*/{s+=p->sum; /*累加总分*/i++; /*统计记录条数*/p=p->next; /*指针后移*/}average=(float)s/i;/* 求均分,均分为浮点数,总分为整数,所以做类型转换*/ printf("\n--All students sum score is:%ld average is %5.2f\n",s,average);}/*索引*/STUDENT *index(STUDENT *h){STUDENT *p,*q,*t,*h1; /*定义临时指针*/h1=h->next; /*将原表的头指针所指的下一个结点作头指针*/h->next=NULL; /*第一个结点为新表的头结点*/while(h1!=NULL) /*当原表不为空时,进行排序*/{t=h1; /*取原表的头结点*/h1=h1->next; /*原表头结点指针后移*/p=h; /*设定移动指针p,从头指针开始*/q=h; /*设定移动指针q做为p的前驱,初值为头指针*/while(strcmp(t->no,p->no)>0&&p!=NULL) /*作学号比较*/{q=p; /*待排序点值大,应往后插,所以新表指针后移*/p=p->next;}if(p==q) /*p==q,说明待排序点值小,应排在首位*/{。