晓庄C语言程序设计实验报告.docx
- 文档编号:24647736
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:115
- 大小:647.44KB
晓庄C语言程序设计实验报告.docx
《晓庄C语言程序设计实验报告.docx》由会员分享,可在线阅读,更多相关《晓庄C语言程序设计实验报告.docx(115页珍藏版)》请在冰豆网上搜索。
晓庄C语言程序设计实验报告
C语言程序设计实验报告
实验1简单程序设计
1.实验目的
(1)熟悉C语言开发环境并掌握在该环境下如何编辑、编译、连接和运行一个C程序。
(2)通过运行一个简单的C程序过程,初步了解C程序的基本结构及特点。
2.实验要求
将主菜单输出在屏幕上。
运行程序后,其结果如下:
图1-1成绩管理系统主菜单
3.实验步骤
(1)编写头文件sgms1.h,对menu函数进行声明。
(2)将sgms1.c源文件补充完整
4.实验重点和难点
(1)C程序是由一个个函数构成,当一个函数调用另一个函数时,需要对被调函数作声明。
(2)用户自定以的函数最好写在一个头文件中,在需要的地方用文件包含命令即可。
(3)system(“cls”)函数的作用是清屏,它的声明在头文件stdlib.h中。
如果是在Linux操作系统的gcc环境下,清屏用system(”clear”)。
5.常见错误
(1)数据声明或语句后面缺少分号。
(2)对被调函数没有声明。
(3)没有main函数或者有多个main函数。
6.程序代码
Sgms1.h代码如下:
voidmenu()
{
printf("TheStudents'GradeManagementSystem\n");
printf("***********************Menu***************************\n");
printf("*1addrecord2displayrecord*\n");
printf("*3sortrecord4findrecord*\n");
printf("*5modifyrecord6deleterecord*\n");
printf("*7countrecord8saverecord*\n");
printf("*0quisystem*\n");
printf("*********************************************************\n");
}
Sgms1.c代码如下:
#include"stdio.h"
#include"sgms1.h"
main()
{
menu();
}
运行结果如图所示:
8.心得体会
试验一比较简单,学到的东西主要是通过包含头文件来调用相应的函数:
比如试验中的menu函数是写在sgms1.h中,而主函数写在sgms1.c中
要想在main函数中调用menu函数只要在main函数头部写入#include”sgms1.h”要注意sgms1.h存放的路径.否则要指定具体的路径.
实验2顺序结构程序设计
1.实验目的
(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量。
(2)掌握数据的输入输出的方法,能正确使用各种格式控制符。
(3)掌握算术运算符和赋值运算符。
2.实验要求
(1)当用户选择0后,在屏幕上输出“Youwillquit,thankyouforusingthesystem!
”信息,然后结束程序运行。
(2)当用户选择1后,进入输入记录,输入完后,显示输入结果。
运行程序后,其结果如下:
首先出现主菜单界面
图2-1主菜单界面
当用户输入0回车后,出现退出系统界面
当用户在主菜单界面上输入1回车后,出现输入记录界面
图2-3输入记录界面
3.实验步骤
(1)将quit和addRecord函数的声明添加到实验提供的头文件sgms2.h中。
(2)将实验提供的sgms2.c文件的main函数和addRecord函数补充完整。
(3)运行由sgms2.h和sgms2.c构成的程序。
4.实验重点和难点
(1)用scanf和printf对数据进行输入输出时,不同的数据类型用不同的格式控制符。
(2)scanf函数中的格式控制后面应当是变量地址,而不是变量名。
5.常见错误
(1)变量没有定义,直接使用。
(2)企图利用整数除以整数得到精确结果。
例如1/4结果不是0.25而是0,1/4.0结果才是0.25。
(3)printf和scanf函数中格式控制符的个数与变量或变量地址的个数不一致。
(4)scanf函数的地址表列因该是变量地址,而不是变量名。
(5)scanf函数在格式控制字符串中除了格式说明以外还有其他字符时,在输入数据
(6)没有在对应的位置输入与这些字符相同的字符。
6.程序代码
Sgms2.c:
#include"stdio.h"
#include"sgms2.h"
#include"stdlib.h"
main()
{
voidaddRecord(intchoice);
voidquit();
intchoice;
menu();
printf("\n");
printf("PleaseEnteryourchoice<0-8>:
");
scanf("%d",&choice);
system("cls");
if(choice==0)
quit();
if(choice==1)
addRecord(choice);
}
voidquit()
{
printf("Youwillquit,thinkyouforusingthesystem!
");
}
voidaddRecord(intchoice)
{
floatcScore,mathScore,engScore,aver;
printf("==========>addrecord\n");
printf("Inputthenumber:
%d\n",choice);
printf("InputcLanguagescore<0-100>:
");
scanf("%f",&cScore);
printf("Inputmathscore<0-100>:
");
scanf("%f",&mathScore);
printf("Inputenglishscore<0-100>:
");
scanf("%f",&engScore);
aver=(cScore+mathScore+engScore)/3;
printf("number:
%d\t",choice);
printf("cLanguage:
%2.1f\t",cScore);
printf("math:
%2.1f\t",mathScore);
printf("english:
%2.1f\t",engScore);
printf("aver:
%2.1f\t",aver);
}
Sgms2.h
voidmenu()
{
printf("TheStudents'GradeManagementSystem\n");
printf("***********************Menu******************************\n");
printf("*1addrecord2displayrecord*\n");
printf("*3sortrecord4findrecord*\n");
printf("*5modifyrecord6deleterecord*\n");
printf("*7countrecord8saverecord*\n");
printf("*0quitsystem*\n");
printf("*********************************************************\n");
}
7.实验结果
当用户选择0后:
当用户选择1后,进入输入记录,输入完成后,显示输出结果:
8.心得体会
本试验主要通过if语句来控制输入不同的数实现不同的功能,但是如果分支过多使用if语句就使代码过于冗长.
实验3选择结构程序设计
1.实验目的
(1)了解C语言表示逻辑变量的方法
(2)学会正确使用关系运算符和逻辑运算符。
(3)熟练掌握if语句和switch语句。
2.实验要求
(1)将sgms3.c文件中main函数中的用于功能选择的if语句改为switch语句。
(2)在输入分数时,如果输入的分数在0到100之外,则输出提示信息,并等待重新输入。
输入记录界面如下:
图3-1输入记录界面
3.实验步骤
(1)将sgms3.c文件中main函数中的用于功能选择的if语句改为switch语句。
(2)将sgms3.c文件中的addRecord函数补充完整。
(3)运行由sgms3.h和sgms3.c构成的程序。
4.实验重点和难点
(1)注意关系运算符==和复制运算符=的区别。
(2)if和else的匹配原则。
(3)在switch语句中正确使用break。
5.常见错误
(1)赋值运算符=和关系运算符等号=搞混。
(2)在if语句为复合语句时,忘记写{}。
(3)if语句出现嵌套时,没正确配对。
(4)switch语句中,没正确使用break。
6.程序代码
Sgms3.c
#include"stdio.h"
#include"sgms3.h"
#include"stdlib.h"
main()
{
voidaddRecord(intchoice);
voidquit();
intchoice;
menu();
printf("\n");
printf("PleaseEnteryourchoice<0-8>:
");
scanf("%d",&choice);
system("cls");
switch(choice)
{
case0:
quit();break;
case1:
addRecord(choice);break;
}
}
voidquit()
{
printf("Youwillquit,thinkyouforusingthesystem!
");
}
voidaddRecord(intchoice)
{
floatcScore,mathScore,engScore,aver;
printf("==========>addrecord\n");
printf("Inputthenumber:
%d\n",choice);
printf("InputcLanguagescore<0-100>:
");
scanf("%f",&cScore);
if(cScore>100||cScore<0)
{
printf("cLanguagescoremustbe<0-100>,Pleaseinputagain:
");
scanf("%f",&cScore);
}
printf("Inputmathscore<0-100>:
");
scanf("%f",&mathScore);
if(mathScore>100||mathScore<0)
{
printf("mathscoremustbe<0-100>,Pleaseinputagain:
");
scanf("%f",&mathScore);
}
printf("Inputenglishscore<0-100>:
");
scanf("%f",&engScore);
if(engScore>100||engScore<0)
{
printf("englishscoremustbe<0-100>,Pleaseinputagain:
");
scanf("%f",&engScore);
}
aver=(cScore+mathScore+engScore)/3;
printf("number:
%d\t",choice);
printf("cLanguage:
%2.1f\t",cScore);
printf("math:
%2.1f\t",mathScore);
printf("english:
%2.1f\t",engScore);
printf("aver:
%2.1f\t",aver);
}
Sgms3.h
voidmenu()
{
printf("TheStudents'GradeManagementSystem\n");
printf("***********************Menu******************************\n");
printf("*1addrecord2displayrecord*\n");
printf("*3sortrecord4findrecord*\n");
printf("*5modifyrecord6deleterecord*\n");
printf("*7countrecord8saverecord*\n");
printf("*0quitsystem*\n");
printf("*********************************************************\n");
}
7.实验结果
8.心得体会
用switchcase语句代替了if语句明显使代码更加清晰明了.在控制分数必须在(0-100)之间使用do-while循环更加方便.更加深入体会了在何种情况下是使用switchcase在何种情况下使用do-while在何种情况下使用if语句.
另外在使用switch…case不能忘记break;
实验4循环结构程序设计
1.实验目的
(1)熟练掌握循环语句中的for语句、while语句和dowhile语句的使用方法,以及这三种循环语句之间的转换方法。
(2)掌握编写循环结构程序的方法。
2.实验要求
(1)实现在一次程序运行中用户能多次进行功能选择。
也就是当用户完成添加或者后面实验.中的显示、删除等等功能后,系统又会回到主菜单,等待用户的下一次功能选择。
(2)在输入分数时,如果输入的分数在0到100之外,则等待用户重新输入,直到输入的分数在0到100之间才结束。
运行程序后,首先出现主菜单界面:
图4-1系统主菜单
用户输入1回车后,进入输入,在输入分数时,分数必须在0-100之间,否则需要重新输入,直到分数满足要求:
图4-2输入记录界面
输入记录完后,按任意键又回到主菜单界面,见图4-1。
3.实验步骤
(1)完善sgms4.c中的main的函数,以达到实验要求1。
(2)将sgms4.c中addRecord函数的while循环改为dowhile循环,以达到实验要求。
(3)运行由sgms4.h和sgms4.c构成的程序。
4.实验重点和难点
(1)循环结构程序的设计方法。
(2)while和dowhile循环之间的转换方法。
(3)getch函数从键盘接收一个字符,该函数被调用后程序会暂停,等待按任意键,再继续执行后续的语句,以便我们观察中间结果。
在VC++下需要包含conio.h头文件,在Linux下需要包含头文件curses.h。
由于在Linux下getch函数还需要与其它函数配合使用才能达到上面所说的功能并且在编译时还要指定链接所使用的库文件,所以在Linux环境建议使用两次调用getchar函数来替换getch函数。
5.常见错误
(1)循环体为复合语句时,没用{}括起来。
(2)在while()和for()后面添加分号,使得循环体为空语句。
(3)for括号里的分号和逗号用错。
(4)循环嵌套时,内循环的初始条件和循环体没正确设计好。
6.程序代码
代码:
Sgms4.h
voidmenu()
{
printf("TheStudents'GradeManagementSystem\n");
printf("***********************Menu******************************\n");
printf("*1addrecord2displayrecord*\n");
printf("*3sortrecord4findrecord*\n");
printf("*5modifyrecord6deleterecord*\n");
printf("*7countrecord8saverecord*\n");
printf("*0quitsystem*\n");
printf("*********************************************************\n");
}
Sgms4.c
#include"stdio.h"
#include"sgms4.h"
#include"stdlib.h"
main()
{
voidaddRecord(intchoice);
voidquit();
intchoice;
menu();
printf("\n");
printf("PleaseEnteryourchoice<0-8>:
");
scanf("%d",&choice);
system("cls");
switch(choice)
{
case0:
quit();break;
case1:
addRecord(choice);break;
}
}
voidquit()
{
printf("Youwillquit,thankyouforusingthesystem!
");
}
voidaddRecord(intchoice)
{
floatcScore,mathScore,engScore,aver;
printf("==========>addrecord\n");
printf("Inputthenumber:
%d\n",choice);
do{
printf("InputcLanguagescore<0-100>:
");
scanf("%f",&cScore);
}while(cScore<0||cScore>100);
do{
printf("Inputmathscore<0-100>:
");
scanf("%f",&mathScore);
}while(mathScore<0||mathScore>100);
do{
printf("Inputenglishscore<0-100>:
");
scanf("%f",&engScore);
}while(engScore<0||engScore>100);
/**aver=(cScore+mathScore+engScore)/3;
printf("number:
%d\t",choice);
printf("cLanguage:
%2.1f\t",cScore);
printf("math:
%2.1f\t",mathScore);
printf("english:
%2.1f\t",engScore);
printf("aver:
%2.1f\t",aver);**/
printf("\n");
printf("==============>addsuccess!
\n");
printf("pressanykeytoreturnmainmenu\n");
charc;
scanf(“%s”,&c);
system("cls");
menu();
}
运行结果:
7.实验结果
8.心得体会
在不同的情况下使用不同的循环.对于一些情况适用do-while比较方便比如一开始就是要求输入的,输入之后在进行控制.不符合条件重新输入一直到输入的值满足条件为止.在使用if语句的时候注意方框里的条件用”;”.
实验5数组的应用
1.实验目的
(1)掌握一维数组和二维数组的定义和引用。
(2)掌握字符数组和字符串函数的使用。
(3)掌握与数组有关的算法(特别是排序算法)。
2.实验要求
(1)将学生信息用二维数组存放。
(2)增加显示功能。
(3)增加排序功能,排序时按照平均成绩有小到大。
运行程序后,首先添加学生记录。
设添加三个学生信息,他们的各科成绩分别为:
1号30、40、80,2号80、60、60,3号60、70、70。
回到主菜单界面,如果输入2,则进入显示记录:
图5-1显示记录界面
在主菜单界面,如果输入3,则进行排序,结果如下:
图5-2排序界面
3.实验步骤
(1)在sgms5.c中将main函数补充完整,完成数组定义。
(2)在sgms5.c中的addRecord函数添加代码,将学生数目加1。
(3)在sgms5.c中的dispRecord和sortRecord函数中添加代码,将所有学生成绩一一显示出来。
(4)将sgms5.c中sortRecord函数的选择排序法改为起泡排序法。
运行由sgms5.h和sgms5.c构成的程序。
4.实验重点和难点
(1)在循环中,数组元素的引用。
(2)起泡排序法、选择排序法和插入排序法。
5.常见错误
(1)数组定义时,没规定数组长度或者长度为一变量。
(2)循环中数组元素的下标没正确表示。
(3)起泡排序、选择排序和插入排序算法没理解透。
(4)起泡排序、选择排序和插入排序中,循环的初始条件和终止条件出现错误。
(5)字符串的复制和比较直接使用赋值运算符和关系运算符。
6.程序代码
Sgms5.h
voidmenu()
{
printf("TheStudents'GradeManagementSystem\n");
printf("***********************Menu******************************\n");
printf("*1addrecord2displayrecord*\n");
printf("*3sortrecord4findrecord*\n");
printf("*5modifyrecord6deleterecord*\n");
printf("*7countrecord8saverecord*\n");
printf("*0quitsystem*\n");
printf("*********************************************************\n");
}
Sgms5.c
#include"stdio.h"
#include"sgms5.h"
#include"stdlib.h
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 晓庄 语言程序设计 实验 报告