自己的讲稿.docx
《自己的讲稿.docx》由会员分享,可在线阅读,更多相关《自己的讲稿.docx(61页珍藏版)》请在冰豆网上搜索。
![自己的讲稿.docx](https://file1.bdocx.com/fileroot1/2022-11/28/82db1713-0895-4e50-b879-46c46c55de62/82db1713-0895-4e50-b879-46c46c55de621.gif)
自己的讲稿
高级语言程序设计
第一讲
授课内容:
1、什么是高级语言
2、C语言基本介绍
3、C语言课程设计任务书
4、本讲作业
1.计算机语言
定义:
1.计算机语言是人与计算机之间传递信息的媒介,采用数字、字符和语法规则组成各种指令,以控制计算机。
程序是计算机要执行的指令的集合。
机器语言和汇编语言又称作低级语言,都是直接对硬件操作,只不过汇编语言的指令采用了英文缩写的标识符,更容易识别和记忆。
它同样需要编程者将每一步具体的操作用命令的形式写出来。
优点:
源程序经汇编生成的可执行文件比较小,执行速度很快;
缺点:
冗长、复杂、容易出错、需要更多的计算机专业知识。
高级语言是目前绝大多数编程者的选择。
和汇编语言相比,它不但将许多相关的机器指令合成为单条指令并且去掉了与具体操作有关但与完成工作无关的细节,例如使用堆栈、寄存器等,这样就大大简化了程序中的指令。
由于省略了很多细节,所以编程者也不需要具备太多的专业知识。
高级语言并不是特指的某一种具体的语言,而是括很多编程语言,如目前流行的c,c++,pascal,python,lisp,prolog,Delphi等等,这些语言的语法、命令格式都不相同。
优点:
与计算机的硬件结构及指令系统无关,它有更强的表达能力,可方便地表示数据的运算和程序的控制结构,能更好的描述各种算法,而且容易学习掌握
缺点:
编译生成的程序代码一般比用汇编程序语言设计的程序代码要长,执行的速度也慢。
2.为什么以C语言作为高级语言程序设计的教学范例
原因如下:
A.C是结构式语言。
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
B.C语言功能齐全。
具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。
另外C语言也具有强大的图形功能,支持多种显示器和驱动器。
而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。
C.C语言适用范围大。
适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。
C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。
它是数值计算的高级语言。
D.C很接近硬件层次,可直接控制大部份的外围硬件。
C有pointer(指针),可以存取任意内存地址,许多CPU采用memorymappingI/O,所以可以用C来控制I/O,写硬件控制程序.可以说C把高级语言的基本结构和语句与低级语言的实用性结合了起来。
3.C语言的基本使用步骤(见PPT)
4.C程序集成开发环境熟悉
常用的C语言IDE(集成开发环境)有MicrosoftVisualC++,Dev-C++,Code:
:
Blocks,BorlandC++,WatcomC++,BorlandC++Builder,GNUDJGPPC++,Lccwin32CCompiler3.1,HighC,TurboC,C-Free,win-tc等等……。
对于一个初学者,MicrosoftVisualC++是一个比较好的软件。
界面友好,功能强大,调试也很方便。
然后依据如下步骤打开VC++6.0
1.进入可视化的C++6.0集成开发环境
⑴启动计算机,进入窗口环境操作界面。
⑵鼠标依次点击“开始”→“程序”→“MicrosoftVisualStudio6.0”
→“MicrosoftVisualC++6.0”启动VC6.0集成开发环境。
⑶选择“文件”(File)菜单中的“新建”(New)命令,在新建对话框中,选择“文件”选项卡,再选择“C++SourceFile”类型,按图示操作后单击对话框中的“确定”按钮。
(见图1)
⑷接着就会出现如图2所示的VC界面。
图1
图2
⑸在编辑窗口中,输入如下内容:
/*====================
什么也不做的程序.
====================*/
intmain()
{
return0;/*传回0*/
}
点击“编译”按钮,编译程序my_c1.cpp,并在出现的对话框中选择“是(Y)”,结果如图3所示。
图3
(6)点击“构建”按钮,构建可执行程序my_c1.exe,在点击“执行”按钮,运行my_c1.exe程序,在出现的对话框中选择“是(Y)”,结果屏幕如图4所示。
图4
这个程序什么也不做.C标准规定main()函数是程序的开始,即主程序的意思。
一个C写的软件或程序只有一个main()函数,不管你写多少程序,一开始执行一定是由main()开始.
数学的函数规定一定要传回一个值,但C的函数(function)可以不用传回任何东西。
在这里为了告诉compiler:
main()这个function传回一个整数,所以我们在main()前面加上int.意思就是main()这个function传回(return)一个整数的数值,执行这个程序在结束时,会将这个整数的数值传回给操作系统。
在这个程序中,一进入main什么也不做就传回0给操作系统结束了程序.
C的一个block由大括号组成,main()这个函数的body(本体)就是:
{
return0;/*传回0*/
}
大括号的左括号是这个main()函数的开始,右括号是结束,你也可以写成:
/*====================
什么也不做的程序.
====================*/
intmain()
{return0;/*传回0*/}
只要括号有对齐,一对一,几个左括号就对应几个右括号就可以了,但为了视觉美观与程序阅读的便利性,我们不建议上面的写法.
另外,C是大小写敏感的程序语言,例如main()与MAIN()与Main()是完全不同的,若你学过BASIC或PASCAL,这一点请牢记.
5.C的comment(批注).
/*传回0*/
上面这行是批注(comment),这一行不会被compiler处理,/*跟*/包起来的文字就称批注,所以程序的最前面也是一段批注:
/*====================
什么也不做的程序.
====================*/
通常我们会在程序中加一些批注,方便我们在日后维护程序时理解,当程序共写了几千行到几万行时,适当的加一些批注可以便于我们了解整个程序是在做什么事,在正式的程序开发中,加入适当或详细的批注已经是一个程序设计员的基本要求.
底下列出一些常见的批注风格:
/**************************
*什么也不做的程序.
**************************/
或
/*------------------------------
-什么也不做的程序.-
------------------------------*/
若是一份正式的程序,可能还会加上一些程序的文件名称,开发日期,作者,最后修改日....,
例如:
/*====================
filename:
c1.c
功能:
什么也不做的程序.
环境:
DOS,Windows,UNIX...etc.
作者:
J.SLiu.
开始日期:
2000/1/1.
最后日期:
2000/12/31.
====================*/
要注意的是,C不能用巢状批注,譬如:
/*这是外层批注/*内层批注*/*/
6.使用C的标准输出函数
程序中:
#include
这一行是把stdio.h包进来一起compile,这个档案是ANSI(AmericanNationalStandardsInstitute,美国国家标准协会)标准,里面放了许多C标准I/O(输出输入)函数(functions)的定义(definition),写这一行的目的简单讲是因为在程序中使用了printf这个函数输出字符串到屏幕上,这个函数的定义放在stdio.h中.C规定你用到的函数或变量必需要有定义.
C的每一段叙述结束要用(分号).例如:
你可以在一行里面写好几个printf("HelloWorld"),都用分号隔开,就像底下这段程序:
/*====================
SayHelloWorld!
ByeBye.
====================*/
#include
intmain()
{
/*印出HelloWorld!
ByeBye*/
printf("HelloWorld!
");printf("Bye");printf("Bye");
return0;
}
为了程序阅读方便并不建议你写成上面这样,最好是一个叙述一行,如下.
/*====================
SayHelloWorld!
ByeBye.
====================*/
#include
intmain()
{
/*印出HelloWorld!
ByeBye*/
printf("HelloWorld!
");
printf("Bye");
printf("Bye");
return0;
}
上面的程序看起来就容易理解多了,软件或程序的开发注重容易理解与方便沟通,良好的程序风格与适当的批注是一个好程序的基本要素.
7.C的常见数据类型(见ppt)
例如:
/*====================
变量宣告的例子
====================*/
intmain()
{
/*变量宣告*/
inta;
intA;
intb,c;
a=1;
A=8;
b=2;
c=A-a+b;/*先计算A-a+b,将结果传会给c*/
printf("%d",c);/*以printf印出c这个整数型态的变量*/
return0;
}
%d:
以10进制打印一个整数
先设a=1,A=8,b=2,把A-a+b算出来之后存到c这个变量,再以printf函数输出c这个整数型态的变量至屏幕上.
程序执行结果:
9
另一方面,C允许programmer在宣告一个变量时,就给定常数(constant)值,所以你也可以写成:
/*====================
变量宣告的例子3.
====================*/
#include
intmain()
{
inta=1;
intA=8;
intb=2,c;
c=A-a+b;
/*输出a,A,b,c到屏幕*/
printf("a=%d,A=%d,b=%d,c=%d",a,A,b,c);
return0;
}
程序执行结果:
a=1,A=8,b=2,c=9
若宣告时只写long,而未加int或double,则一律视为longint.
若只写short而未加int,则一律视为shortint.
C的浮点计算,例如
#include
voidmain()
{
floata=0.5;
doubleb=1.2;
intc=3;
b=b+a+c;
/*输出a,b,c到屏幕*/
printf("a=%3.1f,b=%3.1f,c=%d",a,b,c);
}
%3.1f指定该浮点型变量,总长度为3,注意包括小数点。
其中'.'后的1是指定小数位数为1.
程序执行结果:
a=0.5,b=4.7,c=3
我们宣告了a,b,c,3个变量,并分别给予的型态是float,double,int.也分别给了初值.把b+a+c计算之后的结果再存到b.
你在一些编译器上编译这个程序时,可能会出现一些警告(warring)的讯息,内容大概是:
“typemismatched”之类的讯息.因为在这一行里面,出现了不同型态(type)的变量进行运算,虽然Ccompiler会帮你转型(casting)进行运算,但建议你最好自己转型,转型的写法是:
b=b+(double)a+(double)c;
你把运算结果存放的变量是哪一种型态(type),就在后面的变量或运算子前加上(type).这种转型只是暂时性的,为了在运算过程中让所有的运算子变量型态都保持一致.
C的字符,例如:
/*====================
字符范例1
====================*/
#include
intmain()
{
charx,y;
x='a';
y=(char)97;
/*输出x,y,x,最后一个是以ASCII值显示y*/
printf("x=%c,y=%c,ASCIIofy=%d",x,y,y);
return0;
}
在PC上任一种O.S的执行结果:
x=a,y=a,ASCIIofy=97
字符型态的变量以char宣告,在C中,字符是用单引号'括起来,如下几个例子:
‘b’/*字符b*/
‘C’/*字符C*/
‘=’/*字符=*/
‘&’/*字符&*/
你也可以直接设定一个整数值给字符型态的变量,在上面的程序中,我们写了:
y=(char)97;
你可以查一下ASCII中,字符97是什么字,y就会是那个字.97的前面加上(char)是为了转型所需。
初学者最大的疑惑就是为何查ASCII的字符集的97,且为何会输出一个'a',这与机器及环境有关,有些机器上,97可能是'X'或是其它字符.例如一些IBM大型主机(mainframe)上是用EBDIC字符集而不是常见的ASCII字符集,环境的不同将造成程序在不同平台开发及被执行时有所不同.
常数数字表示法
/*====================
digital-1
====================*/
#include
intmain()
{
inta=64;
intb=0x40;
longc=64L;
printf(“%d,%d,%d”,a,b,c);
return0;
}
执行结果:
64,64,64
程序中0x40代表的是一个16进位的数字,也就是每16进一,与一般常用的10进位不同.0x40与10进位的64值相同.
64L代表的是64这个数值的type(型态)是long.不加L则表示是integer(整数型态)。
基本数据类型的大小
常常有许多人会把int当16-bit,可以表示(2^16)/2-1到-(2^16)/2.
这是错误的说法,因为在32-bit的Ccompiler上,int通常是32-bit.
再提到long(长整数),在WATCOMC/C++386版的long跟int一样是32bit,
但在SymantecC/C++6.X与BorlandC/C++4.X的386compiler中long是64bit.
K&R及ANSI没规定上面这些基本型态的长度,因为规定这些型态的大小之后
会产生另一些问题,譬如某些系统是16-bit,但规定了32-bit长的int,在运算时会因转换而变慢一些.某些系统是32-bit,但int只有16-bit,程序又没办法有效利用32-bit的运算效能,等于还是拿32-bit计算机在跑16-bit的程序.
一些8-bit时代开发的C程序甚至有部份code还继续用在16-bit甚至32-bit的平台上,若是定义了基本型态的大小,当初8-bit时的int是8-bit长,到了16-bit平台上势必会变慢,因为每次整数运算都要转换成8-bit之后再运算.这些例子说明是让初学者知道当初C的设计者为什么不定义这些基本型别的大小.不规定这些基本型态的长度并不会影响C的可移植性,
因为可以利用C的macro(宏)来解决这些问题,在以后我们会谈到如何使用C的宏及前置处理器(CPre-Processor,简称CPP)来解决可移植性的问题.
C的输出与输入的函数简介
本节中介绍两个C的函数,一个是printf,另一个是scanf.
printf()是一个功能强大的函数,printf是ANSIC制定在标准的C链接库
中的一个函数.
C是一个很小的程序语言,早期的C没有这些函数可以用,每个程序设计人员都要自己写自己的输出与输入基本函数给自己用,后来ANSI制定了标准,在标准中规范了这些函数,所以你不需要写自己的打印函数,因为这些东西已经有标准的函数了.任何一家公司推出的Ccompiler如果宣称符合ANSIC标准,那么她一定会提供这些链接库与函数,只要你写的程序只用这些标准函数,没用到特殊的函数,那么你的程序将具有良好的可移植性,也就是你的程序可以在不同的Ccompiler上编译(compile)通过,不会受限在某一种品牌的Ccompiler上.
举个例子,早期使用TurboC的programmer,用了gotoxy,putpixel,putimage...,
这些函数,结果程序拿到MSC或VisualC上就出现一堆错误讯息,因为这些函数不是标准函数,是当时Borland为了吸引programmer购买,所以附了这些函数在产品中,你用了这些不是ANSI标准的函数,就代表你写的程序将会无法在其它的Ccompiler上编译使用,因为其它的Ccompiler并不一定提供这些函数.
现在要介绍printf这个函数的一些其它功能,更详细的介绍请自行查阅C标准链接库的书籍文件.
打印整数,以十进制方式印出:
printf("cis%d",c);/*用%d*/
打印整数,以十六进制方式印出:
printf("cis%x",c)/*用%x*/
打印浮点数:
printf("ais%f",a);/*用%f*/
打印浮点数,正整数印5位数,小数点后印2位数.
printf("bis%5.2f",b);/*用%5.2,印5位正整数,2位小数*/
打印一个字符.
printf("xis%c",x);/*用%c印出一个字符*/
打印一个字符串.
printf("sis%s",s);/*用%s印出一个字符串*/
换行.换行可用\n.
printf("换行\n");
输出一个tab.用\t
printf("\t");
输出一个双引号".用\"
printf("\"");
输出倒斜线.用\\.
printf("\\");
printf可接受不定数目的参数,意思是这个函数没有规定只能放多少参数,例如:
printf("ais%d,bis%f,cis%f",a,b,c);
若要从键盘输入数据则可以使用scanf这个函数,以下是个简单的例子:
/*=========================
输入一个字符
=========================*/
#include
intmain()
{
charch;
printf("Inputachar:
");
scanf("%c",&ch);/*ch前面加个&(地址操作数)*/
return0;
}
scanf与printf类似,差别是printf是输出,scanf是输入,但scanf的参数是给地址,不是直接传值,因此我们在变量ch前加上地址运算为&ch。
再举一个例子:
/*=========================
输入一个整数
=========================*/
#include
intmain()
{
inti;
printf("Inputaninteger:
");
scanf("%d",&i);/*ch前面加个&(地址操作数)*/
printf("thenumberis%d",i);
return0;
}
程序执行结果:
Inputaninteger:
16
thenumberis16
16是输入的整数值,输入之后将会存放到变量i,接着再用printf输出i.
8.C语言基本运算符
例1:
/*====================
基本运算范例.
====================*/
#include
intmain()
{
inta,b;
a=10;b=3;
printf("%d\n",a*b);
printf("%d\n",a/b);
printf("%d\n",a+b);
printf("%d\n",a-b);
printf("%d\n",a%b);
return0;
}
执行结果:
30
3
13
7
1
例2:
/*====================
关系操作数的范例.
====================*/
#include