C语言程序设计上机指导书
姓名:_________________ 学号:_________________ 专业:_________________
日期:_________________
指导原则:
促进学生针对实际问题,用所学C语言知识编写符合规范的源程序代码,在某一集成开发环境下尽一切调试技能调试程序,并对运行结果进行分析处理,得出正确结论,解决好实际问题。更快更好地掌握所学知识,技能和软件的一向开发方法
目的:
1,通过上机实验,加深对教材内容的理解,特别是一些语法规定,熟练掌握各种语法规则。
2,通过上机实验,熟悉某个C语言集成开发环境。掌握集成开发环境下程序的编辑、编译与连接、运行的完整过程
3,通过上机实验,要学会调试程序。能根据系统给出的“出错信息”,判断错误所在,并修改错误,使程序正确运行。
要求:
1,复习与本次实验相关的教学内容
2,了解集成开发环境的操作步骤
3,准备好实验内容。对于编程题,一定要自己动手,书写工整,并人工检查无误后才能上机实验,以提高上机效率。
4,要准备好调试和运行程序时所需的数据。
5,对运行中可能出现的问题事先作出估计,并对程序中有疑问的地方作上标记,以便在运行时给予注意。并在程序调试时,把系统给出的出错原因,解决方法等记
载在源程序之后;程序运行结束后,把运行结果也记录下来。
6,每个实验应独立完成,对实际问题所编写的源程序需写出完整实验的报告。
第一次上机作业熟悉C语言集成开发环境
实验目的:
1,熟悉C语言集成开发环境
2,掌握集成开发环境下文件的编写与调用,源程序的编译与调试,程序运行结果的观察与分析。
3,掌握C语言程序的基本结构
实验要求:
1, 程序编写完后,要对输入的每一个符号和词进行检查核对,不能有错。
2,编写源程序时,不要在中文输入法下进行,也不要有首字符大写,否则调试时,会有错误。
实验内容:
1,在D盘新建文件夹:D:\C语言程序\×××(所在班级如0709401)\×××(自己学号或姓名如01),作为以后所做程序的存放位置。注:每次换机器须重复此
操作。
2,编辑,编译,运行下面程序并存盘,文件名为ex1_1.c
/* 输出信息的C源程序,文件名为ex1_1.c */
#include”stdio.h”
void main()
{ printf(“Hello, Everyone \n Study hard!\n”); }
输出结果为____________________
3,调入文件ex1_1.c,把程序修改成下面形式,运行,存盘,文件名为ex1_2.c
/* 输出信息的C源程序,文件名为ex1_2.c */
#include”stdio.h”
void main()
{ printf(“Hello, Everyone \n ”);
printf(“ Study hard!\n”);
}
输出结果为____________________, ”\n”的作用是_____________
4,编辑,编译,运行下面程序并存盘,文件名为ex1_3.c
/* 计算圆面积的程序,文件名为ex1_3.c */
#include”stdio.h”
void main()
{ float r,area;
printf(“r=?”);
scanf(“%f”,&r);
area=3.1415926*r*r;
printf(“arear=%f\n”,area);
}
第一次运行时输入1,运行结果为__________
再次运行时输入10,运行结果为_____________
把语句printf(“arear=%f\n”,area);修改为:printf(“arear(%0.1f)=%f\n”,r,area);后,
运行时输入10,这时程序的运行结果为______________
操作步骤:
一,TurboC 2.0集成开发环境
(1)熟悉C语言集成开发环境
进入集成开发环境(菜单模式):执行文件TC.EXE
文件菜单(file):FILE中有:NEW(新建文件),LOAD(或OPEN打开或调
入文件),SA VE(保存文件),SA VE AS,QUIT(退出C
语言集成开发环境)
编译菜单(compile):COMPILE TO OBJ +(路径名文件名)
运行菜单(run):RUN , USER SCREEN
选项(option):DIRECTORY(注明TC。EXE的当前目录路径,
路径不符合,编译程序找不到库函数所在头文件,编译会出错)
从菜单进入编辑区的按键:Enter
从编辑区进入菜单的按键:F10
注:运行出错时,按F10也可回到菜单区,按EDIT进入编辑区(2)掌握C语言源程序的编写(new(FILE)),编译(compile to obj(COMPILE)),运行(run(RUN)),观察结果(user screen(RUN)四个步骤。
编译出错时,按ENTER键,然后在光标所在行或上一行查找出错位置。同时在顶行红字部分(英文提示)找出错原因。
(3)掌握一定的调试方法。
方法:在已编译好的程序中人为制造错误(如删除标点符号,改错保留字(int,
printf, scanf),确定出错位置(光标所在行),猜测出错原因(根据顶行英文提
示)。
二,Visual C++6.0集成开发环境
1,启动Visual C++ 6.0环境
方法:单击“开始”-“程序”-“Microsoft Visual studio 6.0”-“Microsoft Visual C++ 6.0”
命令,启动Visual C++,VC6主窗口如下:
标题栏
菜单栏
工具栏
文件编辑区
项目工作区
输出区
状态栏
2. 编辑源程序文件
(1)建立新工程项目
①单击“文件”-“新建”,弹出“新建”对话框。
②单击“工程”选项卡;单击“Win32 Console Application”选项;“工程文件”框中输
入项目名(如gc1);“位置”框输入文件保存文件夹或单击“…”打开文件夹浏
览窗口,选择新项目文件所需保存的位置,单击“确定”按钮。
③弹出“Win32 Console Application Step 1of 1”对话框,在对话框中单击“An empt project”
按钮和“完成”按钮。系统显示“新建工程信息”对话框。单击“确定”按钮。
(2)建立新项目中的文件
①单击“文件”-“新建”,弹出“新建”对话框。
②选择“文件”选项卡。单击“C++ Source File”选项,在“文件”文件框中输入文件名,
单击“确定”按钮。系统自动返回VC6主窗口。
③显示文件编辑区窗口,在文件编辑区窗口输入源程序文件。
3,编译和连接
方法一:选择主窗口菜单栏中“编译”菜单项;系统弹出下拉菜单,选择“构件”菜单命令。
方法二:单击主窗口编译工具栏上的“Build”按钮进行编译和连接。
注:
(1)系统对程序文件进行编译和连接,生成以项目名称命名的可执行目标代码文件.exe。(2)编译连接过程中,系统如发现程序有语法错误,则在输出区窗口中显示错误信息,给出错误的性质、出现位置和错误的原因等。如果双击某条错误,编辑区窗口右侧出现一个箭头,指示再现错误的程序行。用户据此对源程序进行相应的修改,并重新编译和连接,直到通过为止。
4. 执行
方法一:单击“编译”菜单中“执行”命令。
方法二:单击主窗口编译工具栏上的“Build Execute”按钮来执行编译连接后的程序
运行成功,屏幕上输出执行结果,并提示信息:“Press any key to continue”。此时按任意键系统都将返回VC6主窗口。
注:在执行程序过程中出现运行错误。用户要修改源程序文件并且重新编译、连接和执行。
第二次上机作业掌握基本数据类型在程序中的正确应用
实验目的:
1 熟悉C语言集成开发环境及程序编写、编译、运行,观察运行结果
2 掌握基本的调试技巧(缺少标点符号,函数名错误或不一致)
3 熟悉C语言基本数据类型(int,long,unsigned int,float,double,char)的输
入,输出格式(%d,%ld,%f,%lf,%c,%o,%x,%u)
实验内容:
1,输入半径,求圆的面积(要求圆周率用符号常量表示)(查错改错1:圆周率的定义名与使用名不一致;查错改错2:面积的输出格式用%d)。
作业1程序如下,调试改正两处错误,正确运行后将文件保存为ex2_1.c
#define pi 3.1415927
#include"stdio.h"
main()
{ float area,banjing;
printf("please enter a data\n");
scanf("%f",&banjing);
area=2*p*banjing*banjing; /* 圆周率的定义名pi与使用名p不一致*/
printf("\n the area of yuan is %d\n",area); /* 面积的输出格式%d改为%f */
}
A)调试,语法错误如下:
出错信息为: D:\vcfile\ex1\ex.cpp(7) : error C2065: 'p' : undeclared identifier
中文意思为:符号‘p’没有定义。
错误原因及更正:圆周率的定义名pi与使用名p不一致,’p’改为’pi’运行
B)观察及分析运行结果,逻辑错误
分析:半径为3时,圆的面积应为:pi×3×3=28.2743343,不能为负数。
查错:先查面积变量area的输出格式,再往上逆推查其运算方法,最后查其定义
错误原因及更正:面积的输出格式%d(整数)改为%f (实数或单精度浮点数)
2,调入ex2_1.c 另存为ex2_2.c,并做如下修改后,保存调试运行程序,观察系统出出错信息(英文),并翻译成中文。注:每改一次,就调试一次。
1)将语句:float area,banjing;改为:floatarea,banjing;
则出错信息为:_________________________________________
中文意思为:_________________________________________
错误原因及更正:_________________________________________
2) 将语句:printf(”please enter a data\n”); 改为:printf(”please enter a data\n”)
则出错信息为:_________________________________________
中文意思为:_________________________________________
错误原因及更正:_________________________________________
3)将语句:scanf(“%f”,&banjing);改为:s can(“%f”,&banjing);
则出错信息为:_________________________________________
中文意思为:_________________________________________
错误原因及更正:_________________________________________
4) 将语句:float area,banjing;中英文标点符号“;”或“,”,改为中文输入法
后,再输入同样标点
则出错信息为:_________________________________________
中文意思为:_________________________________________
错误原因及更正:_________________________________________
第三次上机作业运算符与表达式的使用
实验目的:
1,熟悉C语言集成开发环境和熟悉C语言程序结构
2,掌握一定的调试技巧。
3,熟悉运算符与表达式的正确使用。
作业内容要求:
1,程序填空,以下程序输入3个整数值给a,b,c,程序把b中的值给a,把c中的值给b,把a中的值给c,交换后输出a,b,c的值,例如输入123,输出a=2,b=3,c=1
#include"stdio.h"
void main()
{ int a,b,c, ____;
printf("enter a,b,c:");
scanf("%d%d%d",__________);
____________; a=b;b=c;
printf("a=%d b=%d c=%d\n",a,b,c);
}
1,填空后,运行程序,结果如下:_____________________
2,在程序输出语句前插入语句:clrscr(); 根据运行结果,说明其作用________________ 在程序输出语句后插入语句:getchar();根据运行结果,说明其作用_______________
2,调试以下程序(有两处语法错误:类型说明错与缺少符号’;’),写出运行结果并简要回答为什么(即了解程序的运行过程)
#include”stdio.h”
main()
{
intx,y,z;
x=6;
y=100;
z=(++x)/(y--);
printf(“x=%d,y=%d,z=%d\n”,x,y,z); 运行结果:_________________
z=(x+y--)*(x++)
printf(“x=%d,y=%d,z=%d\n”,x,y,z); 运行结果:_________________
}
第四次上机作业掌握顺序结构程序设计
实验目的:
4,熟悉C语言集成开发环境和熟悉C语言程序结构
5,掌握一定的调试技巧。
6,熟悉运算符与表达式的正确使用。
7,掌握语句的正确书写,学会编写顺序结构的程序。
作业内容要求:
1,编写程序求解:已知半径r=3厘米(cm).求球的体积v;
源程序代码——————> 上机调试后,源程序中需修改的对应部分
程序运行结果:
2, 以下叁个程序,选一个做。
1) 输入两个整数,求其和,差,积,商和余数
2) 输入一个三位数,依次输出其个位数字,十位数字,百位数字。
3) 用公式
()))((c s b s a s ---求三角形的面积(其中()c b a s ++=2
1,a,b,c 为
三角形的三边长) 要求:
1, 确定所需的输入变量,输出变量,中间变量的个数及命名,并为其选取正确
的数据类型。
2, 根据正确的逻辑顺序书写程序。(变量先说明再赋值后使用;先输入再处理
后输出;
3, 每次输出必须有提示信息。如:printf(“\n x+y=%f ”,x+y); 其中:x+y= 是
提示信息。
题号:
源程序代码:
输入数据与运行结果:
第五次上机作业 掌握顺序结构与输入输出函数
实验目的:
1,掌握顺序程序设计的一般方法:
2,根据算法(有的是计算公式)确定所需的输入变量,输出变量,中间变量的个数及命名,并为其选取正确的数据类型(有计算公式的由计算公式右边表达式值的类型确定)。
3,根据正确的逻辑顺序书写(审查)程序。(变量先说明再赋值后使用;函数先定义,后说明,再使用)
4,每次输入、输出应有提示信息。如:printf(“\n x+y=%f ”,x+y); 其中:x+y= 是提示信息。
5,注意表达式的正确书写格式。 6, 掌握程序的一般调试方法: 上机内容:
1, 在调试的过程中改正如下程序的错误 (注意:每编译一次只改正一个错误;
同时思考错误提示信息中单引号中的内容与错误的关系) 程序:用公式求三角形面积:s c s b s a s ))()((---,s=
)(2
1
c b a ++ 程序代码 ——————> 源程序中需修改的对应部分 main()
{ int a,b,c;
float s;
a=3,b=4,c=5;
printf(“enter three datas ”\n ”); scanf(“%d%d%d”,a,b,c); area=sqrt(s-a)*(s-b)*(s-c)*s; s=1/2*(a+b+c);
printf(“a=%d,b=%d,c=%d\narea=%d ”,a,b,c,area); }
2, 编程求三角形面积:C ab s sin 2
1
=
,(C 的单位为度数,库函数中自变量单位为弧度数) (已知:a=5, b=3, C=30o )注意:1,表达式的正确书写格式,2,程序的设计方法,3,检查、核实程序的顺序的正确性
代码:
运行结果:
第六次上机作业 分支结构程序
实验目的:
1, 熟悉输入输出格式的使用
2, 掌握逻辑运算符的特殊运算规则
3, 了解简单的分支结构程序设计
4, 学会阅读程序的基本技巧(参考第七讲:分析程序运行过程) 上机内容:
1, 阅读下面程序,计算运行结果,然后上机验证。
Main()
{ int c,d,e; float a,b,t; a=3.6,b=-3.2; if(a>b) {
t=a; a=b;b=t; /* 思考该复合语句{ }的功能 */ }
printf(“\n%5.2f,%5.2f ”,a,b) c=1,d=1;
e=--c&&d--; /* 注意运算符的优先级和运算规则 */ printf(“\nc=%d,d=%d,e=%d ”,c,d,e); e=++d||c++;
pirntf(“\nc=%d,d=%d,e\%d ”,c,d,e); }
2, 程序填空,输入x 值,计算下面的函数值 ,并输出结果
??
?
??--=11312x x x
y 101011≥<≤ 程序如下: #include"stdio.h" void main() { double x; int y; scanf(________,&x); if(x<1) y=x; else if(_________) y=2*x-1; else y=3*x-11; printf("y=______ \n",y); } 3,编程求|x | 程序代码: 运行结果: 第七次上机作业 分支结构程序填空 实验目的: 1, 能灵活处理分支结构的条件,选择相应的分支语句作程序设计 2, 熟练掌握分支结构的程序设计 3, 能阅读程序,能根据问题说明,补充源程序中的相关内容。 4, 掌握动态测试技巧。 上机内容: 1, 程序填空 问题说明:输入三个正数,若能构成三角形的三边的边长,则求其面积,否则,输 出出错信息。 程序: #include ”math.h ” main() { int a,b,c; float s,area; pirntf(“enter three positive numbers a b c(a>0,b>0,c>0):\n ”); scanf(“%d%d%d ”,&a,&b,&c); if(( _________ )&&( ________ )&&( _______ )) { s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*s-c)); ________________; } else printf(“\nthree data a,b,c can ’t form a triangle\n ”); } 2, 编程求一元二次方程2 ax +bx+c=0的根 根据不同的系数a,b,c 有以下的几种情况: 1, 2 a 0, b -4ac>0≠时,方程有两不等实根x1,x2 2, 2a 0,b -4ac=0≠时,方程有两相等实根x1=x2 3, 2a 0,b -4ac<0≠时,方程有两共轭虚根x1,x2 4,a=0,b 0≠时,方程为bx +c=0, 根为x=-c/b; 5, a=0,b=0,c 0≠时,方程无解 时,方程有无穷解(x可为任意值)6,a=0,b=0,c0 源程序代码: 动态测试:数据准备,根据前面分析,应准备6组数据 第一组数据:第二组数据: 运行结果:运行结果: 第三组数据:第四组数据: 运行结果:运行结果: 第五组数据:第六组数据: 运行结果:运行结果: 第八次上机作业 循环结构程序设计(一) 实验目的: 1,掌握程序的基本设计方法(能分析具体问题的算法,输入输出,流程) 2,掌握while 循环的语义、语法和它的使用。(能根据流程写程序,根据程序写流程) 3,能正确阅读程序,根据问题说明把程序补充完整 上机内容: 1, 填空,使程序完整 问题说明: 输出所有水仙花数。(水仙花数是三位自然数,其各位数字的立方和 等于该数,例: 153=3 3 3 351++) 程序: main() { ______________; I=100; While(________) { x=I/100; y=___________; z=I%10; if(_____________) printf(“%d\n ”, I); I++; } } 运行结果:___________________ 2, 编程求解 问题:一个皮球从50米高处落下,每次反弹的高度为原高度的3 2 ,求至少经过多少次反弹后,反弹的高度才小于1米? 提示:先弄清皮球的运动路线。 可设变量,下落高度h1,反弹高度h2,反弹次数n 。 每次的反弹高度等于下次的下落高度。 源程序代码 : 上机结果______________________ 反弹高度为原来的1/4时,运行结果___________________- 第九次上机作业 循环结构程序设计(二) 实验目的: 1,掌握程序的基本设计方法(能分析具体问题的算法,输入输出,流程) 2,掌握for 循环的语义、语法和它的使用。(能根据流程写程序,根据程序写流程) 3,能正确阅读程序,了解程序的运行过程。根据问题说明把程序补充完整, 上机内容: 1) 已知以下程序是求某一分数序列的前20项的和: 1, 填空使程序完整 2, 写出该分数序列的前6项。(6个分数) 程序: main() { int a,b,c,I; _____ sum,s; a=3,b=2,s=(float)a/b; sum=2/1; for(I=2;______;I++) { sum+=s; c=a+b; b=a; a=c; s=(float)a/b; } printf(“sum=%f ”,sum); } 2)编程 求: ∑∑==+10 1 2 201 n n n n +8! 要求:用for 循环 源程序代码 : 上机结果______________________ 第十次上机作业嵌套循环 实验目的: 1,掌握嵌套循环程序的基本设计方法(难度分解,化为单层循环) 2,掌握for循环,while循环的语义、语法和它的使用。(能根据流程写程序,根据程序写流程) 3,能正确阅读程序,了解程序的运行过程。根据问题说明把程序补充完整, 上机内容: 1,程序填空, 问题说明:求100到1000之间的所有素数和 程序: main() { int I,j,sum=0; for(I=101;I<=1000;______) { j=2; while(__________) { if(I%j==0)break; j++; } if(_______)sum+=I; } printf(“sum of primes of 100----1000 is %d\n”); } 2,编程 求S n=a+aa+aaa+……+aa……a(该项有n个a)之值,其中a 为一个数字。例如: 2+22+222+2222+22222(此时n=5),n由键盘输入。 源程序代码: 上机结果______________________ 第十一次上机作业一维数组 实验目的: 1,掌握一维数组的定义,赋值,使用。 2,能用一维数组这个新的数据结构简化原有程序。 3,根据问题说明,能正确阅读程序。 上机内容: 1,问题说明:求数列的前20项和:2/1, 3/2, 5/3, 8/5, 13/8, 21/13,……. 程序: main() { int N=20; int _________________; float s; _____________; _____________; for(I=1;I { a[I]=a[I-1]+b[I-1]; _______________; } s=0; for(I=0;I s+=_____a[I]/b[I]; printf(“sum=%f”,s); } 运行结果:_____________________ N的值改为3时,运行结果:_____________________ 2,编程: 按下列数据的原来顺序和它的相反顺序输出下列各数:1,2,3,4,5,6,7,8 (要求使用数组) 注意:数组的定义:数组元素的个数。数组的两种赋值方式。 数据类型的转换。 源程序代码: 上机结果______________________ 第十二次上机作业数组(二) 实验目的: 1,熟练掌握一维数组,二维数组的正确使用。 2,熟悉字符串数组的用法。 3,能正确阅读程序,理解程序的含义。 4,能根据问题说明,观察其隐含的规律,把程序补充完整。 上机内容: 1,问题说明:按下列格式输出6行杨辉三角形 1 1 1 12 1 133 1 1464 1 15101051 要求:先根据已有条件猜测空的内容,再运行程序,再根据运行结果修改空的内容。直至符合要求。 程序: #include”stdio.h” main() { int y[7][7],n,m; for(n=1;n<7;n++) { y[n][n]=1; ______=1; /* 第一列元素为1 */ } for(n=3;n<7;n++) for(m=2;m<=n-1;m++) y[n][m]=___________; for(n=1;n<7;n++) { for(m=1;m<=n;m++) printf(“%4d”,y[n][m]); ____________; } } 2,编程,用冒泡法或选择法把一列数据排序后输出:23,145,65,73,12,74,91,5。要求先输出原数据,依次输出每一轮排序后的数据。 源程序代码: 上机结果: ______________________ 3,难度题(可选):一个班的学生的学号与成绩如下,请按成绩从高分到低分输出。学生的学号与对应的成绩应同时输出。 学号:1,2,3,4,5,6,7,8,9,10,11 成绩:40,63,81,80,98,72,91,65,70,68,79 提示:最好用选择法排序;增加一数组放学号,排序交换位置时,同时交换学号数组与成绩数组的对应元素。 注:在上题的右边作适当修改 第十三次上机作业数组(二) 实验目的: 1,熟练掌握一维数组,二维数组的正确使用。 2,熟悉字符串数组的用法。 3,能正确阅读程序,理解程序的含义。 4,能根据问题说明,观察其隐含的规律,把程序补充完整。 5,能根据多次不同的输入与对应的输出结果,推算程序功能。 上机内容: 1,下列程序是求给定字符串的字符个数。 要求:不修改程序已写部分,在空缺部分把程序补充完整 程序一: #include”stdio.h” main() { char s[40]; int m=0; printf(“Enter a string : \n”); scanf(“%s”,s);