计算机二级上机.docx
- 文档编号:27581306
- 上传时间:2023-07-03
- 格式:DOCX
- 页数:37
- 大小:32.42KB
计算机二级上机.docx
《计算机二级上机.docx》由会员分享,可在线阅读,更多相关《计算机二级上机.docx(37页珍藏版)》请在冰豆网上搜索。
计算机二级上机
《C语言程序设计》
实验指导书
目录
实验一C语言的运行环境和运行过程1
实验二数据类型、运算符和表达式5
实验三选择结构8
实验四循环结构
(1)11
实验五循环结构
(2)14
实验六数组
(1)17
实验七数组
(2)19
实验八函数
(1)20
实验九函数
(2)22
实验十指针
(1)23
实验十一指针
(2)25
实验十二结构体和共用体26
实验十三位运算27
实验十四有关文件的程序设计28
实验十五综合应用举例29
实验一C语言的运行环境和运行过程
[实验目的和要求]
1.了解Dos、Windows环境下C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使用该系统。
2.了解在该系统上如何编辑、编译、连接和运行一个C程序。
3.通过运行简单的C程序,初步了解C源程序的特点。
4、本实验可在学习完教材第一章后进行。
[实验内容和步骤]
C语言是一种编译型的程序设计语言,它采用编译的方式将源程序翻译成目的程序(机器代码)。
运行一个C程序,从输入源程序开始,要经过编辑源程序文件(·C)、编译生成目标文件(·obj)、连接生成可执行文件(·exe)和执行四个步骤。
1.TurboC工作环境介绍
一个C语言程序的实施是从进入TurboC的集成环境开始的,而进入C语言的环境,一般有两种途径:
从DOS环境进入和从Windows环境进入。
(1)从DOS环境进入
在DOS命令行上键入:
C>CD\TC↙(指定当前目录为TC子目录)
C>TC↙(进入TurboC环境)
这时进入TurboC集成环境的主菜单窗口,屏幕显示如下图所示。
(2)从Windows环境进入
在Windows95/98环境中,如果本机中已安装了TurboC,可以在桌面上建立一个快捷方式,双击该快捷图标即可进入C语言环境。
或者从开始菜单中找到“运行”,在运行对话框中键入“C:
\TC\TC”,“确定”即可。
(3)TurboC环境中运行C语言源程序的步骤
1)编辑源文件
在主菜单下,直接按Alt+F键,或按F10后将光带移到“File”选项上,按回车键,在“File”下面出现一个下拉菜单,菜单中有以下选项:
LoadF3表示加载或装入一个文件
PickAlt+F3从指定的文件列表中选择文件装入编辑器。
New表示新文件,缺省文件名为NONAME.C。
SaveF2将正在编辑的文件存盘。
Writeto将正在编辑的文件写入指定的文件中,若文件名已存在,则重写。
Directory表示文件目录。
ChangeDir改变驱动器及目录
OSshell进入TurboC命令行模式,命令EXIT可返回集成环境
QuitAlt+x退出TurboC,返回DOS状态。
2)源程序的编译、连接
直接按F9键,或将菜单“Compile”中的光带移到“MakeEXEfile”项上,按回车键,就可实现对源程序的编译、连接。
若有错误,则在信息窗口显示出相应的信息或警告,按任意键返回编辑窗口,光标停在出错位置上,可立即进行编辑修改。
修改后,再按F9键进行编辑、连接。
如此反复,直到没有错误为止,即可生成可执行文件。
注意:
C程序的连接是在编译后自动完成的。
3)执行程序
直接按Ctrl+F9键,即可执行.EXE文件;或在主菜单中(按F10进入主菜单)将光带移到“Run”选项,按回车键,弹出一个菜单,选择“Run”选项,回车。
4)退出TurboC集成环境
退出TurboC环境,返回操作系统状态。
可在主菜单选择“File”菜单的“Quit”选项,或者直接按Alt+X。
2.VisualC++工作环境介绍
1)建立工程。
2)新建C++源文件(.cpp),输入源程序。
注意随时存盘【Ctrl+s】或点击“常用工具栏”中的保存按钮。
3)编译源程序生成可执行文件。
可以在菜单中选择“编译”命令,或者直接按F5键。
4)执行程序。
可以在菜单中选择“执行”命令,或者直接按Ctrl+F5键。
[上机示例]
[例1]编程实现在屏幕上显示如下三行文字
Hello,world!
WolcometotheClanguageworld!
Everyonehasbeenwaitingfor.
程序example.c如下:
main()
{printf("Hello,World!
\n");
printf("WolcometotheClanguageworld!
\n");
printf("Everyonehasbeenwaitingfor.\n");}
[例2]输入并运行程序,写出运行结果。
main()
{inta,b,sum;
a=123;b=456;
sum=a+b;
printf(“sumis%d\n”,sum);}
结果为:
sumis579。
[例3]输入并运行程序,写出运行结果。
main()
{inta,b,c;
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf(“max=%d”,c);}
intmax(intx,inty)
{intz;
if(x>y)z=x;
elsez=y;
return(z);}
这个程序的功能是对于任意输入的两个整数,输出较大的那个数。
所以程序运行之后,光标将停留在用户屏幕上,等待用户输入两个整数,比如输入“3,5”,回车,在用户屏幕上就会输出“max=5”。
[课后练习]
1、输入并运行例题中程序,熟悉调试C程序的的方法与步骤。
2、参照例题,编写一个C程序,输出以下信息:
****************************
Hello,World!
****************************
3、编写一个C程序,输入a、b、c三个数,输出其中最大者。
试想,如果求四个数中的最大者,则程序该如何编写。
[分析与讨论]
1、记下在调试过程中所发现的错误、系统给出的出错信息和对策。
分析讨论对策成功或失败的原因。
2、总结C程序的结构和书写规则。
实验二数据类型、运算符和表达式
[实验目的]
1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用的格式转换符。
2.熟练表达式的表示方法,了解表达式的运行结果。
学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
3.进一步熟悉C程序的编辑、编译、连接和运行的过程。
[实验内容和步骤]
1.用printf函数来输出表达式运行结果
2.程序试图计算由键盘输入的任意两个整数的平均值:
[问题讨论]
1.“=”和“==”有什么区别?
2.“&”和“&&”、“|”和“||”有什么区别?
3.如何正确地选用数据类型?
[上机示例]
[例1]输入并运行下程序,写出运行结果。
main()
{
charc1,c2;
c1=97;c2=98;
printf(“%c%c”,c1,c2);
}
在此基础上
1)加一个printf语句,并运行之。
printf(“%d,%d”,c1,c2);
2)再将第3行改为:
intc1,c2;
再使之运行。
3)再将第4行改为:
c1=300;c2=400;
再使之运行,分析其运行结果。
在该程序中,说明了字符型数据在特定情况下可作为整型数据处理,整型数据有时也可以作为字符型数据处理。
[例2]分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。
main()
{
charc1=’a’,c2=’b’,c3=’c’,c4=’\101’,c5=’\116’;
printf(“a%cb%c\tabc\n”,c1,c2,c3);
printf(“\t\b%c%c”,c4,c5);
}
在该程序中,主要考查对转义字符的掌握情况。
[例3]分析下程序,写出运行结果,再输入计算机运行,将得到的结果与你分析得到的结果比较对照。
main()
{
inti,j,m,n;
i=8;j=10;
m=++i;n=j++;
printf(“%d,%d,%d,%d”,i,j,m,n);
}
分别作以下改动之后,先分析再运行:
1)将第5行改为:
m=i++;n=++j;
2)程序改为:
main()
{
inti,j;
i=8;j=10;
printf(“%d,%d”,i++,j++);
}
3)在2)的基础上,将printf语句改为:
printf(“%d,%d”,++i,++j);
4)再将printf语句改为:
printf(“%d,%d,%d,%d”,i,j,i++,j++);
5)程序改为:
main()
{
inti,j,m=0,n=0;
i=8;j=10;
m+=i++;n-=--j;
printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);
}
此程序主要考查自加、自减运算符以及复合运算符的用法。
[课后练习]
1.要讲“China”译成密码,密码规律是:
用原来的字母后面第5个字母代替原来的字母。
例如,字母“A”后面第5个是“F”,用“F”代替“A”。
因此,“China”应译为“Hmnsf”。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为’C’、’h’、’i’、’n’、’a’,经过运算,使其分别变为’H’、’m’、’n’、’s’、’f’,并输出。
注:
对译码规律作如下补充:
’W’用’A’代替,’X’用’B’代替,’Y’用’C’代替,’Z’用’D’代替。
修改程序并运行。
程序二:
将译码规律修改为:
将字母用它前面的第4个字母代替,例如:
’E’用’A’代替,’Z’用’U’代替,’D’用’Z’代替,’C’用’Y’代替,’B’用’X’代替,’A’用’V’代替。
修改程序并运行。
2.求下面算术表达式的值。
(1)x+a%3*(x+y)%2/4
设x=2.5,a=7,y=4.7
(2)(float)(a+b)/2+(int)x%(int)y
设a=2,b=3,x=3.5,y=2.5
先自己分析,再试着用程序求解,看得到的结果是否一致。
3.写出下面表达式运算后a的值,设原来a=10。
设a和n已定义成整型变量。
(1)a+=a
(2)a-=2
(3)a*=2+3(4)a/=a+a
(5)a%=(n%=2),n的值等于5(6)a+=a-=a*=a
先自己分析,再试着用程序求解,看得到的结果是否一致。
4.设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输入数据,输入计算结果。
输出时要有文字说明,取小数点后两位数字。
实验三选择结构
[实验目的]
1、了解条件与程序流程的关系
2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径。
[实验内容和步骤]
1、了解C语句表示逻辑量的方法(0代表“假”;1代表“真”);
2、学会正确使用逻辑运算符和逻辑表达式;
3、熟练掌握if语句和switch语句。
[程序分析]
1、有如下程序段:
{……
if(a>1&&b==0)x=x/a;
if(a==2||x>1)x=x+1;
}
为了更容易明白程序的逻辑结构,要求用流程图来加以描述。
要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。
[讨论]
(1)用哪一组数据就可使程序中的每个处理语句都执行一次?
为了找出程序中各条处理语句中的错误,应该使用什么样的数据对程序进行测试?
请上机验证自己的结论。
(2)用哪两组数据就可以使程序段中的每个分支都运行一次?
这种情形与上面的讨论有何不同?
如果为了找出程序中积压分支中的错误,应该使用什么样的数据对程序进行测试?
请上机验证自己的结论。
(3)用哪两组数据就可以把判定框中的每个条件运算都进行一次?
如果为了测试出判定条件中的错误,应使用哪些数据对程序进行测试?
请上机验证自己的结论。
(4)用哪四组数据才可以把各种条件的组合都检测一遍?
如果为了测试各种条件的组合的情形,应该使用什么样的测试数据?
请上机验证自己的结论。
(5)用哪四组数据才可以把起始到终止的各条路径都覆盖一次?
如果为了测试出程序在不同路径下的错误,应该使用什么样的测试数据?
请上机验证自己的结论。
[上机示例]
[例1]已知三个数a,b,c,找出最大值放于max中。
分析:
由已知可得在变量定义时定义四个变量a,b,c和max,a,b,c是任意输入的三个数,max是用来存放结果最大值的。
第一次比较a和b,把大数存入max中,因a,b都可能是大值,所以用if语句中if——else形式。
第二次比较max和c,把最大数存入max中,用if语句的第一种形式if形式。
Max即为a,b,c中的最大值。
#include"stdio.h"
main()
{
inta,b,c,max;/*定义四个整型变量*/
scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);
if(a>=b)
max=a;/*a>=b*/
else
max=b;/*a
if(c>max)
max=c;/*c是最大值*/
printf("max=%d",max);
}
若输入下列数据,分析程序的执行顺序并写出运行结果
(1)a=1,b=2,c=3
(2)a=2,b=1,c=3
(3)a=3,b=2,c=1
(4)a=3,b=1,c=2
(5)a=3,b=3,c=2
(6)a=2,b=1,c=2
[例2]输入某学生的成绩,经处理后给出学生的等级,等级分类如下:
90分以上(包括90):
A
80至90分(包括80):
B
70至80分(包括70):
C
60至70分(包括60):
D
60分以下:
E
方法一:
用if嵌套
注意:
当输入成绩出现小于0或大于100时,要输出错误信息。
因此,在用if嵌套前,应先判断输入的成绩是否在0~100之间。
方法二:
用switch语句
在使用switch语句之前,必须把0~100之间的成绩分别化成相关的常量。
所有A(除100以外),B,C,D类的成绩的共同特点是十位数相同,此外都是E类。
则由此可得把score除十取整,化为相应的常数。
输入测试数据,同方法一一样调试程序并写出结果。
[例3]有一函数:
用scanf函数输入x的值(分别为x<1,1~10,>=10三种情况),求y值。
y=
x
x<1
2x-1
1= 3x-11 x>=10 实验四循环结构 (1) [目的和要求] 1、掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。 2、了解条件型循环结构的基本测试方法。 [实验分析] 1、下面是一个计算e的近似值(使误差小于给定的δ)的程序。 main() {doublee=1.0,x=1.0,y,detax; inti=1; printf(“\npleaseinputenteraerror: ”); scanf(“%lf”,&detax); y=1/x; while(y>=detax) { x=x*i; y=1/x; e=e+y; ++i; } printf(“%12.10lf”,e); } [讨论] (1)阅读上面的程序,写出程序所依据的计算公式。 (2)当输入的detax各是什么值时,能分别使程序按下面的要求运行: .不进入循环; .只循环一次; .只循环两次; .进入死循环(程序将永远循环下去)。 为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句? (3)将程序中while语句的循环条件y>=detax,分别换成y>detax,y=detax,y 假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的detax来测试出while语句的循环条件写错了。 (4)把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。 假如不知道机器内的程序实际上是怎么写的,输入什么样的detax就能测试出少了上述这条语句。 (5)若把原程序中的++i换成i++,观察程序的运行发生了什么变化? 假如不知道这条语句到底是怎么写的,输入什么样的detax就能测试出这条语句写错了. (6)把原程序中的while结构改写成do—while结构,再分别按上述的 (2)、(3)两步进行实验。 [上机示例] 1.计算两个数的最大公约数; 算法: 输入两个数m和n,令k为m除以n的余数,如果m能被n整除,则k值为0,n为这两个数的最大公约数,否则,令n代替m,k代替n,,重复以上过程,直到k值为0。 #include"stdio.h" main() { intm,n,k,result; printf("Entertwonumbers: "); scanf("%d,%d",&m,&n); if(m>0&&n>0)/*限定两个正整数*/ { do { k=m%n; if(k==0)result=n; else { m=n; n=k; } }while(k>0);/*循环取余求出最大公因子*/ printf("Thegreatestcommondivistoris: %d\n",result); } else printf("Nonpositivevaluesnotallowed\n"); } 2.用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。 3.用循环程序打印下列图案 * *** ***** ******* 4.判断m是否是素数。 实验五循环结构 (2) [目的和要求] 1.掌握如何正确地控制计数型循环结构的次数 2.了解对计数型循环结构进行测试的基本方法 3.了解在嵌套循环结构中,提高程序效率的方法 [实验内容] 熟练掌握while、do—while和for三种循环语句的应用。 [实验分析] #include main() { inti,j; longsum=0; for(i=1;i<=20;i++) for(j=1;j<=3;j++) sum=sum+(i+1)*(i+1)*(j+2); printf("sumis: %d\n",sum); } [讨论] (1)将上述程序中的和分别做什么样修改,能使程序按如下要求运行: .不循环; .外循环1次,不进入内循环; .外循环,内循环各1次; .外循环1次,内循环2次; .外循环2次,内循环1次; .外循环19次,内循环3次; .外循环20次,内循环2次; .外循环21次,内循环3次。 (2)试修改程序,以便能知道控制表达式 i=1;j<=20;i++ 和j=1;j<3;j+= 各执行了多少次? (3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观察对换后的外循环与内循环控制表达式执行的总次数有无变化? (4)将(3)中程序写为 #include main() { inti,j,k; longsum=0; for(j=1;j<=3;j++) { k=j+2; for(i=1;i<=20;i++) sum=sum+(i+1)*(i+1)*k; } printf("sumis: %d\n",sum); } 观察程序的执行结果有无变化? [上机题目] 1.求5! 2.求和s=1! +2! +3! 3.求和s=1! +3! +5! 4.求和s=3+33+333 5.有一数列: 2/1,3/2,5/3,8/5,…求出这个数列的前10项之和。 6.打印500以内的“水仙花数”。 “水仙花数”是一个三位数,其各位数立方和等于该数本身。 main() { inti,j,k,n; for(n=100;n<=500;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf(“%d”,n); } } 7.一个数如果恰好等于它的因子之和,这个数就称为完数。 求100之内的所有完数。 #include main() { intn,s,j; for(n=1;n<=100;n++) { s=0; for(j=1;j if(n%j==0)s=s+j; if(s==n) printf("%d",s); } } 实验六数组 (1) [实验目的] 1.掌握一维数组的定义、赋值和输入输出的方法; 2.掌握字符数组的使用; 3.掌握有关数组和字符串的程序设计方法。 [实验内容和上机示例] [例1]试编制程序,对具有n个元素的数组按从小到大进行排序。 分析: C中数组长度必须是确定大小,即指定n的值,可通过常量来实现。 排序的方法有多种,我们取出其中两种作为参考。 方法一: 起泡排序 从第一个数开始依次对相邻两数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。 第一遍的(N-1)次比较后,最大的数已放在最后,第二遍只需考虑(N-1)个数,以此类推直到第(N-1)遍比较后就可以完成排序。 源程序如下: #defineN10 #include"stdio.h" main() { inta[N],i,j,temp; printf("pleaseinput%dnumbers\n",N); for(i=0;i scanf("%d",&a[i]); for(i=0;i for(j=0;j { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } printf("thearrayaftersort: \n"); for(i=0;i printf("%5d",a[i]); } 方法二: 选择排序 首先找出值最小的数,然后把这个数与第一个数交换,这样值最小的数就放到了第一个位置;然后,在从剩下的数中找值最小的,把它和第二个数互换,使得第二小的数放在第二个位置上。 以此类推,直到所有的值从小到大的顺序排列为止。 #include"stdio.h" #defineN10 main() { inta[N],i,j,r,temp; printf("pleaseinput%dnumbers\n",N); for(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 上机
![提示](https://static.bdocx.com/images/bang_tan.gif)