版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计教程1946年2月15日,世界上第一台计算机在宾西法尼亚大学诞生。计算机的工作,由程序控制。程序编制,需要程序设计语言。程序设计语言低级语言——机器语言、汇编语言,与硬件相关。高级语言——C、C++等多种,与硬件无关。高级语言源程序,需要经过“编译”,变成机器语言程序,才能够被计算机识别。C语言是国际上广泛流行的计算机高级语言,它既可以用来编写系统软件,也可用来编写应用软件。同时,它也是C++的基础。课程目标:熟记C语言的基本概念熟悉VC++6.0的上机操作环境会读、会编、会调试C程序第1章程序设计基础与C语言概述1.1程序与程序设计语言1.2C语言的发展历史及其特点1.3C程序的基本结构与书写规则1.4C程序开发过程及编译环境1.5程序设计基本方法1.1程序与程序设计语言1.程序:一组计算机能识别和执行的指令只要让计算机执行这个程序,计算机就会自动地、有条不紊地进行工作计算机的一切操作都是由程序控制的,离开程序,计算机将一事无成
2.程序设计语言:人和计算机交流信息的、计算机和人都能识别的语言计算机语言发展阶段:(1)机器语言(由0和1组成的指令)(2)汇编语言(用英文字母和数字表示指令)(3)高级语言(接近于人的自然语言和数学语言)面向过程的语言
(非结构化的语言、结构化语言)面向对象的语言低级语言1.2C语言的发展历史及其特点C语言是国际上广泛流行的计算机高级语言。C语言的发展:BCPL语言B语言C语言精练、接近硬件,但过于简单,无数据类型具有多种数据类型1972~1973年间,美国贝尔实验室的D.M.Ritchie在B语言基础上,设计出了C语言。最初,C语言是作为一种工作语言,来实现UNIX操作系统的(原来的UNIX是用汇编语言实现的)。1.2C语言的发展历史及其特点1983年,美国国家标准协会(ANSI)成立了一个委员会,根据C语言问世以来各种版本对C语言的发展和扩充,制定了第一个C语言标准草案(’83ANSIC)。1.2C语言的发展历史及其特点1989年,ANSI公布了一个完整的C语言标准—ANSIX3.159-1989(常称ANSIC,或C89)。1.2C语言的发展历史及其特点1990年,国际标准化组织ISO(InternationalStandardOrganization)接受C89作为国际标准ISO/IEC9899:1990,它和ANSI的C89基本上是相同的。1.2C语言的发展历史及其特点1995年,ISO对C90作了一些修订,1999年,ISO又对C语言标准进行修订,在基本保留原来的C语言特征的基础上,针对应用的需要,增加了一些功能,尤其是C++中的一些功能,命名为ISO/IEC9899:1999。1.2C语言的发展历史及其特点2001、2004年先后进行了两次技术修正(TC1和TC2)。
ISO/IEC9899:1999(及其技术修正)被称为C99。C99是C89(及1995基准增补1)的扩充。1.2C语言的发展历史及其特点本书的叙述以C99标准为依据(对C99新增加的功能作特别的说明)。目前不同软件公司提供的各C语言编译系统多数并未完全实现C99建议的功能本书中程序基本上都可以在目前所用的编译系统(如VC++6.0,TurboC++3.0,GCC)上编译和运行。1.2C语言的发展历史及其特点C语言是一种用途广泛、功能强大、使用灵活的过程性(procedural)编程语言,既可用于编写应用软件,又能用于编写系统软件。因此C语言问世以后得到迅速推广。1.2C语言的发展历史及其特点C语言主要特点:语言简洁、紧凑,使用方便、灵活。只有37个关键字(见附录C)、9种控制语句程序书写形式自由,源程序短1.2C语言的发展历史及其特点C语言主要特点:运算符丰富。有45个标准运算符把括号、赋值、强制类型转换等都作为运算符处理表达式类型多样化1.2C语言的发展历史及其特点C语言主要特点:数据类型丰富。包括:整型、浮点型、字符型、数组类型、指针类型、结构体类型、共用体类型C99又扩充了复数浮点类型、超长整型(longlong)、布尔类型(bool)指针类型数据,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。1.2C语言的发展历史及其特点C语言主要特点:具有结构化的控制语句如if…else语句、while语句、do…while语句、switch语句、for语句用函数作为程序的模块单位,便于实现程序的模块化C语言是完全模块化和结构化的语言1.2C语言的发展历史及其特点C语言主要特点:语法限制不太严格,程序设计自由度大。对数组下标越界不做检查对变量的类型使用比较灵活,例如,整型量、字符型数据以及逻辑型数据可以通用C语言允许程序编写者有较大的自由度,因此放宽了语法检查1.2C语言的发展历史及其特点C语言主要特点:允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作C语言具有高级语言的功能和低级语言的许多功能,可用来编写系统软件这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言1.2C语言的发展历史及其特点C语言主要特点:用C语言编写的程序可移植性好。C的编译系统简洁,很容易移植到新系统在新系统上运行时,可直接编译“标准链接库”中的大部分功能,不需要修改源代码几乎所有计算机系统都可以使用C语言1.2C语言的发展历史及其特点C语言主要特点:生成目标代码质量高,程序执行效率高。
1.2C语言的发展历史及其特点1.3C程序的基本结构与书写规则1.3.1C程序的基本结构1.3.2C程序的书写规则1.3.1C程序的基本结构例1-1在屏幕上显示一行信息:
ThefirstCprogram!解题思路:
在主函数中用printf函数原样输出以上文字。#include<stdio.h>intmain(){
printf("ThefirstCprogram!\n");return0;}函数的名字,表示主函数C程序必须有一个main函数1.3.1C程序的基本结构#include<stdio.h>intmain(){
printf("ThefirstCprogram!\n");return0;}
主函数类型1.3.1C程序的基本结构#include<stdio.h>intmain(){
printf("ThefirstCprogram!\n");return0;}
函数体1.3.1C程序的基本结构#include<stdio.h>intmain(){
printf("ThefirstCprogram!\n");return0;}
输出函数输出语句1.3.1C程序的基本结构#include<stdio.h>intmain(){
printf("ThefirstCprogram!\n");return0;}
输出语句1.3.1C程序的基本结构#include<stdio.h>intmain(){
printf("ThefirstCprogram!\n");return0;}
换行符1.3.1C程序的基本结构#include<stdio.h>intmain(){
printf("ThefirstCprogram!\n");return0;}
当main函数执行结束前将整数0作为函数值1.3.1C程序的基本结构#include<stdio.h>intmain(){
printf("ThefirstCprogram!\n");return0;}
表示语句结束用到函数库中的输入输出函数时1.3.1C程序的基本结构C语言允许用两种注释方式://:单行注释可单独占一行可出现在一行中其他内容的右侧/*……*/:块式注释可包含多行1.3.1C程序的基本结构例1-2输出两个整数中的较大者。解题思路:定义x,y,z三个变量,比较x和y的大小,将较大的变量的值赋给z。使用printf函数输出较大者z.#include<stdio.h>//编译预处理,包含头文件“stdio.h”intmain()//主函数{intx,y,z;//定义三个整型变量x、y、zx=10;//对x赋值为10y=20;//对y赋值为20if(x>y)//以下4行是将x和y中的较大值赋给zz=x;elsez=y;printf(“max=%d\n”,z);//输出z的值return0;//使函数返回值为0}例1-3输入三个学生的年龄,输出其中最小年龄值。解题思路:用一个函数实现求两个整数中的较小者在主函数中调用此函数并输出结果#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}主函数min函数#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}将a和b中较大者值返回给主函数#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}因min函数的定义在main函数之后,需声明#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}输出函数intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}输出语句intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}输入函数intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}输入语句intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}输入的数据放到age1,age2,age3中输入格式age1的地址intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}调用min函数intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}age120age21919intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}19#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}result19age32119intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}1919#include<stdio.h>intmain(){intmin(inta,intb);intage1,age2,age3,result;printf("请输入三个学生的年龄:");scanf("%d,%d,%d",&age1,&age2,&age3);result=min(age1,age2);result=min(result,age3);printf("最小年龄值为%d\n",result);return0;}intmin(inta,intb){intc;if(a<b)c=a;elsec=b;returnc;}实际参数形式参数C语言程序的结构特点:1.一个程序由一个或多个源程序文件组成小程序往往只包括一个源程序文件例1.1,例1.2只有一个函数例1.3有两个函数只包括一个源程序文件1.3.1C程序的基本结构C语言程序的结构特点:一个源程序文件中可以包括三个部分:预处理指令全局声明函数定义#include<stdio.h>等在函数之外进行的数据声明每个函数用来实现一定的功能1.3.1C程序的基本结构C语言程序的结构特点:2.函数是C程序的主要组成部分一个C程序是由一个或多个函数组成的必须包含一个main函数(只能有一个)每个函数都用来实现一个或几个特定功能被调用的函数可以是库函数,也可以是自己编制设计的函数1.3.1C程序的基本结构C语言程序的结构特点:3.一个函数包括两个部分:函数首部intmin(inta,intb)函数的第1行函数类型函数名参数类型参数名1.3.1C程序的基本结构C语言程序的结构特点:3.一个函数包括两个部分:函数首部intmin(inta,intb)若函数无参,在括弧中写void或空括弧intmain(void)或intmain()1.3.1C程序的基本结构C语言程序的结构特点:3.一个函数包括两个部分:函数体声明部分定义在本函数中所用到的变量对本函数所调用函数进行声明执行部分:由若干个语句组成,指定在函数中所进行的操作可以没有声明部分1.3.1C程序的基本结构C语言程序的结构特点:3.一个函数包括两个部分:函数体voiddump(){}可以是空函数1.3.1C程序的基本结构C语言程序的结构特点:4.程序总是从main函数开始执行5.C程序对计算机的操作由C语句完成7.C语言本身不提供输入输出语句8.应当包含注释,增加可读性
(1)以//开始的单行注释(2)以“/*”开始,以“*/”结束1.3.1C程序的基本结构C程序的书写规则:1.C语言区分大小写英文字母(通常采用小写)。2.数据声明和语句最后必须以分号结尾。3.用大括号“{”和“}”标识一个复合语句。4.
C程序书写格式是比较自由的一行内可以写几个语句一个语句可以分写在多行上为清晰起见,习惯上每行只写一个语句5.标识符、关键字之间必须至少加一个空格以示间隔。1.3.2C程序的书写规则1.4C程序开发过程及编译环境1.上机输入和编辑源程序(.c文件)2.对源程序进行编译(.obj文件)3.进行连接处理(.exe文件)4.运行可执行程序,得到运行结果说明:以上过程参见教材中图1-1
《C语言程序设计学习指导与实验(第二版)》第112页有VisualC++6.0中编辑、编译、连接和运行C程序的方法1.4C程序开发过程及编译环境1.5.1程序设计方法的发展早期程序设计结构化程序设计面向对象程序设计1.5程序设计基本方法1.5.2程序的灵魂-算法1.算法的概念一个程序主要包括以下两方面的信息:(1)对数据的描述。在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式这就是数据结构(datastructure)(2)对操作的描述。即要求计算机进行操作的步骤也就是算法(algorithm)1.5程序设计基本方法数据是操作的对象操作的目的是对数据进行加工处理,以得到期望的结果著名计算机科学家沃思(NikiklausWirth)提出一个公式:
算法
+数据结构=程序一个程序除了算法和数据结构这主要要素外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示算法、数据结构、程序设计方法和语言工具是一个程序设计人员应具备的知识算法是解决“做什么”和“怎么做”的问题程序中的操作语句,是算法的体现不了解算法就谈不上程序设计什么是算法广义地说,为解决一个问题而采取的方法和步骤,就称为“算法”对同一个问题,可以有不同的解题方法和步骤为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的质量,选择合适的算法计算机算法可分为两大类别:数值运算算法非数值运算算法数值运算的目的是求数值解非数值运算包括的面十分广泛,最常见的是用于事务管理领域2.算法的特性一个有效算法应该具有以下特点:(1)
有穷性。一个算法应包含有限的操作步骤,而不能是无限的。(2)
确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱两可的。2.算法的特性一个有效算法应该具有以下特点:(3)
有零个或多个输入。所谓输入是指在执行算法时需要从外界取得必要的信息。(4)
有一个或多个输出。算法的目的是为了求解,“解”就是输出。没有输出的算法是没有意义的。(5)
有效性。算法中的每一个步骤都应当能有效地执行,并得到确定的结果。2.算法的特性对于一般最终用户来说:他们并不需要在处理每一个问题时都要自己设计算法和编写程序可以使用别人已设计好的现成算法和程序只需根据已知算法的要求给予必要的输入,就能得到输出的结果输入3个学生的年龄黑箱子3个学生最小年龄值求3个学生最小年龄值3.算法的描述工具(1)自然语言优点:通俗易懂,不用专门训练缺点:
用自然语言表示通俗易懂,但文字冗长,容易出现歧义性
用自然语言描述包含分支和循环的算法,不很方便
除了很简单的问题外,一般不用自然语言(2)传统流程图传统流程图是用一些图框来表示各种操作用图形表示算法,直观形象,易于理解起止框输入输出框处理框判断框流程线连接点注释框传统流程图的三种基本结构(1)顺序结构AB(2)选择结构ABYpN(3)循环结构①当型循环结构AYp1N(3)循环结构②直到型循环结构AYp2N3.算法的描述工具(3)N-S流程图
用以下的流程图符号:ABABYNpA当p1成立A直到p2成立顺序结构选择结构循环结构(当型)循环结构(直到型)
例1-4用算法描述工具表达“计算并输出s=1+2+3+…+100”的算法。
(1)自然语言描述
s1:使s为0,可表示为0=>s;s2:使i为1,可表示为1=>i;s3:使s+i的和仍然放在变量s中,可表示为s+i=>s;s4:使i的值+1,可表示为i+1=>I;s5:如果i<=100,重新返回步骤S3;否则,输出s的值,算法结束。(2)传统流程图描述0si>100开始1is+isi+1i结束NY
如果需要将最后结果输出:0s打印si>100开始1is+isi+1i结束NY直到i>1000s打印s1is+isi+1i(3)N-S流程图描述第2章C语言基础与顺序结构程序设计2.1C语言的字符集与标识符2.2C语言的数据类型2.3常量与变量2.4运算符与表达式2.5C语句2.6数据的输入输出2.7顺序结构程序举例2.1C语言的字符集与标识符2.1.1C语言的字符集
大多数系统采用ASCII字符集(1)字母:A~Z,a~z(2)数字:0~9(3)空白符:空格、水平制表符、换行等(4)特殊字符:!”#&‘()*等(5)不能显示的字符:空(null)字符(以‘\0’表示)、警告(以‘\a’表示)、退格(以‘\b’表示)、回车(以‘\r’表示)等2.1.2C语言的标识符标识符:用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列
C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线C语言中的标识符分成三类(1)关键字数据类型:int、char、float、double、short存储类别:auto、static语句命令:break、case、continue、default运算符:sizeof大小写字母是不同的字符(2)系统预定义的标识符库函数:scanf、printf、putchar、getchar、strcpy、strcmp、sqrt编译预处理命令:include、define(3)用户定义标识符用于对用户使用的变量、数组、函数等操作对象进行命名合法的标识符:
A,b2c,High,small,_xy,SUM不合法的标识符:5a,#hello,a+b,.exe,printf注意(1)标识符中大小写字母含义不同,如Sum和SUM(2)变量名用小写字母表示(3)不允许使用关键字为变量、数组、函数等操作对象名称2.2C语言的数据类型所谓类型,就是对数据分配存储单元的安排,包括存储单元的长度(占多少字节)以及数据的存储形式不同的类型分配不同的长度和存储形式2.2C语言的数据类型C语言允许使用的数据类型:基本类型整型类型基本整型(int)短整型(shortint)长整型(longint)*双长整型(longlongint)字符型(char)*布尔型(bool)浮点类型单精度浮点型(float)双精度浮点型(double)复数浮点型(float/double/longlong_complex)2.2C语言的数据类型算术类型纯量类型C语言允许使用的数据类型:基本类型枚举类型(enum)空类型(void)派生类型指针类型(*)数组类型([])结构体类型(struct)共用体类型(union)2.3常量与变量2.3.1常量和符号常量常量:在程序运行过程中,其值不能被改变的量整型常量:如12、
0、-3实型常量十进制小数形式:如123.456、12.0、0.123指数形式:如3.14e2、-25.34E3(代表-25.34
103)e或E之前必须有数字,e或E之后必须为整数。字符常量普通字符:如’a’、’?’、’0’转义字符:如’\n’字符串常量:如”boy”符号常量:#definePI3.1415926【例2-1】符号常量的使用#definePI3.1415926#include<stdio.h>intmain(){doubler,area;r=2.0;area=PI*r*r;printf(“area=%f”,area);return0;}2.3.2变量1.变量的定义:变量:在程序运行期间,变量的值是可以改变的<类型名><变量列表>如:inti;inti,j,number;变量必须先定义,后使用定义变量时指定该变量的名字和类型变量名和变量值是两个不同的概念变量名实际上是以一个名字代表的一个存储地址从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据2.变量的初始化:如:inta=3;floatb,c=0.75;charch1=‘k’,ch2;不允许连续赋值,如inta=b=c=5;2.3.3整型数据1.整型常量的表示方法(1)十进制整型常数:0~9
合法:237、-568、65535、1627
不合法:023、23D(2)八进制整型常数:0~7合法:015、0101、0177777
不合法:256、03A2、-0127(3)十六进制整型常数:0~9,A~F或a~f
合法:0x2A、0xA0、0XFFFF不合法:5A,0X3H2.3.3整型数据2.整型常量的后缀VisualC++中,系统把-2147483648~2147483647之间的不带小数点的数都默认为int类型。(1)长整型数用后缀’’L’’或”l”来表示。158L和158,012L,077L,0X15(2)无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。358u,0x358Au,235Lu前缀(0X,0)和后缀(L,U)可以同时使用。2.3.3整型数据3.整型变量(1)整型数据在内存中的存放形式用整数的补码形式存放。整数的补码和原码相同;负数的补码是将该数的绝对值的二进制形式按位取反加1。(2)整型变量的分类最基本的整型类型基本整型(int型):VC++6.0中占4个字节短整型(shortint):VC++6.0中占2个字节长整型(longint):VC++6.0中占4个字节双长整型(longlongint):C99新增的3.2.3整型数据整型变量的值的范围包括负数到正数可以将变量定义为“无符号”类型扩充的整形类型:3.2.3整型数据扩充的整型类型:有符号基本整型[signed]int;无符号基本整型unsignedint;有符号短整型[signed]short[int];无符号短整型unsignedshort[int];有符号长整型[signed]long[int];无符号长整型unsignedlong[int]有符号双长整型[signed]longlong[int];无符号双长整型unsignedlonglong[int]2.3.3整型数据(3)整型变量的定义类型说明符变量名标识符1,变量名标识符2,…;inta,b,c;longx,y;①类型说明符与变量名至少有一个空格间隔,允许定义多个变量,各变量用逗号分开。②最后一个变量名之后必须以”;”结尾。③变量定义必须放在变量使用之前,一般放在函数体的开头部分。2.3.3整型数据【例2-2】整型变量的定义与使用#include<stdio.h>intmain(){inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“a+u=%d,b+u=%d\n”,c,d);return0;}(4)整型数据的溢出【例2-3】整型数据的溢出#include<stdio.h>intmain(){inta,b;a=2147483647;b=a+1;printf(“%d,%d\n”,a,b);return0;}整型数据的范围是-2147483648~2147483647,无法表示其他数据,只有溢出。【例2-4】不同类型的整数求和#include<stdio.h>intmain(){longx,y;inta,b,c,d;x=5;y=6;a=7;b=8;c=x+a;d=y+b;printf(“c=x+a=%d,d=y+b=%d\n”,c,d);return0;}不同类型的整型变量可以参与运算并相互赋值2.3.4实型数据实型(浮点型)数据是用来表示具有小数点的实数。1.实型常量的表示方法(1)十进制形式:0.0、25.0、5.789、0.13、5.0、-267.8230(2)指数形式:一般形式:aEn(a为十进制数,n为十进制数)合法:2.1E5、3.7E-2、0.5E7、-2.8E-2
不合法:345、E7、-5、53.-e3、2.7E规范化的指数形式:在字母E之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。2.3.4实型数据规范化的指数形式:在字母E之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字。123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,…注意:(1)指数形式的浮点数,字母e前后都必须有数字,且后面的指数必须为整数。(2)实型常量默认为double类型。2.3.4实型数据【例2-5】实型常量的两种表示方法(浮点计算法、科学计数法)#include<stdio.h>intmain(){printf(“123.456的浮点数表示:%f\n”,123.456);printf(“1.23456E2的浮点数表示:%f\n”,1.23456e2);printf(“12345.6E-2的浮点数表示:%f\n”,12345.6e-2);printf(“12345.6的科学计数法表示:%e\n”,12345.6);return0;}2.3.4实型数据2.实型变量(1)实型数据在内存中的存放形式实型数据在内存中的存放形式参见教材图2-2(2)实型变量的分类float型(单精度浮点型)编译系统为float型变量分配4个字节2.3.4实型数据float型(单精度浮点型)double型(双精度浮点型)编译系统为double型变量分配8个字节15位有效数字longdouble(长双精度)型实型变量的定义格式和书写规则与整数相同。如:floatx,y;doublea,b,c;intx,y,z;2.3.4实型数据【例2-6】实型数据的舍入误差#include<stdio.h>intmain(){floata,b;a=123456.789e5;
b=a+20;printf(“%f\n”,a);printf(“%f\n”,b);return0;}2.3.4实型数据【例2-7】实型数据的舍入误差#include<stdio.h>intmain(){floata;doubleb;a=33333.33333;b=33333.33333333333333;printf(“%f\n%f\n”,a,b);return0;}2.3.5字符型数据字符是按其ASCII代码(整数)形式存储的C99把字符型数据作为整数类型的一种字符型数据在使用上有自己的特点2.3.5字符型数据1.字符常量字符常量是用单引号括起来的一个字符。例如:’a’、‘b’、’=’、’+’、’?’特点:①字符常量只能用单引号括起来,不能用双引号或其他括号②只能用单个字符,不能是字符串③单引号中的字符可以是字符集中任意字符④数字字符与对应的数字含义是不同的2.3.5字符型数据字符’1’和整数1是不同的概念:字符’1’只是代表一个形状为’1’的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节整数1是以整数存储方式(二进制补码方式)存储的,占2个或4个字节0011000100000000000000012.3.5字符型数据2.转义字符一种特殊的字符常量,以反斜线“\”开头,后跟一个或几个字符。具有特定的含义,不同于字符原有的意义。见课本p27。转义字符主要用来表示那些用一般字符不便于表示的控制代码。【例2-8】转义字符的使用#include<stdio.h>intmain(){inta,b,c;a=5;b=6;c=7;printf(“1234567812345678\n”,a,b);printf(“abc\tde\rf\n\n”,a,b);printf(“hik\tL\bM\n”,a,b);return0;}2.3.5字符型数据3.字符变量用类型符char定义字符变量charc=’a’;
系统把“a”的ASCII代码97赋给变量cprintf(”%d%c\n”,c,c);输出结果是:97a2.3.6字符串常量1、字符串常量指由一对双引号括起来的字符序列。例如:”CHINA”,”Cprogram”,”$12.5”双引号中的字符个数称为字符串的长度。2.3.6字符串常量2、字符串常量和字符常量的区别:①字符常量用单引号括起来,字符串常量由双引号括起来;②字符常量只能是单个字符,字符串常量可以包括一个或多个字符;③可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量(后面介绍)。④字符常量占一个字节的内存空间,字符串常量占用的内存字节数等于字符串长度加1。4.怎样确定常量的类型字符常量:由单撇号括起来的单个字符或转义字符整型常量:不带小数点的数值系统根据数值的大小确定int型还是long型等浮点型常量:凡以小数形式或指数形式出现的实数C编译系统把浮点型常量都按双精度处理分配8个字节2.4运算符及表达式2.4.1运算符和表达式概述:1、C运算符的分类(1)算术运算符
(+-*/%++--)7(2)关系运算符
(><==>=<=!=)6(3)逻辑运算符
(!&&||)3(4)位运算符
(<<>>~|∧&)6(5)赋值运算符
(=及其扩展赋值运算符)11(6)条件运算符
(?:)2.4运算符及表达式2.4.1运算符和表达式概述:(7)逗号运算符
(,)(8)指针运算符
(*和&)(9)求字节数运算符
(sizeof)特殊运算符:(10)强制类型转换运算符
((类型))(11)成员运算符
(.->)(12)下标运算符
([
])(13)其他
(如函数调用运算符())2.4.1运算符和表达式概述2、表达式表达式是由常量、变量、函数和运算符组合起来的式子。
一个表达式有一个值及其类型,它们等于计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行(见本书附录3)单个的常量、变量、函数可以看做是表达式的特例。
(x+r)*8-(a+b)/7x=a+ba>b2.4.1运算符和表达式概述3、运算符的优先级和结合性运算符具有优先级,还有结合性。
(1)运算符的优先级:15级,1级最高,15级最低。见教材236页(2)运算符的结合性:当运算符的结合性相同时,按结合性处理。例如:
x-y+z(左结合性:运算对象先与左面的运算符结合)
x=y=z(右结合性:运算对象先与右面的运算符结合)2.4.2算术运算符和算术表达式1.基本的算术运算符:具有算术运算功能的符号称为算术运算符。用算术运算符和括号将运算对象连接起来的、符合C语法规则的式子被称为算术表达式。+:加法运算符-:减法运算符*:乘法运算符/:除法运算符%:求余运算符2.4.2算术运算符和算术表达式【例2-11】算术运算符---除法运算符/#include<stdio.h>intmain(){printf(“%d,%d\n”,5/2,-5/2);printf(“%f,%f,%f\n”,5.0/2,5/2.0,5.0/2.0);return0;}2.4.2算术运算符和算术表达式【例2-12】算术运算符---求余运算符%#include<stdio.h>intmain(){printf(“%d\n”,100%3);return0;}2.4.2算术运算符和算术表达式说明两个整数相除的结果为整数如5/2的结果值为2,舍去小数部分如果除数或被除数中有一个为负值,舍入方向不固定。例如,-5/2,有的系统中得到的结果为-2,在有的系统中则得到结果为-3VC++采取“向零取整”的方法
如5/2=2,-5/2=-2,取整后向零靠拢%运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数。如8%3,结果为22.4.2算术运算符和算术表达式2.自增、自减运算符:作用是使变量的值加1或减1++i,--i:在使用i之前,先使i的值加(减)1i++,i--:在使用i之后,使i的值加(减)12.4.2算术运算符和算术表达式【例2-13】自增自减运算符的使用#include<stdio.h>intmain(){inti=6;printf("%d,",++i);printf("%d,",--i);printf("%d,",i++);printf("%d,",i--);printf("%d,",-i++);printf("%d,",-i--);printf("%d\n",i);return0;}2.4.2算术运算符和算术表达式【例2-14】自增运算符的使用#include<stdio.h>intmain(){inti,j,m,n;i=8;j=10;m=++i;n=j++;printf("%d,%d,%d,%d\n",i,j,m,n);return0;}2.4.3赋值运算符和赋值表达式赋值运算符:完成赋值运算功能的符号。“=”赋值表达式:用赋值运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子被称为赋值表达式。1、简单赋值运算符(“=”)一般形式:变量=表达式如:x=a+bw=sin(a)+sin(b)a=b=c=5等价为a=(b=(c=5))
x=(a=5)+(b=8)赋值语句(在赋值表达式末尾加;就成为赋值语句):
x=8;a=b=c=5;2.4.3赋值运算符和赋值表达式2、赋值运算中的类型转换赋值运算符两边的数据类型不同,系统自动进行类型转换,即把赋值号右边的类型转换成左边的类型。规定:
(1)实型赋予整型,舍去小数部分。(2)整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分为0)(3)字符型赋予整型,将字符的ASCII码值赋给整型变量。如:x=‘A’;//已定义i为整型变量(4)占字节多的整型赋予字符型或占字节少的整型,只将其低字节原封不动地送到被赋值的变量。
inti=289;Charc=‘a’;c=i;c的值为33,即‘!’2.4.3赋值运算符和赋值表达式【例2-15】赋值运算中类型转换规则的使用#include<stdio.h>intmain(){inta,b=322;floatx,y=8.88;charc1='k',c2;a=y;x=b;c2=b;b=c1;printf("%d,%f,%c,%d",a,x,c2,b);return0;}2.4.3赋值运算符和赋值表达式3、复合赋值运算符
在“=”之前加上其他二目运算符,构成复合的运算符。+=,-=,*=,/=,%=等
变量双目运算符=表达式等价变量=变量双目运算符表达式例如:
a+=5a=a+5x*=y+7x=x*(y+7)r%=pr=r%p
2.4.3赋值运算符和赋值表达式【例2-16】复合赋值运算符的使用#include<stdio.h>intmain(){inta,b,c,d;a=b=c=5;a+=a;printf("%d,",a);b-=2;printf("%d,",b);c*=2+3;printf("%d,",c);d+=d-=d*=d;printf("%d\n",d);return0;}2.4.4逗号运算符和逗号表达式逗号运算符:“,”作用:用“,”将两个表达式连接起来组成一个表达式,称为逗号表达式一般形式:表达式1,表达式2,。。。,表达式n求值过程为自左向右,依次计算各表达式的值,并以表达式n的值作为整个表达式的值。2.4.4逗号运算符和逗号表达式【例2-17】逗号运算符的使用#include<stdio.h>intmain(){inta=2,b=4,c=6,x,y;y=(x=a+b,b+c);printf("y=%d,x=%d\n",y,x);return0;}2.4.5各类型数据之间的混合运算1.自动类型转换:+、-、*、/运算的两个数中有一个数为float或double型,结果是double型。系统将float型数据都先转换为double型,然后进行运算(2)int和long型进行计算,int型要转换为long型。(3)char型与short型数据进行运算,必须都转换为int。(4)赋值运算中,赋值号两边不同时,将右边类型转为左边的类型。2.4.5各类型数据之间的混合运算2.强制类型转换运算符强制类型转换运算符的一般形式为
(类型名)(表达式)(double)a(将a转换成double类型)(int)(x+y)(将x+y的值转换成int型)(float)(5%3)(将5%3的值转换成float型)2.5C语句C程序源程序文件1源程序文件2源程序文件n预处理命令函数n函数1全局变量声明函数首部函数体数据声明执行语句图2-3C程序的结构C语句分为以下5类:(1)表达式语句:x=y+z;(2)函数调用语句:printf(“ThefirstCprogram!\n”)(3)控制语句:if、switch(条件判断)for、while、do…while(循环执行语句)continue、break、return、goto(转向语句)(4)复合语句{t=a;a=b;b=t;printf(“%d%d”,a,b);}(5)空语句while(getchar()!=‘\n’);几乎每一个C程序都包含输入输出输入输出是程序中最基本的操作之一2.6数据的输入输出(1)所谓输入输出是以计算机主机为主体而言的从计算机向输出设备(如显示器、打印机等)输出数据称为输出从输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数据称为输入(2)C语言本身不提供输入输出语句输入和输出操作是由C标准函数库中的函数来实现的printf和scanf不是C语言的关键字,而只是库函数的名字putchar、getchar、puts、gets(3)在使用输入输出函数时,要在程序文件的开头用预编译指令#include<stdio.h>或#include″stdio.h″2.6.1输入或输出一个字符型数据1.用putchar函数输出一个字符从计算机向显示器输出一个字符putchar函数的一般形式为:
putchar(字符变量或字符常量)
putchar(’A’)(输出字母A)putchar(’\101’)(输出字符A)
putchar(x)(输出变量x的值)例3.8先后输出BOY三个字符。解题思路:定义3个字符变量,分别赋以初值B、O、Y用putchar函数输出这3个字符变量的值2.6.1输入或输出一个字符型数据#include<stdio.h>intmain(){chara='B',b='O',c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');return0;}向显示器输出字符B向显示器输出换行符2.6.1输入或输出一个字符型数据#include<stdio.h>intmain(){chara='B',b='O',c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');return0;}改为inta=66,b=79,c=89;2.6.1输入或输出一个字符型数据2.用getchar函数输入一个字符向计算机输入一个字符getchar函数的一般形式为:
getchar()2.6.1输入或输出一个字符型数据
例3.9从键盘输入BOY三个字符,然后把它们输出到屏幕。解题思路:用3个getchar函数先后从键盘向计算机输入BOY三个字符用putchar函数输出2.6.1输入或输出一个字符型数据#include<stdio.h>intmain(){chara,b,c;a=getchar();b=getchar();c=getchar();putchar(a);putchar(b);putchar(c);putchar('\n');retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗机构多学科会诊制度及流程
- 介入治疗技术试题及答案
- 医疗器械企业成本核算制度(试行)
- 气瓶充装运输安全管理制度培训
- 安全环境职业健康目标管理制度培训课件
- 2026年数字孪生城市规划服务合同
- 2026年国际交换生项目合同
- 学校安全管理职责培训:分管领导与部门负责人工作实务
- 2026年315消费者权益日答题题目及答案
- 2026年智慧城市平台开发合同
- 羽毛球基本技术
- 高一语文资料李桢(明)六国论,原文与译文六国论李桢
- 秋季学期固态电子论第一章演示文稿
- 汉语教学 《成功之路+进步篇+3》第26课课件
- YS/T 231-2007钨精矿
- GB/T 28749-2012企业能量平衡网络图绘制方法
- GB/T 4308-1984金属陶瓷热挤压模坯
- GB/T 38603-2020燃气燃烧器和燃烧器具用安全和控制装置特殊要求电子控制器
- GB/T 18983-2017淬火-回火弹簧钢丝
- 高效课堂学习小组建设课件
- (新版)中国移动认证L1、L2、L3等级考试总题库-单选题库(共12部分-2)
评论
0/150
提交评论