从零开始学习C语言

1、C概述

1.1、什么是C语言

自然语言:

  • 一提到语言这个词,自然会想到像英语、汉语等这样的自然语言
  • 自然语言是人和人交换信息不可缺少的工具

C语言:

  • C语言就是人和计算机交流的一种语言

自然语言和C语言的区别:

  • 自然语言是人和人交流,C语言是人和机器交流
  • 人可以不听另一个人说话,但是计算机必须无条件服从反馈信息
  • C语言有独特的语法规则和定义,双方必须遵循这些规则和定义才能实现真正的交流

1.2、语言发展历史

  • 机器语言
  • 汇编语言
  • 高级语言

 1.3、C语言的特点

优点:

    1、功能强大

          操作系统、嵌入式、动态库(dll和lib文件)、服务器、应用程序、外挂、其他语言等

    2、执行效率高

          C语言描述问题比汇编语言简练,而代码质量与汇编语言差不多

    3、可移植性强

          一个环境上用C语言编写的程序,不改动或者稍加改动,就可以移植到另一个完全不同的环境中进行运行

缺点:

    1、与C++相比,面向过程的封装性不好

    2、语法限制不太严谨,过于自由

1.4、编写C程序

1.4.1、环境搭建

1、下载软件

在百度搜索Visual Studio,选择如下图中的选项(2017,2019,2022版本都可以。

安装步骤同下)

进入Visual Studio官网后,选择下载Windows版(根据电脑系统安装对应的版本),并选择Community 2022社区版本进行下载(别的收费,这个免费)

保存软件到电脑中

2、安装软件

双击运行下载的安装文件,弹出安装界面

选择使用C++的桌面开发这一选项,如需其他,自行勾选

点击安装按钮

开始安装

安装成功后提示重启,点击重启,完成剩余配置

重启后,在开始菜单中就可以找到Visual Studio进行开发了

 1.4.2、第一个C程序

编写一个C程序总共分为4个步骤:

  • 创建项目
  • 创建文件
  • 编写代码
  • 运行程序

1、创建项目

Visual Studio是我们用来编写C程序的主要工具,先将它打开

2、创建文件

右键源文件,选择添加->新建项

 给C文件起个名称,然后点击添加即可

3、编写程序

#include<stdio.h>
#include<stdlib.h>

int main()
{
	printf("Hello World!\n");

    system("pause");

	return 0;
}

4、运行程序

 1.4.3、程序的注释

作用:在代码中加一些说明和解释,方便自己或其他程序员阅读代码 

两种格式:

1、单行注释://描述信息

  • 通常放在一行代码的上方,或者一条语句的末尾,对该行代码进行说明

2、多行注释:/*描述信息*/

  • 通常放在一段代码的上方,对该段代码做整体说明

提示:编译器在编译代码时,会忽略注释的内容

1.4.4、程序框架介绍 

//导入一个文件 stdio.h std是一个标准库 i input o output 标准输入输出库 .h表示头文件
#include<stdio.h>
//int 数据类型 整型 如果出现在函数中表示函数的返回值
//main 程序的主函数 程序有且只有一个主函数 ()里表示函数的参数 函数的参数可以有零个,一个或多个,如果有多个,中间用逗号分隔
int main()
{
	//{} 函数体 代码体 程序体 实现的内容
	//printf是stdio.h中系统提供的函数 表示在标准输出设备上打印字符串
	//""称为字符串:里边存放想要输出的内容
	printf("Hello World!\n");
	//\n是一个转义字符,表示换行
	//return 如果出现在其他函数中表示函数结束 如果出现在main函数中表示程序结束
	//0表示函数的返回值 要和函数返回值类型对应
	//有些程序返回值是EXIT_SUCCESS,含义和返回值0是一样的
	return 0;
}

1、include头文件包含

  • #include的意思是头文件包含,#include<stdio.h>代表包含stdio.h这个头文件
  • 使用C语言库函数需要提前包含库函数对应的头文件,如上方这段代码中使用了printf()函数,需要包含stdio.h头文件

