C语言基础day2

复习

vim编辑器的使用:

vi 文件名

vi test.c .c C语言源文件

i 键: 进入输入模式 左下角出现insert

esc 键: 退出输入模式 左下角的insert没有了

:wq 保存并退出vi编辑器

:q! 强制退出不保存

:wq! 强制保存退出

#include  
//# 预处理  在编译之前做的处理
//include 包含头文件, 为了声明
//stdio.h  标准输入输出头文件
//< >  在标准库中查找头文件,暂时都是<>
//main函数  程序入口  逻辑开始执行的地方  {}以内都是main函数
//printf 输出   输出""里面的内容  \n转义字符 换行回车  将光标移动到下一行的行首
//%d十进制整数 %f浮点型数   如果printf输出需要整数或者小数,而值又不能确定,要根据变量的值确定,那就在""里该出现整数的地方写%d  出现浮点型数的时候%f,在实际输出的时候,会根据变量的值代替%d 和%f
int main()
{	
    printf("hello world\n");	
    return 0;//结束main函数,结束main函数就是结束程序。
} 

如何定义变量

类型名 变量名;

int 整型

float 浮点型

char 字符型

命名规则(标识符):

  1. 数字、字母和下划线组成。
  2. 不能以数字开头。 1a 2f 都是错的
  3. 严格区分大小写。 num Num 不是一个变量,大小写是不同的字符
  4. 不能使用关键字。 int float char include return等都是C语言的关键字。
  5. 不能使用拼音。 起名要准确表达含义。

变量赋值

= 赋值运算符

将右边的值(右值)赋值给左边的值(左值)

int a;

a = 10;

什么是初始化:

int a = 10; 定义变量的时候就赋值。虽然在C语言中区别不明显,但是赋值和初始化不是一回事。

格式符

%d %o %x

%f

%c

输入和输出函数:

输入

scanf 是有坑的,我们学习它主要是我们做练习的时候,需要用到输入。

\n 是scanf禁忌。

输出

printf

1、运算符

1. 算术运算符

±*/%

±*和我们熟知的数学概念是一样的。

除法 /

整数相除得整数 10/6 1 除不开的部分直接舍掉,只保留整数部分。

C语言基础day2_第1张图片
结果是1

小数相除得小数 和我们熟知的数学概念是一样的。

C语言基础day2_第2张图片
结果是1.66666667

整数和小数相除得小数。

100/13结果是7 小数部分直接舍掉。

模除 % 取余数。 100%13 得9。 一般用来判断整除,a%b结果0 说明a被b整除。

%的左右操作数必须是整数。

除法和模除要求右操作数不能是0。运行会崩溃。

C语言基础day2_第3张图片
分母不小心为0了。

C语言基础day2_第4张图片
编译没错但是运行崩溃。

2. 关系运算符

关系运算符的结果是真假值

真 非0整数都是真 -1 100都是真。 在关系运算符中如果结果是真,C语言会默认使用1来表示真。

假 整数0

< <=(中间没有空格) > >=(中间没有空格) ==(中间没有空格) !=(中间没有空格)

== 判断两个数相等,相等结果是1,不相等结果是0

!= 判断两个数不相等,不相等结果是1,相等结果是0

注意区分: ==(只能用来判断) 与 =(用来赋值)

示例:

x = 7; 赋值,把7赋值给变量x

x == 5; 比较,判断x的值是不是5

int main()
{	
    int a = 10;	//定义变量a,初始化10
    int b = 3;	//定义变量b,初始化3
    printf("%d\n", a<b);//输出0  如果a>b?结果是1	
    return 0;
}

3. 逻辑运算符

&& 逻辑与 数字键7+shift

|| 逻辑或 shift+回车上面的键

! 逻辑非

逻辑与真值表:

表达式1 && 表达式2 结果

-------------------------------

0 0 0

1 0 0

0 1 0

1 1 1

示例: a=2, b = 9; (a>0) && (b<0)

int main()
{	
    int a = 2;	
    int b = 9;	
    printf("%d\n", (a>0)&&(b<0));	//0  如果(a>0)&&(b>0)  1
    return 0;
}

逻辑或真值表:

表达式1 || 表达式2 结果

