《算法笔记》–胡凡 曾磊
Dev-C++ , C-Free , CodeBlocks
PAT|计算机程序设计能力考试
int a;
double b;
scanf("%d",&a);
scanf("%llf",&b);
printf("%f",b);
typedef起别名:
例如:typedef long long LL;
LL a = 123456789012345;
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.
#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);
}
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');
除了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){
...
}