C语言基础学习(Day3)
笔者有话说:紧接上期预备知识,第三天继续编写C语言相关知识,今天学习的主要内容是C语言中的选择执行,依旧用通俗易懂的语言带领小白15天掌握C语言基本知识,打卡第三天~
基础知识
1、基本输入与输出函数的用法
(1)输出——printf()——将变量的内容输出到显示器上
四种用法:
①printf(“字符串\n”);
#include<stdio.h>
int main(void)
{
printf("Hello!\n"); //"\n"——转义字符,表示换行
return 0;
}
②printf(“输出控制符”, 输出参数);
#include<stdio.h>
int main(void)
{
int i = 10;
printf("%d\n",i); //%d是输出控制符,i为输出参数
return 0;
}
Tip:d代表以十进制输出
③printf(“输出控制符1 输出控制符2 …”, 输出参数1, 输出参数2, …);
#include<stdio.h>
int main(void)
{
int i = 2;
int j = 4;
printf("%d %d\n", i, j); //%d是输出控制符,i为输出参数
return 0;
}
Tip:输出控制符与输出参数的个数必须一一对应
④printf(“输出控制符 非输出控制符”, 输出参数);
输出控制符包含如下:%d %ld %c %f %lf %x 或 %X 或 %#X %o
另外:%x在调试中的使用较为重要,因此需要掌握printf中%x及其相关的用法
int x = 47; //100前没有加0、0x或0X,表示100为十进制
#include<stdio.h>
int main(void)
{
int x = 47;
printf("%x\n", x); //输出结果为2f
printf("%X\n", x); //输出结果为2F
printf("%#x\n", x); //输出结果为0x2f
printf("%#X\n", x); //输出结果为0X2F
return 0;
}
Tip:%#X推荐使用!——可以一目了然看出输出结果为十六进制
输出控制符把参数以其规定的格式输出,而非输出控制符则以原样输出
例如:
#include<stdio.h>
int main(void)
{
int i = 4;
int j = 9;
printf("i = %d, j = %d/n", i, j);
return 0;
}
输出结果:i = 4, j = 9
说明:为什么需要输出控制符?
①0、1组成的代码可以表示数据也可以表示指令
②如果0、1组成的代码表示的是数据,同样的0、1代码组合以不同的输出格式输出,会有不同的输出结果
(2)输入——scanf()——通过键盘将数据输入到变量中
①scanf(“输入控制符”, 输入参数);
功能:将从键盘输入的字符转化为输入控制符所规定格式的数据,存入以输入参数的值为地址的变量中。
举例:
#include <stdio.h>
int main(void)
{
int i;
scanf("%d", &i);
printf("i = %d\n", i); //&i表示i的地址,&表示取地址符
return 0;
}
②scanf(“非输入控制符 输入控制符”, 输入参数);
Tip:非输入控制符必须原样输出
举例:
#include <stdio.h>
int main(void)
{
int i;
scanf("mm%d", &i); //mm为非输入控制符 %d为输入控制符
printf("i = %d\n", i);
return 0;
}
mm123为正确输入,而123为非法的输入
③scanf(”输入控制符1 输入控制符2 …", 输入参数1, 输入参数2, … );
一次给多个变量键盘赋值
```c
#include <stdio.h>
int main(void)
{
int i, j, k;
scanf("%d, %d, %d", &i, &j, &k);
printf("i = %d, j = %d, k = %d\n", i, j, k);
return 0;
}
Tip:","为非输入控制符,要原样输入,才能保证是合法输入
④如何使用scanf编写出高质量代码?
使用scanf前最好先使用printf提示用户以什么样的方式来输入;
scanf中尽量不要使用非控制符,尤其不要使用\n。
⑤编写代码对scanf中用户的非法输入做适当处理
while ( (ch = getchar()) != ‘\n’ )
continue;
——此处用到循环语句,后期深入学习
#include <stdio.h>
int main(void)
{
int i,j;
char ch;
scanf("%d", &i);
printf("i = %d\n", i);
//......
while ( (ch = getchar()) != '\n')
continue;
scanf("%d", &j);
printf("j = %d\n", j);
return 0;
}
2、运算符
(1)算术运算符:+ - * /(除) %(取余)
(2)关系运算符:> >= < <= !=(不等于) ==(等于)
(3)逻辑运算符:!(非) &&(并且) ||(或者)
(4)赋值运算符:= += -= *= /=
(5)优先级别:算术 > 关系 > 逻辑 > 赋值
注意:
①除法运算中,运算结果与运算对象的数据类型有关,两个数都为整数,则商为int,若商中有小数,则截取整数部分;被除数和除数中只要有一个或者两个为浮点型数据,则商也是浮点型数据,不截取小数部分。
②取余的运算对象必须是整数,结果是整除后的余数,其余数的符号与被除数相同,例如:13%-3=1, -13%3=-1, -13%3=-1。
③C语言对真假的处理:非零是真,零是假,真用1表示,假用0表示。
#include<stdio.h>
int main(void)
{
int i = 1;
int j = 2;
int k = 3;
int m;
//m = (3>2) && (k = 8); //=表示赋值 ——m为1, k为8
//m = (3>2) && (k = 0); //m为0, k为0
m = (2>3) && (k = 20); //m为0, k为3
//不含有";"的是表达式,含有";"的是语句
printf("m = %d, k = %d", m, k);
}
若&&左边为假,右边的表达式肯定不会执行;
若||左边为真,右边的表达式肯定不会执行。
3、流程控制
(1)什么是流程控制
程序代码执行的顺序
(2)流程控制的分类
①顺序执行(按顺序从上往下执行)
②选择执行(选择性执行某部分代码)
③循环执行(反复执行某部分代码)
4、选择——选择执行
某些代码可能执行,也可能不执行,有选择地执行某些代码。
(1)if
①简单方法
格式:
if (表达式)
语句
#include <stdio.h>
int main(void)
{
if (3)
printf("AAAA\n"); //会输出
if (0)
printf("BBBB\n"); //不会输出
if (0 == 0)
printf("CCCC\n"); //表达式为真,会输出
return 0;
}
输出结果为:
AAAA
CCCC
功能:
如果表达式为真,执行语句;
如果表达式为假,不执行语句。
②if的范围问题
格式一:
if(表达式)
语句A;
语句B;
#include <stdio.h>
int main(void)
{
if(1>2)
printf("AAAA\n");
printf("BBBB\n");
return 0;
}
输出结果为:BBBB
说明一:if默认只能控制语句A的执行或不执行,无法控制语句B的执行或不执行(或者说:语句B一定会执行)。
格式二:
if(表达式)
{
语句A;
语句B;
}
#include <stdio.h>
int main(void)
{
if(1>2)
{
printf("AAAA\n");
printf("BBBB\n");
}
printf("CCCC\n");
return 0;
}
输出结果为:CCCC
说明二:此时if可以控制语句A和语句B
综上所述:if默认只能控制一个语句的执行或不执行,如果想控制多个语句的执行或不执行就必须把这些语句用{}括起来。
③if…else…与if…else if…else
格式:
if (1)
A;
else if (2)
B;
else if (3)
C;
else
D;
说明:如果1成立,则执行A;如果1不成立2成立,则执行2;如果1、2不成立3成立,则执行C;如果1、2、3都不成立,则执行D。
#include <stdio.h>
int main(void)
{
double delta = 3;
if (delta > 0)
printf("有两个解\n");
else if (delta == 0)
printf("有唯一解\n");
else
printf("无解\n");
return 0;
}
输出结果:有两个解
④C语言对真假的处理
非零是真,零是假;
真用1表示,假用0表示。
⑤实例
源代码:
#include <stdio.h>
int main(void)
{
float score;
scanf("%f", &score);
if (score > 100)
printf("你在做梦!\n");
else if (score >= 90 && score <= 100) //不能写成90<=score<=100
printf("优秀\n");
else if (score >= 80 && score <= 90)
printf("良好\n");
else if (score >= 60 && score <= 80)
printf("及格\n");
else if (score >= 0 && score <= 60)
printf("不及格\n");
else
printf("输入的分数过低,请不要如此自卑。\n");
return 0;
}
⑥互换两个数字
错误示范:
#include <stdio.h>
int main(void)
{
int i = 3;
int j = 5;
//以下两行无法完成i、j的互换
i = j; //j = 5 => i = 5
j = i; //i = 5 => j = 5
printf("i = %d, j = %d\n", i, j);
return 0;
}
输出结果:i = 5, j = 5
正确方法:
#include <stdio.h>
int main(void)
{
int i = 3;
int j = 5;
//以下方法正确实现i、j的互换
int k;
k = i;
i = j;
j = k;
printf("i = %d, j = %d\n", i, j);
return 0;
}
输出结果:i = 5, j = 3
⑦对任意三个数字进行排序
#include <stdio.h>
int main(void)
{
int a, b, c;
int t;
printf("请输入三个整数(中间以空格分隔):\n");
scanf("%d %d %d", &a, &b, &c);
//编写代码进行排序
if (a < b)
{
t = a;
a = b;
b = t;
}
if (a < c)
{
t = a;
a = c;
c = t;
}
if (b < c)
{
t = b;
b = c;
c = t;
}
printf("%d > %d > %d\n", a, b, c);
return 0;
}
⑧看懂一个程序的三个步骤
梳理流程;
弄懂每个语句的功能;
不断试数。
(2)switch
——较少使用,后期深入学习