-------------------------------

0 0 0

1 0 1

0 1 1

1 1 1

示例: x=2, y=1 ; (x>0) || (y<0)

#include 

int main()
{
	int x = 2;
	int y = 1;
	printf("%d\n", (x>0)||(y<0));//1   (x<0)||(y<0) 0
	return 0;
}

逻辑非真值表:

a !a

------------------

1 0

0 1

思考

int main()
{	
    int a = 10;	
    a = !a;//执行完毕 a 0
    a = !a;//执行完毕 a 1
    printf("%d\n", a);	
    return 0;
}

4. 优先级

1+2*3 先算乘法,再算加法

算术运算 > 关系运算 > 逻辑运算

1+2>3 || 2+3<4

3>3 || 5<4

0 || 0

0

因为逻辑运算符的优先级低于关系运算符,所有上面逻辑与和逻辑或的示例中代码的()是可以省略的。

练习:

输入三个小数,求和,求平均值分别打印

#include 

int main()
{
	float a, b, c;
	scanf("%f%f%f", &a, &b, &c);
	float sum = a+b+c;//求和,将结果存放到变量sum中
	float avg = sum/3;//求平均值,结果存放到avg中
	printf("sum = %f avg = %f\n", sum, avg);
	return 0;
}

2、if语句

正常的程序,是从上向下执行,顺序结构。

if语句属于分支结构,有选择性的去执行某段逻辑。

1.标准格式:

if( 条件 ) //条件为真  执行语句1  条件为假  执行语句2
{
	语句1}
else //else 不一定存在,根据实际的逻辑,可以省略。
{
	语句2.
}

int main()
{
	if(0)//条件为假 不能输出hehe
	{
		printf("hehe\n");
	}
	return 0;
}

示例:

请输入一个数字,判断这个数字是否为偶数。

#include 

int main()
{
	int num;
	scanf("%d", &num);
	if(num%2 == 0)//整数能被2整除,说明是偶数
	{
		printf("yes\n");
	}
	else
	{
		printf("no\n");
	}
	return 0;
}

练习:

输入一个整数,判定是否为偶数,如果是偶数,再判定这个数的一半是不是偶数。

#include 

int main()
{
	int num;
	scanf("%d", &num);
	if(num%2 == 0)
	{
		printf("yes\n");
		//优先级相同,先算左边
		if(num/2%2 == 0)
		{
			printf("half yes\n");
		}
		else//每个else必须有与之匹配的if
		{
			printf("half no\n");
		}
	}
	else
	{
		printf("no\n");
	}
	return 0;
}

2. if嵌套

if( 条件1 ) //条件1真  判断条件2
{	 
	if( 条件2 ) //条件1真  条件2真  执行语句2
	{
		语句2.  
	}
	语句3.//条件1真  执行语句3   和条件2无关
}

3.if并列

if( 条件1 )//条件1真  执行语句1
{
	语句1.  
}
if( 条件2 )//条件2真 执行语句2   条件2不受条件1影响 
{
	语句2.  
}

3. if - else if - else 多分支选择结构

if( 条件1 )//条件1真  执行语句1
{
	语句1.
}
else if( 条件2 ) //条件1假 才判断条件2  条件2真执行语句2
{
	语句2.
}
else //条件1 条件2都是假 才执行else里的语句3  else可以省略
{
	语句3. 
}

后面的条件受前面条件的影响

示例:

#include 

int main()
{
	int week;
	scanf("%d", &week);
	if( week > 7 || week < 1 )//保证输入的数字在1~7之间,否则程序结束
	{
		printf("error\n");
		return 0;//结束main函数,结束程序
	}
    //week在1~7之间才可能去执行下面的代码
	if( week == 1 )//如果week为1  后面的条件都不判断了
	{
		printf("Monday\n");
	}
	else if( week == 2 )
	{
		printf("Tuesday\n");
	}
	else if( week == 3 )
	{
		printf("Wednesday\n");
	}
	else
	{
		printf(“other days\n”);
	}
    return 0;
}
#include 

