笔记//
/*所谓程序,就是一组计算机能识别和执行的指令,计算机的本质是程序的机器;计算机工作基于二进制,从根本上说,计算机只能识别和接受0和1组成的指令,这种计算机能识别和接受的二进制代码称为机器指令;机器指令的集合就是该计算机的机器语言; / /#include <stdio.h> //这是编译预处理指令int main() //定义主函数 { //主函数开始的标志 printf(“this is a Cprogram.\n”); //输入所指定的一行信息 return 0; //函数执行完毕的时返回函数值0 } / //函数结束的标志 // /**/表注释; /#include <stdio.h> //这是编译预处理指令int main() //这是编译预处理指令{ //函数开始 int a,b,sum; //程序声明部分,定义a,b,sum为整形变量 a=123; //对变量a进行赋值 b=456; //进行a加b的运算,并将结果存放在变量sum sum=a+b; //进行a+b的运算,并把结果存放在变量sum printf(“sum is %d\n”,sum) //输出结果 ,d表示用“十进制输出”, //在执行printf函数时,将sum变量的值取代双撇号中的%d return 0; //使函数返回值为 0 } */ //函数结束 /*c语言的程序结构
1.一个程序由一个或多个源程序文件组成;
&1.预处理指令 #include<stdio.h>,#define; 对于#include <stdio.h>来说;就是将stdio.h文件内容读取进来; 由预处理得到的结果与程序其他部分一起,组成一个完整的,可以用来编译的最后的源程序;最后由编译器正式编译,才得到目标程序
&2.全局声明 int a,b,sum; 放到main函数前面,这就是全局声明;在函数外面的声明变量叫全局变量。 如果在程序开头(定义函数之前)声明的变量,在整个源程序文件范围内有效, 在函数中声明的变量叫局部变量;只在函数范围内有效
&3.函数定义 max函数,要指定每个函数的功能。在调用这些函数时,会完成函数定义中指定的功能
2.函数是c程序的主要的组成部分。
&1一个c语言程序由一个或多个函数组成,必须包含一个main函数(且只能有一个main函数)
&2一个小程序只包含一个源程序文件,在一个源程序文件中包含若干个函数(其中有一个main函数); 当函数规模大的时候,包含函数的数量多,放在一个文件中显的太大,不便于调试和编译, 为了方便 可以将一个源程序分为若干个源程序,若干源个程序又包含若干个函数
&3在进行编译的时是以源程序文件为对象进行的,在分别对各源程序文件进行编译并得到相应的目标程序后, 再将这些目标程序连接为一个统一的二进制的可执行编程
&4 c语言的这种特点使得容易实现程序模块化 ,在程序中调用函数可以是系统提供的函数库(printf.scanf)也可以自己设计,(max。min)
3.一个函数包括两个部分
&1函数首部。即函数的第一行,包括函数名(max),函数类型(int),函数属性(int),函数参数(形式参数)名(x.y) .参数类型(int)
&2函数体。即函数首部下面的花括号内的部分。如果一个函数中包括有多层话括号,则最外层的一对花括号是函数体的范围
函数体一般包括以下部分
*1声明部分,包括定义在本函数中用到的变量,在上面例子的main函数中的定义变量“int a,b,sum”,在本函数所调用函数进行声明
*2执行部分。由若干个语句组成,指定在函数中进行的操作。
在某些情况下也可以没有声明部分;甚至可以既无声明部分也无执行部分,如。void dump(){}是一个空函数,什么也不做,但这是合法的
4.程序总是从main函数开始执行的,而不论main函数在程序的位置如何;(main函数可以放在程序的开头,中间,末尾)
5.程序中要求计算机完成的操作是由函数中的c语句完成的,
如赋值,输入输出数据,c程序书写格式比较自由的,一行内可以输入多个语句
6.在每个数据的声明和语句的最后必须有一个分号。
分号是c语句中的必要组成成分。如c=a+b;
7.c语言本身不提供输入输出语句,输入输出的操作是由库函数scanf和printf等函数完成的。
c语言对输出输入实行函数化。输入输出设备涉及具体的计算机
8.程序应包含注释*/
//算法+数据结构==程序
//算发的特性1.有穷性 2.确定性 3.有零个或多个输入 4.一个或多个输出 5.有效性
/* #include <stdio.h> int main() { float f,c; //定义f和c为单精度浮动点型变量 f=64.0; //指定f的值 c=(5.0/9.0)(f-32); //利用公式计算c的值 printf(“f=%f\nc=%f\n”,f,c); //输出c的值 return 0; }/
/*常量和变量;
在计算机的高级语言中,数据有俩种表现形式:常量和变量;
任何一个C语言程序中处理的数据,无论是什么类型,都是以常量或变量的形式出现的,在程序设计中,常量可以作说明而直接引用,但是变量应遵循“先定义,后使用;先赋值,后引用”的原则。
1.常量是指在程序运行中其值不能改变的量.常量可以直接写在程序中,按其表现形式分为直接常量和符号常量。
&1 整型常量:整型常量即数学中的整数,
在C语言中的整型常量有3种表示法:十进制数,如100;八进制数,如0123;十六进制数,如0x123。
&2实型常量:实型常量又称浮点常量,即数学中含有小数点的实数。在C语言中的实型常量有2种表示方法:
十进制小数形2.25;指数形式,如 1.25E22。(e或E之前必须有数字,且e或E后面必须有数字);
&3字符常量:字符常量是指用单撇号括起来的单个字符。在C语言中的字符常量有2类,
*1一类是可以显示的字符常量,如’x’、‘1’;字符常量只能是一个字符,不包括单撇号,‘a’和‘A’是不同字符常量
字符常量储存在计算机储存单元中时,并不是存储字符(如a,z,#)本身,而是以其代码(ASCII代码存储);如’a’的ASCII代码是97;
*2另一类是以反斜杠开头的转义字符,如’\n’(换行)。’\t’(将光标下移到下一个Tab位置);
&4字符串常量:字符串常量是指用双撇号括起来的单个或多个字符,如"hello"、“x”。
另外,不管字符串是常量还是变量,它最后都有一个字符串结标志’\0’,所以字符串常量"x"比字符变量’x’的存储空间多一个。
&5符号常量是指用符号表示的常量。用什么符号表示什么常量需要用户自己定义,所以符号常量在使用之前必须先定义。
注意这里的定义和变量的定义是有区别的,符号常量的定义只是方便替换,并不涉及到数据类型。
定义过后就可以直接引用。其定义的一般形式为:#define 标识符 常量,(#define PI 3.1416)
尽量见名知义,如sum, PRICE(价格)
使用符号常量的好处是当需要修改一个数据时,不需要在程序中每个出现这个数据的地方都修改,只需要从定义位置的修改就可以了。
2.变量 为了方便管理、引用和存储程序中的数据,所以使用变量来进行各种数据操作。变量在程序运行期间其值可以改变。
在C语言中变量有三种必要的属性:数据类型、变量名、变量值。
变量定义格式:类型说明符 变量名1,变量名2…其中类型说明符必须是一个有效的数据类型。
例如:
int x,y; //定义了整型变量x,y
3.常变量
C99允许使用常变量,如:
const int a=3;
表示a被定义为一个整型变量,指定其值为3,而且在变量存在期间其值不能改变。
常变量与常量的异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。
可以说,常变量是有名字的不变量,而常量是没有名字的不变量。有名字就便于在程序中被引用。
define pi 3.1415926 const float PI 3.1415926
符号常量 pi 和常变量 PI 都代表3.1415926,在程序中都能使用,只是二者的性质有所差别,
定义符号常量使用#define 指令,是预编译指令,只是使用一个符号常量代表一个字符串,在预编译是仅仅进行字符替换,在预编译之后符号常量不存在了(全部换成了3.1415926),对符号常量的名字是不分配内存的。常变量要占据内存空间,有变量值,只是这个值不改变。
使用的角度来看,常变量具有符号化常量的优点,而且使用更加方便
4.标识符是C程序的最基本组成部分,例如:变量名称、函数名称、数据类型等等,都是一个标识符。
标识符的要求是:必须由字母(区分大小写)、数字、下划线组成。而且,标识符的第一个字符不可以是数字。例如:
abc — 合法
_abc123 — 合法
abc555 — 合法
123abc — 非法
abc$!! — 非法
在C语言中,大写字母和小写字母被认为是不同的字符,所以,ABC与abc表述的标识符是不一样的。
数据类型
数据类型
(1)基本类型:
基本整型(int)、短整型(short int 简称 short)、长整型(long int 简称 long)——统称整型。
整型又可以按有无符号分为:有符号型和无符号型(unsigned)。
无符号型:无符号整型(unsigned int)、无符号短整型(unsigned short int)、无符号长整型(unsigned long int)。
*字符型(char)。
*实型(浮点型):单精度型(float)和双精度型(double)。
*枚举型(enum)。
(2)构造类型:
*数组类型;
*结构体类型;
*共用体类型;
(3)指针类型
(4)空类型(void)
基本数据类型
C语言的基本数据类型包括:整型、实型和字符型。
整型
C语言的整型数据分为基本整型(int)、短整型(short)、长整型(long)三种。按数据是否有符号又可分为有符号型和无符号型。
**在不同的c编译环境中整型数据所占据的内存空间长度不一样。但遵循一个规则,即int的长度大于或等于short的长度,小于或等于long的长度。
当不知道不同数据类型在不同编译环境所占空间内存数时,可以用sizeof运算符——C语言提供的一种数据类型所占存储空间长度的一种特殊的运算符。
其一般形式位:sizeof (操作数),操作数可以是变量、常量以及数据类型修饰符。
如,m=sizeof(sum) 操作数为变量,k=sizeof(long int) 操作数为数据类型,n=sizeof(678L) 操作数为常量。
实型
C语言的实型数据主要有单精度型(float)和双精度型(double)
c语言中的实型常量都作双精度处理,分配8个字节;
float型的数据a=123456.789e6的有效数是6,故输出的a的数值的精度是十进制数的7位,值为123456790528.000000;
double型的数据b=123456.789e6、 c=1234567.78912345678e3的有效数是16,故可输出b的值的精度是十进制数的17位,值分别为123456789000.000000、1234567789.123457。
/#include <stdio.h> int main() { float a=123456.789e6; double b=123456.789e6; double c=1234567.78912345678e3; printf("%f\n%f\n%f\n",a,b,c); return 0; }/
/程序运行结果
123456790528.000000
123456789000.000000
1234567789.123457/
/字符型
标识符是char、占8位(1字节)、表示范围是-128~127 。
字符型是用英文单引号括起来的单字符。
** 注意:“A” 和’A’的区别:*
"A"是字符串,包含字符’A’和字符串结束标志符’\0’,占两个字节。
'A’是字符,占一个字节。
不同的数据类型他可参与的运算类型不一样:
像整型的话是加减乘除和求余。求余只适合于整型数进行求余,两个浮点数可以做求余运算吗?
不可以。(为什么不可以)
实型呢就是加减乘除,没有求余。
字符型做乘法、除法没有意义。只适合做加减法。 字符做加减是什么概念呢?(使用ASCII编码的话相当于对ASCII值做加减运算)
如果要处理数据类型,一定要注意两个方面的东西:
(1)数据的取值范围:这一个类型的数据,在内存中怎么保存;比如说一个整型数在内存中是怎么保存的,一个实型数在内存中是怎么存储的。数据在内存中怎么存储其实也就决定了这个数据的取值范围,我可以处理的数据的范围是多少。
(2)可用的操作:对这种类型的数据可以执行哪些操作;比如对于整型数来讲,它可以执行算术运算、比较运算。对于实型数据也可以执行这些运算,但是对于其他类型的数据可能就不是这些运算了。
/每一个变量都属于一个确定的类型,类型是变量的一个重要的属性。变量是占存储单元的,是具体存在的实体,在其占用的数据单元中可以存放数据。但类型是变量的共性,是抽象的,不占存储单元,不能用来存放数据。/
/*1.putchar()函数向终端输出一个字符。能输出但个字符,也能输出控制字符。例如:
putchar(‘a’);putchar(’\n’);
2.getchar()函数从终端输入一个字符。其一般形式就是getchar();函数的值就是从输入设备得到的字符。getchar()函数只能接收一个字符,得到的字符可以赋值给一个字符变量或整形变量。
格式输入输出 :
1.printf函数作用是向终端输出若干任意类型的数据(putchar只能输出字符,而且只能输出一个字符) 作用是向终端输出若干任意类型的数据(putchar只能输出字符,而且只能输出一个字符)一般形式为:printf(格式控制,输出列表);
例如:
printf(“%d,%c\n”,i,c);
2.格式字符1)d格式符,用来输出十进制整数.有几种用法a)%d,按十进制整形数据的实际长度输出b)%md,m为制定输出字段的宽度.如果数据的位数小于m,则左端补以空格,若大于m则按实际位数输出。c)%ld,输出长整形数据.(%mld,指定输出字段的宽度)2)o格式输出,以八进制整数形式输出。将符号位也一起作为八进制数的一部分输出。
例如:
int a = -1;printf(“%d,%o”);
输出为:-1 ,177777 ,不会输出带负号的八进制整数。
也可以制定字段宽度,例如:
printf(“%8o”,a);
3) x格式输出,以十六进制整数形式输出,不会出现负的十六进制,可以制定宽度.
4) u格式符, 用来输出unsigned型数据,以十进制形式输出。
5)c格式符,用来输出一个字符。
6)s格式符,用来输出一个字符串。有几种用法,
a)%s, 输出字符串
b)%ms,输出字符串占m列,如果字符串本身长度大于m,则突破m的限制,将字符串全部输出。若小于m,则左补空格。
c)%-ms, 如果字符串长度小于m,则在m列范围内,字符串向左靠,右补空格。
d)%m.ns,输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。
e)%-m.ns,mn含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则m自动取n值,即保证n个字符正输出。
7)f 以小数形式输出 &f不指定输出宽度,整数部分全部输出,小数保留六位,%lf输出双精度实数
scanf()函数
scanf(“格式控制”,地址列表 );
说明:
1)指定域宽输入时,系统自动截取指定宽度所需数据
2)使用禁止赋值符"*",表示跳过他指定的列数
3)输入实数时不要指定精度
4)用“%c”格式声明输入字符时,空格和转义字符中的字符都作为有效字符输入
scanf("%c%c%c",&c1,&c2,&c3);在执行这个函数的时候,中间不要有空格,如abc,若在中间有空格就不对了,如a b c;第2个字符是空格;
5)在输入数据的时候,如遇到空格,回车,TAB键,非法字符的时候,认为该数据结束;
如scanf(“%d%c%f”,&a,&b,&c)如输入1234a123o.26
第一个数据对应1234;第2个数据是a,第三个数据是123;c后面的字符没有输入;
4.getchar()用键盘输入一个标准字符,当多次使用时,必须按回车键才能完成输入操作。既可以赋值给变量,也可以直 接用
c=getchar
5.putchar()向显示器输出字符
putchar(c)c可以是字符常量,整型常量,字符常量,整型变量(它的值在ASCLL代码内就可以);
也可以输出转义字符
putchar(‘\101’) 输出字符A
putchar(‘’’) 输出单撇号