C/C++编程输入输出相关函数

1. C输入输出

int a;
int scanf(const char *format, &a); 
//标准输入流 stdin 读取输出到缓冲区,遇到回车将缓冲区数据取走。

int printf(const char *format, a);  
//输出写入到标准输出流 stdout

注意:在scanf()输入时,最后一个变量后千万不要加空格,会出现意想不到的结果,输入顺序错位。

例如:末尾c输入格式后面不能加空格,前面两个变量a和b格式后面加不加都可以。

scanf("%d %d %d ", &a, &b, &c);
//格式控制说明
%d 十进制有符号整数 
%u 十进制无符号整数 
%f 浮点数 
%s 字符串 
%c 单个字符 
%p 指针的值 
%e 指数形式的浮点数 
%x, %X 无符号以十六进制表示的整数 
%0 无符号以八进制表示的整数 
%g 自动选择合适的表示法

//特殊规定字符
\n 换行 
\f 清屏并换页 
\r 回车 
\t Tab符 
\xhh 表示一个ASCII码用16进表示, 
其中hh是1216进制数 
char *gets(char *s) 
// 从stdin读取一行到 s 所指向的缓冲区,遇到终止符或 EOF结束;
int puts(const char *s)
// 函数将字符串s和一个尾随的换行符写入到 stdout;

getchar();
putchar(s); 
// 函数输入输出单个字符;

字符串格式中区别:(并非是在整数格式中)
scanf:当遇到回车,空格和tab键会自动在字符串后面添加’\0’,并认为数据结束,但是回车,空格和tab键仍会留在输入的缓冲区中(遇到回车,空格,TAB键,指定宽度,格式错误认为该数据输入结束)。
gets:可接受回车键之前输入的所有字符,并用’\0’替代 ‘\n’。回车键不会留在输入缓冲区中(遇到回车认为该数据输入结束)。

printf()根据格式直接输出。
puts()在输出字符串时会将’\0’自动转换成’\n’进行输出,也就是说,puts方法输出完字符串后会自动换行。

#include <stdio.h>
int main() {
    int a,b;
    while(scanf("%d %d",&a, &b) != EOF)//注意while处理多个case
        printf("%d\n",a+b);
    return 0;
}

2. C++输入输出

头文件iostream中定义有两个流类:输入流类istream和输出流类ostream,且用这两个类定义了流对象cin和cout:

istream cin;
ostream cout;

cin是一个istream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“>>”从流中提取数据。流提取符“>>”从流中提取数据时通常跳过输人流中的空格、tab键、换行符等空白字符。注意:只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符“>>”才能从中提取数据。注意保证从流中读取数据能正常进行。

cout是一个ostream类的对象,它有一个成员运算函数operator<<,每次调用的时候就会向输出设备输出。operator用运算符重载,可以接受不同类型的数据,如整型、浮点型、字符串甚至指针,等等。cout是标准输出设备,一般输出到屏幕。
注意:cout输出的时候,最后面最好加上endl(end of line)结束换号。

#include <iostream>
using namespace std;
int main() {
    int a,b;
    while(cin >> a >> b)//注意while处理多个case
        cout << a+b << endl;
}
//输入:a b (回车)

cin输入时:输入运算符>>在读入下一个输入项b前会忽略前一项a后面的空格。

C++输出格式设置:
在这里插入图片描述
https://blog.csdn.net/xyqqwer/article/details/83471973

3. 动态申请一维数组和二维数组

1) malloc动态开辟与释放一维数组

//动态开辟一维数组
void dynamicCreate1Array()
{
	int m;
	int i;
	int *p;
    
	printf("请输入开辟的数组长度:");
	scanf("%d",&m);
	p = (int*)malloc(sizeof(int)*m);//动态开辟
 
	printf("请输入数据:");
	for(i = 0; i < m ; i++)
		scanf("%d",&p[i]);
 
    printf("输出数据:\n");
	for(i = 0; i < m; i++)
		printf("%d ",p[i]);
	free(p);
}

2) malloc/free 动态开辟二维数组

//动态开辟二维数组
void dynamicCreate2Array()
{
	int m,n;
	int i,j;
	int **p;
 
    printf("请输入数组行和列:");
	scanf("%d%d",&m,&n);
 
	p = (int**)malloc(sizeof(int*)*m); //开辟行
 
	for(i = 0; i < m; i++)
	{
		*(p+i) = (int*)malloc(sizeof(int)*n);//开辟列
	}
	//输入数据
	printf("请输入数:");
    for(i = 0 ; i < m;i++)
		for(j = 0; j < n;j++)
			scanf("%d",&p[i][j]);
    
	//输出数据
	for(i = 0 ; i < m;i++)
	{
		for(j = 0; j < n;j++)
		{
		   printf("%3d ",p[i][j]);
		}
		printf("\n");
	}
	//释放开辟的二维空间
	for(i = 0; i < m;i++)
		free(*(p+i));		//注意二维数组的释放
}

3)new/delete 动态申请一维数组

