目录
5. 算术操作符:+、-、*、/、%
![](https://i-blog.csdnimg.cn/blog_migrate/5c4e5845e1a9dd7d73b8b3bd2d30fd5c.png)
算术操作符:+、-、*、/
#include <stdio.h>
int main()
{
float x = 6 / 4;
int y = 6 / 4;
printf("%f\n", x); // 输出 1.000000
printf("%d\n", y); // 输出 1
return 0;
}
#include <stdio.h>
int main()
{
float x = 6.0 / 4; // 或者写成 6 / 4.0
printf("%f\n", x); // 输出 1.500000
return 0;
}
这里小数点后默认打印六位小数,如果想要控制打印的小数位数就在%后加.n,n是小数位数,如图
再来一个例子
#include <stdio.h>
int main()
{
int score = 5;
score = (score / 20) * 100;
return 0;
}
运算符 %
表⽰求模运算,即返回两个整数相除的余值。这个运算符只能⽤于整数,不能⽤于浮点数。
![](https://i-blog.csdnimg.cn/blog_migrate/5452c0bbe0fdc09e39654efd7c243c90.png)
![](https://i-blog.csdnimg.cn/blog_migrate/01c119181584f4cd15c9389bd6034f14.png)
#include <stdio.h>
int main()
{
printf("%d\n", 11 % -5); // 1
printf("%d\n",-11 % -5); // -1
printf("%d\n",-11 % 5); // -1
return 0;
}
6. 赋值操作符:= 和复合赋值
赋值
在变量创建的时候给⼀个初始值叫初始化,在变量创建好后,再给⼀个值,这叫赋值。
int a = 100;//初始化
a = 200;//赋值,这⾥使⽤的就是赋值操作符
赋值操作符 = 是⼀个随时可以给变量赋值的操作符。
int a = 3;
int b = 5;
int c = 0;
c = b = a+3;//连续赋值,从右向左依次赋值的。
int a = 3;
int b = 5;
int c = 0;
b = a+3;
c = b;
这样写在调试时,每⼀次赋值的细节都是可以很⽅便的观察的。
复合赋值
int a = 10;
a = a+3;
a = a-2;
int a = 10;
a += 3;
a -= 2;
![](https://i-blog.csdnimg.cn/blog_migrate/8a7888ad30d3dca33f7dc59d2bd53583.png)
7. 单⽬操作符:++、--、+、-
++和--
![](https://i-blog.csdnimg.cn/blog_migrate/ae197b3e7ee65339c00f7ed0295d0e88.png)
int a = 10;
int b = ++a;//++的操作数是a,是放在a的前⾯的,就是前置++
printf("a=%d b=%d\n",a , b);
int a = 10;
a = a+1;
b = a;
printf("a=%d b=%d\n",a , b);
后置++口诀:先使⽤,后+1
int a = 10;
int b = a++;//++的操作数是a,是放在a的后⾯的,就是后置++
printf("a=%d b=%d\n",a , b);
int a = 10;
int b = a;
a = a+1;
printf("a=%d b=%d\n",a , b);
int a = 10;
int b = --a;//--的操作数是a,是放在a的前⾯的,就是前置--
printf("a=%d b=%d\n",a , b);//输出的结果是:9 9
int a = 10;
int b = a--;//--的操作数是a,是放在a的后⾯的,就是后置--
printf("a=%d b=%d\n",a , b);//输出的结果是:9 10
注意一点,此图片中代码和上面的代码是一样的意义
+ 和 -
int a = 10;
比特就业课主页:https://m.cctalk.com/inst/s9yewhfr 比特就业课
int b = -a;
int c = -10;
printf("b=%d c=%d\n", b, c);//这⾥的b和c都是-10
int a = -10;
int b = -a;
printf("b=%d\n", b); //这⾥的b是10
8. 强制类型转换
(类型)
如图,a是int类型, 3.14是double类型,两边的类型不⼀致,编译器会报警告
int a = 3.14;
为了消除这个警告,我们可以使⽤强制类型转换
int a = (int)3.14;
意思是将3.14强制类型转换为int类型,这种强制类型转换只取整数部分
9. scanf和printf介绍
printf 基本用法
#include <stdio.h>
int main(void)
{
printf("Hello World");
return 0;
}
#include <stdio.h>
int main(void)
{
printf("Hello\nWorld\n");
printf("Hello\n");
printf("World\n");
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/94c243af3a197d3416965be38b67cd7b.png)
占位符
// 输出 There are 3 apples
比特就业课主页:https://m.cctalk.com/inst/s9yewhfr 比特就业课
#include <stdio.h>
int main()
{
printf("There are %d apples\n", 3);
return 0;
}
#include <stdio.h>
int main()
{
printf("%s will come tonight\n", "zhangsan");
return 0;
}
#include <stdio.h>
int main()
{
printf("%s says it is %d o'clock\n", "lisi", 21);
return 0;
}
占位符列举
![](https://i-blog.csdnimg.cn/blog_migrate/91bc581aff4f4a9e0298ccf245b4fefd.png)
这里注意小数中,float最好用%f来打印,double最好用%ld来打印 ;%p用于打印指针,也就是地址
打印的格式不对可能会导致出错
输出格式
限定宽度
#include <stdio.h>
int main()
{
printf("%5d\n", 123); // 输出为 " 123"
return 0;
}
#include <stdio.h>
int main()
{
printf("%-5d\n", 123); // 输出为 "123 "
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/c62a2f0564165011a20404c02ae80025.png)
// 输出 " 123.450000"
#include <stdio.h>
int main()
{
printf("%12f\n", 123.45);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/c0ca64b6f5804638ecc7c042df421d3f.png)
总是显⽰正负号
#include <stdio.h>
int main()
{
printf("%+d\n", 12); // 输出 +12
printf("%+d\n", -12); // 输出 -12
return 0;
}
限定⼩数位数
// 输出 Number is 0.50
#include <stdio.h>
int main()
{
printf("Number is %.2f\n", 0.5);
return 0;
}
输出:
注意:第三个输出就是运用了四舍五入的原则
#include <stdio.h>
int main()
{
printf("%*.*f\n", 6, 2, 0.5);
return 0;
}
// 等同于printf("%6.2f\n", 0.5);
上⾯⽰例中, %*.*f 的两个星号通过 printf() 的两个参数 6 和 2 传⼊。
输出部分字符串
// 输出 hello
#include <stdio.h>
int main()
{
printf("%.5s\n", "hello world");
return 0;
}
备注!!!网站:https://cplusplus.com 是c/c++非常好的查看网站,利用这个网站上的资源可以更好地了解这些函数的用法以及c/c++的官网:cppreference中文(搜索)也能找到想要的信息
scanf 基本用法
scanf() 函数⽤于读取⽤⼾的键盘输⼊。
scanf() 的语法
scanf("%d", &i);//&是取地址符号
scanf("%d%d%f%f", &i, &j, &x, &y);
![](https://i-blog.csdnimg.cn/blog_migrate/aa360eec9e922fd1f8c14e64425af580.png)
#include <stdio.h>
int main()
{
int x;
float y;
// ⽤⼾输⼊ " -13.45e12# 0"
scanf("%d", &x);
printf("%d\n", x);
scanf("%f", &y);
printf("%f\n", y);
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/ea92cb533993b48ef96c0d227538034d.png)
这里输出的是44999....而非4500000...是因为小数无法在内存中精确地保存 。
scanf的返回值
如果没有读取任何项,或者匹配失败,则返回 0 。如果在成功读取任何数据之前,发⽣了读取错误或者遇到读取到⽂件结尾,则返回常量 EOF(-1)。 EOF——end of file 文件结束标志
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
float f = 0.0f;
int r = scanf("%d %d %f", &a, &b, &f);//r是scanf的返回值
printf("a=%d b=%d f=%f\n", a, b, f);
printf("r = %d\n", r);
return 0;
}
还用两种情况,ctrl+z 提前结束输入,要在VS中按三次
占位符
scanf() 常⽤的占位符如下,与 printf() 的占位符基本⼀致。
![](https://i-blog.csdnimg.cn/blog_migrate/f96b5564ac895ae343594b11eb8c57c9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/262d60702e0174e422fcef0ec7648c2f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ec7f53e017c4a1362cabd8c41f934369.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cc597008cf6d51a565df070d97c62edd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ced68fa9dd40288af8685f9034fe63ec.png)
#include <stdio.h>
int main()
{
char name[11];
scanf("%10s", name);
return 0;
}
赋值忽略符
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d-%d-%d", &year, &month, &day);
printf("%d %d %d\n", year, month, day);
return 0;
}
#include <stdio.h>
int main()
{
int year = 0;
int month = 0;
int day = 0;
scanf("%d%*c%d%*c%d", &year, &month, &day);
printf("%d %d %d\n",year,month ,day);
return 0;
}
!!!
有关于第一次使用scanf就报错,而且找不出有什么问题的,比如这样的
错误是scanf函数可能不安全,建议使用scanf_s
初学的时候不建议大家使用scanf_s。因为scanf_ s函数是VS2022提供的,不是C语言提供的
如果你在代码使用了scanf_s函数,你的代码只能在VS.上编译其他的编译器不认识,这会降低了代码的可移植性~
解决办法:只要在使用scanR函数的. c文件的第一行加上
#define_ CRT_ SECURE _NO_ WARNINGS 1
但是每次编辑c语言代码都要记得加这一串代码很麻烦!
一劳永逸的解决方法:
在vs.上新建. c/. cpp文件的时候,其实拷贝的是newc++file. cpp这个文件。那么在newc++file. cpp文件中加上:#define_ CRT_ SECURE_ NO_ WARNINGS 1,以后新建的.c/.cpp的文件中都会包含这句代码~
具体步骤:
利用everything软件搜索newc++file. cpp这个文件,找到对应vs2022这个文件。
右键文件,“打开路径”,
找到后,右键,“打开方式”,这里举例用记事本打开
在空的记事本加入这句话
然后保存,注意要保存到同一个路径下
但是有可能出现这样的情况,因为电脑保护了这些路径
那么我们就Ctrl+C拷贝一份 newc++file. cpp这个文件到桌面上(不要把原来的文件搞丢了!!!,否则新建源文件的时候就没有c++文件的选项了),按一样的步骤将桌面上这份文件添加那句话,再保存(桌面是有权限保存的),然后再将桌面的这份文件拷贝回刚刚那个路径,替换原来的文件。
注意:1. 如果没有修改权限,可以拷贝到桌面上修改修改后,记得再拷贝回去
2.新建.c文件的时候,不要使用[紧凑视图] ,否则那行代码还是不会显示出来,如果是左边这种图就点击“显示所有模板”,用右图中的视图选择C++文件才能显示我们想要的代码
如此编辑后,我们每次打开VS编辑C/C++时都会自动显示防止scanf出错的代码