int main()
{
	int week;
	scanf("%d", &week);
	if( week > 7 || week < 1 )//保证输入的数字在1~7之间,否则程序结束
	{
		printf("error\n");
		//return 0;//结束main函数,结束程序
	}
    //week在1~7之间才可能去执行下面的代码
	else if( week == 1 )//如果week为1  后面的条件都不判断了
	{
		printf("Monday\n");
	}
	else if( week == 2 )
	{
		printf("Tuesday\n");
	}
	else if( week == 3 )
	{
		printf("Wednesday\n");
	}
	else
	{
		printf(“other days\n”);
	}
    return 0;
}

练习:

请输入一个成绩,然后用 5 分制 去评定成绩。

成绩在0~100之间

A 90~100

B 80~89

C 70~79

D 60~69

E 0~59

关系运算符连写的坑 1

#include 

int main()
{
	int a;
	scanf("%d", &a);
	printf("%d\n", 1
#include 

int main()
{
	int score;
	scanf("%d", &score);
    //在表示一个区间的时候,要使用前比后开区间。  [1, 10) 能取到1,但是取不到10
	if(score<0 || score>100)
	{
		printf("error\n");
	}
	else if(score>=90)//执行到这里,一定是前面条件为假
	{
		printf("A\n");
	}
	else if(score>=80)
	{
		printf("B\n");
	}
	else if(score>=70)
	{
		printf("C\n");
	}
	else if(score>=60)
	{
		printf("D\n");
	}
	else if(score>=0)
	{
		printf("E\n");
	}
	return 0;
}

4、进制

1. 进制表:

十进制: 逢十进一。 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

二进制: 逢二进一。 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 10000

C语言没有二进制常量的表示方式,二进制只在心中。因为没人爱看二进制常量。

八进制: 逢八进一。 00 01 02 03 04 05 06 07 010 011 012 013 014 015 016 017 020

十六进制:逢十六进一。 0x0 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8 0x9 0xa 0xb 0xc 0xd 0xe 0xf 0x10

前缀:

八进制,前缀为0 072 010

十六进制,前缀为 0x 0x82

十进制格式: %d

八进制格式: %o

十六进制格式:%x

int main()
{
    int a = 100;
    printf("%d %o %x\n", a, a, a);//输出是什么?
    //不同的进制,仅仅是同一个数据不同的显示形式。主要取决于我们开发者看什么样的进制方便。
    return 0;
};

2. 二进制转其他

二转十: 二进制每个位上的数,与其对应的权值相乘,再将对应的结果相加。得到的就是十进制的值 。

0110 1011 = 107

C语言基础day2_第5张图片

二转八: 二进制的每三位数,对应转换成八进制的一位数。

001 101 011 = 0153

二转十六:二进制的每四个数,对应转换成十六进制的一位数。

0110 1011 = 0x6B

练习:

将以下二进制数,转换成其他进制的值。

​ 010000111 010101000 00011100

十进制 135 168 28

八进制 0207 0250 034

十六进制 0x87 0xA8 0x1C

3. 其他进制转换二进制

十转二: 将十进制数,对二取余数,再将本次的商作为被除数继续对二取余,直到商为0时为止。将得到的余数,从后向前依次读出,即为转换的二进制数

八转二: 八进制每位数,对应转换成二进制的三位数。

十六转二: 十六进制的每位数,对应转换为二进制的四位数。

短除法:

135 / 2 = 67 …… 1

67 / 2 = 33 …… 1

33 / 2 = 16 …… 1

16 / 2 = 8 …… 0

8 / 2 = 4 …… 0

4 / 2 = 2 …… 0

2 / 2 = 1 …… 0

1 / 2 = 0 …… 1

1000 0111

练习:

将下列数转换成二进制

0xb6 1011 0110

0231 010 011 001

234 11101010

234/2 = 117…0

117/2 = 58…1

58/2= 29…0

29/2 = 14…1

14/2 = 7…0

7/2 = 3…1

3/2 = 1…1

1/2 = 0…1

进制总结:

各个进制,不影响整数在内存中的存储方式,内存中都是以二进制存储的。各个进制存在的意义是为了方便我们去阅读数据。

5、字符常量

1. 字符常量:

由单引号引起来的一个字符。

注意事项:

  1. 必须是单引号引起来的。不能是其他符号。 “a” `a` 反引号 ‘a’ 是字符常量,因为有单引号

  2. 只能是单个字符,不能是多个。 ‘a’ ‘ab’//语法错误

  3. 如果非要多于一个字符,转义字符是被允许的。 ‘\n’ ‘\0’ \b’

2. ascii 码

(ASCII(American Standard Code for Information Interchange,美国信息交换标准代码))

每个字符都有一个编号,这个编号就是 ascii 码。

ascii码表里有的字符,才叫字符。

使用手册查表: man ascii 按 q 退出

‘\0’ — 0

’ ’ — 32

‘0’ — 48 ‘9’ — 57

‘A’ — 65 ‘Z’ — 90

‘a’ — 97 ‘z’ — 122

字符在内存中是以整数形式存储的。

3. 示例:

字符型和整型的关系

#include  

int main()
{
	char a = 'A';
	printf("%c  %d\n",a ,a);// A  65
	return 0;
}

在C语言中,字符就是整数,字符存在的意义是为了让人类看着更舒服。对于计算机而言,字符都是整数。

每个字符在内存中都是以ascii表中对应的编码来存储的。

#include 

int main()
{
	char c = 'b';
	char c2 = 'o';
	char c3 = 'b';
	printf("%c%c%c\n", c, c2, c3);//以字符形式输出  bob
	printf("%d%d%d\n", c, c2, c3);//以整数形式输出  9811198
	return 0;
}

将数字字符转换成对应的整数

int main()
{
	char a = '9';//字符9不能当做整数9来运算
    //有些是后,我们需要将数字字符转换成对应的整数进行运算。
	int num = a-'0';//使用数字字符减去字符0,能够得到对应的整数
	int num2 = a-48;//减去48 也可以,因为48和字符0对于计算机而言是一样的。
	printf("%d %d\n", num, num2);// 9 9
	return 0;
}

练习:

输入一个字符,判定这个字符是否是大写字母。

#include 

int main()
{
	char input;
	scanf("%c", &input);
	if(input>='A' && input<='Z')
	{	
		printf("yes\n");
	}
	else
	{
		printf("no\n");
	}
	return 0;
}

作业1:

完成如下功能:

1 显示: “please input a number:”

2 用户输入

3 判断用户输入的数是不是 > 90

作业2:

判断一个数是否满足条件:

​ a) 是7的倍数

​ b) 不是3的倍数