2、main函数

  • 一个完整的C语言程序,有且仅有一个main()函数(又称主函数)
  • 其他若干个函数结合而成(可选)
  • main函数是C语言程序的入口,程序是从main函数开始执行的

3、{}括号,程序体和代码块

  • { }叫代码块,一个代码块内部可以有一条或多条语句
  • C语言每句可执行代码都是;(英文半角分号)结尾
  • 所有的#开头的行,都代表预编译指令,预编译指令行结尾是没有分号的
  • 所有的可执行语句必须是在代码块里面

4、printf函数

  • printf是C语言库函数,功能是向标准输出设备输出一个字符串
  • 写法:printf(“Hello World\n”);  \n的意思是回车换行

5、return语句

  • return代表函数执行完毕,返回return代表函数的终止
  • 如果main定义的时候前面是int,那么return后面就需要写一个整数
  • 在main函数中return 0代表程序执行成功,return后接其他整数都算执行失败。

1.5、system函数

功能:在已经运行的程序中执行另外一个外部程序

示例:

#include<stdlib.h>

int main()
{
	//cmd命令 calc计算器 notepad记事本 mspaint画图板
	//system可以打开一个外部的应用程序 如果带路径 需要使用\\或者/
	system("calc");
	/*
	int value;
	value = system("C:/Desktop/EVCapture.exe")
	printf("%d\n",value);
	*/
	//%d是一个占位符,表示输出一个整型数据
	//成功返回0,失败返回任意一个数
	return 0;
}

1.6、常用快捷键

 Ctrl+(C、V、S、A)这些你们都懂,就不一一列举了

1.7、C4996错误警告

VS建议采用带_s的函数,如scanf_s,strcpy_s,sprintf_s,但这些并不是标准C函数

#include<stdio.h>
int main()
{
	int i;
	scanf("%d", &i);
	printf("%d", i);
	return 0;
}

使用标准C函数的时候,会出现C4996的错误提示,类似如下

解决方法:

  • #define _CRT_SECURE_NO_WARNINGS(加在代码最上方)
  • #pragma warning(disable 4996) (加在代码最上方)
  • 项目右击->属性->C/C++->预处理器->预处理定义->编辑->加入宏定义_CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
int main()
{
	int i;
	scanf("%d", &i);
	printf("%d", i);
	return 0;
}

2、数据类型

2.1、变量

变量就是在程序运行期间可以改变的量

作用:给一段指定的内存空间起名,方便操作这段内存

语法:数据类型 变量名 = 初始值

#include<stdio.h>

int main()
{
	//int 数据类型  a,b 变量名  3,4 变量值
	int a = 3;
	int b = 4;

    //c是变量名 a+b是变量值
    //注:程序需提前给a,b赋值,否则报错
	int c = a + b;

	printf("%d\n", c);
	return 0;
}

 变量的定义与声明:

2.2、常量

作用:用于记录程序中不可更改的数据

C语言中的常量大概有以下五种表现形式:

1、数值常量(整数型常量(整数,如:1,2,3)、实数型常量(小数,如3,14))

2、字符常量:’a’,’b’,’\n’

3、字符串常量:”hello world”

