机试准备(一)

用书:

《算法笔记》–胡凡 曾磊

轻便编译器:

Dev-C++ , C-Free , CodeBlocks

在线评测系统

PAT|计算机程序设计能力考试

C/C++快速入门

  1. 不要同时在一个程序中使用cout 和 printf,有时候会出现问题。
  2. 保存.cpp文件
  3. #include 和#include< cstring>等价

变量

  1. 变量名第一个字符必须是字母或者下划线,除了第一个字符以外的其他字符必须是字母,数字或下划线。
  2. 32位整数, 整型int,10^9范围内整数均可以表示int型。
  3. 64位整数长整型long long ,10^18范围内。%lld
  4. 碰到浮点型均使用double存储。输出格式 %lf%.1lf保留一位小数输出
  5. ASCII码:
    0~ 9:48~57
    A~Z:65 ~90
    a~z:97 ~122
    ,小写比大写大32。
  6. C语言只有字符数组,C++有string类型

运算符

  1. 条件运算符:A ?B:C;
  2. 位运算符,用的少。

输入输出

int a;
double b;

scanf("%d",&a);
scanf("%llf",&b);
printf("%f",b);

  1. 除了数组前面不加&(数组名本身表示数组第一个元素的地址),其他都要加。
  2. 字符数组使用**%s读入的时候以空格跟换行作为读入结束的标志。**
  3. %c是可以读入空格和换行的。
  4. double的输出和输入,一个是%f,一个是%lf。
  5. 想输出%或者\,printf("%%");或者printf("\");
  6. %md及%0md。
  7. %.mf,输出保留m位小数。
  8. getchar()可以识别换行符。
  9. gets用来输入一行字符串,识别换行符作为结束。
    10.puts用来输出一行字符串,并紧跟一个换行。

typedef

typedef起别名:
例如:typedef long long LL;
LL a = 123456789012345;

math函数

  1. fabs(double x):取绝对值。
  2. floor(double x):向下取整。
  3. ceil(double x):向上取整。
  4. pow(double r,double p):返回r的p次方。
  5. sqrt(double x)。
  6. log(double x):底为e。
  7. sin(double x),cos(double x),tan(double x)。
  8. asin(double x),acos(double x),atan(double x);
  9. round(double x):四舍五入。

选择语句

  1. if(m)等价于 if(m!=0)
  2. if(!m)等价于if(m==0)
switch (表达式){
	case 常量表达式1:
		...
		break;
	case 常量表达式2:
		...
		break;
	
	...
	default:
		...
}

数组

数组一开始没有赋值,数组中的每个元素可能是一个随机数,并不一定赋值为0;下面才是将每个元素赋值为0:

int a[10] = {0};
int a[10] = {};
memset--对数组中每个元素夫相同的初始值。
#include
memset(数组名,值(建议0或者-1),sizeof(数组名));

数组如果较大,定义在主函数外面。

gets或者scanf输入一维数组的末尾都有一个空字符\0,它的ASCII码为0,即空字符NULL,占用一个字符位。因此,字符数组的长度要比实际存储字符串的长度至少多1.

冒泡排序思想

string.h头文件

  1. strlen():得到字符数组\0前的字符个数。
  2. strcmp(A,B):(比较A>B?)返回两个字符串大小比较结果。小于返回负整数,不一定为-1,等于返回0,大于反悔正整数,不一定1.
  3. strcpy(A,B):把一个字符串B复制给另一个字符串A。
  4. strcat(A,B):将B接到A后面。

sscanf与sprintf

  1. 均处于stdio.h头文件下面。
#inclcud

int main(){
	int n;
	char str[100] = "123";
	sscanf(str,"%d",&n);//将字符数组str中的内容以%d的格式写到n中。
	printf("%d\n",n); //输出123.

	int m = 233;
	char str1[100];
	sprintf(str1,"%d",n);//将n以%d的格式写入str字符数组中
	printf("%s\n",str1);
}

函数

  1. main函数返回0的意义在于告知系统程序正常终止。
  2. 数组作为函数参数:一维数组不需要填写长度,二位数组需要填写第二维长度。数组作为参数时,在汉书中对数组元素的修改等同于对原数组的修改。
  3. 数组不允许作为返回类型出现。

指针

int a;
&a:取整型变量a的地址。
指针变量:int *p = &a;用来存放指针。
int*为一种类型(*号是类型的一部分),&a赋给p,而*p可以得到变量a的值。
p+1:下一个int类型变量,跨越了整个int(4Byte).
int*只能表示存储int类型数据的地址。存放double型或者char型,需要使用double*或者char*。
int *p1,p2;其中p1存放指针,p2为int类型;
int *p1,*p2;均为指针类型

对于数组a[10];
a == &a[0];//true
scanf("%d",a+i);//a+i表示a[i]的地址,取数a[i] = *(a+i).

两个int型指针相减,等价于求两个指针之间差了几个int。

指针作为参数传递,内外变量值都会变。

C++中的引用
如下:
void change(int &x){
	x = 1;//这里内外的x均变为1.
}

结构体

结构体里面不能定义本身,但可以定义自身类型的指针变量。

struct stuInfo{
	int id;
	char gender
	stuInfo *next;

//构造函数初始化
stuInfo(int _id,char _gener){
	id = _id;
	gender = _gender;
}

//默认构造函数
stuinfo(){}

//或者简化构造函数为一行
stuInfo(int _id,char _gender):id(_id),gender(_gender){}
}stu,*p;

stu.id;
(*p).id;
p->id;
stuInfo stu = stuInfo(100,'M');

cin与cout

除了string类型,尽量使用printf以及scanf。

#include
using namespace std;

int n;
cin>>n;//不需要指定格式
double x;
cin>>x;

char str[100];
cin.getline(str);//读入一整行

string str;
getline(cin,str);

cout<

浮点数比较——修正误差

const double eps = 1e-8;
double a,b;
//1-----相等
fabs(a-b) eps'
//3-----小于
a-b < -eps;
//4-----大于等于
a - b > -eps;
//5-----小于等于
a - b < eps;

const double Pi = acos(-1.0);//圆周率

单点测试及多点测试

单点测试:通过多少组数据,就得到多少分
多点测试:通过全部数据,才得分。

EOF表示end if file,表示-1;

while(scanf("%d",&n)!=EOF){
	...
}

while(gets(str)!=NULL){
	 ...
}

你可能感兴趣的:(机试)