​ 如果同时满足,输出该数

作业3:

输入某一时间,输出它的下一秒:(笔试编程题)

效果示例: 输入: 20 59 59

​ 输出: 21:0:0

存储的。

#include 

int main()
{
	char c = 'b';
	char c2 = 'o';
	char c3 = 'b';
	printf("%c%c%c\n", c, c2, c3);//以字符形式输出  bob
	printf("%d%d%d\n", c, c2, c3);//以整数形式输出  9811198
	return 0;
}

将数字字符转换成对应的整数

int main()
{
	char a = '9';//字符9不能当做整数9来运算
    //有些是后,我们需要将数字字符转换成对应的整数进行运算。
	int num = a-'0';//使用数字字符减去字符0,能够得到对应的整数
	int num2 = a-48;//减去48 也可以,因为48和字符0对于计算机而言是一样的。
	printf("%d %d\n", num, num2);// 9 9
	return 0;
}

练习:

输入一个字符,判定这个字符是否是大写字母。

#include 

int main()
{
	char input;
	scanf("%c", &input);
	if(input>='A' && input<='Z')
	{	
		printf("yes\n");
	}
	else
	{
		printf("no\n");
	}
	return 0;
}

作业1:

完成如下功能:

1 显示: “please input a number:”

2 用户输入

3 判断用户输入的数是不是 > 90

作业2:

判断一个数是否满足条件:

​ a) 是7的倍数

​ b) 不是3的倍数

​ 如果同时满足,输出该数

作业3:

输入某一时间,输出它的下一秒:(笔试编程题)

效果示例: 输入: 20 59 59

​ 输出: 21:0:0

要求,如果用户输入了错误的时间,退出 24点退出, 61秒退出

你可能感兴趣的:(C语言基础,c语言,开发语言,后端)