4、(重点#define宏常量:#define 变量名 常量值

通常在文件上方定义,表示一个常量

5、(重点)const修饰的变量:const 数据类型 常量名 = 常量值

通常在变量定义前加关键字const,修饰该变量为常量,不可更改

示例:

注:%.2f表示只保留小数点后2位,区分%2f,%2f是整数位和小数位都保留2位 

#include<stdio.h>
/*
第二种定义方式
宏定义常量(注意:没有=,也没;)
#define 常量名 值
*/
#define PI 3.141592

//圆的面积: s = pi * r * r;
//圆的周长: l = 2 * pi * r;
void main()
{
	//常量pi
	/*
	第一种定义方式
	const 数据类型 常量名 = 值
	const float pi = 3.141592;
	*/
	//在定义局部变量可以在数据类型前加修饰auto,也可以不加
	auto float r = 2;
	float s = PI * r * r;
	float l = 2 * PI * r;
	//占位符%f:表示输出一个浮点型float,默认保留六位小数,可四舍五入
	printf("圆的面积为:%.2f\n", s);
	printf("圆的周长为:%f\n", l);
}

2.3、关键字

作用:关键字是C中预先保留的单词(标识符)

  • 在定义变量或者常量时,不能使用关键字

C关键字如下:

 提示:在给变量或者常量起名的时候,不要用其中的关键字,否则会产生歧义

2.4、标识符命名规则

作用:C语言规定给标识符(变量、常量)命名时,有一套自己的规则

  • 标识符不能是关键字
  • 标识符只能由字母、数字、下划线组成
  • 第一个字符必须为字母或下划线
  • 标识符中字母区分大小写

建议:给标识符命名时,争取做到见名知意的效果,方便自己和他人阅读

2.5、整型

C语言规定在创建一个变量或者常量时,必须要指定出相应的数据类型,否则无法给变量分配内存

作用:整型变量表示的是整数类型的数据

C语言中能够表示整型的类型有以下几种方式,区别在于所占内存空间不同:

示例:

 1、

//整型变量
int a = 10;
//短整型变量
short b = 20;
//长整型变量
long c = 30;
//长长整型变量
long long d = 40;

//占位符%d:表示输出一个整型数据
printf("%d\n", a);
//占位符%hd:表示输出一个短整型数据
printf("%hd\n", b);
//占位符%ld:表示输出一个长整型数据
printf("%ld\n", c);
//占位符%lld:表示输出一个长长整型数据
printf("%lld\n", d);

2、

//数据类型 标识符 = 值
//无符号  unsigned  有符号  signed(可以省略)

signed int b = -10;
printf("%d\n", b);

//%u:占位符,表示输出一个无符号十进制整型数据
unsigned int a = -10;
printf("%u\n", a);

 无符号整数,输入一个负数,导致数字溢出,出现乱码

3、

//进制数转换
//二进制0-1.八进制0-7.十六进制0-9.10-15(a-f,A-F)
int a = 10;
printf("%d\n", a);
//%o:占位符,表示输出一个八进制整型
printf("%o\n", a);
//%x:占位符,表示输出一个十六进制整型
printf("%x\n", a);
printf("%X\n", a);

//定义八进制数据,以0开头
int b = 0123;
printf("%d\n", b);
printf("%o\n", b);
printf("%x\n", b);
printf("%X\n", b);

//定义十六进制数据,以0x开头
int c = 0xabc;
printf("%d\n", c);
printf("%o\n", c);
printf("%x\n", c);
printf("%X\n", c);

2.6、sizeof关键字

作用:利用sizeof关键字可以统计数据类型所占内存大小

语法:sizeof(数据类型/变量)

示例:

//整型变量
int a = 10;
//短整型变量
short b = 20;
//长整型变量
long c = 30;
//长长整型变量
long long d = 40;

//sizeof:计算数据类型在内存中占的字节(Byte)大小
//sizeof(数据类型) sizeof(变量名) sizeof 变量名【不推荐这种】

printf("整型:%d\n", sizeof(a));
printf("短整型:%d\n", sizeof(b));
printf("长整型:%d\n", sizeof(c));
printf("长长整型:%d\n", sizeof(d));

2.7、字符型

作用:字符型变量用于显示单个的字符

语法:char ch = ‘a’

注意1:在显示字符型变量时,用单引号将字符括起来,不要用双引号

注意2:单引号内只能有一个字符,不可以是字符串

  • C语言中字符型变量只占用1个字节
  • 字符型变量并不是把字符本身放到内存中存储,而是将对应的ASCII编码放入到存储单元(ASCII码表百度自行搜索)

ASCII码大致由以下两部分组成:

  • ASCII非打印控制字符:ASCII表上的数字0-31分配给了控制字符,用于控制像打印机等一些外围设备
  • ASCII打印字符:数字32-126分配给了能在键盘上找到的字符,当查看或打印文档时就会出现

示例:

1

//字符型变量
char ch = 'a';

//打印字符变量
printf("%c\n", ch);

//unsigned int len = sizeof(ch)  别勿把%d当成%c
printf("字符型大小为:%d\n", sizeof(ch));

2、

char ch1 = 'a';
char ch2 = 'A';
//转换成整型来进行字符型的相加减(字符型对应的数是ASCII码)
printf("%d\n", ch1 - ch2);

3、

char ch;
scanf("%c", &ch);
printf("%c\n", ch - 32);

2.8、浮点型 

作用:用于表示小数

浮点型变量分为两种:1、单精度float 2、双精度double

两者的区别在于表示的有效数字范围不同:

示例:

1、

float a = 3.14;
double b = 3.14;

//默认保留小数点后6位,不足位数补0
printf("%f\n", a);
//.2表示保留小数点后2位
printf("%.2f\n", a);
printf("%lf\n", b);

//浮点型数据:存储在内存中的格式分为符号位,指数位,小数位
printf("%d\n", sizeof(a));
printf("%d\n", sizeof(b));

2、

float a, b, c;
//科学计数法
a = 3.2e3f;//3.2*10^3=3200,e可以写成E
printf("a=%f\n", a);

b = 100e-3f;//100*10^-3=0.1
printf("b=%f\n", b);

c = 3.1415926f;//结果为3.141593(%f默认保留小数点后6位)
printf("c=%f\n", c);

注:默认小数是double数据类型,在小数后加入f变为float数据类型

2.9、字符串 

作用:用于表示一串字符

示例:

//双引号引起来的内容,称为字符串常量
printf("%s\n", "hello world");//双引号引起来的内容中会带着字符串的结束标志 \0

//双引号会返回字符串首字母的地址编号,从0开始,意思是第一个字符的位置其实是地址0
	
printf("sizeof = %d\n", sizeof("hello world"));//为什么占了12位?hello占5位,空格占1位,world占5位,\0占1位

printf("%s\n", "hello\0world");

printf("%s\n", "\0hello world");

2.10、数据的输入

作用:用于从键盘获取数据

语法:scanf(“格式化占位符”,输入数据地址);

注:取地址符:&

示例:

1、

int number;
printf("请输入一个数:");
scanf("%d", &number);
printf("这个数是:%d\n", number);

2、

char number;
printf("请输入一个字符:");
scanf("%c", &number);
printf("这个数是:%c\n", number);

3、

float number1;
printf("请输入一个小数:");
scanf("%f", &number1);
printf("这个数是:%f\n", number1);

getchar();//从缓冲区获得一个字符

double number2;
printf("请输入一个小数:");
scanf("%lf", &number2);
printf("这个数是:%lf\n", number2);

注:假如不输入getchar()函数,当输入第一个数以后,敲下回车,回车会被默认送入到第二个需要输入的数当中,这样就会导致输入错误,而getchar()就相当于把回车给获取,存入到函数里边,这样就可以输入第二个数了。

4、字符串后续会继续声明,在这稍作了解即可

char a[100]="";
printf("请输入一个字符串:");
scanf("%s", a);//""本身返回的就是字符串首字母的地址,说明a在这本身就是个地址,所以不需要取地址符
printf("这个数是:%s\n", a);

3、运算符 

作用:用于执行代码的运算

3.1、算术运算符

作用:用于处理四则运算

算术运算符包括以下符号:

3.1.1、加减乘除

示例:

int a = 10;
int b = 8;

printf("a + b = %d\n", a + b);//18
printf("a - b = %d\n", a - b);//2
printf("a * b = %d\n", a * b);//80
printf("a / b = %d\n", a / b);//1 两个整型数据相除,结果依然是整型数据

int a1 = 10;
int b1 = 20;
printf("a1 / b1 = %d\n", a1 / b1);//0

//两个小数之间可以做除法运算
double a2 = 0.5;
double b2 = 0.25;
printf("a2 / b2 = %.0f\n", a2 / b2);//2 小数点后保留0位

//错误案例
//int a3 = 10;
//int b3 = 0;
//printf("a3 / b3 = %d\n", a3 / b3);//error 被除数不能为0

3.1.2、取模运算

示例:

int i1 = 10;
int i2 = 20;
printf("i1 %% i2 = %d\n", i1 % i2);//C语言中取余的表现形式是%%,运算是%,区别表示形式和做取余运算

int i3 = 10;
int i4 = 3;
printf("i3 %% i4 = %d\n", i3 % i4);

/*
int i5 = 10;
int i6 = 0;
printf("i5 %% i6 = %d\n", i5 % i6);//被除数不能为0
*/
	
/*
double d1 = 0.25;
double d2 = 0.2;
printf("d1 %% d2 = %f\n", d1 % d2);//error:表达式必须包含整型
*/

3.1.3、 递增递减运算符

示例:

//后置递增
int a = 10;
a++;
printf("%d\n", a);

//前置递增
int b = 10;
++b;
printf("%d\n", b);

作为独立语句,前置和后置没有区别,但是当进行混合运算时,既能看出前置和后置加减的区别,接下来用代码演示区别。

区别:

//前置++:先对变量进行++,在计算表达式
int a1 = 10;
int b1 = ++a1 * 10; //算法思想:先计算a1 = a1 + 1,再计算b1 = a1 * 10
printf("a1 = %d\n", a1);
printf("b1 = %d\n", b1);

//后置++:先计算表达式,在对变量进行++
int a2 = 10;
int b2 = a2++ * 10; //算法思想:先计算b2 = a2 * 10, 再计算a2 = a2 + 1
printf("a2 = %d\n", a2);
printf("b2 = %d\n", b2);

递减的用法和递增完全一样。

示例:

//后置递减
int a = 10;
a--;
printf("%d\n", a);

//前置递增
int b = 10;
--b;
printf("%d\n", b);

//前置--:先对变量进行--,在计算表达式
int a1 = 10;
int b1 = --a1 * 10; //算法思想:先计算a1 = a1 - 1,再计算b1 = a1 * 10
printf("a1 = %d\n", a1);
printf("b1 = %d\n", b1);

//后置--:先计算表达式,在对变量进行--
int a2 = 10;
int b2 = a2-- * 10; //算法思想:先计算b2 = a2 * 10, 再计算a2 = a2 - 1
printf("a2 = %d\n", a2);
printf("b2 = %d\n", b2);

3.2、赋值运算符

作用:用于将表达式的值赋给变量

赋值运算符包括以下几个符号:

//赋值运算:将等号右边的值,赋值给等号左边的变量
int a = 10;//初始化
a = 100;//赋值运算
printf("a = %d\n", a);

// +=
a = 0;
a += 2;//相当于a = a + 2
printf("a = %d\n", a);

// -=
a = 5;
a -= 3;//相当于a = a - 3
printf("a = %d\n", a);

// *=
a = 2;
a *= 2;//相当于a = a * 2
printf("a = %d\n", a);

// /=
a = 4;
a /= 2;//相当于a = a / 2
printf("a = %d\n", a);

// %=
a = 3;
a %= 2;//相当于a = a % 2
printf("a = %d\n", a);

注意事项:在做如上的几种赋值运算时,等号右边的表达式一定要看成一个整体

示例:

int num = 10;
num *= 3 + 5;//相当于num = num * (3 + 5)
printf("num = %d\n", num);

3.3、比较运算符

作用:用于表达式的比较,并返回一个真值或假值

比较运算符有以下符号:

示例:

int a = 3;
int b = 4;

printf("a == b  %d\n", a == b);//区分:等号是赋值,两个等号是比较
printf("a != b  %d\n", a != b);
printf("a < b  %d\n", a < b);
printf("a > b  %d\n", a > b);
printf("a <= b  %d\n", a <= b);
printf("a >= b  %d\n", a >= b);

注意:C语言的比较运算符中,“真”用数字“1”来表示,“假”用数字“0”来表示。

3.4、逻辑运算符

作用:用于根据表达式的值返回真值或假值

逻辑运算符有以下符号:

3.4.1、逻辑非

逻辑非用一句话概括就是真变假,假变真。

切记非零都为真!!!

示例:

int a = 10;
printf("!a = %d\n", !a);
printf("!!a = %d\n", !!a);

printf("%d\n", !100);
printf("%d\n", !!100);
printf("%d\n", !-100);

3.4.2、逻辑与 

八字真言:同真为真,其余为假

示例:

int a = 10;
int b = 20;
printf("a && b = %d\n", a && b);

a = 10;
b = 0;
printf("a && b = %d\n", a && b);

a = 0;
b = 10;
printf("a && b = %d\n", a && b);

a = 0;
b = 0;
printf("a && b = %d\n", a && b);

重要知识点:

//注意:短路特性:只有表达式1为真,才会去判断表达式2
3 > 4 && printf("hello1");
3 < 4 && printf("hello2");

3.4.3、逻辑或 

八字真言:同假为假,其余为真

示例:

int a = 10;
int b = 20;
printf("a || b = %d\n", a || b);

a = 10;
b = 0;
printf("a || b = %d\n", a || b);

a = 0;
b = 10;
printf("a || b = %d\n", a || b);

a = 0;
b = 0;
printf("a || b = %d\n", a || b);

重要知识点:

//注意:短路特性:只有表达式1为假,才会去判断表达式2
3 > 4 || printf("hello1");
3 < 4 || printf("hello2");

3.5、运算符优先级

在一些表达式中,可能会出现多个运算符同时出现,此时运算符的优先级尤为重要

下图中是C语言运算符的优先级:

  • 表中优先级号越小,优先级越高
  • 同一优先级中,看结合性

说明:
同一优先级的运算符,运算次序由结合方向所决定。

简单记就是:!> 算术运算符 > 关系(比较)运算符 > && > || > 赋值运算符

示例:

int a = 10;
printf("%d\n",++a * 10);//递增递减运算符的优先级高于乘

int a = 10;
printf("%d\n", a = 23 > 24);//比较运算符优先级大于赋值运算符,所以先判断23是否大于24,在将结果赋值给a

printf("%d\n", 1 || 1 && 0);//逻辑与的优先级高于逻辑或

int a = 10;
//同一级别的运算符,要看结合性,结合方向从右向左
a += a -= a *= a /= 5;// a = a/5 = 10/5 = 2;a = a*2 = 2*2 = 4;a = a-4 = 4-4 = 0;a = a+0 = 0+0 = 0
printf("a = %d\n", a);

int num = 0;
num = 1, 2, 3, 4;
printf("num = %d\n", num);//赋值运算符高于逗号运算符,num赋值给1,逗号后边的数就没有意义

num = (1, 2, 3, 4);
printf("num = %d\n", num);//括号的优先级高于赋值,所以先看括号内,逗号运算符的结合方向是从左向右,返回右边最后一个数

4、 程序流程结构

C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构

  • 顺序结构:程序按顺序执行,不发生跳转
  • 选择结构:依据条件是否满足,有选择的执行相应功能
  • 循环结构:依据条件是否满足,循环多次执行某段代码

4.1、选择结构 

4.1.1、if语句

作用:执行满足条件的语句

if语句的三种形式:

  • 单行格式if语句
  • 多行格式if语句
  • 多条件的if语句

1、单行格式if语句:if(条件){条件满足执行的语句}

示例:如果输入的数据大于600,说明考上了一本院校,进行输出。

int score = 0;

printf("请输入你的分数:");

scanf("%d", &score);

printf("你的分数为%d\n", score);

if (score > 600)
{
	printf("恭喜你,考上了一本院校!");
}

注意:if条件表达式后不要加分号

2、多行格式if语句:if(条件){条件满足执行的语句}else{条件不满足执行的语句}

示例:如果输入的数据大于600,说明考上了一本院校,进行输出。否则说明没有考上一本院校。

int score = 0;

printf("请输入你的分数:");

scanf("%d", &score);

printf("你的分数为:%d\n", score);

if (score > 600)
{
	printf("恭喜你,考上了一本院校!\n");
}
else
{
	printf("不好意思,没有考上。\n");
}

3、多条件的if语句:if(条件1){条件1满足执行的语句}else if(条件2){条件2满足执行的语句}…else{都不满足执行的语句}

示例:如果分数大于600分,说明考上了一本院校,如果大于500分但是低于600分,说明考上了二本院校,如果大于400分但是低于500分,说明考上了三本院校,如果小于等于400分,说明没有考上。

int score = 0;

printf("请输入你的分数:");

scanf("%d", &score);

printf("你的分数为:%d\n", score);

if (score > 600)
{
	printf("恭喜你,考上了一本院校!\n");
}
else if (score > 500)
{
	printf("恭喜你,考上了二本院校!\n");
}
else if (score > 400)
{
	printf("恭喜你,考上了三本院校!\n");
}
else
{
	printf("不好意思,没有考上。\n");
}

嵌套if语句:在if语句中,可以嵌套使用if语句,达到更精确的条件判断

案例需求:

  • 提示用户输入一个高考考试分数,根据分数做如下判断
  • 分数如果大于600分视为考上一本,大于500分考上二本,大于400分考上三本,其余视为未考上本科
  • 在一本分数中,如果大于700分,考入北大;大于650分,考入清华;大于600分,考入人大。

示例:

int score = 0;

printf("请输入你的分数:");

scanf("%d", &score);

printf("你输入的分数为:%d\n", score);

if (score > 600)
{
	printf("恭喜你,考上了一本院校\n");
	if (score > 700)
	{
		printf("考入北大\n");

	}
	else if (score > 650)
	{
		printf("考入清华\n");
	}
	else
	{
		printf("考入人大\n");
	}
}
else if (score > 500)
{
	printf("恭喜你,考上了二本院校\n");
}
else if (score > 400)
{
	printf("恭喜你,考上了三本院校\n");
}
else
{
	printf("不好意思,你没有考上本科\n");
}

if语句的注意事项:

1、不要在if语句后面加分号

区别:

//第一种情况:不带分号
int a = 10;
int b = 20;
if (a > b)
{
	printf("a > b");
}

//第二种情况:带分号
int a = 10;
int b = 20;
if (a > b);
{
	printf("a > b");
}

可以看出,不加分号的时候,if语句正常执行,只有a大于b,才会输出;但是在if语句后面加了分号,就会导致,不管a大于b这个判断是否成立,下边的语句都会执行。

2、if语句实现体中如果不加{},只能识别最近的一行代码

int a = 10;
int b = 20;
if (a > b)
	printf("a > b\n");
	printf("a > b   a > b\n");

可以看出,距离if语句最近的是输出a>b,但是条件不成立,所以不输出;但是最后一行的printf不归if语句所掌控,它自己输出出来,其实相当于下面这行代码:

int a = 10;
int b = 20;
if (a > b)
	printf("a > b\n");
printf("a > b   a > b\n");

接下来,做个比较:

int a = 10;
int b = 20;
if (a < b)
	printf("a < b\n");
	printf("a > b   a > b\n");

这回可以看出,if条件成立的情况下,打印输出最近的一条语句,即a<b;同理,最后一行不归if语句管,所以自行输出。

3、对比的时候,不要写成=,应该是==(这个需要特别

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值