第一周学习汇总
一、概述
1.C语言的发展过程
C语言在70年代初问世,一九七八年由美国电话电报公司贝尔实验室正式发表了C语言,后来美国国家标准协会制定了一个C语言标准,于1983年发表,称为ANSIC。早期的C语言主要是用于UNIX系统,由于C语言的强大功能和各方面的优点逐渐被人们认识,到八十年代,C语言被广泛使用,成为当代最优秀的程序设计语言之一。
2.C语言的特点
(1)C语言简洁,紧凑,使用方便,灵活;
(2)运算符丰富,运算类型更多;
(3)数据结构类型丰富;
(4)具有结构化的控制语句;
(5)程序自由度大,语法控制不是很严格;
(6)允许直接访问物理地址,能进行位操作,可直接对硬件进行操作,能实现汇编语言的大部分功能,且与汇编相比,用C语言写的程序可移植性好;
(7)生成目标代码质量高,程序执行效率高。
3.程序设计思想
(1)面向过程:以事件为中心,分析解决问题需要的步骤,用函数将这些步骤一步一步实现,使用时依次调用即可。
(2)面向对象: 以实物为中心,关注由哪些对象协作完成任务。
4.环境安装
Code::Blocks/Visual Studio
5.第一个代码
#include <stdio.h> int main() { printf("Hello World!"); return 0; }二、数据类型
1.逻辑类型
true和false,分别表示逻辑真值和逻辑假值。
2.整数类型
(1)char
| 类型名称 | 长度(字节) | 值域 |
| char | 1 | -128-127或0-155 |
| signed char | 1 | -128-127 |
| unsigned cahr | 1 | 0-255 |
补充:计算机在内存中存储方式是补码:正数的原码、反码和补码一样。负数的反码是在其原码的基础上,符号位不变,其余位按位取反;负数的补码是在其反码的基础上+1。
(2)short
| 类型名称 | 长度(字节) | 值域 |
| short | 2 | -32768-32767 |
| unsigned short | 2 | 0-65535 |
(3)int
| 类型名称 | 长度(字节) | 值域 |
| int | 4 | -2147483648-2147483647 |
| unsigned int | 4 | 0-4294967295 |
(4)long
(5)浮点类型
包括float和double
数据类型从大到小:double > float > long long > long > int > short > char
(6)bool类型
值域:非零(true),零(false)
#include <stdio.h> #include <stdbool.h> //bool类型所在头文件 int main() { bool a; a = 1; if(a) { printf("TRUE"); //a只要不为0,打印TRUE } else { printf("FALSE"); } return 0; }三、常量
1.整形常量
常量:在程序运行期间数值不发生变化的数据。
整数:可以是十进制、八进制和十六进制。
2.浮点常量
3.指数常量
组成:尾数部分、字母e或E和指数部分。通常用来表示特别大或者特别小的数。
4.字符常量
表示形式:由两个单引号包括一个字符。
在C语言中,字符常量具有数值,字符常量的就等于字符的ASCII值。
5.字符串常量
表示形式:用双引号括起来的一串字符。
6.标识常量
也叫符号常量,一般用大写英文字母的标识符。
表示形式:#define <标识常量名称> <常量>
#include <stdio.h> #define ONE 1 #define TWO ONE + ONE //ONE TWO都是标识常量 int main() { //1.整形常量 int num = 10; printf("%d\n", num); //输出十进制数 printf("%x\n", num); //输出十六进制数 printf("%o\n", num); //输出八进制数 printf("---------------\n"); //2.浮点常量 float a = 5.20; //单精度 占4字节 double b = 13.14; //双精度 占8字节 printf("float:%f\n", a); printf("double:%f\n", b); printf("---------------\n"); //3.指数常量 //4.字符常量 char c = 'A'; char d = c + 10; printf("c = %d, d = %d\n", c); printf("%c\n", d); printf("---------------\n"); //5.字符串常量 int x = ONE + TWO; printf("x = %d\n", x); return 0; }四、变量
1.变量的基础
(1)变量由字母、数字、下划线组成,不能以数字开始,不能和C的关键字重名;
(2)程序运行时,变量占据存储空间的大小由其数据决定;
(3)变量在内存空间中的首地址成为变量的地址。
2.变量的说明
一般形式:<存储类型> <数据类型> <变量名>;
<存储类型>:是关键词auto、register、static和extern;
<数据类型>:可以是基本数据类型,也可以是自定义的数值。
注意事项:(1)一个变量只能存一个值,变量名不允许重复定义;
(2)一条语句可以定义多个变量;
(3)变量在使用之前一定要进行赋值。
3.变量的存储类型
(1)auto
说明的变量只能在某个程序范围内使用,通常在函数体内或函数中的符合语句中,在程序中一般省略关键字auto,c语言会默认关键字是auto。
(2)register
寄存器型,将变量放入CPU的寄存器中;不能用“&”来获取register变量的地址。
(3)static
静态存储类型,既可以子啊函数体内,也可以在函数体外(默认为0);
该存储类型的变量不会重新说明,而且还保留上次调用存储
#include <stdio.h> int main() { int i = 1; while(i < 5) { int a = 1; a++; printf("a = %d\n", a); i++; } int c = 1; while (c < 5) { static int b = 1; b++; printf("b = %d\n", b); c++; } return 0; }(4)extern
外部参照引用型,引用在其他文件中的函数体外说明的变量;
static修饰的全部变量,其他文件都无法使用。
五、运算符
1.算数运算符
c语言提供的算数运算符:+、-、*、/、%、++、--
注意事项:(1)两整数计算结果是整数;两小数计算结果是小数;
(2)除法不允许除以0;
(3)取余时:运算数必须是整型,结果的符号跟的第一个数字保持一致;
(4)自增自减运算时,要注意是前置还是后置。
#include <stdio.h> int main() { //数值拆分 //需求:键盘录入一个三位数,将其拆分为个位、十位、百位后,打印在控制台 int num; printf("请输入一个三位数:"); scanf("%d", &num); int ge = num % 10; int shi = num / 10 % 10; int bai = num / 100 % 10; printf("个位是:%d\n", ge); printf("十位是:%d\n", shi); printf("百位是:%d\n", bai); /*公式总结: 个位:数值%10 十位:数值/10%10 百位:数值/100%10 千位:数值/1000%10 */ //赋值运算符:累加 int num = 0; int sum = 0; while(num++ < 100) //num++是后置自增,意思是:先使用变量原来的值进行比较,再将变量加1 { sum += num; } printf("sum = %d\n", sum); return 0; }2.关系运算符
c语言的关系运算符有:>、>=、<、<=、==、!=
#include <stdio.h> int main() { int a = 5; int b = 6; printf("%d\n", a > (b - 1)); printf("%d\n", (a + 1) == b); printf("%d\n", a >= (b - 2)); printf("%d\n", a < 100); printf("%d\n", (a + 3) <= b); printf("%d\n", a != (b - 1)); return 0; }3.逻辑运算符
| 运算符 | 功能说明 | 举例 |
| ! | 逻辑反 | !(x == 0) |
| && | 逻辑与 | x > 0 && x < 10 |
| || | 逻辑或 | y < 10 || x > 5 |
注意事项:(1)逻辑与"&&"运算符逢0截止;
(2)逻辑或"||"运算符逢1截止。
#include <stdio.h> int main() { int a = 1; int b = 0; int c = 0; //由于&&遇0截至,所以没有进行b++的动作 int d = !(a + 1 > 0) && b++ || ++c; printf("a = %d\n", a); printf("b = %d\n", b); printf("c = %d\n", c); printf("d = %d\n", d); return 0; }4.位运算
| 运算符 | 功能说明 | 举例 |
| ~ | 位逻辑反 | ~a |
| & | 位逻辑与 | a & b |
| | | 位逻辑或 | a | b |
| ^ | 位逻辑异或 | a ^ b |
| >> | 右移动 | a >> 1 |
| << | 左移动 | b << 1 |
注意事项:(1)异或运算规律:相同为假,不同为真;
(2)移动运算时,运算量和表达式必须为整形结果数值。
5.赋值运算
一般形式:<变量> <操作符> = <表达式>
C语言的赋值符合运算符:+=、 -=、 *=、 /=、 %=、 &=、 |=、 ^= 、>>=、 <<=
6.特殊运算符
(1)条件运算符
#include <stdio.h> int main() { int a = 10; int b = 20; printf("%d\n", a > b ? a : b); return 0; }(2)逗号运算符
(3)sizeof运算符:只是针对数据类型,而不是针对变量
#include <stdio.h> int main() { int a = 5; printf("%zu\n", sizeof(int)); printf("%d\n", sizeof(a)); return 0; }(4)C运算符的优先级:小括号永远是第一级
#include <stdio.h> int main() { int x = 1, y = 0, z = 0; printf("%d\n", x++ && y++ || ++z); printf("x = %d\n", x); printf("y = %d\n", y); printf("z = %d\n", z); return 0; }六、输入输出
1.数据输出
C语言中无I/O语句,I/O操作由函数实现:#include <stdio.h>
字符输出函数:putchar(c)
#include <stdio.h> int main() { int c = 65; char a = 'B'; putchar(c); //输出为A putchar('\n'); putchar(a); return 0; }2.格式输出函数
格式:printf("格式控制符", 输出表);
| 格式符 | 作用 | 格式符 | 作用 |
| i、d | 十进制整数 | x、X | 十六进制无符号整数 |
| o | 八进制无符号整数 | u | 无符号十进制数 |
| c | 单一字符 | s | 字符串 |
| e、E | 指数形式浮点小数 | f | 小数形式浮点小数 |
| g | e和f中较短的一种 | %% | 百分号本身 |
附加格式说明:
| 修饰符 | 功能 |
| m | 输出数据域宽,长度<m,左补空格;’否则按实际输出 |
| .n | 对实数,指定小数后位数(四舍五入) |
| .n | 对字符串,指定实际输出位数 |
| - | 输出数据在域内左对齐 |
| + | 指定在有符号数的整数前显示正号 |
| 0 | 输出数值时指定左面不适用的空位置自动填0 |
3.字符输入函数
字符输入函数:getchar;
正常返回值为读取的代码,出错或结束返回-1。
4.格式输入函数
格式:scanf("格式控制串", 地址表)
功能:按指定格式从键盘读入数据,存入地址表指定存储单元,按回车键结束;
返回值:撑场返回输入数据个数;
地址表:变量的地址,常用取地址运算符&。
5.输入函数垃圾清理
#include <stdio.h> int main() { int x; char ch; scanf("%d", &x); //用getchar清除或者用格式串中空格或%*c来吃掉 //getchar(); //scanf("%*c%c", &ch); //scanf(" %c", &ch); scanf("%c", &ch); printf("x = %d, ch = %c\n", x, ch); return 0; }6.字符串输入输出函数
(1)字符串输入函数gets
格式:char* gets(char *s)
功能:从键盘输入,以回车结束的字符串放入字符数组中,并自动加'\0'
说明:输入串长度应小于字符数组维数;gets函数并不以空格作为字符串输入结束的标志
(2)字符串的输出函数put
格式:int puts(const char* s)
功能:像显示器输出字符串(输出完自动换行)
说明:字符数组必须以'\0'结束