C++基础

机试练习总结


pat

1、pat测评方式位单点测试,一次处理一组数据即可。
2、其他在线测评系统如codeup,为多点测试,一次处理多组数据。

关于编译器

codeblocks

1、调试闪退
解决:千万不要把项目放在中文路径!!!

code

输入输出(几位小数,printf,scanf)

scanf

库:stdio.h

scanf("格式控制",变量地址);
scanf("%d",&n);

&为取地址运算符,为了得到变量地址,需要在前面加一个&,也就是“&变量名。”
浮点数类型一般用double,有效精度15~16位

 char str[100];
 int i;

 printf( "Enter a value :");
 scanf("%s %d", str, &i);

printf

printf("格式控制",变量名称);
printf( "\nYou entered: %s %d ", str, i);

字符控制:

https://blog.csdn.net/u011012049/article/details/47860215

常用:

数据类型scanfprintf
int%d%d
long long%lld%lld
float%f%f
double%lf%f
char%c%c
字符串(char数组)%s%s

scanf和printf的格式符只有一个不同:double:scanf中是%lf,printf中是%f

三种常用输出格式

1、%md
使不足m位的int型变量以m位进行右对齐输出,其中高位用空格不起;若本身超过m位,则保持原样。

int a = 123, b =123456;
printf("%5d\n",a);
printf("%5d\n",b);

输出:

  123
123456

2、%0md
只是在%md中间多加了0。不同在于,前面补0而不是空格。

int a = 123, b =123456;
printf("%05d\n",a);
printf("%05d\n",b);

输出:

00123
123456

3、%.mf
让浮点数保留m位小数输出,这个“保留”使用“四舍六入五成双”规则。用即可。
若要求四舍五入,则使用round函数。

double d1 = 12.345;
printf("%.2f\n",d1);
printf("%.5f\n",d1);

输出:

12.35
12.34500

getchar()和putchar()

getchar()输入单个字符,putchar()输出单个字符。

typedef

给复杂的数据类型起别名,如

typedef long long LL;

防止程序出现大量long long 降低编码效率。

转义字符

常用换行 (\n),tab(\t)

空字符,空格字符

\0表示空字符NULL,其ASCLL码为0,而不是空格!!!空格的ASCLL码为32。

16进制0x20, 十进制32:空格字符 指键盘上长长的那个键产生的字符
16进制0x00, 十进制0 :空字符 指 字符串结尾系统自动加上的‘\0’,
以让系统识别出一个字符串的结尾。如字符串“china”实际上在系统内是以“china\0”储存的。

字符数组存放方式

若要输出%,或:
printf("%%");输出%
printf("\\");输出\

字符串常量

可以作为初值赋给字符数组,并使用%s的格式输出。

char str1[25] = "The more hard-working";
char str2[25] = "the more luky";
printf("%s,%s.",str1,str2);

运行结果
字符串常量长度包含空格

string str = str1;
int a = str.length();
printf("%d\n",a);

输出:

21

布尔型

整型变量赋值给布尔型变量时自动转换为true(非零),false(零)。在存储时分别为1和0,可用 %d 输出为1或0;

宏定义(符号常量,宏替换)和常量

#define 标识符 常量;
define也可以定义任何语句或片段,但是能加的地方都加上括号,防止陷阱
const 数据类型 变量名 = 常量;

运算

自增运算: i++和++i:
i++是先使用i再将i加1,++i是先将i加1,再使用i。
条件运算符:
(?:)是c语言中唯一的三目运算符,格式:

A ? B : C;

含义是:如果A为真,那么执行并返回B的结果;如果A为假,那么执行返回C的结果。

常用math函数

头文件:math.h(C语言)

fab(int x)和fabs(double x);

对int变量和double变量取绝对值。

floor(double x)和ceil(double x)

向下取整和向上取整,返回类型为double型。

pow(double r, double p)

要求r和p为double,返回rp\。

sqrt(double x)

double类型的算术平方根。

log(double x)

返回double类型的以自然对数e为底的对数

对任意自然数为底的对数需要使用换底公。

sin(double x),cos(double x),tan(double x)

参数要求弧度制(用弧长与半径之比度量对应圆心角角度的方式)

sin(pi * 45 /180);

asin(double x), acos(double x), atan(double x)

round(double)

将double变量四舍五入,返回值为double,需进行取整才能输出。

	double d2 = round(12.345);
	printf("%d\n",(int)d2);

输出:

12

不取整的话会输出0.

选择结构

if

  • 注意:
    1、if和else中的内容是互斥的。
    2、if(n)的意思是if( n != 0 )
    3、f( n == 0)可以写成 if( !n )

switch

在分支条件比较多时会比较精炼。

switch(表达式)
{
   case 常量表达式1{
      语句块1break}
   ……
   
   case 常量表达式n:
   {
      语句块n;
      break}
   default{
      语句块n+1}
}

循环结构

whiile

for

for(A ; B; C){.......}

注意A,B,C的执行顺序,①执行A, ②判断B是否成立, ③循环体, ④C ⑤回到 “②” 并循环。

