1第一章C语言概念及编程环境1、C语言:是人们在计算机上,为完成某项工作而运用的一个程序设计工具。2、程序:是人们为完成某项工作,用计算机语言编排的一系列过程与步骤。1、1一个C语言程序(1)在e盘上建一个文件夹名为:cpp(2)双击VisualC++系统FileNewFileC++sourceFile右边File处写你要建的文件名:时间换算在其下面的Location即路径名处写:e:\cpp(事先建好的文件夹)ok,如图1.1所示,在出现的界面(文档窗口)上你可敲入C程序,敲入的C程序如下:先有一个程序设计的直接感性认识:例1、1在终端上输入秒数,程序将这些秒数化成小时、分钟、秒#includestdio.h//系统提供的文件包,含预处理命令。系统所有的输入/输出函数都组织在stdio.h中intmain()//主函数{intsec,min,hrs;//定义整型变量,秒,分钟,小时printf(\nEnteranumberofseconds:);//输出字符串Enteranumberofseconds:scanf(%d,&sec);//输入秒数,放到变量sec中min=sec/60;//秒化成分钟,送到变量min中sec=sec%60;//求余秒,秒数求余除后,余下的秒数送到sec中hrs=min/60;//分钟化成小时min=min%60;//求余下的分钟数printf(Theconvertedtimeis:\n);//打印字符串Theconvertedtimeis:(转换成的时间是:)printf(%dhours(小时)%dminutes(分钟)%dseconds(秒)\n,hrs,min,sec);//打印小时分钟秒return0;}图1.1建立C语言程序对话框敲入程序之后,单击BuildBuild是是!(编译运行),便出现图1.2的结果。2图1.2程序运行结果运行结果:屏幕上输入5000秒,机器用你编写的如上程序,换算成1小时23分20秒。说明:1、main()是程序中的主函数。2、int是整型,其后面的sec,min,hrs分别被定义成整型变量。3、printf(\nEnteranumberofseconds:);是打印语句,在屏幕上打印出Enteranumberofseconds:字样,\n是回车(并换到下一行)。4、scanf(%d,&sec);是输入语句,%d说明从屏幕上输入的是十进制整型数据,&sec表示输入的数据放在sec变量中。5、min=sec/60;是将输入的秒数被60除,变成分钟后送到变量min中。6、sec=sec%60;是将输入的秒数求余除,余下的秒数送到sec中,%是一个针对整数的运算,代表求余。7、hrs=min/60;表示分钟被60除,变成小时后送到变量hrs中。8、min=min%60;表示分钟被60求余除,余下的分钟送到min。9、printf(%dhours(小时)%dminutes(分钟)%dseconds(秒)\n,hrs,min,sec);是在屏幕上打印出换算完的小时、分钟、秒。%dhours(小时)对应hrs,%dminutes(分钟)对应min。%dseconds(秒)对应sec。\n(回车)表示打印完后,打印头放在下一行上。10、return0;返回语句,一般函数结束后都要返回调用本函数的下一条语句。这里main()是主函数,用的是return0。1、2C语言程序设计语法1、C语言中的主要“单词”(1)标识符C语言的标识符由字母、数字和下划线组成,其中第一个字符必须是字母或下划线。例如,_name,sec是2个合法的标识,而left&right,3has就是2个非法的标识符。还有在C语言中,标识符中的英文字母大小写形式是有区别的,例如,sun和Sun是不同的标识符。(2)保留字保留字(又称关键字)是C语言规定的、赋予特定含义和有专门用途的标识符,它们主要与数据类型和语句有关。如int(整数类型)、float(实数类型)、char(字符类型)、typedef(自定义类型),以及与语句相关的if(如果语句)、else(否则语句)、while(循环语句)、for(循环语句)、break(跳出循环语句)等。(3)用户自定义标识符用户自定义标识符包括程序中定义的变量名、数据类型名、函数名和符号常量名。3一般来说,为了便于程序阅读,经常取有意义的英文单词作为用户自定义标识符,如前面程序中的sec、min、hrs等。(4)常量常量是有数据类型的,例如,整型常量132,实型常量15.36,字符型常量‘a‘,字符串常量“helloworld”等。(5)运算符运算符表示对各种数据类型数据对象的运算。如:+(加)、–(减)、*(乘)、/(除)、%(求余)、(大于)、=(大于等于)、(小于)、=(小于等于)、==(等于)、=(assignment,赋值)、!=(不等于)等。运算一般多为双目运算(涉及2个运算对象),也有单目(涉及一个运算对象)和三目(涉及3个运算对象)运算。如C语言中的条件运算?:就是一个三目运算符,有这样的语句:max=(ab)?a:b;它是说:如果(ab)条件为真,则条件表达式取值a,否则取值b。(6)分隔符如:、和#等都是分隔符2、C语言的主要语法单位(1)表达式运算符与运算对象(可以是常量、函数、变量等)有意义的组合,就形成了表达式,如2+3*4和i+2j等。表达式中可以包含多种数据类型的运算符,运算符有优先级。例如,表达式i+2j中,先计算i+2,再做关系比较运算“”,+比先算。(2)变量定义变量也有数据类型,所以在定义变量时要说明相应变量的类型。变量的类型不同,它在内存中的存储空间的大小也会有所不同。变量定义的最基本形式是:类型名变量名;intsec;(3)语句语句是程序最基本的执行单位,程序的功能就是通过执行一系列语句来实现的。C语言中的语句有多种形式。a)最简单的语句(表达式语句)最简单的语句就是表达式加分号“;”。在C定义整型变量a、b、x语言中赋值也被认为是一种运算,如i=j+2;(把j加2的结果赋给变量i)就是一个包含+和=输入2个整数放入a、b两种运算的表达式,+的优先级较高。在该表达式大于后面加“;”就成了一个执行赋值过程的语句。如果abb)分支语句不大于分支语句实现分支控制过程,根据不同的条件x=bx=a执行不同的语句(或语句模块)。具体有2种形式,即双路分支的ifelse语句和多路分支的switch语句。输出大的数:x例如下列if-else语句求变量a和b的较大值,并把图1.3例1.2流程图它赋给x。这个if-else语句首先判别if后面的表达式(ab),如果条件成立,执行x=a;否则执行x=b;4if(ab)x=a;elsex=b;例1、2在终端上输入2个整数,程序判别这2个数谁大,然后将大的数输出,流程如图1.3所示,用if语句。#includestdio.hintmain(){inta,b,x;scanf(%d,%d,&a,&b);//如下2条语句,可用1条语句x=(ab)?a:b;来代替if(ab)x=a;elsex=b;printf(大的数是%d\n,x);return0;}其中:if(ab)x=a;elsex=b;这2条语句是求a和b的值谁大,并把大的值赋给x。首先判别if后面的(ab),如果条件成立,就执行”x=a;”,否则执行”x=b;”。最后把大的一个数打印出来。如果将这2条语句注释掉,改成一条语句x=(ab)?a:b;实现效果是一样的。c)循环语句C语言实现循环控制的过程具体有3种形式,即while语句、for语句、dowhile语句。例1、3用while循环语句求1到100的和,并把结果存在变量sum中,最后再输出。#includestdio.hintmain(){intsum=0,i=1;//初始化sum和iwhile(i=100)//循环体开始通过循环把1、2、3……100分别加到sum中{sum=sum+i;i=i+1;}//循环体到此结束定义2个整型变量,并赋printf(%d\n,sum);初值sum=0,i=1}其中i=100是循环执行的条件,只要这个不小于等于条件被满足,一对大括号{}中的循环体就会一直while(i=100)反复执行。应该注意到,由于循环体每循环一次,i被加1(i=i+1),所以,当循环到一定的时候,小于等于i的值就会超过100,即循环条件i=100不再sum=sum+i;满足了,循环就结束了。流程如图1.4所示i=i+1;d)复合语句(Compoundstatement)用一对大括号{}将若干个语句顺序组合在一起就形成了一个复合语句。例如,上面的while语句中的输出1到100的累加和{sum=sum+i;i=i+1;}图1.4例1.3流程图5(4)函数定义与调用函数是完成特定任务的独立模块,是C语言唯一的一种子程序形式。函数的目的通常是接受0个或多个数据(称为函数的参数),并返回0个或1个结果(称为函数的返回值)。函数的使用主要涉及函数的定义与调用。函数定义的主要内容是通过编写一系列语句来规定所完成的功能。完整的函数定义涉及函数头和函数体。其中,函数头包括函数的返回值类型、函数名、参数类型;而函数体是一个程序模块,规定了函数所具有的功能。函数调用则通过传递函数的参数并执行函数定义所规定的程序过程,以实现相应功能。我们来看一下书第一章第2页,求阶乘问题是怎样用函数完成的。#includestdio.hintmain(void){intn,m;//定义求阶乘的变量和它的阶乘结果变量intfactorial(intn);//定义求阶乘的函数scanf(%d,&n);//输入一个数,来求它的阶乘m=factorial(n);//factorial(n)函数去求阶乘printf(%d\n,m);//打印求出的结成结果//printf(%d\n,factorial(intn));//这样直接就能打印出阶乘结果,代替前两步。return0;//主函数返回结束}intfactorial(intn){inti,fact=1;for(i=1;i=n;i++)fact=fact*i;returnfact;}例1、4用函数max()判别2个数谁大。#includestdio.hintmain(){inta,b,c;//定义a,b放这两个数,c放其中大的那个数intmax(int,int);//声明返回整型数据并带有2个整型参数的函数max(int,int)scanf(%d,%d,&a,&b);//输入2个数c=max(a,b);//调用max(int,int)函数,这里将整型变量a,b的数值做为实参带给函数maxprintf(大的数是:%d\n,c);//打印出在子函数中求得的较大的数return0;}定义3个整型变量a,b,cintmax(intx,inty)//主函数参数a,b的值传来给对应的x,y声明返回整型的函数max(a,b){intd;d=(xy)?x:y;//判别x,y谁大,谁打谁送d输入2个整型数放入a,breturn(d);//将求得较大的数d的值,返回给主函数中的c}c=max(a,b)6(5)输入与输出C语言没有输入/输出语句,它通过调用系统库函执行max(a,b)数中的有关函数(如printf和scanf函数)实现数据的输出大的数返回值赋给c输入输出。这种处理方式为C语言在不同硬件平台上图1.5例1.4流程图的可移植性提供了良好的基础。例如前面例题中的scanf()和printf()函数的输入输出。3、运行与调试(查错)定义整型变量i,sum=0;程序通过编辑(编写程序)语法检查,编译i100(生成二进制代码,一般二进制文件后缀为.obj),for(i=1;i=100;i++连接生成执行文件(后缀为.exe)后,就可以在i=100编程环境或操作系统环境中运行(Run)该程序。i%