《编程、语句和程序.docx》由会员分享,可在线阅读,更多相关《编程、语句和程序.docx(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编程、语句和程序编程就是将计算机语言提供的语句(语句控制计算机做某个操作,例如加法运算)按合适的顺序组合起来,得到一个程序,计算机运行这个程序就可以进行运算。所以,要学好编程,要做到以下2点:1、首先要了解计算机硬件的基本知识,然后要理解每条语句控制硬件做了什么操作2、将语句按合适的顺序组装起来,得到一个完整的程序。一、计算机硬件基础计算机硬件分为5大部分:CPU、内存、外存、输入设备和输出设备,如下面的示意图所示:由CPU运算内存中的数据输出设备输入设备内存外存图1 计算机硬件及数据运算方向计算机所有的操作都是由CPU控制和运行的,而CPU又是通过解析程序中的语句,在语句的指挥下去控制其他硬
2、件的。重点说一下内存,你可以将内存看成一个由很多小仓库(以下称内存单元)组成的大仓库,只不过这个仓库是用来存储数据的。可以从内存单元读取数据(称为读内存),也可以将数据保存到内存单元(称为写内存)。读内存时要保证内存单元中已经有数据,即对内存单元做过写内存的操作才能读内存,如同从仓库中搬出货物,仓库中必须先有货物。写内存则会将内存单元中前面存储的数据覆盖。从上图可知,计算机中的操作主要有以下几种:1. 从输入设备读取数据至内存单元2. 将内存单元中的数据送到输出设备,这个操作可以显示数据3. 读取内存单元中的数据进行运算,运算完成后再保存到内存单元4. 将内存中的数据保存到外存以上操作中,将内
3、存中的数据保存到外存属于文件操作,当某个数据需要保存到外存时需要用到它,暂时还不需要。其他3个操作对应的语句分别是:输入语句、输出语句和赋值语句,它们是计算机语言的核心语句。二、输入语句、变量、函数、常量、变量定义语句编写一个程序去完成某个运算,这个运算可能需要用户指定数据,例如计算某科成绩的平均值,成绩显然需要用户输入,也可能不需要用户指定数据,例如计算1到100的和。如果需要用户输入数据,那就要用到输入语句。输入语句用于将键盘输入的值存放到内存单元中,只有内存单元中的数据才能被CPU运算。将数据传送到哪个内存单元呢?也就是,如何定位内存单元呢?每个内存单元都有一个地址,就像一间办公室都有房
4、间号,例如我所在的办公室是电子楼518室。但是,高级语言中不能用具体地址去定位内存单元(读者可以思考下为什么),而是用一个名字,这就象我所在的办公室的名字叫做计算机基础教研室。内存单元的名字叫做变量名,相应地,变量就是指内存单元,由于内存单元的值是可以改变的,所以叫做变量,意思是它的值是可以变化的。显然,在使用内存单元之前,必须先给它命名,给内存单元命名要使用变量定义语句,稍后将介绍它。输入语句的格式如下所示:scanf(“%d”,&变量名);显然,整个输入语句就是调用输入函数(函数就是完成某个功能的一段代码,一般将常用的功能定义为一个函数,以便程序中调用),有关说明如下:1) scanf函数
5、名,表示是输入函数,使用其他功能则要使用相应的函数名,例如求绝对值则要使用abs2) 函数名后面是(),括号里面是函数的参数,这是语法格式要求的3) 函数的参数有2个,用逗号分开,如果只有一个参数则没有逗号,例如abs(-8),这是语法格式要求的4) 第一个参数是“%d”,这是一个字符串类型的常量(常量就是程序中可以直接使用的数据,例如数字2,因为直接使用的数据是不会变化的,所以叫做常量,如果常量是是字符串类型,要用双引号括起来),其中%是语法要求的,d(为便于记忆,应当了解d是digit的第一个字母)是类型标识符,表示用户输入的数据是作为int类型(int类型是整数的一种)处理的,或者说,在
6、输入一个int类型的整数时,类型标识符是d,其他类型的标识符请见变量定义语句。5) 第二个参数是一个整数类型的常量,其中&是取地址符,是语法要求的,变量名是由程序员确定的,只是这个变量要在输入语句之前用变量定义语句定义总之,程序中要使用输入语句,程序员要确定以下2点:1) 输入的数据是什么类型2) 数据输入到内存后所在的内存单元的名字,即变量名例如要输入一个整数,变量名为a,那么输入语句为:scanf(“%d”,&a);运行输入语句,程序运行暂停,并提供一个输入界面,用户输入一个数,按下回车键,表示数据输入完毕。系统会将用户输入的数据送到变量所标示的内存单元,然后继续运行程序。三、变量定义语句
7、变量定义语句就是给内存单元取个名字,这样才能使用内存单元。变量定义语句的格式如下:变量类型 变量名;例如:int a;该语句的含义是:定义一个变量a,类型为int,即申请一个内存单元,名字为a,用来存放整数。1、定义长整数类型的变量如果将一个变量定义为int类型,那么这个变量能存储的整数的范围是:-2147483648 2147483647如果超过这个范围,那就要将变量定义为long类型。例如:long x;long类型的类型标识符是ld,所以输入一个long类型的整数的输入语句示例如下:scanf(“%ld”,&a);2、定义小数类型的变量小数分为单精度小数和双精度小数,相应地,小数类型的变
8、量也分为单精度型(float)和双精度型(double)。单精度小数的类型标识符是f,双精度小数的类型标识符是lf定义单精度小数变量及相应的输入语句的示例如下:float a;scanf(“%f”,&a);定义双精度小数变量及相应的输入语句的示例如下:double a; scanf(“%lf”,&a);3、定义字符类型的变量字符是指单个英文字母或符号。字符类型的标识符是c。定义字符类型变量及相应的输入语句的示例如下:char c;scanf(“%c”,&a);三、输出语句输出语句的功能是在显示器上输出内存单元中的数据。程序的运行结果一般是存储在某个内存单元中,即某个变量的值,为了展示程序运行的
9、结果,需要使用输出该变量或内存单元的值。输出语句的格式如下:printf(“%d”,变量名);和输入语句一样,整个输出语句是调用输出函数,相关说明如下:1) 函数名是printf2) 函数的第一个参数是“%d”,它是类型标识符,表示要输出的数据是int类型3) 函数的第二个参数是是变量名,表示要输出的数据在哪个内存单元例如,输出变量a的值,输出语句如下所示:printf(“%d”,a);运行输出语句,将变量对应的内存单元的值输出到显示器中,以便用户查看。例题用户输入一个整数,原样输出首先,分析运算过程本题的运算过程是:提供一个输入界面,让用户输入一个数据,然后将该数据输出。其次,编写程序提供输
10、入界面让用户输入一个数据要用到一条输入语句,如下所示:scanf(“%d”,&a);现在用户输入的数据已赋值给变量a。将变量a的内容输出则要用到输出语句,如下所示:printf(“%d”,a);再加上变量定义语句,本题的完整程序如下所示:int a;scanf(“%d”,&a);printf(“%d”,a);在VC中,将以上程序输入到main函数的中,如图2所示:图2 VC中输入例1的程序编译和运行例1的程序,运行结果如图3所示:图3 输入语句的运行界面在图3中,用户输入数据,输入完毕后按下回车键,系统将用户输入的值赋值给变量a,然后运行输出语句,显示变量a的值,所以可以看到原样输出的结果,如
11、图4所示:图4 例1的运行结果从图4可以看出,用户输入25,程序原样输出25。四、赋值语句、表达式、类型转换赋值语句是将某个值或某个运算式的结果写入到某个内存单元中,赋值语句的格式如下:变量名=赋给变量的值其中,变量名必须是已经由变量定义语句定义的变量。因为变量是有类型的,给变量所赋的值也要求是相同类型的,这就好象你在申请仓库的时候说了只能存放大米,那么该仓库只能存放大米。写入内存的值有以下三种:1) 一个常量整数常量假设已定义a为int类型的变量,那么可以这样赋值:a=8; 将8(int类型的常量)写入到变量名a代表的内存单元。小数常量和整数不同,小数常量分为两种类型:单精度常量和双精度常量
12、单精度常量后面有个f, 例如: 123.4f, 2e-04f(指数形式,其值为2*10-4)默认浮点数是双精度常量, 例如: 123.45, 1e-04。所以,如果变量x已定义为单精度型,应该这样赋值:x=123.4f如果变量x已定义为双精度型,应该这样赋值:x=123.4字符型常量字符型常量用单引号括起来,例如a、1。假设已定义c为char类型的变量,那么可以这样赋值:c=8; 2) 一个变量假设已定义a和b为int类型的变量,那么可以这样赋值:a=b;从变量b所在内存单元读取数据,然后写入到变量名a代表的内存单元,b的值不变。3) 一个表达式(表达式就是运算式子)假设已定义a和b为int类
13、型的变量,那么可以这样赋值:a=2+8运算2+8,将结果10写入到变量名a代表的内存单元还可以:a=a+2a=a+ba=a+a加运算的结果还可以参与加运算,例如:a=a+b+(2+8)除了加运算,表达式中可以使用的数学运算符号还有:减:符号为-乘:符号为*整除:符号为/,其运算结果为整数商,例如7/3的结果为2,1/2的结果为0求余:符号为%,其运算结果为余数,例如7%3的结果为1,1%2的结果为1整除和求余运算的应用将非常多,请重点关注。最后要说明的是,不管给变量赋值的是常量、变量或者表达式,赋值语句两边的数据类型原则上要一致。如果不一致,编译系统会尝试自动类型转换,即将右边的数据类型转换为
14、左边的数据类型,如果不成功,则会报错。一般来说,能转换成功的是以下几种情况:整数转换成小数例如:double f=3;单精度转换为双精度数例如:double f=1.2f字符型转换成整数例如:int x=a;运行这条语句后,x的值是65,即a的ASCII码的值。整数转换成字符型例如:char c=30H运行这条语句后,c的值是0,因为30H是16进制数,转换成十进行数后是48,48正是0的ASCII码的值。当然,如果自动类型转换出错,程序员可以尝试手动类型转换,这个不在本书的讨论范围,这是就不介绍了。例题用户输入一个整数,加上3后输出首先,分析运算过程本题的运算过程是:提供一个输入界面,让用户
15、输入一个数据,这个数据被赋值给某变量,将该变量的值加3,然后输出该变量的值。其次,编写程序提供输入界面让用户输入一个数据要用到一条输入语句,如下所示:scanf(“%d”,&a);现在用户输入的数据已赋值给变量a。将变量a的值加3,要用到赋值语句,如下所示:a=a+3;输出则要用到输出语句,如下所示:printf(“%d”,a);再加上变量定义语句,本题的完整程序如下所示:int a;scanf(“%d”,&a);a=a+3;printf(“%d”,a);例题金币复制机:假设你有一个金币复制机,每天你都可以投进去一次金币,它可以复制出一半的金币。假设你有x枚金币,一年(365天)后你有多少枚金
16、币?首先,分析运算过程本题的运算过程是:提供一个输入界面,让用户输入一个数据,即每天投入的金币数,这个数据被赋值给某变量,然后计算总的金币数,最后输出该结果。其次,编写程序提供输入界面让用户输入一个数据要用到一条输入语句,如下所示:scanf(“%d”,&x);现在用户输入的数据已赋值给变量x。计算总的金币数,要用到赋值语句,如下所示:y=365*x/2+x;输出则要用到输出语句,如下所示:printf(“%d”,y);再加上变量定义语句,本题的完整程序如下所示:int x;int y;scanf(“%d”,&x);y=365*x/2+x;printf(“%d”,y);习题讲解编程输出一个二位
17、数逆序后的结果(你的程序应适于所有的二位数),并且分析运算对象。首先,分析本题的算法将一个二位数逆序,要获取其个位和十位。对于一个整数x,获取其各位上数字的方法之一是:个位:x%10十位:x/10%10百位:x/100%10得到十位和个位上的数后,调换位置,重新组合成一个新的2位数,就是二位数逆序的结果。按照以上分析,本题的运算过程是:u 用户输入一个二位数xu 得到x的个位,并存放于a中u 得到x的十位,并存放于b中u 以a为十位、b为个位组合一个新的二位数yu 输出y的值其次,输入部分编程显然,本题需要用户输入一个二位数,所以输入部分包含一条输入语句:scanf(“%d”,&x);再次,运算部分编程。得到x的个位,并存放于a中的代码是:a=x%10;得到x的十位,并存放于b中的代码是:b=x/10%10;以a为十位、b为个位组合一个新的二位数y的代码是:y=a*10+b;接下来,输出部分编程输出y的值的代码是:printf(“%d”,y);最后,将以上代码组合起来,并加上变量定义语句后的完整程序如下:int x;int a;int b;int y;scanf(“%d”,&x);a=x%10;b=x/10%10;y=a*10+b;printf(“%d”,y);本题需要用户输入一个二位数,所以本题的运算对象是用户输入的二位数,在运算部分出现的10则是运算工具。
限制150内