黑马程序员——C语言入门总结

来源:互联网 发布:淘宝下载旧版本下载 编辑:程序博客网 时间:2024/06/10 14:28

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一、C语言的特点:
1、语言简洁、紧凑,使用方便、灵活。一共有32个关键字,9种控制语句,程序书写自由。
2、运算符丰富。共34种运算符,包括括号、赋值、强制类型转换等都作为运算符,从而使C语言的运算类型极其丰富,表达式类型多样化。
3、数据类型丰富:整型、浮点型、字符型、数组类型、结构体类型、共用体类型等,能用来实现各种复杂的数据结构(如链表、树、栈等)的运算。尤其是指针类型数据,灵活多样。
4、具有结构化的控制语句(如if…else,while,switch,for语句)。用函数作为程序的模块单位,便于实现程序的模块化。C语言是完全模块化和结构化的语言。
5、语法限制不太严格,程序设计自由度大。
6、C语言允许直接访问物理地址,能进行位操作,可以直接对硬件进行操作。
7、生成目标代码质量高,程序执行效率高。
8、编写的程序可移植性好。

二、初识C语言:
例1、求2个数中较大者。

#include<stdio.h>void main()    /* void是空,即此函数无返回值;main是函数的名字,表示“主函数” */{   int max(int x,int y);    /* 对被调函数max的声明 */   int a, b, c;           /* 定义变量a,b,c  */   scanf("%d,%d",&a,&b);   /* 输入变量a和b的值 */   c=max(a,b);            /* 调用max函数,将得到值赋给c */   printf("max=%d\n",c);     /* 输出c的值 */}int max(int x,int y)  /* 定义max函数,函数值为整型,形参x,y为整型 */{   int t;             /* 定义本函数中用到的变量t */   if(x>y) t=x;   else t=y;   return(t);     /* 将t的值返回,通过max带回到调用函数的位置  */}

三、数据类型、运算符与表达式
1、数据类型:1-基本类型有整型(short int, int ,long int),字符型(char),浮点型(float,double),枚举类型。 2- 构造类型有数组,结构体和共用体类型。
3-指针类型。 4-空类型(NULL)。

2、从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。
和其它高级语言一样,在C语言中用来对变量、符号常量、函数、数组、类型等数据对象命名的有效字符序列统称为标识符(identifier)。C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字线或下划线。

3、运算符与表达式:
这里写图片描述
每个操作符拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间的“紧密”程度。例如,在表达式a*b+c中,乘法运算的优先级高于加法运算符的优先级,所以先执行乘法a*b,而不是加法b+c。
C语言中具有右结合性的运算符包括所有单目运算符以及赋值运算符(=)和条件运算符。其它都是左结合性。
在C语言中有少数运算符在C语言标准中是有规定表达式求值的顺序的:
(1)&& 和 || 规定从左到右求值,并且在能确定整个表达式的值的时候就会停止,也就是常说的短路。
(2)条件表达式的求值顺序是这样规定的:
test ? exp1 : exp2;
条件测试部分test非零,表达式exp1被求值,否则表达式exp2被求值,并且保证exp1和exp2两者之中只有一个被求值。
(3)逗号运算符的求值顺序是从左到右顺序求值,并且整个表达式的值等于最后一个表达式的值,注意逗号’,’还可以作为函数参数的分隔符,变量定义的分隔符等,这时候表达式的求值顺序是没有规定的!
判断表达式计算顺序时,先按优先级高的先计算,优先级低的后计算,当优先级相同时再按结合性,或从左至右顺序计算,或从右至左顺序计算。
(4)自增、自减运算符:
++i,–i (在使用i之前,先使i的值加(减)1)
i++,i– (在使用i之后,使i的值加(减)1)
(5)逗号运算符和逗号表达式:运算规则是从左至右依次求解每一个表达的值,逗号表达式的值为构成该逗号表达式的最后一个表达式的值。
例2:

#include <stdio.h>void main(){    int i,j,m,n,k;    i=8;    j=10;    m=++i;    n=j++;    k=(m,n+5);    printf("%d,%d,%d,%d,%d\n",i,j,m,n,k);}

输出结果:9 11 9 10 15。

四、基本的输入、输出函数的用法:
(一)printf()格式输出:
1.转换说明符 %c 字符 %d 有符号十进制整数
%f 浮点数(包括float和doulbe) %e(%E) 浮点数指数输出[e-(E-)记数法] %g(%G) 浮点数不显无意义的零”0” %i 有符号十进制整数(与%d相同)
%u 无符号十进制整数 %o 八进制整数 0123
%x(%X) 十六进制整数) 0x1234 %p 指针
%s 字符串 %% “%”
2.格式字符串(格式) [标志][输出最少宽度][.精度][长度]类型 “%-md” :左对齐,若m比实际少时,按实际输出。 (1) “%m.ns”:输出m位,取字符串(左起)n位,左补空格,当n>m or m省略时m=n。 例:”%7.2s” 输入CHINA 输出” CH” (2) “%m.nf”:输出浮点数,m为宽度,n为小数点右边数位 例: “%3.1f” 输入3852.99 输出3853.0
3.下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少。 ②-:有-表示左对齐输出,如省略表示右对齐输出。 ③0:有0表示指定空位填0,如省略表示指定空位不填。 ④m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。 ⑤l或h:l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。

二、scanf()格式输入:scanf(“格式控制字符串”,地址表列);
使用scanf函数还必须注意以下几点:
1.scanf函数中没有精度控制,如:scanf(“%5.2f”,&a);是非法的。不能企图用此语句输入小数为2位 的实数。 2.scanf中要求给出变量地址,如给出变量名则会出错。如scanf(“%d”,a);是非法的,应该为scnaf(“%d”,&a);才是合法的。
3.在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB 或回车作间隔。C编译在碰到空格,TAB回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。
4.在输入字符数据时,若格式控制串中无非格式字符,则认为所有输入的字符均为有效字符。 例如: scanf(“%c%c%c”,&a,&b,&c); 输入 d e f 则把’d’赋予a, ’ ’ 赋予b,’e’赋予c。只有当输入为 def 时,才能把’d’赋于a,’e’赋予b,’f’赋予c。 如果在格式控制中加入空格作为间隔,如: scanf (“%c %c %c”,&a,&b,&c); 则输入时各数据之间可加空格。
5.应该编写代码对用户的非法输入做适当的处理:
char ch;
while((ch=getchar())!=’/n’)
continue; //该语句可以起到吸收非法输入字符的作用。

1 0