您现在的位置是:首页 >技术杂谈 >2023-04-16 学习记录--C/C++-邂逅C/C++网站首页技术杂谈
2023-04-16 学习记录--C/C++-邂逅C/C++
一、固定格式 ⭐️
stdio
的理解: abbr.标准输入输出(standard input/output
)。
#include <stdio.h>
int main()
{
... // 表达式
return 0;
}
二、printf
语句(输出语句) ⭐️
(一)、前提【重要】
注意:对于最后一个输出的语句,必须在后面加上
(
换行符
),不然输出结果后面会默认加个%
,如下举例:??
1、不推荐写法 ❎
#include <stdio.h>
int main()
{
printf("我们来学习C/C++呀"); // 我们来学习C/C++呀%【注意:对于最后一个输出的语句,必须在后面加上
(换行符),不然输出结果后面会默认加个%】
return 0;
}
#include <stdio.h>
int main()
{
printf("我们来学习");
printf("C/C++呀"); // 我们来学习C/C++呀%【注意:对于最后一个输出的语句,必须在后面加上
(换行符),不然输出结果后面会默认加个%】
return 0;
}
2、推荐写法 ✅
#include <stdio.h>
int main()
{
printf("我们来学习C/C++呀
"); // 加上换行符
return 0;
}
#include <stdio.h>
int main()
{
printf("我们来学习");
printf("C/C++呀
"); // 加上换行符
return 0;
}
(二)、换行符(
)
:
next line
,表示换行操作,光标移动到下一行。
#include <stdio.h>
int main()
{
printf("我们来学习
C/C++呀
");
return 0;
}
#include <stdio.h>
int main()
{
printf("我们来学习
");
printf("C/C++呀
");
return 0;
}
(三)、制表符(
)
:
tab
,表示水平制表空行操作,相当于键盘上的Tab键,不会换行。
#include <stdio.h>
int main()
{
printf("我们来学习 C/C++呀
");
return 0;
}
#include <stdio.h>
int main()
{
printf("我们来学习 ");
printf("C/C++呀
");
return 0;
}
(四)、回车符(
)
:
return
,表示回车操作,光标回到本行首位置,不会换行;
三、int
、float
、double
、char
型数据 ⭐️
int
:整数型,用于定义整数类型的数据;int a = 3;
float
:单精度浮点型,能准确到小数点后六位;float a = 3.14;
double
:双精度浮点型,能准确到小数点后十二位;double a = 3.14;
char
:字符型,用于定义字符类型的数据。char a = 'A';
【注意:单引号】
四、用printf
语句输出int
、float
、double
、char
型数据 ⭐️
- 整数型(
int
):%d
- 单精度浮点型、双精度浮点型(
float
、double
):%f
- 字符型(
char
):%c
#include <stdio.h>
int main()
{
/** 使用变量前必须先定义 */
int a = 5, b;
double c = 3.14, d;
char e = 'E', f;
/** 计算 */
b = a % 2; // 求余数 5%2=1
d = c * 2; // 6.280000
f = e + 32; // 'e' 【ASCII码表中,大写字母在前,小写字母在后;大写字母与小写字母的ASCII码值相差32:大写字母+32=小写字母,小写字母-32=大写字母】
/** 输出结果 */
printf("b的值为%d
", b); // int -> %d
printf("d的值为%f
", d); // double -> %f
printf("f的值为%c
", f); // char -> c%【对于最后一个输出的语句,必须在后面加上
(换行符)】
return 0;
}
补充知识点:?
ASCII
码表中,大写字母在前,小写字母在后;- 大写字母与小写字母的ASCII码值相差
32
:大写字母+32=小写字母,小写字母-32=大写字母。
五、用scanf
语句输入int
、float
、double
、char
型数据 ⭐️
1、作用 ?:
scanf
语句是让用户输入内容。
2、举例 ?:(让用户输入两个整数型变量:a,b
)
int a,b;
// 自定义整数型变量a bscanf("%d,%d",&a,&b);
// 题目让输入几个整数,就写几个%d;引号里面有几个%d,引号外面对应有几个变量,变量前加个&符号。
- 整数型(
int
):%d
- 单精度浮点型(
float
):%f
- 双精度浮点型(
double
):%lf
- 字符型(
char
):%c
#include <stdio.h>
int main()
{
/** 使用变量前必须先定义 */
int a; // 整数型
float b; // 单精度浮点型型
double c; // 双精度浮点型型
char d; // 字符型
/** 让用户输入对应值 */
printf("请输入一个整数值a:
");
scanf("%d", &a); // scanf里:int -> %d
printf("请输入一个小数值b:
");
scanf("%f", &b); // scanf里:float ->%f
printf("请输入一个小数值c:
");
scanf("%lf", &c); // scanf里:double -> %lf
printf("请输入一个字符d:
");
scanf("%c", &d); // scanf里:char -> %c
d = getchar(); // 把键盘输入的第1个字符赋值给变量d。由于缓冲区问题,若不加上这段代码,在输出时,scanf("%c", &d);这行代码会失效,具体解释见下方
/** 输出结果 */
printf("a的值为%d
", a); // printf里:int -> %d
printf("b的值为%f
", b); // printf里:float ->%f
printf("c的值为%f
", c); // printf里:double -> %f
printf("d的值为%c
", d); // printf里:char -> %c
return 0; // 程序正常运行结束
}
【重点】需要注意的是,在读取字符型变量时,可能会遇到
缓冲区
的问题。由于之前的输入会在缓冲区中留下 换行符,因此在读取字符型变量时,可能会直接读取到换行符,导致 输出不符合预期。可以在读取字符型变量前加入getchar()
函数来 清除缓冲区中的换行符,例如 scanf(“%c”, &d);d =getchar();。
六、getchar()
语句、putchar()
语句 ⭐️
getchar()
:从键盘上得到某一个字符;putchar()
:把某一个字符呈现到屏幕上。
#include <stdio.h>
int main()
{
/** 使用变量前必须先定义 */
char a, b, c; // 定义3个字符a b c
/** 让用户输入对应值 */
printf("请输入您的英文名大写:
");
a = getchar(); // 键盘输入的第1个字符赋值给变量a
b = getchar(); // 键盘输入的第2个字符赋值给变量b
c = getchar(); // 键盘输入的第3个字符赋值给变量c
/** 计算 */
a = a + 32; // 转换成小写字母
b = b + 32; // 转换成小写字母
c = c + 32; // 转换成小写字母
/** 输出结果 */
putchar(a); // 输出字符变量a
putchar(b); // 输出字符变量b
putchar(c); // 输出字符变量c
putchar('
'); // 输出换行符(用的单引号)【对于输出型语句,最后一条输出语句的末尾需输出换行符(
)】
/** 程序正常运行结束 */
return 0;
}
七、数学运算 ⭐️
详情请查看我的另一篇博文哦~
八、三个小知识点 ⭐️
(一)、%m.nf
%m.nf
:表示输出的数字总共占m
个格,其中小数点后占n
个格。
若输出后 数字占格不够,其处理步骤是:?
- 第1步?、观察小数点后占格是否等于
n
,若不等于,就在小数点后的值后面补所需个数的0
;- 第2步?、在第1步处理后的基础上,计算数字总占格数是否等于
m
,若不等于,则 判断m
的正负:
- 1、若
m
为正
,在数字前
补所需个数的空格
;- 2、若
m
为负
,在数字后
补所需个数的空格
。
example1:?
举例 ?:
double a=3.67;
printf("输出的a为%7.4f ",a);
推论 ?:由已知条件可知:m=7>0
、n=4
,通过上面处理步骤可知:3.67
后需补两个0
、3.6700
前需补一个空格
,所以最终结果为:
结果 ?:输出的a为 3.6700
#include <stdio.h>
int main()
{
/** 使用变量前必须先定义 */
double a = 3.67;
/** 输出结果 */
printf("输出的a为%7.4f
", a); // 记得加换行符
/** 程序正常运行结束 */
return 0;
}
example2:?
#include <stdio.h>
int main()
{
/** 使用变量前必须先定义 */
double a, b, c;
/** 赋值 */
a = 3.67;
b = 5.43;
c = 6.21;
/** 输出结果 */
printf("设定的是%5.2f,b是%-5.2f,c是%7.4f
", a, b, c); // 记得加换行符
/** 程序正常运行结束 */
return 0;
}
(二)、%e
1、%e
的定义
%e
:以科学计数法的形式来表现。
%e
默认 小数点后面取6
位数,然后e+0几
总共占4
个格。
比如 ?:
printf("身高是%e厘米 ", 123.456);
推论 ?:
- 因为:10^2=e+02, 10^3=e+03。。。以此类推;
- 所以123.456=1.23456*10^2=1.23456e+02(未完);
- 又因为 “%e默认小数点后面取6位数,然后e+0几总共占4个格。”,而1.23456小数点后是5位,
- 所以需在6后面补个0,即上面=1.234560e+02。
最终结果为 ?:身高是1.234560e+02厘米
#include <stdio.h>
int main()
{
/** 输出结果 */
printf("身高是%e厘米
", 123.456); // 记得加换行符
/** 程序正常运行结束 */
return 0;
}
2、%
和e
之间也可以加小数
表示限制
比如 ?:
printf("身高是%10.2e厘米 ", 123.456);
推论 ?:%10.2e表示总共10格,小数点后占2格;又因为1.23e+02占了8格 且 10>0,所以还需在前面补两个空格。
最终结果 ?:身高是 1.23e+02厘米
#include <stdio.h>
int main()
{
/** 输出结果 */
printf("身高是%10.2e厘米
", 123.456); // 记得加换行符
/** 程序正常运行结束 */
return 0;
}
(三)、(int)(表达式)
(int)(表达式)
:将表达式结果强制转成整形(即抹去表达式结果中的小数点,向下取整
)。
example1:?
题目:求9999.999的千位数。
#include <stdio.h>
int main()
{
/** 使用常量/变量前必须先定义 */
float a = 9999.999; // 自定义常量a
int b; // 自定义变量b
/** 计算 */
b = (int)(a / 1000);
/** 输出结果 */
printf("%f的千位数是%d
", a, b); // 记得加换行符
/** 程序正常运行结束 */
return 0;
}
example2:?
题目:输入一个大于0小于999的可以带小数的数字,并输出其个位、十位以及百位数字。
#include <stdio.h>
int main()
{
/** 使用常量/变量前必须先定义 */
double a; // 自定义一个大于0小于999可为小数的值a
int ge, shi, bai; // 自定义变量ge(个位数)、shi(十位数)、bai(百位数)
/** 用户输入 */
printf("请输入一个大于0小于999可为小数的值:
"); // 提示信息
scanf("%lf", &a); // 用户输入a的值
/** 计算 */
bai = (int)(a / 100); // 因为a最多是3位数,所有先求出它的百位数 eg. 321.1/100=3.211;(int)(3.211)=3 即321.1的百位数是3
shi = (int)((a - bai * 100) / 10);
ge = (int)(a - bai * 100 - shi * 10);
/** 输出结果 */
printf("个位数字%d
", ge);
printf("十位数字%d
", shi);
printf("百位数字%d
", bai); // 记得加换行符
/** 程序正常运行结束 */
return 0;
}