void DynamicCreate1Array()
{
	int len;
	
	cout<<"请输入长度:";
	cin>>len;
	
	int *p = new int[len];
	
	cout<<"请输入数据:";
    for(int i = 0; i < len; i++)
		cin>>p[i];
	
	cout<<"输出数据:"<<endl;
	for(i = 0; i < len; i++)
		cout<<setw(4)<<p[i];
	
	delete[] p;
}

4)new/delete 动态申请二维数组

void DynamicCreate2Array()
{
	int m,n;
	cout<<"请输入行和列:";
	cin>>m>>n;
 
	//动态开辟空间
    int **p = new int*[m]; //开辟行
	for(int i = 0; i < m; i++)
		p[i] = new int[n]; //开辟列
 
	cout<<"请输入数据:";
	for(i = 0 ; i < m ; i++)
		for(int j = 0; j < n; j++)
			cin>>p[i][j];
 
	cout<<"输出数据:"<<endl;
	for(i = 0; i < m; i++)
	{
		for(int j = 0; j < n; j++)
			cout<<setw(3)<<p[i][j];
		cout<<endl;
	}
 
	//释放开辟的资源
    for(i = 0; i < m; i++)
		delete[] p[i];
	delete[] p;
 
}

5) STL中的vector动态申请二维数组

void VectorCreate()
{
	int m,n;
	cout<<"请输入行和列:";
	cin>>m>>n;
	
	//注意下面这一行:vector <int后两个 "> "之间要有空格!否则会被认为是重载 "> > "。 
    vector<vector<int> > p(m,vector<int>(n));
    //vector<vector<int> > p(m,vector<int>(n, 0));  //二维数组初始化为0
	//vector<int> p(n, 0);  //动态申请一维数组并初始化为0
	cout<<"请输入数据:";
	for(int i = 0 ; i < m ; i++)
		for(int j = 0; j < n; j++)
			cin>>p[i][j];
		
	cout<<"输出数据:"<<endl;
	for(i = 0; i < m; i++)
	{
    	for(int j = 0; j < n; j++)
			cout<<setw(3)<<p[i][j];
		cout<<endl;
	}		
}

4. C++中的最值

  1. INT_MAX,INT_MIN数值大小:
    因为int占4字节32位,根据二进制编码的规则,INT_MAX = 2^31-1,INT_MIN= -2^31.C/C++中,所有超过该限值的数,都会出现溢出,出现warning,但是并不会出现error。如果想表示的整数超过了该限值,可以使用长整型long long 占8字节64位。

  2. INT_MIN在标准头文件limits.h中定义。

#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)//这里没有简单地将INT_MIN赋值成-2147483647,是因为-2147483648对于编译器而言是个表达式,而2147483648对于32-bit整数是无法表示的,
//所以经过这个表达式的结果是未定义的。在GCC上直接写-2147483648后,编译器给出了警告,说结果是unsigned。

5. C/C++构建链表和二叉树结构

C/C++构建链表

/* 基本的单链表节点 */
struct ListNode {
    int val;
    ListNode *next;
};

//动态创建链表
ListNode *p = new ListNode;		//不带初始化参数
ListNode *p = new ListNode(1);	//带初始化参数

//释放链表
delete p;


//链表的迭代遍历
void traverse(ListNode head) {
    for (ListNode p = head; p != null; p = p.next) {
        // 迭代访问 p.val
    }
}

//链表的递归遍历
void traverse(ListNode head) {
    // 递归访问 head.val
    traverse(head.next)
}

C/C++构建二叉树


//C  Definition for a binary tree node.
struct TreeNode {
	int val;
   	struct TreeNode *left;
    struct TreeNode *right;
 };


//C++  Definition for a binary tree node.
class TreeNode 
{
	int val;
	TreeNode *left;
    TreeNode *right;
    TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 };

//二叉树递归遍历
void traverse(TreeNode *root) {
    traverse(root.left)
    traverse(root.right)
}

6. C++在线编程常用库

#include <iostream>		//io库,输入输出流
#include <algorithm>	//C++的标准算法库,它主要应用在容器上
#include <stack>        //stack(适配器)
#include <queue>       	//queue、priority_queue(适配器)
#include <vector>		//动态数组(容器)
#include <deque> 		//双端队列(容器)
#include <list>			//双向链表
#include <map>			//map和multimap
#include <set>			//set和multiset
#include <string>		//字符串
#include <cmath>		//数学公式,相当于c中的<math.h>
#include <mem.h>		//数学公式
#include <functional>	//仿函数

//当使用 iostream 的时候,该头文件没有定义全局命名空间,必须使用namespace std; 这样才能正确使用cin cout等操作符。
using namespace std;	//相当于定义全部变量,cpp文件都可直接使用iostream库

7. rand随机值的产生

产生一定范围随机数的通用表示公式是:
要取得[0,n) 就是rand()%n 表示 从0到n-1的数
要取得[a,b)的随机整数,使用(rand() % (b-a))+ a;
要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a;
要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1;
通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。
要取得a到b之间的随机整数,另一种表示:a + (int)b * rand() / (RAND_MAX + 1)。
要取得0~1之间的浮点数,可以使用rand() / double(RAND_MAX)。

C++产生随机数

参考链接:

牛客网在线判题系统使用帮助

C++中动态申请二维数组并释放方法

c++头文件大全

C++ using namespace std 详解

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值