程序设计基础实验.docx
- 文档编号:28858831
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:18
- 大小:52.76KB
程序设计基础实验.docx
《程序设计基础实验.docx》由会员分享,可在线阅读,更多相关《程序设计基础实验.docx(18页珍藏版)》请在冰豆网上搜索。
程序设计基础实验
《程序设计基础》实验内容
本课程共有16学时的实验,分8次进行,每次2学时,完成一个实验所要求的内容。
序号
实验单元
1
熟悉C语言开发环境
2
表达式与输出函数printf
3
输入函数scanf与字符型数据
4
顺序结构程序设计
5
分支结构程序设计
6
简单循环
7
二重循环、数组初步
8
数组与字符串
合计
实验1熟悉C语言开发环境
LX0101练习上机编程实验的过程。
(1)新建一个空文档,录入下面的程序:
(2)把编辑窗口中的上述程序存盘,存盘时把源程序命名为LX0101.C。
(3)不关闭TC(如果是全屏则用Alt+Enter切换到窗口状态),利用Windows操作系统中的“我的电脑”或者“资源管理器”找到上一步的存盘文件LX0101.C,观察该文件的大小、建立的时间。
(4)回到TC环境,发出“编译”命令,观察编译的提示信息。
如果编译系统提示有错(录入时有少量错误是正常现象;如果错误提示是“Unabletoopenincludefile'STDIO.H'”,表明系统未正确配置,可参阅第1部分关于TC系统安装与配置的说明),则修改相应的错误,再存盘、编译,直到编译成功为止。
(5)仿照(3)的操作方法,在磁盘上找到编译结果:
LX0101.OBJ,观察该文件的大小、建立的时间。
(6)回到TC环境,发出“连接”命令,观察连接的提示信息。
如果连接有错(可能是系统未正确配置,也可能是printf拼写错误),则修改相应的错误,再存盘、编译、连接,直到连接成功为止。
(7)仿照(3)的操作方法,在磁盘上找到连接结果:
LX0101.EXE,观察该文件的大小、建立的时间。
(8)回到TC环境,发出“运行”命令(快捷键Ctrl+F9),观察运行的效果——一闪而过,马上又回到编辑状态。
(9)切换到显示结果的“UserScreen”(快捷键Alt+F5),观察该程序的运行结果。
(10)再把上述程序运行两三次(不需要重新编译连接),并切换到“UserScreen”观察运行结果。
几次运行结果一起放在屏幕上是否让你感到有一种需要——“我想擦黑板”?
(11)在磁盘上找到可执行文件LX0101.EXE,双击,观察效果。
(12)在TC编辑器中把程序在“}”前加一行:
“getch();”,再存盘、编译、连接。
(13)再次在磁盘上找到可执行文件LX0101.EXE,双击,观察效果。
比较与(11)的不同。
说明添加的那一行起什么作用?
LX0102巩固基本语法规则。
(1)下列的程序中有一些违反了C语言语法规则的地方,请指出并修改
(2)新建空文档,录入上述程序,以LX0102为文件名存盘。
(3)修改其中的错误,编译、连接、运行该程序,观察运行结果。
实验2表达式与输出函数printf
LX0201掌握printf的基本用法。
(1)新建空文档,录入下面的程序:
#include"stdio.h"
main()
{inta1=15,a2=-47;
longintb1=1234567,b2=-9876543;
floatc1=3.1416,c2=-8.9512;
doubled1=0.123456789,d2=-0.987654321;
}
(2)在程序中添加若干输出语句,使得程序能够依次显示出以下内容。
每个数据显示占一行,在显示的数据前后各加一个#号,从而可以分辨出显示的数据是否符合要求的格数:
①显示d1的值;
②显示b2的值;
③以5格的宽度显示a1的值,左对齐;
④以7格的宽度显示a2的值,右对齐;
⑤以10格的宽度显示b1的值,左对齐;
⑥以小数点后取3位的形式按实际需要的格数显示c1的近似值(即精确到0.001);
⑦显示与c2最接近的整数值(即小数点后取0位);
⑧以12格、小数点后取8位的形式显示d2的近似值。
(3)把添加了输出语句的程序以LX0201为名存盘,并编译、连接、运行,查看显示结果是否达到各项要求。
LX0202掌握基本的数学运算符。
下面的程序是求整数a除以b的商和余数,在程序空缺处填上适当的语句后以LX0202为名存盘。
观察程序运行的结果。
为什么程序中有两个连续的百分号“%%”?
#include"stdio.h"
main()
{inta,b,c,d;
a=123;
b=47;
__________________
__________________
printf("a=%d,b=%d,a/b=%d,a%%b=%d\n",a,b,c,d);
}
LX0203求余运算符对负数的处理。
仿照上面的LX0202编写一个完整程序,用于探查TC开发环境是如何处理含有负数的求余除法的,包括“正数%负数”、“负数%正数”、“负数%负数”三种情况,观察程序的运行结果,总结出TC环境下的求余规则。
LX0204运算符结合性。
下面的程序用于加强对运算符结合性的理解,录入该程序(不需要录入注释部分),以LX0204为名存盘。
程序中用几组语句对“一个运算符连续出现”的现象该如何处理做了比较,注意观察原表达式的处理次序与哪一组分解处理相同,从而说明同级运算符连续出现时按结合性的方向计算。
#include"stdio.h"
main()
{inta=123,b=26,c=7,x,y,z;
x=a%b%c;/*以下说明%是左结合的*/
y=(a%b)%c;/*如果%是左结合则x与y等值*/
z=a%(b%c);/*如果%是右结合则x与z等值*/
printf("x=%d,y=%d,z=%d\n",x,y,z);
/*以下说明赋值运算符“=”是右结合的*/
printf("a=%d,b=%d,c=%d\n\n",a,b,c);/*显示初值*/
a=b=c=6;/*赋值运算符连续出现*/
printf("a=%d,b=%d,c=%d\n\n",a,b,c);/*显示处理结果*/
a=123,b=26,c=7;/*恢复各变量的原值*/
a=b;/*如果=是左结合则相当于如此三步的处理次序*/
b=c;
c=6;
printf("a=%d,b=%d,c=%d\n\n",a,b,c);/*显示处理结果*/
a=123,b=26,c=7;/*恢复各变量的原值*/
c=6;/*如果=是右结合则相当于如此三步的处理次序*/
b=c;
a=b;
printf("a=%d,b=%d,c=%d\n\n",a,b,c);/*显示处理结果*/
}
LX0205类型转换的有关知识。
在下面的程序空格处填上适当的格式符,使得该程序能够显示出各个表达式的值。
#include"stdio.h"
main()
{inta=123;
longintb=123;
doublec=123.456;
printf("____,____,____\n",a,a+b,a+c);
printf("____,____,____\n",b,(int)b+a,b+c);
printf("____,____,____\n",c,c+(double)a,(int)(a+c));
}
LX0206关于自增/自减运算符。
(1)录入下面的程序,观察运行结果,理解其中各个运算符的处理过程。
#include"stdio.h"
#include"math.h"
main()
{inti=6,j,x=4,y;
j=(i++)+1;
printf("1:
i=%d,j=%d\n",i,j);
y=(--x)–(++i)*(j++);
printf("2:
x=%d,y=%d,i=%d,j=%d\n",x,y,i,j);
x+=(x++)+abs(i+++y);
printf("3:
x=%d,y=%d,i=%d,j=%d\n",x,y,i,j);
}
(2)把程序中的3条赋值语句(第3条是复合的赋值语句)分别用多条语句改写,不允许使用自增、自减运算符,且改写的结果与原来的赋值语句在处理效果上完全相同。
比如第1条赋值语句应改为以下的两条语句:
j=i+1;/*先用i的值参与运算,然后再把i自增*/
i=i+1;
(3)把改写以后的程序用LX0207为名存盘。
实验3输入函数scanf与字符型数据
LX0301掌握scanf的基本用法。
把下面程序中的scanf语句补充完整,使得运行该程序时按以下方式按键:
12↙
3,4↙
5,6↙
7,8↙
则程序的显示结果表明各变量的值分别为:
a=1,b=2,c=3,d=4,x1=5.0,x2=6.0,x3=7.0,x4=8.0。
#include"stdio.h"
main()
{inta,b;
longintc,d;
floatx1,x2;
doublex3,x4;
scanf(___________________________);
scanf(___________________________);
scanf(___________________________);
scanf(___________________________);
printf("a=%d,b=%d\n",a,b);
printf("c=%ld,d=%ld\n",c,d);
printf("x1=%f,x2=%f\n",x1,x2);
printf("x3=%f,x4=%lf\n",x3,x4);
}
LX0302加强对顺序结构的理解。
(1)分析下面的程序,录入。
#include"stdio.h"
#include"math.h"
main()
{inta,b,c,d;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
c=(a+b)/2+abs(a–b)/2;
d=(a+b)/2–abs(a–b)/2;
printf("max=%d,min=%d\n",c,d);
}
(2)把程序运行若干次,分别按以下方式输入数据:
两个奇数、两个偶数、先奇数后偶数、先偶数后奇数,观察程序的运行结果。
(3)可以发现,上述程序的功能是对输入的两个整数区分大小,但在某些情况下显示不正确。
分析原因,修改程序使之能应对各种输入情况。
(4)随意地调整各语句间的先后次序,再运行,观察运行结果,从中体会什么是顺序结构。
(5)把程序按完成(3)后的情况存盘。
LX0303加强对字符型数据的理解。
(1)下面的程序能够显示变量a中存放的字符及其ASCII值,录入程序,观察运行结果。
#include"stdio.h"
main()
{chara;
a='*';
printf("a='%c',ASCII:
%d\n",a,a);
}
(2)把程序中的“'*'”分别换成以下情况:
①'%';②52;③'\n',再运行程序,观察结果。
(3)把程序中的char换成int,再按
(2)的要求做一遍,观察运行结果有没有变化。
LX0304加强对字符型数据的理解。
编写完整程序:
从键盘输入一个字符,输出其ASCII值。
若输入键是A,要求输出为:
ASCIIof'A'is65.
重新运行程序,但输入键是C,则输出为:
ASCIIof'C'is67.
提示:
参照LX0303程序中的printf语句,先建立显示模板(即格式串),然后确定格式符。
LX0305编写程序解决简单的实际问题。
编写完整程序:
输入一个小写字母,假设该字母在字母表中是第n个,要求输出字母表中倒数第n个字母。
比如输入a则输出z,输入c则输出x,输入p则输出k。
不考虑输入不是小写字母的情况。
提示:
列举几个对应关系的实例,观察它们在ASCII值上的关系。
实验4顺序结构程序设计
LX0401巩固顺序结构程序的基本流程。
编写完整程序,依次完成下列操作:
①分别从键盘输入三个实数送到变量x、y和z中;②将它们的值进行倒换,即把x的值放入y,y的值放入z,z的值放入x;③再输出交换以后的三个变量的值。
比如输入是1.1、2.2和3.3,分别送到x、y和z后,按上述规则交换它们的值,使得x、y和z中分别存放的是3.3、1.1和2.2,再输出x、y和z的值。
LX0402编写程序解决简单的实际问题。
编写完整程序:
输入平面上三个点的坐标值(即依次输入6个数),求通过这三个点的二次函数f(x)=ax2+bx+c的系数a、b、c的值。
提示:
如果三个点分别是(1,-3)、(2,-3)、(3,-5),你会用数学方法解决这个问题吗?
把你的方法“教”给计算机。
LX0403编写程序解决简单的实际问题。
编写完整程序:
输入某人的出生年份和月份,再输入操作当天的日期,计算他的年龄(以“岁”为单位),精确到小数点后一位。
比如分别输入1988、7和2006、1,程序计算结果应为17.5。
LX0404编写程序解决简单的实际问题。
编写完整程序:
从键盘输入一个三位整数(不考虑输入有错的情况),计算出它的逆序数并显示。
比如,输入的数是123,要求输出为
123--->321
提示:
设输入的三位数存放在x中,则x%10就是它的个位数字;写两个表达式能计算出x的百位数字和十位数字;再以所得到的个位数字乘以100,十位数字乘以10,以及百位数字三者相加即可得把x逆序后的数。
LX0405编写程序解决简单的实际问题。
按如下方式完成LX0404的问题:
设输入的三位数存放在x中,另准备一个存放结果的变量y和临时存放数据的变量t,令y的初值为0;设计一组赋值语句——“把x的个位数字送到t中,令y取值为其原值的10倍再加上t,令x取值为其原值除以10的商”;把这一组赋值语句再写两遍;显示y中的数。
思考:
①经过上述处理后x中的值是多少?
②如果x中的数是四位数,应把程序作何调整?
五位数呢?
实验5分支结构程序设计
LX0501训练缩进格式。
录入下面的程序,把其中的if语句调整成标准的缩进格式,运行该程序,分析变量d中的数据是如何变化的。
#include
main()
{inta,b,c,d;
a=c=0;
b=1;
d=20;
if(a)d=d–10;elseif(!
b)
if(!
c)d=15;elsed=25;
printf("d=%d\n",d);}
LX0502训练缩进格式。
录入下面的程序,把其中的switch语句调整成标准的缩进格式,运行该程序,分析显示结果是如何产生的。
#include
main()
{intx=1,y=0;
switch(x)
{case1:
switch(y)
{case0:
printf("first\n");break;
case1:
printf("second\n");break;}
case2:
printf("third\n");}}
LX0503连续使用if语句。
编写完整程序:
输入3个整数,输出其中最大的一个。
提示:
先取前两个数当中较大的一个,存到某变量中,再用这个变量中的数与第三个数比较取大的。
LX0504if语句的嵌套。
编写完整程序:
键入一个字符,如果是大写字母则输出相应的小写形式;如果是小写字母则输出其对应的大写;如果不是英文字母则输出“*”。
提示:
这是三路分支的问题,但不能用switch语句解决。
LX0505应用分支结构解决实际问题。
编写完整程序:
输入6个数作为平面上三个点的坐标值,判断这三个点能否构成等腰三角形。
提示:
如果三个点在同一直线上,可以认为这是三角形的特殊形式——面积为0,因此平面上的三个点总是可以构成三角形的。
LX0506switch语句的应用。
假设人的年龄在10岁以下称儿童,10到19岁称青少年,20到39岁称青年,40岁到59岁称中年,60岁以上称老年。
编写完整程序,输入一个人的年龄,显示出他在哪一个年龄段。
要求用switch实现。
提示:
参照第5章最后一个例子——把成绩转换为等级的方法。
实验6简单循环
LX0601了解循环执行过程。
(1)录入下面的程序,观察运行结果,分析循环执行的过程。
#include
main()
{intx;
x=-1;
do{x=x*x;
printf("%d\n",x);
}while(!
x);
}
(2)在适当的位置添加适当的变量定义和语句,使得每循环一次能显示出这是第几次循环。
提示:
这是把握循环执行过程的一个常用方法,做法是增加一个整型变量,不妨命名为t,初值为0,再把下面的语句加在循环体的最前面:
printf("Iterationcount:
%d\n",++t);
LX0602了解循环执行过程。
(1)录入下面的程序,观察运行结果,分析循环执行的过程。
#include
main()
{intnum=0;
while(num<=4)
{num++;
printf("%d\n",num++);
}
}
(2)在程序的适当位置添加适当的变量定义和语句,使得每循环一次能显示出这是第几次循环。
参见LX0601的提示。
LX0603用循环求解数列问题。
设sn=1+1/2+1/3+…+1/n,编写完整程序求:
为了使sn>5,n最小是多少?
LX0604用循环方式求解实际问题。
编写完整程序:
输入一个正的长整数(注意长整数的有效范围,运行程序时输入的数必须小于2147483648),判断它是几位数。
提示:
在LX0405中,3位数x可以做3次整数除法x=x/10,做完3次除法后x的值为0;如果x的原值是4位数则可以做4次除法。
因此,连续地令x=x/10,直到x的值是0为止,看看能做多少次除法。
LX0605用循环方式求解实际问题。
编写完整程序,求方程xex-x2-1=0在区间(0,1)中的一个近似解,精确到10-6。
提示:
参照例6.13。
LX0606用循环方式求解实际问题。
求由f(x)=sin(x)、x轴和直线x=π/2围成的图形的面积近似值。
(方法:
取一组直线x=0,x=π/100,x=2π/100,x=3π/100,…,x=50π/100,这一组直线将把指定的图形分成50个细长条,把每个细长条近似地看作是梯形,求其面积,再对50个梯形面积求和)
提示:
这是定积分问题,用数学方法可以求得该图形的面积是1。
思考:
把上述方法中的50条等分直线改为500条,能否增加近似值的准确程度?
实验7二重循环、数组初步
LX0701二重循环的初步应用。
编写完整程序:
以左下三角形的形式,输出九九乘法表。
要求使用二重循环进行控制,纵向对齐。
程序的运行结果应为:
1*1=1
1*2=22*2=4
1*3=32*3=63*3=9
……
1*9=92*9=183*9=27……9*9=81
LX0702二重循环的应用。
求不定方程x2+4x-3y2-6y=0在0 提示: 应用枚举法,检查x和y在给定范围内的每一种取值组合是否满足方程。 为了枚举x和y的所有可能取值组合,可以用二重循环进行控制。 LX0703二重循环的应用。 编写完整程序,输出由字母拼成的菱形,行数由键盘输入的正整数控制。 当键入的数据是4时,显示结果为: 提示: 该图形可以看作是由n行的正置等腰三角形拼上一个n-1行的倒置等腰三角形构成,相应地程序分成两块,先显示上一半再显示下一半。 参见例6.17。 LX0704对数组元素的访问。 编写完整程序: 从键盘输入10个整数存入一维数组中,按逆序重新存放,即把0号下标的元素与9号下标的元素对换,把1号下标的元素与8号下标的元素对换,……再依次输出数组中的各个元素。 提示: 注意控制交换的次数,N个元素只需要进行N/2次交换。 LX0705对数组元素的访问。 编写完整程序: 从键盘输入10个整数,判断它们是否是按照由小到大的次序排列的。 提示: 这是“存在性”问题,10个数就有9个相邻位置,依次检查每一个相邻位置上的两上数是否前小后大。 LX0706一维数组的应用。 编写完整程序: 随机产生10个整数,模拟是10名比赛队员的成绩值,统计他们每个人分别是第几名(成绩相同者名次并列),显示结果。 提示: 确定一个队员的名次只需要看有几个人比他的成绩好,比如成绩值分别是: 47358473434773476654 相应地可以统计出对于每个成绩而言有几个更好的成绩,结果是: 5901851534 分别加1之后就是相应队员的名次,可见有两人并列第2,3人并列第6。 实验8数组与字符串 LX0801一维数组的应用。 用筛选法求100以内的素数。 (筛选法: 先把待判断的2到100共99个整数放到“筛子”上,从小到大检查目前还留在“筛子”上数。 对所检查到的数,保留该数但把该数的2倍、3倍、……从“筛子”上筛掉,最后“筛子”上剩余的数就是指定范围内的所有素数。 ) LX0802排序问题。 随机产生20个整数,排序。 例7.8的排序法是每次把剩余元素中的最大值与尚未排序的最后一个元素交换位置,试用“每次把剩余元素中的最小值与尚未排序的最前面一个元素交换位置”的方式
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 实验