C语言实验指导书课案.docx
《C语言实验指导书课案.docx》由会员分享,可在线阅读,更多相关《C语言实验指导书课案.docx(21页珍藏版)》请在冰豆网上搜索。
C语言实验指导书课案
实验1C语言初步与编程环境介绍(2学时)
1.目的要求
1)熟悉C语言基本结构,
2)熟悉VC控制台应用程序设计的使用方法。
2.实验内容
(1)创建项目,分别将教材P13和P14程序输入并编译。
(2)下列程序能正确运行吗?
如果能,写出运行结果;如果不能,指出错误原因并改正。
Main()
{
printf("hello\n");
}
附:
VC6.0环境的使用方法介绍
MicrosoftVisualC++(简称VC)是微软公司生产的基于其Windows系统的软件开发工具。
它具有使用灵活,并与32位Windows内核(使用于Windows95/98/NT/2000)高度兼容的特点,从而被Windows程序员们广泛使用。
同时,VC同样可以加工处理C语言程序,与标准的ANSIC语言兼容。
VC提供了一种控制台操作方式,本实验课程主要在控制台方式下进行设计运行。
一、什么是控制台程序?
Win32控制台程序(Win32ConsoleApplication)是一类Windows程序,它不使用复杂的图形用户界面,程序与用户交互时通过一个标准的文本窗口,通过标准的输入输出流(I/OStreams)进行。
一个最简单的控制台程序如下:
#include//包含使用标准输入输出库的头文件声明
main()
{
printf(”HelloWorld!
”);//输出一个字符串
}
二、如何使用MSVC编写控制台程序?
控制台程序按照下面几个步骤进行。
1、打开VC集成开发环境。
双击桌面图标“MicrosoftVisualC++6.0”,或者从系统菜单“开始”/“程序”/“MicrosoftVisualStudio6.0”/“MicrosoftVisualC++6.0”(如图1),打开VC开发环境(如图2)。
图1从开始菜单中打开VC开发环境
图2VC开发环境界面
2、建立新的工程
从VC的主界面菜单项中选择”文件”/”新建”,如图3所示。
图3文件菜单
这时会弹出一个对话框,其中有4个可选的标签页,默认是”工程”页.工程页中列出了多种工程类型,这里我们选择”Win32ConsoleApplication”类型。
在工程编辑框里填写工程名称,然后单击“确定”按钮。
出现图5所示界面。
图4选择ConsoleApplication工程类型
图5建立空的工程
对于图5所示的界面单击“完成”按钮。
3、新建源文件
目前为止,我们已经建立了一个新的工程,但是这个工程不包含任何文件,也就不包含任何代码。
现在,我们来添加文件。
图6添加源文件
选择菜单项“文件”/“新建”/”文件”,弹出图6所示的界面。
选择类型为”C++SourceFile”的文件类型,添加文件名称,单击”确定”即可。
出现如图7所示的界面。
(注意:
使用C语言编写代码时,应在文件名后添加.c后缀,例如“test.c”)
图7编辑环境
界面的左边部分是一个“工作区”窗口,包含两个标签页,一个是“ClassView”,用来展示当前工作区中的类,函数以及变量信息。
另一个是“FileView”,用来展示当前工作区内的所有文件。
图8工作区
4、编辑,编译与运行
在工作区窗口中双击对应的文件图标,就可以开始进行编辑了。
输入程序代码后,单击”文件”/”保存”,或者直接点击工具栏上的”
”按钮,进行保存。
对文件进行编译,可以通过菜单项”编译”/”重建全部”(也可以按功能键F7),也可以直接点击工具栏上的
,进行编译。
如果输入内容没有语法错误,那么,在屏幕下方的输出窗口将会显示:
*.exe-0error(s),0warning(s)
编译结束后,可以通过输出窗口察看编译情况。
编译的错误会在DeveloperStudio的下方的输出窗口显示出来,逐个查看这些错误的内容,用鼠标双击,光标可以自动移动到发生错误的源程序的相应地点,仔细检查的源程序并改正。
改正后,再重复编译链接,直到编译通过为止。
图9编译信息
如果编译通过,那么可以直接运行程序了。
通过菜单项“编译”/“!
Execute*.exe”执行*.exe“,也可以直接点击工具栏上的
运行,察看运行结果。
运行结果如图10所示。
按任意键关闭窗口,返回编辑环境。
图10控制台应用程序的运行结果
实验2常量、变量与数据类型(2学时)
1.目的要求
1)了解C语言常量和变量的概念
2)熟悉C语言基本数据类型。
2.实验内容
(1)下列代码将同一整数以不同进制下的常量表示,以十进制形式(%d)打印输出。
如果将x的初值37改为95,如何修改下列代码中的数据,使得打印结果输出相同的3个整数。
#include
main()
{
intx=37;
printf("%d\n",x);
printf("%d\n",045);
printf("%d\n",0x25);
}
(2)下列程序能正确运行吗?
如果能,写出运行结果;如果不能,指出错误原因并改正。
#include
main()
{
printf("请输入一个整数");
inta;
scanf("%d",a);//从键盘输入a的值
printf("a=%f\n",A);/*打印a的值*/
intb;
1=b;//将b赋值为1
printf("b=%d");
}
#include
main()
{
floata;
scanf("%d",a);
printf("a=%f\n",a);
}
#include
main()
{
doublea;
scanf("%f",&a);
printf("a=%lf\n",a);
(3)编写代码验证常量3.14以及3.14f的数据类型(提示:
通过sizeof计算出占用常量内存空间大小)。
实验3算术运算符和表达式(2学时)
1.目的要求
1)了解C语言算术运算符的作用和使用规则
2)了解优先级、结合性的概念,熟悉表达式计算规则。
2.实验内容
(1)利用scanf函数从键盘读入一个整数(1~12之间的某个整数)作为当前月份,计算并输出下一个月份。
(2)编写代码,从键盘读入一个三位整数,并将数据倒序输出。
例如输入123,输出321。
(提示:
先分解出整数的个位数输出,再相继分解出十位和百位数字并输出)
#include
main()
{
inta,b;
printf("请输入两个整数(空格间隔)并回车\n");
scanf("%d%d",&a,&b);
printf("平均值=%d\n",(a+b)/2);
}
(3)下列代码能否计算整型变量a和b的平均值?
应该如何修改?
(4)验证下列两段代码的输出结果是否相同。
并说明原因
#include
main()
{
inti=0;
i++;
printf("%d",i);
++i;
printf("%d",i);
}
#include
main()
{
inti=0;
printf("%d",i++);
printf("%d",++i);
}
(5)将460分钟换算成小时和分钟表示,然后输出。
(6)从键盘任意输入三个整数,求它们的和及平均值。
(7)已知a,b均是整型变量,编写程序将a,b两个变量中的值互换。
(2学时)
1.目的要求
1)学习使用scanf()和printf()函数进行输入、输出。
2)了解顺序控制结构的特点。
2.实验内容
1)分析下面程序,指出错误原因并改正。
#include
main()
{
longa,b;
floatx,y;
scanf(“%d,%d\n”,a,b);
scanf(“%5.2f,%5.2f\n”,x,y);
printf(“a=%d,b=%d\n”,a,b);
printf(“x=%d,y=%d\n”,x,y);
}
2)编程从键盘输入一个小写英文字母,将其转换为大写英文字母后,将转换后的大写字母及其十进制ASCII码值显示在屏幕上。
实验5选择控制结构(2学时)
1.目的要求
1)掌握关系运算和逻辑运算。
2)掌握if语句和switch语句的应用。
2.实验内容
1)从键盘任意输入一个整数,判断该数是否是正数,并输出结论。
2)从键盘任意输入两个整数,输出其中的较小数。
3)从键盘任意输入一个实数,不使用计算绝对值函数,编程计算该数绝对值,并输出。
4)从键盘任意输入三角形三边长a,b,c,编程判断a,b,c的值能否构成一个三角形,若能,计算三角形面积并输出,否则输出不能构成三角形。
已知构成三角形的条件是:
任意两边之和大于第三边。
5)从键盘任意输入一个字符,编程判断该字符是数字字符、大写字母、小写字母、空格还是其他字符。
6)编程从键盘输入某年某月(包括闰月),用switch语句编程,输出该年的该月拥有的天数。
考虑闰年,以及输入月份不合理的情况。
7)输入任意一个小于10000的正整数,要求求出它是几位数,并分别输出每一位数字。
(例如输入6789,输出“4位数,各位数字分别为6、7、8、9”)
8)根据如下学生成绩分段等级,当从键盘输入一个成绩(整数)后,输出相应的等级字母。
(如果输入不合法的成绩值,需要输出“错误”提示)
90分以上A
80~89分B
70~79分C
60~69分D
59分以下E
8)(选作)根据输入的实数x的值,计算y=f(x)并输出。
f(x)的表达式如下:
x+3(x≥5)
y=0(0≤x<5)
2x+30(x<0)
实验6循环控制结构(2学时)
1.目的要求
1)掌握for/while/do-while语句、break语句和continue语句,实现循环控制结构
2)掌握嵌套循环
2.实验内容
1)输入正整数n,计算1+2+3+…+n并输出
2)判断正整数n(n>2)是否是素数(素数:
除了1和它自身,没有其他因子)
3)打印斐波那契数列的前20项。
(斐波那契数列特点:
第一项和第二项为1,其余各项为前两项之和。
1,1,2,3,5,8,11…)
4)计算a+aa+aaa+…aa…a(n个a)的值,n和a的值由键盘输入
5)水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。
(例如:
13+53+33=153)。
计算并输出所有三位水仙花数。
6)假设有原材料100米,若生产A零件需要7米材料,生产B零件需11米材料,那么AB零件各生产多少,使得最后剩余的材料最少?
7)输入正整数m和n,用穷举法计算m和n的最大公约数和最小公倍数。
8)(选作)在公共汽车站有三条汽车线,一路车每隔5分钟开出一辆,六路车每隔10分钟开出一辆,八路车每隔8分钟开出一辆。
这三路汽车在同一时刻发车后,至少再过多少分钟,又在同一时刻发车?
9)(选作)游戏者投两枚骰子,每个骰子有六面,包含1,2,3,4,5,6个点。
投两枚骰子之后,计算点数之和,如果第一次的点数之和为7或11,则游戏者胜。
如果第一次的点数之和为2,3或12,则游戏者输,庄家赢。
如果第一次的点数之和为4,5,6,8,9或10,则游戏者继续投骰子,直到赢到点数,如果7次之后还没有赢到点数,则游戏者输。
实验7函数编写与调用(2学时)
1.目的要求
1)掌握函数的定义和使用
2)掌握参数的传递方式
2.实验内容
1)设有数学函数f(x)=x2+2x+3,在C语言程序中编写代码实现函数f。
在main函数中根据用户输入的x,调用该函数计算f(x),将结果打印输出。
2)编写函数iseven,判断整数n是否是偶数。
在main函数中调用该函数并打印结论。
3)编写函数max,计算两个整数中的较大值。
并在main函数中调用该函数,计算输入数的较大者输出(该要求适用于下面各题)。
4)编写函数,计算两个整数的最大公约数
5)编写函数,计算两个整数的最小公倍数
6)编写函数,判断整数m是否是素数,并在main函数中输入数据,调用函数判断,结果输出。
7)编写递归函数,计算正整数n的位数(即n是几位数),并在main函数中输入数据,调用函数判断,结果输出。
8)编写递归函数voidprint(intn),打印正整数n的各位数字,并在main函数中输入数据,调用函数判断,结果输出。
9)编写函数doublepow(doublex,intn),计算xn,并在main函数中输入数据,调用函数判断,结果输出。
实验8数组应用(2学时)
1.目的要求
1)掌握数组的定义和使用
2)掌握数组的应用
2.实验内容
1)从键盘输入8个整数,并存放在数组inta[8]中,统计8个整数中偶数的个数。
2)已知某班10名学生的考试成绩存储在数组中
intscore[10]={85,97,71,89,88,75,82,80,77,73};
从键盘输入一个考分,查找该分数是否在数组中,如果是的话,打印它是第几名学生的成绩。
如果该分数不存在,输出提示信息。
3)定义数组intsc[6];,请编写代码从键盘录入6名学生的成绩用该数组存储,并统计最高分、平均分以及高于平均分的学生人数。
4)已知有序数组inta[7]={3,5,8,11,20,23},要求从键盘任意输入一个正整数,并把该数插入到数组的适当位置并挪动其他元素,使得数组仍然是升序排列的。
5)合并两个有序数组inta[4]={2,4,6,8}和intb[5]={1,3,5,7,9}并存储到数组intc[9]中,使数组c的内容按升序存放。
6)编写函数voidReverse(inta[],intn)将数组逆序,并在main函数中使用下列代码验证该函数的功能。
main()
{
inti,score[10]={85,97,71,89,88,75,82,80,77,73};
Reverse(score,10);
for(i=0;i<10;i++)printf(“s[%d]=%d,”,i,score[i]);
}
7)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。
也可能没有鞍点。
应当至少准备两组测试数据:
①二维数组有鞍点
98020540
90-60961
210-310189
②二维数组没有鞍点
98020540
90-601961
210-310189
45541567
8)(选作)从键盘输入一个十进制数并将其转化为16进制数显示。
例如输入123,输出7B。
9)(选作)思考如何用数组表示一个大整数如123456789123(该数已经超过int和long类型表示范围)?
计算大整数(12位)乘2、除2的结果,并打印。
实验9指针应用(2学时)
1.目的要求
掌握指针的定义和使用
2.实验内容
1)改正下列程序的错误使得程序可以正常执行。
int*p;
char*ps;
scanf(“%d”,p);
printf(“%d”,*p);
gets(ps);
puts(ps);
2)编写函数交换两个整型变量,利用该函数实现数组inta[10]={85,97,71,89,88,75,82,80,77,73};降序排序。
实验10字符串处理(2学时)
1.目的要求
掌握字符串的存储和访问
2.实验内容
1)从键盘输入一行字符串,统计字符串中单词的个数。
例如”Thisisabook”包含4个单词。
2)从键盘输入一行字符串,统计字符串中最长的单词并输出。
3)从键盘输入一行字符串,对字符串加密后输出。
加密方法是将其中的字母替换成ASCII码中相邻的下一字符,’a’替换成’b’,’b’替换成’c’。
。
。
’z’替换成’a’。
例如输入”Hello”,输出”Ifmmp”。
4)实现针对上题的解密方法。
5)仿照库函数strlen编写函数intslen(char*p),返回以p为首地址的串中的字符个数(即串的长度)。
6)仿照库函数strcpy编写函数char*scopy(char*pd,char*ps),将以p为首地址的串拷贝到以pd为首地址的连续空间中,并返回pd。
7)仿照库函数strcmp编写函数intscmp(char*p1,char*p2)。
8)仿照库函数strcat编写函数char*scat(char*pd,char*ps)。
将以p2为首地址的串连接到p1串后面,并返回p1。
实验11指针和数组综合(4学时)
1.目的要求
掌握指针和一维数组的关系以及动态数组的定义和使用
2.实验内容
1)从键盘输入5个整数,然后将其输出到屏幕上。
通过调用函数分别给数组赋值,将数组输出。
函数参数为指针。
2)输入m(不超过30人)个学生的n(不超过5门)门课程的成绩,然后计算并打印每个学生各门课程的总分和平均分。
其中,m和n的值由用户从键盘输入。
要求同上。
3)根据用户输入的正整数n动态申请空间,存放用户输入的n个整数,并求解最大值。
实验12结构体应用(2学时)
1.目的要求
掌握结构体的定义和使用
2.实验内容
定义学生结构体类型,包含基本的姓名、性别、年龄、成绩信息,并定义相应的结构体变量存储从键盘输入5个学生的基本信息(例如“张宁”,’M’,19,92.5),按年龄升序将其输出
实验13文件操作(2学时)
1.目的要求
掌握文件的基本操作
按字符读写文件
2.实验内容
复制文件。
将键盘上已经存在的一个文件,复制到新文件中。
源文件名、新文件名都从键盘输入,文件为纯文本文件。