break和continue

  • break:
    1、强制退出switch
    2、退出循环
  • continue
    在需要的地方结束临时结束循环的当前轮回,然后进入下一轮回。

数组

一维数组

数组大小必须是整型常量,而不是变量。

int a[10] = {1, 2, 3, 4, 5};

未被赋值(初始化)的元素初值不一定。
如果想要给整个数组赋值为0,可以用:

//方法一
int a[10] = {0};
//方法二
int a[10] = {};

冒泡排序

C++自带swap函数用于交换,不需要自定义!!!否则无效!!!

//冒泡排序
	int a[5] = {3, 1, 4, 5, 2};
	
	//从最后一个元素开始,小元素上冒 
	//5个元素,4轮比较,每次确定最小元素位置 
	for(int i=1; i<=5; i++){
		//待排序列,5个元素需要比较4次 
		for(int j=4; j>=i; j--){
			if(a[j]<a[j-1]){
				//C++自带swap函数用于交换,不需要重写!!! 
				swap(a[j],a[j-1]);
//				int temp = a[j];
//				a[j] = a[j-1];
//				a[j-1] = temp;
			}
		}
	} 
	for(int i=0; i<5; i++){
		printf("%d\n",a[i]) ;
	}

二维数组

int a[5][6] = {{3, 1, 2}, {8, 4}, { }, {1, 2, 3, 4,5} };

默认赋值为0.

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

头文件:string.h

memset(数组名,, sizeof(数组名));

按字节赋值,即对每个字节赋同样的值.建议对其赋0或-1,二进制补码为全0或全1,不易出错.
赋其他值建议使用STL中的fill()函数.

	int a[5] = {3, 1, 4, 5, 2};
	memset(a, -1, sizeof(a)); 
	for(int i=0; i<5; i++){
		printf("%d\n",a[i]) ;
	}

输出:

1
1
1
1
1

若对其赋值为1:
输出

memset赋1

字符数组

char str[15] = {'G','o','o','d','','s','t','t','r','y'};

输出:

Good story!

不能赋空值,可以为空格.
初始化时可以直接赋字符串或字符数组,仅限初始化!!!

char str[15] = "Good story!";

输入输出

  • 输入
    除了scanf外,还可以用getchar或gets
  • 输出
    出来printf外还可以用putchar或puts

scanf和printf
getchar,putchar
getchar,putchar

gets,puta

char用单引号,string用双引号

字符数组存放方式

存放方式
空字符与空格字符区别在前面转义字符处
注意

string.h头文件

包含很多用于字符串的数组

strlen()

得到字符数组中第一个\0的字符个数.

str(字符数组)
strcmp()

返回两个字符串大小的比较结果,比较原则是按字典序.

strcmp(字符数组1, 字符数组2);

返回结果:

  • 1 < 2,返回负整数
  • 1 == 2,返回0
  • 1 > 2,返回正整数
strcpy()

把2复制给1,其中包括\0.

strcpy(字符数组1, 字符数组2);
strcat()

把一个字符串接到另一个字符串后面.

strcat(字符数组1, 字符数组2);

把2接到1后面.

sscanf和sprintf

头文件:stdio.h
是处理字符串问题的利器!

//将str中的内容以%d的格式写到n中
sscanf(str, "%d", &n);
//将n以%d的格式写到str中
sprintf(str, "%d", n);

类似于scanf和printf,在scanf和printf中str是scree(屏幕)

函数

  • 全局变量
  • 局部变量
    形参
    实参
    但是以数组作为参数传入,在函数中对数组元素的修改就等同于对原数组地修改

指针

什么是指针
  • 在计算机中,每个变量都会存放在内存中分配的一个空间,每个空间都有地址,计算机就是通过地址找到每个变量的,一般是它所占用的字节中第一个字节的地址。
  • 在C语言中使用指针来表示内存地址(或者称指针指向了内存地址),如果这个地址恰好是某个变量的地址,那么又称该指针指向该变量。
  • 前面讲到,用取地址运算符&,只要在变量前面加上&,就表示变量的地址。
    指针是一个unsigned类型的整数。
指针变量
  • 指针变量用来存放指针(或者可以理解为地址),这个关系就跟int型变量存放int型常量是一样的。
  • 指针变量在某种数据类型后加*号来表示这是一个指针变量。
    ·注意:·
    指针
    指针
    指针
    指针
    指针
指针作为函数参数传入
  • 对*p修改可改变原变量值,但是如果改变指针本身(地址是unsigned常量),则改变的是地址副本,不会对main函数内的变量改变。
  • 声明指针时要初始化(赋值)!
引用&

与取地址运算符不同!!!

  • 引用不产生副本,而是给原变量起了一个别名。对引用变量的修改就是对原变量的修改。
  • 使用方法:只需要在函数的参数类型后面加&(或在写在变量名前)。
  • 引用是产生变量欸定别名,常量不可以使用!!!

结构体

struct Name{
	//一些基本的数据结构或自定义的数据类型
}

当需要将一些相关的变量一起存储时,只要依次写出他们的数据类型和变量名称。

访问

" . “操作或” -> "操作,后者用于指针,两者都可以用于指针。与“ * ” 访问指针等价。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值