一、写第一个c语言
1.创建c语言流程
a.打开终端,创建.c文件
b编辑.c文件
vi +文件名 ; gedit +文件名.c
c.写c语言代码
d. 编译 gcc xxx.c -o 可执行程序名字
e. ./可执行程序名 默认是a.out
2.解释c语言代码
#include <stdio.h> 预处理:头文件-包含函数定义。
//第一个c语言程序 注释--给人看,编译器当做空白,多行注释 /*xx*/
int main() 入口函数(main函数)--程序执行的入口
{
int i = 0; 定义变量----定义一个i变量
printf("hello huqing\n"); 打印--屏幕上照常输出
return 0; 返回值: 返回给main的外部
}
二、常量
1.常量:不可以改变的量,不可以修改的量 (建筑物高度,地球直径)
一般时候,常量是给变量赋值使用。
2.整形常量: -1 , 0 ,100 所有的值都是整数
表示方式:10进制-满10进1, 16进制满16进1,用0到9+ABCDEF组成,加前缀0x或者H后缀。2进制常量只有1和0,8进制1到7表示,一般用0的前缀
3.浮点型常量:表示小数 -1.2, 1.0, 12.56 ,在内存中存储方式特殊。有误差。浮点型和0比较 float x =0; 不可以 x == 0
4.字符型常量: 'a', '1', '\0', ascii表
5.指针常量:指向某一个位置的常量(以后重点)
6.字符串常量: 多个字符用双引号串一起 “abc”
三、2进制计算
1.进制关系
十进制: 用0到9表示,满10进1,9+1=10,99+1=100 ,100-1 =99
二进制:用0和1表示:满2进1,借1当2. 10 -1 = 1; 1 + 1 = 10
十六进制:用0到9和ABCDEF表示,满16进1, 9 +1=0XA F+1=0X10
八进制:用0到7表示,满8进1,借1当8 ;7+1=10;7-1=6 ;77+1=100
2.二进制计算
移位运算:算数左移 < ,把左边第一个删除,右侧添加0
10010010 < 1 = 00100100
10010010 < 8 = 0
10010010 < 3 = 10010000
算数右移: > ,把右侧删除一个,左侧添加0
10010010 > 3 = 00010010
与: & ,相同位上都是1则结果为1,否则为0. (有0则0)
10010 & 1011 00010010
& 00001011
------------------
00000010
或: | ,相同位上有1则结果位1,否则为0,(有1则1)案例: 10010 | 1011 = 11011
取反:~,如果是1则取反的结果位0,如果是0则取反的结果位1,案例 ~100110 = 011001
3.进制转换
十六进制和二进制转换
2进制转16进制:二进制的4个位,表示16进制中的1位。 案例:1000 1001 = 0x89
案例: 11011 --> 0001 1011 =0x1B
16进制转2进制:一个16进制位表示4个2进制位 案例: 0xA0B = 1010 0000 1011
十六进制和10进制转换:
10进制 0~9 10 11 12 13 14 15 16
16进制 0~9 A B C D E F 0X10
8进制和2进制的计算
2进制转8进制,3个2进制位转换成1个8进制位
011 011 010 --> 332
8进制转2进制,1个8进制位转换成3个二进制位
7024 = 111 000 010 100
10进制转换成2进制,把10进制短除法2后直到商0后得到的余数从下往上写就是2进制
2进制转10进制,用1 2 4 8 16 1101011 = 64+32 + 8+ 2+1 = 107
oxcd --(八) 011 001 101 --315
0x9d --(八)010 011 101 ---235
四、变量:可以变的量,可以修改的量(64为系统)
1、整形是 int ,表示整数如-20, 0, 1。 总共是4字节可以用sizeof(int)打印,表示的数值范围是-21亿~+21亿
短整形 short ,表示短整数。 总共是2字节16位,表示的数值范围是65535
长整形 long, 表示长整数。 总共是8字节。对long类型赋值,需要在常量后加L ,long x = 10L;
2. 浮点型: float ,4个字节,单精度,表示6位小数,表示小数类型,1.2,-2.3, 0.0,总共多少位,给float类型复制需要加f。
double,8个字节,双精度,表示12位小数,总共多少位
3.字符类型: char ,表示字符如‘a’,'b', 在内存中占1个字节。范围是0~255,sizeof(char) = 1;
ascii:是把字符和整形对应的一个表 '0'---48 ,'A'---65, 'a'---97, ' '---32 , '\0'---0
转义字符: 和原本意思不一样了。 \n ---换行 \t----teb \\---一个\ %%---表示一个% \" ----表示双引号
4.字符串类型:没有对应变类型,“aa”,char* p = "asdfgasdg";
5.每个类型都分为有符号和无符号
正数是无符号,负数是有符号,如果只想表示正数则用无符号。关键字 unsigned
例如:unsigned int x = 123;
补充: 1字节 = 8位
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1EB = 1024TB
五、输入和输出 加上#include<stdio.h>
1.在屏幕上输出,printf
格式: printf("照常输出部分 占位符 ",变量);
格式: printf("照常输出 %d %c\n",变量1,变量2);
printf("int = %10d \nfloat = %10.5f\n",x,z);
占位符: %d --------打印int整形的值 ,%10d 总共显示10位,不够的部分用空格替换,右对齐
%o(字母o) 打印8进制
%x------------打印16进制
%hd --------打印short的值
%ld ---------打印long的值
%u ---------打印无符号数据的值
%c --------- 打印字符类型
%f --------- 单浮点型,%5.3f总共5位,小数点占3位。
%lf --------- 双精度浮点型
%s ----------字符串
%p ------------指针
2.输入 scanf
格式: scanf("占位符",&变量);
scanf("占位符,占位符",&变量1,&变量2);如果是逗号,则输入的时候也要用逗号隔开
scanf("占位符 占位符",&变量1,&变量2);如果是空格,输入的时候也是空格隔开
练习:输入年龄和姓名(姓名用一个字符表示),把输入的内容打印出来。(代码day01/04test.c)
五、运算符
1.算数运算符
+ 加法 计算两个数的和,例如 int a = 10 ;int b = 20; a + b ,其中a和b的值不变,a+b得到的是a和b的结果。如果a修改需要赋值
- 减法 同上
*乘法 同上
/ 除法 整除,所有的小数部分丢弃。 12/21 = 0 12 / 4 = 3; 12/5=2
% 取模,余数,得到相除后的余数 12%21=12 ,12%4 = 0; 12%5=2 ,值1%值2把结果限定在值2范围内,123%5=3
2.赋值运算符
格式: 左值= 右值; 把右值给到左值
复合赋值运算符:+= ,*= ,-=,/= ; %=; |= ; &=; >>=;<<= (算数运算符,二进制运算符)
例如: int x = 10; int y = 20; y *=x+2; 等价于 y = y*(x+2);是240
注意: 左值不可以是常量 ,只可以是变量。不可以有其他的运算。
3.关系运算符
关系运算符的结果只有两个,真或者假,非0为真,0表示假。
> 如果左值大于右值,结果为真,否则为假
>= 如果左值大于或者等于右值,结果为真
< 如果左值小于右值结果为真
<= 如果左值小于等于右值,结果为真
== 如果左值和右值相同则结果为真,否则为假
!= 如果左值和右值不相同则结果为真
注意:一般情况用于判断语句,比如说if语句中。
在比较运算符==时候,需要把常量放前面,以防出现赋值运算符
关系运算符连用是不正确的,例如:10 < time < 15
4.逻辑运算符:(双目)
&& : 表达式左值和右值都为真则结果为真,否则为假 。&表示按位与
|| :表达式左值或者右值有一个为真则结果为真。|表示安位或。
! :逻辑非,如果表达式为真则结果为假, !(2>6)
注意:&&有截取功能,如果第一个表达式(左值)为假,右侧的值不计算。
|| 也有截取功能,如果第一个表达式为真,则第二个表达式不会计算。
案例1:请输入你的年龄,和金钱。如果年龄小于18岁,并且钱大于10000,则是高富帅,否则为屌丝。(代码day01/gaofushuai.c)
练习2:输入三个数,请判断哪个值最大,打印出最大值。
5.自增自减运算符 (单目)
前加加:++x; 表示x= x+1;是先自己加1后再做其他事情
后加加:x++; 表示x = x+1;是先计算完其他操作再自己加1(暂时理解遇到分号加1)
前减减:--x:
后减减:x--:表示x = x-1;是先计算完其他操作再自己减1(暂时理解遇
到分号减一)
6.三目运算符 (运算符有三个值)
格式: 表达式1 ? 表达式2:表达式3
执行:如果表达1为真则执行表达式2,如果表达式1为假则执行表达式3.
三目运算符可以代替简单的if语句使用。并且三目运算符可以嵌套使用。
7.运算符的优先级
优先级:先计算的运算符优先级高,否则优先级低
优先级顺序:括号-->单目-->算术运算符-->移位运算符-->关系运算符-->位运算符-->逻辑运算符-->三目运算符-->赋值运算符-->逗号运算符。
六、分支语句
1.if分支语句
if格式:
if(条件判断)
{
语句1
}
else
{
语句2
}
2.执行:如果条件1满足则执行语句1,不满足执行语句2;
3.格式2:
if(条件判断1){
语句1;
}
else if(条件判断2) {
语句2;
}
else {
语句3;
}
执行: 先判断条件1是否满足,如果满足则执行语句1后结束if语句,如果条件1不满足继续判断条件2,如果条件2满足则执行语句2,否则执行语句3;
注意:有if不一定有else if和else 但有else必定有if ,有else if也必定有if。
练习: 判断某一个数是不是回文:12321 22222,32123 (day01/10same.c)
自学部分 getc putc, gets puts getchar putchar sprintf sscanf的使用(了解)
getc 指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。
getchar()--从控制台输入字符
putchar()--输出字符到控制台
gets()--从控制台获得字符串
puts()--输出字符串到控制台
sscanf()--从字符串读取数据
sprintf()--数据输出到字符串
strlen() 计算字符串长度
strcpy() 字符串拷贝
strcat() 字符串拼接
strcmp() 字符串比较
自学部分: 浮点类型在计算机中怎么存储的,存储格式是什么样子,double类型呢?(画图讲明白)9点罗鸣之给大家讲解作业
作业1:判断水仙花数,三个数的立方和等于水仙花数本身。
/*
//水仙花计算
int a,b,c;
int num,i;
for(i=100;i<1000;i++)
{
a=i/100;
b=i%100/10;
c=i%10;
num=(a*a*a)+(b*b*b)+(c*c*c);
if(num==i)
{
printf("水仙花有:%d\n",i);
}
}
*/
/*
作业2:请使用三目运算符的嵌套,比较三个数中的最大值是多少。
//三目运算符 三位数比大小
int a,b,c,d;
printf("请输入三个数来判断大小:");
scanf("%d%d%d",&a,&b,&c);
d=a>b?(a>c?a:c):(b>c?b:c);
printf("最大的值为:%d\n",d);
*/
作业3:选做题--从键盘上输入一个字母存入变量中,然后转换大小写后打印出来,例如输入A则屏幕上输出a,如果输入A屏幕上输出a
/*
///大小写的转换
char a;
printf("请输入一个字符变量:");
scanf("%c",&a);
if(a>65 && a<90)
{
a=a+32;
}
else
{
a=a-32;
}
printf("转换之后的字符:%c\n",a);
*/