1.2 变量及其输入

1.2变量及其输入

1. c++中的scanf printf

主要是这章的内容可仔细研究的不太多,这里就由我带大家看一下c++中的scanf和printf的使用方法以及可以实现的内容

首先,两者的一般格式是:

scanf(格式控制, 输出表列)
printf(格式控制,输出表列)

具体数据类型与其对应格式符的内容如下

说明符对用数据类型描述
dint十进制整型,占用4字节,数据范围在-231-1~231-1之内
uunsigned int十进制整型,定义则确定为正数
ounsigned int八进制整型
xunsigned int十六进制整型
f/lffloat/double不同精度的浮点型(float最大为六位,double为15位)
efloat/double将浮点型通过科学计数法表示出来
gfloat/double对浮点型选取最优的方式(e或f的一种)表示出来
dint十进制整型,占用4字节,数据范围在-231-1~231-1之内
cchar字符型,同时也可以将输入的整型转化为对应ascii码的字符型
cchar字符型,同时也可以将输入的整型转化为对应ascii码的字符型
schar*字符数组,或者称为字符串,输入时不用添加地址运算符&
pvoid*16进制形式的指针

这里要注意的是:
1.其中d,x,o可以进行一些数值比较小的数据转化,但是若输入的数字为负数,转化出来的结果为该进制下的反码

#include <iostream>
using namespace std;
int main( )
{
  int a;
  scanf("%d",&a);
  printf("%x",a); 
  return 0;
}

结果如下

在这里插入图片描述

2.字符串和字符的输入输出,因为牵扯到空格和回车的问题,最好根据实际情况使用对应的工具,此处并不做赘述


这里举一个比较经典的例子:

#include <iostream>
using namespace std;
int main( )
{
  int a; float b; char c;
  scanf("%d %f %c",&a,&b,&c);  //注意在变量名前要加地址运算符&
  printf("a=%d,b=%f,c=%c\n",a,b,c);
  return 0;
}

其中printf双引号里面的都是对应的格式,%加格式符可以理解为后面变量在格式里面的代替(在%的后面紧跟着加上*,则该输入并不参与输出和存储的操作),其中python中的format方法功能和这个非常相似


输出的结果如下:

在这里插入图片描述
可以看到f格式符是默认保留六位小数的,那我们如何根据我们的需要保留小数点后几位呢?

我们需要了解到一个知识点叫做.precision(精度)
我看了一下概念直接解释起来还是比较复杂的,于是直接放代码:

#include <iostream>
using namespace std;
int main( )
{
  double a;
  scanf("%lf",&a);
  printf("%.10lf",a); 
  return 0;
}

这里在.和lf中间加上的数字10就代表了精确到多少位小数
所以输出结果如下:
在这里插入图片描述
如果精确到20位呢

在这里插入图片描述
哎呀出错啦(因为20位已经超过了double的最高精度了)
如果是整型使用了精度呢?

#include <iostream>
using namespace std;
int main( )
{
  int a;
  scanf("%d",&a);
  printf("%.2d\n",a);
  printf("%.10d",a); 
  return 0;
}

结果如下

在这里插入图片描述
这里.10d的作用就是用0补全前面的数位
(这里补充一点,就是.0xd和.xd的作用都是一样的)
.precision()的功能就介绍到这里,接下来介绍一下域宽和转义字符


域宽的概念就是将输出的数据放在规定的空间(几何)大小之内
依旧先看代码:

#include <stdio.h>
int main() {
	int PAGES=931;
    printf("*%2d*\n", PAGES);         //输出的字段长度大于最小宽度,不会截断输出
    printf("*%10d*\n", PAGES);        //默认右对齐,左边补空格      
    printf("*%*d*\n", 2, PAGES);      //等价于 printf("*%2d*\n",PAGES)
    return 0;
}

(复制粘贴就很爽)
在这里插入图片描述
这里默认是右对齐的,python里面是封装的比较好的,如果左对齐的话,只需要在数字的前面加一个负号就可以了。

printf("%-10d\n",101010);

关于转义字符呢,我将它分为两类,第一种是由于本身在c++中有固定的含义,所以在输入输出时,需要在这类字符前加一个\确保其输入输出成功

例如:

\\,\?,\’,\"

事实上,在csdn博客编辑中也是遵循这个规则的,所以我在编辑上面例子时,编写的内容其实是\\······

第二种的话就是有一定的含义,类似于\n在格式中代表换行
其他的还有:

转义字符含义
\a叫一声(真的会叫哦)
\b退格
\n换行
\r回车
\t水平制表符
\v垂直制表符

这里的内容大家自己尝试一下就ok啦!


2. c++中的 const 和 define

const没啥好说的
就是const+变量类型名称+变量名+"="+数值(const和变量名的位置是可以调换的)
代表定义了一个不允许改变的量
这里要注意的是,不允许改变的只是被定义的这个变量,例如我用const声明了一个指针,那么这个指针指向的变量是可以改变的


至于#define是一种宏定义,是相对而言比较复杂的,所以这里介绍两种在算法学习中比较常见的用法:

1.定义常量
#define+常量名+数值(注意这里千万不要加;)
2.定义一个函数
#define+宏名+(形参)+函数内容
例如:
#define M(y) y*y+3*y
#define MAX(a,b) (a>b)?a:b


用的比较多的实际上还是const


版权声明:本文为weixin_55835175原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。