中南民族大学电子商务C语言实验报告.docx
- 文档编号:12026527
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:63
- 大小:46.72KB
中南民族大学电子商务C语言实验报告.docx
《中南民族大学电子商务C语言实验报告.docx》由会员分享,可在线阅读,更多相关《中南民族大学电子商务C语言实验报告.docx(63页珍藏版)》请在冰豆网上搜索。
中南民族大学电子商务C语言实验报告
中南民族大学管理学院
学生实验报告
课程名称:
C语言程序设计
年 级:
2015级
专 业:
电子商务
姓 名:
学 号:
2015学年至2016学年度第2学期
实验一C基础练习
实验二基本数据类型和运算符
实验三顺序与分支结构
实验四循环结构
实验五函数
实验六数组
实验七指针
实验八结构体、联合体和枚
实验九文件
实验
(一)C基础练习
实验时间:
同组人员:
实验目的
(1)熟悉VisualC++6.0的调试环境。
(2)掌握在VisualC++6.0的调试环境下调试C程序的方法。
(3)掌握在C程序中定义主函数的方法。
(4)掌握在C程序中书写注释的方法。
(5)了解函数printf()的基本功能。
(6)了解C程序的错误类型。
实验内容
1、通过调试第一个程序,了解调试环境
2、理解注释语句的用法
3、了解什么是编译错误
4、了解什么是连接错误
实验步骤
1、通过调试第一个程序,了解调试环境
操作步骤如下:
(1)在Windows环境下进入Visual++6.0。
(2)在VisualC++6.0环境下建立一个新的工作空间MyWorkplace.
(3)在Myworkplace工作空间中建立一个新的项目MyProject。
(4)在MyProject项目中新建一个SourceFiles类型的文件first.cpp。
(5)在编辑窗口中编辑first.cpp文件。
内容如下:
#include“stdio.h”
Viodmain()
{
Printf(“Welcome\n”);
}
(6)按快捷键【Ctrl+F7】或选择BuildCompile命令项对程序进行编”按快捷键【F7】或选择BuildBuild命令对程序进行连接。
(7)按快捷键【Ctrl+F5】或直接单击运行按钮“!
”,运行程序。
注意:
也可以不做编译直接做Build,同时进行编译和连接。
2、理解注释语句的用法
操作步骤如下:
(1)在编辑窗口中继续编辑first.cpp文件,增加语句。
使程序变为:
#include”stadio.h”
/*firstone*/
Voidmain()
{
Printf(“welcome\n”);
Printf(“------------------\n”);
Printf(“yourname:
\n”);
}
(2)按快捷键【Ctrl+F7】或选择BuildCompile命令对程序进行编译。
(3)按快捷键【F7】或选择BuildBuild命令对程序进行连接。
(4)按快捷键【Ctrl+F5】或直接单击运行按钮“!
”,运行程序。
3、了解什么是编译错误
操作步骤如下:
(1)在编辑窗口中继续编辑first.cpp文件,去掉“printf(“Welcome\n”);”语句后面的分号。
使程序变为:
#include”stadio.h”
/*firstone*/
Voidmain()
{
Printf(“welcome\n”)
Printf(“------------------\n”);
Printf(“yourname:
\n”);
}
(2)按快捷键【Ctrl+F7】或选择BuildCompile命令对程序进行编译。
此时,编译器会提示错误信息如下:
Compeling...
first.cpp
C:
\ProgramFiles\MicrosoftVisualStudio\Myworkspace\MyProject\first.cpp(6):
errorc2146:
syntaxerror:
missing’;’beforeidentifire‘printf’Errorexecutingcl.exe
First.obj-1error(s),0warnings(s)
提示信息的第1、2行是“Compiling...first.cpp”,表示正在对程序进行编译,在生成目标程序first.obj时编译程序检查出了问题。
总共发现了1个错误。
错误信息还明确告诉程序员编译错误出现在第6行,语法错误是“printf标识之前缺少符号”,也就是说第5行后面缺少分号。
C语言规定,每条语句都必须以分号结束,如果不写分号,编译器将会提示错误,这种错误就是所谓的编译错误,也就是说语法错误。
因为有编译程序的帮助,从理论上来说。
语法错误是最容易纠正的错误。
但实际上,由于C语言自身非常灵活的特性,对于初学者开说,寻找到错误也不是一件容易的事情,需要在实践中学习提高。
(3)将分号加回去,程序就可以正确编译连接和运行了。
4、了解什么是连接错误
操作步骤如下:
(1)在编辑窗口中继续编辑first.cpp文件。
程序内容:
#include”stadio.h”
/*firstone*/
Voidprint();
Voidmain()
{
Printf(“welcome\n”);
Printf();
Printf(“yourname:
\n”);
}
(2)按快捷键【Ctrl+F7】或选择BuildCompile命令对程序进行编译。
编译成功。
(3)按快捷键【F7】或选择BuildBuild命令对程序进行连接,连接失败。
系统会提示下面的错误信息:
Linking...
First.obj:
errorLINK2001:
unresolvedexternalsymbol“void_cdeclprint(void)”(?
print@@YAXXZ)
Debug/MyProject.exe-2error(s),0warning(s)
提示信息的第1、2行是“Linking...first.obj”,表示正在对first.obj进行连接,由于printf()函数没有定义,对该函数的的调用将使连接程序找不到这个函数的原型,因此报错。
这种错误称为连接错误。
连接错误比较容易纠正,需要掌握有关函数定义和说明的概念,并要保证相关系统文件在磁盘中存在。
例如,stadio.h文件应该存在,“#include”stadio,h””语句才能将该文件包含到当前程序中。
(4)在编译窗口修改程序如下:
#include”stadio.h”
/*firstone*/
Viodprint()
{
Printf(“------------------\n”);
}
Voidmain()
{
Printf(“welcome\n”)
Print();
Printf(“yourname:
\n”);
}
(5)再次进行编译和连接,都成功,运行程序得到正确结果。
5、什么是运行错误
Voidmain()
{charc;
C=getchar()
Switchc
Case0,1,2,3,4,5,6,7,8,9:
printf(“%d”,c-’0’);break;
Default:
printf(“DataError”);
}
(1)将上面的程序编辑、编译后,错误信息包括:
First.cpp(5):
errorc2143:
syntaxerror:
missing‘;’before’switch’
First.cpp(5):
errorc2061:
syntaxerror:
missing‘;’identifire’c’
First.cpp(5):
errorc2043:
illegalbreak
Cpp(7):
errorc2047:
illegaldefault
Frst.obj-1error(s),1warning(s)
第一个错误提示信息是:
第5行的switch语句缺少了分号,由于编译程序检查下一行才能发现遗漏的分号,因此给出的行号5是不正确的,检查前面一行,“c=getchar()”后面缺少分号,应该加上。
第二个错误提示信息是:
第6行的标识符c语法错误。
检查前一行,c前后应该有圆括号,并且switch应该用花括号括起来。
(2)将“swichc”改为“swith(c)”,并在switch和default两行的下面加上一对花括号。
(3)再次编译,仍然有一个编译错误和一个警告提示。
First.cpp(6):
errorc2051:
caseexpressionnotconstant
First.cpp(8):
warningc4065:
switchstatementcontains‘default’butno‘case’lables
First.obj-1error(s),1warning(s)
第一个错误提示:
case表达式不一致。
实际上是case的写法有问题。
将语句“case0,1,2,3,4,5,6,7,8,9:
printf(“%d”,c-'0');break;”修改为:
Case‘0’:
case‘1’:
case‘2’case‘3’:
case’4’:
Case‘5’:
case‘6’:
case‘7’:
case‘8’case‘9’:
printf(“%d”,c-’0’);break;
(4)再次编译,编译成功
注意:
这里只改了一个错误,编译却成功了,这种情况在调试过程中会经常出现,修改了前面的一个错误,可以消除后面程序中的多个错误。
(5)运行程序,输入1,借果输出1.程序正确。
6、什么是逻辑错误
操作步骤如下:
(1)在编辑窗口中重新编辑first.cpp文件,使程序变为:
#include“stadio.h”
Voidmain()
{
Printf(“%d/%d=%f\n”,6,4,6/4);
}
(2)按快捷键【F7】或选择BuildBuild命令对程序进行编译和连接,成功。
(3)按快捷键【Ctrl+F5】或直接单击运行按钮“!
”,运行程序。
程序运行结果:
6/4=0.000000
显然,这不是我们需要的结果。
我们需要的结果是1.5,并用%f显示浮点数。
但是程序运行的结果却是0。
在程序经过正确的编译和连接后,运行也有了结果,但是却不是我们想要的结果,这就是所谓的逻辑错误。
逻辑错误是最难查找的错误。
这类错误往往来自于编程者对问题的错误理解和对程序设计工具的不了解。
本例程序中,表达式“6/4”中的运算符“/”是整除符号,其结果是整数1,整数1却用%f控制显示,当然不能得到正确的结果。
正确的显示方法是:
Printf(“%d/%d=%f\n”,6,4,6,0/4);
程序运行结果:
6/4=1.500000
当然,如果需要求整除的结果,则可以使用语句:
Printf(“%d/%d=%d\n”,6,4,6/4);
程序运行结果:
6/4=1
关于逻辑错误的查找方法,将在后面的练习中讲解。
实验
(二)基本数据类型与运算符
实验时间:
5月22日 同组人员:
赵兰
实验目的
(1)掌握c语言中变量的定义方法,这些变量的数据类型是基本数据类型。
(2)掌握整型数据类型的格式输入和输出方法。
(3)掌握浮点数据类型的格式输入和输出方法。
(4)掌握字符数据的格式输入和输出方法。
(5)掌握putchar()和getchar()函数的调用方法。
(6)掌握算数运算符的用法。
(7)掌握关系运算符的用法。
(8)掌握逻辑运算符的用法。
(9)掌握位逻辑运算符的用法。
(10)掌握调试程序的简单技巧。
实验内容
1、练习用各种基本数据类型定义变量和输出方式。
2、练习使用scanf()函数接收数据。
3、练习使用scanf()函数接收带有特殊格式的数据。
4、通过调试,将下面的程序修改为正确的程序。
5、编写程序练习题的结果。
实验步骤
1、练习用各种基本数据类型定义变量和输出方式。
操作步骤如下:
(1)打开工作空间MyWorkspace中的MyProject项目。
(2)打开Windows的记事本,将first.cpp文件中的整个程序复制到笔记本的编辑窗口中,另存为一个文件。
这样,就可以将第一个练习中的源程序保存起来。
接着,将新的程序输入MyProject项目中的文件first.app中(覆盖原来的内容),并对其进行调试。
本书中的实验指导主函数所在的源程序都存入文件first.cpp中。
当然,我们也可以建立一个新的工作空间、新的项目以及新的文件first.cpp。
(4)在编辑窗口中编辑first.cpp文件,内容如下:
#include“stadio.h”
Voidmain()
{inta=1,b=2,c=3;
Printf(“%d+%d+%d=%d\n”,a.b.c.a+b+c);
}
(5)按快捷键【Ctrl+F7】或选择Build-Build命令对程序进行编译和连接。
(6)按快捷键【Ctrl+F5】或直接单击“!
”,运行程序,运行结果正确。
(7)在编辑窗口中编辑first,cpp文件,内容如下:
#include“stadio.h”
Voidmain()
{doublea=1.0,b=2.0,c=3.0;
Printf(%d+%d+%d\n”,a,b,c,a+b+c);
}
(8)重新编译、连接并运行程序。
程序运行结果:
0+0+0=16638
这是一个错误结果。
程序不能完成预定的功能,原因是显示格式的错误,初学者通常不能注意到这点。
数据类型变化以后,输出方式也必须随之变化,否则就会遇到本例的问题。
(9)将语句“Printf(%d+%d+%d\n”,a,b,c,a+b+c);”改为“Printf(%1f+%1f+%1f\n”,a,b,c,a+b+c);”。
(10)编译、连接并运行程序,得到正确结果。
2、练习使用scanf()函数接收数据。
操作步骤如下:
(1)在编辑窗口中重新编辑first.cpp文件,内容如下:
#include“stadio.h”
Voidmain()
{inta,b,c;
Printf(“pleaseenter3int:
”);
Scanf(“%d%d%d=%d\n”,a,b,c,a+b+c);
}
(2)编译、连接并运行程序。
程序运行时,在提示语句“pleaseenter3int:
”出现后,输入“123”,得到正确结果。
(3)再次执行程序。
程序运行时,在提示语句“pieaseenter3int:
”出现后,输入“1、2、3、”,但是系统却在等待操作者输入下一个数。
因为123三个数中间没有用空白符分离,系统将其认为是一个数。
我们必须再输入两个数:
345
程序才能正确接收数据,但这时系统计算的是123+4+5的值。
空白符是指空格符、回车符和tab符,因此,要想让程序正确的接收数据,正确的输入格式不止一个,还可以有许多组合。
例如:
输入可以为:
1
2
3
(4)再次运行程序时,选择不同的输入格式进行测试。
3、练习使用scanf()函数接收带有特殊格式的数据。
操作步骤如下:
(1)在操作窗口中重新编辑first.cpp文件,内容如下:
#include“stadio.h”
Voidmain()
{inta,b,c;
Printf(“请输入时间(格式为00:
00:
00):
”);
Scanf(“%d:
%d:
%d”,&a,&b,&c);
Printf(时间是%d:
%d:
%d:
,a,b,c);
}
(2)编译、连接并运行程序。
程序运行时,在提示语句“请输入时间(格式为00:
00:
00):
”,出现后,输入“133005”,运行结果为“时间是:
13:
-858993460:
-858993460”。
显然,程序没有正确接收数据。
原因是:
在scanf函数中,格式控制除了%开头的格式控制,出现的其他字符应该是由用户在程序运行时输入,否则,scanf()函数不能正确接收输入。
(3)再次运行程序。
在提示语句“请输入时间(格式为00:
00:
00):
”出现后,输入“13:
30:
05”。
4、通过调试,将下面的程序修改为正确的程序。
#include(stadio.h)
Voidmain
{inta=6;b=8;c;
C=a*b;
Printf(‘%d’,c);
}
操作步骤如下:
(1)在操作窗口中重新编辑first.cpp文件,内容如上。
(2)编译该程序,编译的结果是该程序有4个错误,对错误的提示信息包括:
First.cpp:
errorc2006:
#includeexpectedafilename,found’{‘
First.cpp:
errorc2146sytaxerror;missing’;’beforeidentifier‘main’
First.cpp:
errorc2501‘void’;missingstorage-classortypespecifiers
First.cpp:
fatalerrorc1004:
unecpectedendoffilefound
First.obj-4error(s),0warning(s)
分析这四个错误产生的原因。
第一个错误在第一行,错误的原因是:
“include在需要一个文件名的的地方发现了花括号”,根据提示,可以发现#inclide后面的stadio.h文件应该用双引号;剩下的3个错误都在第三行,错误的原因分别是:
“标识符main前缺少分号”、“void前缺少类型说明”和“不期望文件结束”,这几行提示并不是非常准确,因为c编译程序有自己的判断语法和说明,但我们还是能够发现声明主函数语句的V和M用大写是错误的,并且函数名后面没有使用圆括号。
(3)将编辑窗口中的第一行修改为“#include”stdio.h””,第二行修改为“voidmain()”,第五行修改为“printf(“%d”,c);”。
(4)再次编译程序,编译程序还是发现两个错误。
这说明经过修改的程序很有可能被编译系统发现新的错误。
First,cpp(3):
errorc2065:
‘b’:
undecleaedidentifier
second.,cpp(3):
errorc2065:
‘c’:
undecleaedidentifier
Frst.obj-2error(s),0warning(s)
这两个错误都在第三行,错误的原因分别是符号b没有定义和符号c没有定义,原来,程序在inta=6后面使用的是分号,从而结束了定义语句,使b=8;c中的b和c成为没有经过定义的变量,c语言规定,没有定义的变量是不能使用的。
(5)在编辑窗口中将语句inta=6;b=8;c;改为inta=6,b=8,c;。
(6)Compiling...
First.cppfiles\microsoftvisualstudio\myprojects\myworkspace\myproject\first.cpp(5)\:
errrorc2664:
’printf’:
cannotconvertparameter1from‘constint’to’constchar*’
Conversionfromintegraltypetoprintertyperequiresreintpret_cast,c-stylecastorfunction-stylecast
Errorexecutingcl.exe.
First.obj-1error(s),0warning(s)
这个错误在第5行,错误的原因是:
“不能将printf的第一个参数从整型变量转化成字符常量”,因为单引号括起来的是字符常量,而printf的第一个参数应该是字符串(字符串在系统内部通常用首地址表示,地址是整型数),这样就可以发现‘%d’应该是双引号。
(7)第4次编译程序,编译成功。
5、编写程序练习题的结果。
如果有些习题没有答案,不妨自己编写一个小程序来验证。
对于不同的习题,程序的编写也会有些不同。
习题1:
假设有定义“intj=6:
;”,执行语句“j+=j-=j*j;后”j的值是多少?
习题2:
若变量已正确定义和赋值。
下列表达式中那些符合c语言语法?
x=y+7=z*6
16.5%3
x=y=z*6
x:
=y
操作步骤如下:
(1)为了求解习题1,编写程序如下:
#include“stadio.h”
Voidmain()
{intj=6;
J+=j-=j*j;
Printf(“j=%d”,j)
}
(2)编译、连接并运行上面的程序,得到运行结果“j=-60”。
因此,习题的答案是:
j的值是-60.
(3)为了求解习题2,编写程序如下:
#include“stadio.h”
{intx,y,z,i;
X=y+7=z*6;
/*i=16.5%3;printf(“i=%d”,i);*/
/x=y=z*6;*/
Printf(“x=%dy=%dz=%d”,x,y,z,);
}
注意:
由于要判断表达式是否正确,所以要将所有的表达式加上分号以后写在程序里。
为了调试方便,先将后面3个表达式暂时用注释行符号括起来,这三行将不被编译。
(4)编辑和编译上面的程序,编译出现了错误,说明表达式“x=y+
7=z*6;”错误。
(5)(5)删除程序中的“x=y+7=z*6;”语句,同时去掉i=16.5%3;printf(“i=%d”,i)前后的注释符号,将程序改为:
#include“stadio.h”
{X=y+7=z*6;
i=16.5%3;printf(“i=%d”,i);
/x=y=z*6;*/
/x:
=y;*/
Printf(“x=%dy=%dz=%d”,x,y,z,);
}
再次编译,仍然出错,说明表达式“int“16.5%3不正确”。
(6)将上面的程序删除“i=16.5%3;printf(“i=%d”,i)”语句,同时去掉“x=y=z*6;”前后的注释符号,再次编译,这次编译没有出错。
说明表达式“x=y=z*6;是正确的。
但是,编译的结果有两个警告信息:
First.cpp(3):
warningc4101:
’i’:
unrefrencedlocalvariable
First.cpp(3):
warningc4700:
localvariable‘z’usedwithouthavingbeeninnitialized
First.obj-0error(s),2warning(s)
警告信息一般不影响程序的运行,有时也能帮助发现程序的逻辑错误。
本例的第一个警告信息是说程序中的i是没有用的局部变量,因为现在我们调试的程序,在定义了i以后一直也没有用到它。
另一个警告信息是说程序中的局部变量a在使用之前还没有赋初值,因为程序在定义了z'以后没有为他赋值,却在表达式中使用了它,那么,它的值将是不定值。
(7)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 民族大学 电子商务 语言 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)