//复习:
ubuntu ---> Linux内核
1. 放大字体: ctrl shift +
缩小字体: ctrl -
2. vim编辑器 三种模式
一般模式 插入模式 尾行模式(命令行模式)
vim hello.c //一般模式
i //进入 插入模式
o //在光标所在行的下一行插入一行
###考点: main函数 一个程序中有且只能有一个main函数
main函数是入口函数
#解
#include <stdio.h>
int main()
{
return 0;
}
//保存退出
esc ---> space ---> :wq :wq! q!
面试问题:
gcc是啥?? 编译器
vim是啥?? 编辑器
gcc hello.c ------> a.out
//运行程序 ./a.out
printf("hello world!!\n");
int a;
a = 10;
printf("a的值是%d\n",a);
float b;
b = 2.13;
printf("b的值是%f\n",b);//.2f 保留小数点后两位
yy //复制当前行
5yy//复制5行,从当前行算起
dd //剪切
5dd //同5yy理解
p //粘贴
u //撤销
ctrl + r //反撤销
//整容手法
int a;
a = 10;
//天生丽质
int a = 10;
算术运算符 + - * / %
考点:
/法: 整数 / 整数 = 整数 7 / 3 == 2 7里面有2个3 4 / 7 == 0
%取余运算: (1) % 左右两边必须是整数
(2) 较小的数 % 较大的数 == 较小的数本身 (不打架原则)
关系运算符
> >= <= < == !=
if(a = 3)//不会报错 ,正确的语法 if(3) --> 真
if(a == 3)//判断a和3是否相等
if(!a) === if(a == 0)
if(a) === if(a != 0)
C语言
(1) 非零即为真
(2) 真的值是1, 假的值是0
3 != 2 ----> 1
3 > 2 ---> 1
3 < 2 ---> 0
逻辑关系运算符
&& || !
&& //同真为真,一假即假
|| //一真即真,同假为假
! //真变为假 假变为真
int a = 10;
a = !a;
a = !a;
a = !a;
a = !a;
if(); //没有else的时候,编译不报错
if(); -->等价于
if()
{
;
}
if();//编译报错,因为if和else被执行语句分隔开
{
//执行语句
}
else
{}
if-else{} 什么时候可以省略不写,只有一条执行语句的时候才可以省略不写
//关于if的语法格式
1. if()
2. if - else
3. if嵌套 ----- &&
if()
{
if()
{
}
}
4. if - else if - else if - else
5. if并列
//上下的if彼此之间,没有任何关联
if()
{
}
if()
{
}
//
新课
2.1.0 sizeof()运算符
sizeof(int)-----> 4
sizeof()作用:求变量或数据类型所占内存空间的大小(以字节为单位)
int a;
sizeof(int) ----> 4
sizeof(a) ----> 4 因为a的类型是int
运算对象:一种是类型名,一种是变量名
运算结果:整型的值
----代码测试-----//课后自己验证演练
定义int, short, long, float,double类型变量,
然后求出变量占用内存空间大小并打印
结论:运算结果的大小,取决于变量的类型,与变量的值毫无关系。
数据类型 格式化输入输出类型和格式 占内存空间的大小
char 字符型 %c 1字节
short 短整型数据 %hd 2字节
int 整型数据 %d 4字节
long 长整型数据 %ld 4字节 //32位系统中占4个字节,64位系统中占8个字节
float 单精度浮点型(保存小数)%f 4字节
double 双精度浮点型(保存小数)%lf 8字节
#include <stdio.h>
int main()
{
int a;
printf("%d %d\n",sizeof(int),sizeof(a));
printf("%d %d %d %d %d %d\n",sizeof(char),sizeof(short),sizeof(int),sizeof(long),sizeof(float),sizeof(double));
return 0;
}
2.1.1 数字和字符(**)
美国国家标准委员会,规定了每一个字符,由一个有效的数字来表示,这个数字就是ascii码
//查看ascii值
man ascii
2进制 16进制 10进制
######练习1: 查找ascii表中 '0'的 0011 0000 0x30 48
'a' 0110 0001 0x61 97
'A' 0100 0001 0x41 65
' ' (SP) 0010 0000 0x20 32
回车(CR) 0000 1101 0x0D 13
esc 0001 1011 0x1B 27
'\0' 0000 0000 0x00 00
'\n' ---> 10
'+' ---> 43
'0' ---> 48//字符0
...
...
'9' ---> 57
'0' ---- '9' ====> 48 ---- 57
'A' ---- 'Z' ====> 65 ---- 90
'a' ---- 'Z' ====> 97 ----> 122
'\0' ----> 0
'0' ----> 48
0 //整数0
"1000" //字符串1000
1000 //整数1000
2.1.2 如何来表达字符
' '引号来表达字符
" "双引号是字符串
"hello" ----> 'h' 'e' 'l' 'l' 'o' '\0'
数字 1、2、3、4
字符 '1' '2' '3' '4' '#'
'a' 'A'
'1' = '0' + 1;
'2' = '0' + 2;
'9' = '0' + 9;
'b' = 'a' + 1;
'c' = 'a' + 2;
.....
'A' = 'B' - 1;
'C' = 'A' + 2;
2.1.3 如何来保存一个字符?
char a;//字符类型的变量,保存字符
#include <stdio.h>
int main()
{
char a;
a = 'B';//等于 a = 66;
// scanf("%c",&a);//输入一个字符
printf("a is %c对应的ascii值是%d\n",a,a);//打印输出字符用%c,以字符的格式打印输出
//%c 以字符的格式输出
//%d 将a中的字符的ascii值打印输出
printf("a - 1 ---> %c\n",a-1); // 'B' - 1 == 'A'
printf("a + 32 ---> %c\n",a+32); // 'B' + 32 ---> 'b'
printf("a + 3 ---> %c\n",a+3); // 'B' + 3 ---> 'E'
return 0;
}
-------------------------------------------------------------------------------------------------------------
######练习2://解题思想同输入一个数,判断是否在10 --- 100之间,同理
输入一个字符,进行判断
'0' ---- '9' ====> 48 ---- 57
'A' ---- 'Z' ====> 65 ---- 90
'a' ---- 'Z' ====> 97 ----> 122
1)如果是 小写字母 打印输出 is small letter!! 'a' ---- 'z'
2)如果是 大写字母 打印输出 is big letter!! 'A' ---- 'Z'
3)如果是 数字 打印输出 is number '0' ---- '9'
#include <stdio.h>
int main()
{
//char类型的变量也可以用来存整数,字符就是特殊的整数
char a;
printf("Please input char:\n");
scanf("%c",&a);//以字符的格式 输入一个字符
if(a >= 'a' && a <= 'z')
{
printf("%c is small letter!!\n",a);
}
if(a >= 'A' && a <= 'Z')
{
printf("%c is biger letter!!\n",a);
}
if(a >= '0' && a <= '9')
{
printf("%c is number!!\n",a);
}
return 0;
}
------------------------------------------------------------------------------------------------------------
2.1.3 自加、自减
a++; a = a + 1;
++a; a = a + 1;
(1)++ (自增运算符)
int a = 1;
a++;
printf("a is %d\n",a);//a is 2
int a = 1;
++a;
printf("a is %d\n",a);//a is 2
//当a++; 和 ++a 这个式子,单独存在的时候,二者等价
无论是a++;还是++a;语句执行结束之后,自身必然+1
int x = 4;
int y;
y = x++;//++在后, 先运算,后++
//先运算 将x参与赋值运算 y = x
//后++ 执行自身+1 x = x + 1;
printf("x is %d y is %d\n",x,y);//x is 5 y is 4
y = ++x;//++在前, 先++,后运算
//先++, 先执行自身+1 x = x + 1 ---> 6
//后运算, 执行赋值运算 y = x
printf("x is %d y is %d\n",x,y);//x is 6 y is 6
--------代码演示------------
#include<stdio.h>
int main()
{
int x = 6,y = 7;
int z;
z = x++ + ++y; //x是++在后,所以参与加法运算的时候是6
//y是++在前,所以参与加法运算的时候是8
//z = x + y ----> 14
printf("x = %d,y = %d,z = %d\n",x,y,z);//x is 7 y is 8 z is 14
}
##笔试题
int a = -1;
if(a++) //++在后, 先运算(if条件判断 if(-1)),后++(a = a + 1)
{
printf("a is %d\n",a); // a is 0
}
//printf会打印吗??会
//打印的时候a的值是几??0
#include <stdio.h>
int main()
{
int a = -1;
if(++a)//++在前,先++(a = a + 1),后运算(if条件判断 if(0)), 所以没有打印输出
{
printf("a is %d\n",a);
}
return 0;
}
(2) -- (自减运算符同理)
a--; a = a-1;
--a; a = a-1
###逻辑&& 和 || 的短路运算
###笔试题 中科创达
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a = -1;
int b = 2;
if(++a && ++b ) //&& 一假即假 ,第一个条件为假,后面的条件不需要进行判断, ++b这个语句,根本没有被执行,所以b的值,依然是2不变
{
printf("hello world\n");//会打印吗?? 不打印
}
printf("a is %d\nb is %d\n",a,b);//a is 0 b is 2
return 0;
}
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a = 0;
int b = 2;
if(++a || ++b)//|| 一真即真 第一个条件为真,后面的条件不需要进行判断, ++b这个语句,根本没有被执行,所以b的值,依然是2不变
{
printf("hello world\n"); //会打印
}
printf("a is %d\nb is %d\n",a,b); // a is 1 b is 2
return 0;
}
-------------------------------------------------------------------------------------------------------------
2.1.4 算数运算表达式: += -= *= /= %=
a += 1; a++; a = a + 1
a += 3; <=====> a = a + 3;
a -= 3; <=====> a = a - 3;
a *= 3; <=====> a = a * 3;
a /= 3; <=====> a = a / 3;
a + 3;
a = a + 3;
a += b; <=====> a = a + b;
a += b + 3; <=====> a = a + (b + 3);
--------代码演示------------
#include <stdio.h>
int main()
{
int a = 5;
int b = 2;
a += 3;
printf("a %d\n", a); // a is 8
a += b;
printf("a %d\n", a); // a is 10
}
-------------------------------------------------------------------------------------------------------------
#######练习4:输入三个数, 将最大值打印输出
比如:输入的是 a = 8 , b = 5 , c = 3;
则屏幕输出 最大值是 8
#include <stdio.h>
int main()
{
int a,b,c;
int max;//用来保存最大值
printf("Please input three number:\n");
scanf("%d%d%d",&a,&b,&c);
//编程思想: 抢最好的 先假设其中的一个是最大值,与剩余的都比较一次
//1.先假设 其中的一个是最大值
max = a;
//2.与剩余的每一个都比较一次
if(max < b)
max = b;
//执行完上面的if,max保存了a和b的最大值
if(max < c)
max = c;
printf("max is %d\n",max);
return 0;
}
2.1.5 三目运算符
? : 无条件等价于 if --- else
? : 表达式 c语言中唯一的三目运算符
条件 ?表达式1 :表达式2
//条件为真 执行的 :左边的表达式1
//条件为假 执行的 :右边的表达式2
int min = a < b ? a : b
int a = 3;
int b = 5;
int max = a > b ? a : b;
#include <stdio.h>
int main()
{
int a = 5;
int b = 3;
int max = a > b ? a : b;
printf("max is %d\n",max);
1.1 ? printf("1111111111\n") : printf("22222222222\n");
return 0;
}
######练习3:输入三个数求最大值程序改成用 ? : 表达式来实现
#include <stdio.h>
int main()
{
int a,b,c;
int max;//用来保存最大值
printf("Please input three number:\n");
scanf("%d%d%d",&a,&b,&c);
//编程思想: 抢最好的 先假设其中的一个是最大值,与剩余的都比较一次
//1.先假设 其中的一个是最大值
max = a;
//2.与剩余的每一个都比较一次
if(max < b)
max = b;
//执行完上面的if,max保存了a和b的最大值
if(max < c)
max = c;
printf("max is %d\n",a);
return 0;
}
#include <stdio.h>
int main()
{
int a,b,c;
int max;//用来保存最大值
printf("Please input three number:\n");
scanf("%d%d%d",&a,&b,&c);
//编程思想: 抢最好的 先假设其中的一个是最大值,与剩余的都比较一次
//1.先假设 其中的一个是最大值
max = a;
//2.与剩余的作比较
max = max > b ? max : b;
max = max > c ? max : c;
printf("max is %d\n",max);
return 0;
}
---------------------------------------------------------------------------------------------------------------------------
//C语言三大程序结构
1.顺序结构
程序自上而下顺序执行
a = 10; //报错,提示a没有定义
int a;
2.选择结构
? :
if - else // 单向必选题 A B
if -else if - else if - else if ..... else //单向必选题 A B C D ....
#输入一个字符,如果是大写,将他装换成小写,如果是小写,转换成大写
#include <stdio.h>
int main()
{
//A 对
//a 错
char ch;
printf("Please input char:\n");
scanf("%c",&ch);
if(ch >= 'a' && ch <= 'z')
ch -= 32;
else if(ch >= 'A' && ch <= 'Z')
ch += 32;
printf("ch is %c\n",ch);
return 0;
}
//你欠我5000块钱
if(条件1) //你有钱吗? 没有
{
执行语句1 //条件1 成立
}
else if(条件2) //你有电脑吗?没有
{
执行语句2 //条件1 不成立 满足条件2成立
}
else if(条件3) //你有手机吗?没有
{
执行语句3 条件1 条件2都不成立 满足条件3成立
}
..
...
...
else //以上的所有条件都不成立,就执行else 绝交
{
}
switch()语句
3.循环结构
(1) for循环
(2) while循环
(3) do-while循环
2.2.1 用if语句实现二分支选择结构(四种)
2.2.2 用switch语句实现多分支选择结构
switch(整型表达式) //类型 只能是整数 char short int long 枚举
{
case 常量1: //表达式的值和常量表达式的值相等时,就执行此case后面语句。
语句1;
break;
case 常量2:
语句2;
break;
.
.
case 常量n:
语句n;
break;
default: //默认分支,上面的都不满足,执行default后面语句。
语句n+1
}
--------代码演示-------
由用户输入,如果1,打印monday, 如果是2 打印tuesday, 如果3打印wensday, 如果4打印thursday
#include <stdio.h>
int main()
{
int day;
scanf("%d",&day);
switch(day)//判断day变量里面的值
{
case 1:// if(day == 1)
printf("星期一\n");
break;//跳出switch体
case 2:// else if(day == 2)
printf("星期二\n");
break;
case 100://else if(day == 100)
printf("星期你猜!!\n");
break;
default://以上所有的条件都不成立 else
printf("啥也不是!!\n");
}
return 0;
}
######练习7:
用switch语句实现一个小型计算器
例如:输入3 + 5 打印输出 8 '+' '-' '*' '\'
'+' '-' '*' '/'
switch()
{
case '+':
break;
case '-':
break;
}
3+5
8
5-3
2
#include <stdio.h>
int main()
{
int a,b;//保存输入的两个整数
char oper;//运算符
scanf("%d%c%d",&a,&oper,&b);
switch(oper)
{
case '+':
printf("%d + %d = %d\n",a,b,a+b);
break;
case '-':
printf("%d - %d = %d\n",a,b,a-b);
break;
case '*':
printf("%d * %d = %d\n",a,b,a*b);
break;
case '/':
printf("%d / %d = %d\n",a,b,a/b);
break;
}
return 0;
}
/思考 屏幕上打印的结果是什么??
switch只有一个考点:就是刹车问题 break
#include <stdio.h>
int main()
{
int num = 3;
switch(num)
{
case 3:
printf("3");
case 4:
printf("4");
case 5:
printf("5");
default:
printf("6");
}
}
打印输出3456
#include <stdio.h>
int main()
{
int num = 3;
int k = 0;
switch(num)
{
case 3:
k++;
case 4:
++k;
case 5:
k++;
default:
++k;
}
printf("k is %d\n",k); //k is 4
}
2.2.3 类型转换(*)
///类型转换
int a= 3;
float b = 1.2;
a + b ? 结果是float 两个不同类型进行运算,要进行类型转换
//隐式转换(电脑自动帮你做的)
a + b ---> 3.0 + 1.2 ---> 4.2
转换原则:从小到大 char --> short --> int --> long --> float --> double
#include <stdio.h>
int main()
{
int a= 3;
float b = 1.9;
printf("%f\n", a + b); //a 转成float类型,此种转换叫隐式转换,或者叫默认转换
//如果希望,b转成int, 然后进行 + 运算
printf("%d\n", a + (int)b); //(int)b 强制类型转换,将b强制转换为int类型 3.9 ---> 3
//赋值转换,最终的类型是 = 左边为主
int c = 3.9;
printf("c is %d\n",c);
float d = 2;
printf("d is %f\n",d);
//笔试题
int x = 10, y = 4;
float z = x / y; //整数 / 整数 = 整数 z = 10 / 4 z = 2 //赋值转换, z = 2.0000
printf("z is %f\n",z);
return 0;
}
#练习 编写程序,从键盘输入两个整数,分别计算出它们的商和余数,
# 输出时,商数要求保留2位小数,并对第三位进行四舍
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("result is %.2f\n",(float)a/b);
return 0;
}
2.2.4 常量(其值不可以改) //常量就是不可变
宏定义 的理解: 无脑替换
100, 'A'
//如何定义一个宏常量
1) 设圆半径为r,求圆周长,圆面积。用scanf输入半径,输出计算结果,请写程序.
3.14 用宏来表示
2 * PI * r
PI * r * r
#include <stdio.h>
//宏定义 是常量
#define PI 3.1415
#define N ;}
#define X 2
#define Y X+1
//1.见名知意
//2.一改统改
int main(int argc, const char *argv[])
{
//PI = 2.5;// 3.14 = 2.5;//编译报错,因为PI是常量
float s = PI * 2 * 2;
printf("s is %.2f\n",s);
//笔试题
printf("result is %d\n",Y*Y);//M+1*M+1 2+1*2+1 5
return 0 N
//定义宏的好处
1 能达到一改全改的目的
2 能增加程序的可读性
作业:1
输入学生成绩
90-100 分打印 A
80-89 分打印 B
70-79 分打印 C
60-69 分打印 D
其他不及格
分别用if条件判断 和 switch分支 两种方法实现
//方法一 if --- else if -- else if --- else
//方法二 switch
91 / 10 ---> 9
92 / 10 ---> 9
95 / 10 ---> 9
int score;
scanf("%d",&score); //95
score /= 10; //score = score / 10;
switch(score)
{
case 10:
case 9:
printf("A");
break;
}
方法一
#include <stdio.h>
int main(int argc, const char *argv[])
{
int score;
printf("Please input score:\n");
scanf("%d",&score);
score /= 10;
switch(score)
{
case 10:
case 9:
printf("A\n");
break;
case 8:
printf("B\n");
break;
case 7:
printf("C\n");
break;
case 6:
printf("D\n");
break;
default:
printf("裂开了!!\n");
}
return 0;
}
//理解 if-else if - else if - else
//方法二
#include <stdio.h>
int main(int argc, const char *argv[])
{
int score;
printf("Please input score:\n");
scanf("%d",&score);
//1.对输入的数据做一个容错判断
if(score < 0 || score > 100)
{
printf("input error!!\n");
}
else//能够进入else,说明输入的数据必然是0-100之间
{
if(score >= 90)//你有5000块钱吗?
{
printf("A\n");
}
else if(score >= 80)//你有电脑吗?// else 否定上面的if条件
{
printf("B\n");
}
else if(score >= 70)//你有手机吗? //else 否定上面的两个if条件
{
printf("C\n");
}
else if(score >= 60)//你有手表吗?
{
printf("D\n");
}
else//绝交
{
printf("重在参与!!\n");
}
}
return 0;
}
作业:2
用if - else if - else if -- else 语句实现一个小型计算器
例如:输入3 + 5 打印输出 8 '+' '-' '*' '\'
'+' '-' '*' '/'
3+5
8
5-3
2
#include <stdio.h>
int main(int argc, const char *argv[])
{
int a,b;
char oper;
printf("请输入运算式子:\n");
scanf("%d%c%d",&a,&oper,&b);
if(oper == '+')
{
printf("%d + %d = %d\n",a,b,a+b);
}
else if(oper == '-')
{
printf("%d - %d = %d\n",a,b,a-b);
}
else if(oper == '*')
{
printf("%d * %d = %d\n",a,b,a*b);
}
else if(oper == '/')
{
printf("%d / %d = %d\n",a,b,a/b);
}
return 0;
}