C/C++的各种输入输出,算法竞赛方向

 char(表示字符串)

 C语言中没有string类型,直接用char定义字符串。字符常量用单引号,字符串常量用双引号。

#include<stdio.h>
 int main(){
 	char str1[25] = "i am fine";
 	char str2[25] = "thank you";
 	printf("%s, %s!" , str1 , str2);
 	return 0;
 }

运行结果:

 bool

#include<stdio.h>
 int main(){
	bool flag1 = true; #c语言里没有bool类型,文件保存为cpp格式,可以直接使用,如保存为.c的后缀,则需要加一个头文件 #include<stdbool.h>
	bool flag2 = 0;
	int a = 1; int b = 1;
	printf("flag1=%d,flag2=%d,(a==b)=%d",flag1,flag2,a==b);
	return 0;
 }

强制类型转换 

只用在该变量之前加个括号,里面写上转换的类型就可以了。例如使用(double) a/(double)b来避免默认整除。

符号常量和const常量

符号常量就是用一个标识符来替换常量。又称为宏定义或者宏替换。

#define 标识符 常量
#define pi 3.14 //结尾没有分号

它也可以用在定义一些小函数上,但在调用时,它会把输入的变量原封不动的放进函数中去运算,可以导致错误,需要谨慎使用,实在要用的话,要多加括号。

建议定义常量的时候都使用const

const 数据类型 变量名 = 常量;
const  double pi = 3.14; 

const double pi = acos(-1.0) ; 这里得到的pi为精确解。

逻辑运算符

&& 与;|| 或;!非  (不要记错)

三目运算符

int c = a > b ? a : b; //找最大值

位运算符

<<左移(变大)如 (2<<30)-1等同于2^30-1 加括号的原因是为运算符的优先级比较低

>>右移(变小)

输入输出

 

double类型变量的输入是%1f,输出为%f

 

 

getchar() 能接受换行符 

typedef

用来给一个复杂的数据类型取一个别名。

常用math函数 

#include<math.h>   (以下的x都是double类型)

(1)fabs(x) 对x取绝对值

(2)floor(x) 对x进行向下取整;ceil(x)对x进行向上取整

(3)pow(r,p) 返回 r^p

(4)sqrt(x) 返回x的算术平方根

(5)log(x)返回x以自然对数e为底的对数。若想用别的底,要用换底公式。

(6)sin(x)  cos(x)  tan(x)  x参数要求是弧度制 即:度数*pi/180 

(7)asin(x)  acos(x)  atan(x) 返回反函数值

(8)round(x)  将x进行四舍五入,返回的值也是double类型,要想得到整数还需要进行取整。

if

if(m != 0) 可以省略写为if(m)

if(m == 0) 可以省略写为if(!m)

switch

格式如下:要注意case后面的处理没有大括号,每个case结束要有break,case的值不用带括号。 

while & do while &for 

while别忘了i++; 

do while 结束要带上分号 

要保存为cpp格式文件,才能在A中定义临时变量的类型 如 int  i =1

数组的赋值,输入和输出

二维数组的赋值,输入和输出

如果数组较大(大概是10^6级别),则需要将其定义在主函数外面,否则会使程序异常输出。

memset——对数组每个元素赋相同的值

使用前需要加上头文件 #include<string.h>

建议只在想赋值0 和-1的时候使用该函数,这时括号里的值就是0和-1。若赋其他值很可能出错。

字符数组
初始化

字符数组的初始化有两种方式,

第一种:

 第二种:(这种赋值方式仅限于初始化,程序其他位置不允许这样直接赋值整个字符串)

输入输出

(1)scanf /printf :有两个格式来实现字符输出。%c会识别空格和换行进行输入。%s将空格和换行作为一个输入的结束。同时%s不同输入是不用加&。

(2)getchar()/ putchar():单个字符输入输出。会读入空格和换行符。

(3)gets/puts:一行字符串的输入输出,以\n作为输入结束。输出时会自己为每一行加上换行符。

 gets和scanf输入字符串时会将\0自动添加在输入的字符串后面,并占有一个字节,而puts与printf就是通过识别\0作为字符串的结束来输出的。为了保存\0,开字符串数组时一定要至少比字符长度多一个。(只有char需要,int等其他类型不需要\0)

若不是使用这两输入方式,而是使用getchar来输入,就需要在每一个输入的字符串后面加上\0,否则用printf 和puts输出字符串会因无法识别字符串末尾而输出乱码。

string.h头文件

常用函数

sscanf 与sprintf

很高级的两个东西。

sscanf 从左边往右边赋值;sprintf 从右边往左边赋值。

上图是第一行是将str中的内容以%d的格式写入n中,将str中的数据写成“%d”的形式,在将其中的数据提取到n中;第二行是将n中的内容以%d的格式赋值到str中,就是把n放到中间这个“%d”的字符串中,再传给str。

以数组作为函数参数 

指针 

int* p; //p是一个指针变量,用来存放某个变量的地址
print(“%d\n”, *p); //*号相当于打开房间的钥匙,打开这个地址,就可以得到改地址里存放的内容。
*p = &a  //可以用钥匙打开这个房间,对里面的内容进行修改。

 指针与数组

int* p = a ;//数组名a可以作为数组a的首地址&a[0]被赋值给指针变量p
// a + i = &a[i]  地址等价
// *(a + i) = a[i] 值等价
scanf("%d", a + i) ; //很神奇的写法,和scanf("%d", &a[i])等价
 
for (int* p = a; p < a + 10; p++){  //指针变量可以进行自增操作,来枚举数组中的元素
    printf("%d", *p);
}

使用指针变量作为函数参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值