算法笔记知识点整理(一)

1.数组部分

  • memset可用来对数组中每一个元素赋0或-1的初值语法为 memset(数组名,初始值,sizeof(数组名))
  • 如果不是使用scanf的%s格式读入字符串或gets函数输入字符串(例如使用getchar()),一定要在输入的每个字符串后面加\0
  • string.h头文件中的常用字符串函数
    • strlen(字符数组)函数可以得到一个字符数组中\0前的元素个数
    • strcmp(字符数组1,字符数组2)返回两个字符串大小比较结果(字典序)>返回正整数,小于返回负整数,相等返回0
    • strcpy(字符数组1,字符数组2)把字符数组2赋值给字符数组1,包括\0
    • strcat(字符数组1,字符数组2)把字符数组2接在字符数组1的后面
  • sscanfsprintf函数 语法:sscanf(str,"%d",&n);//将str 以%d的格式写入n中,sprintf(str,"%d",n)//将n以%d的形式写入str中
#include
#include
int main(){
    int n;
    char str[12]="123";
    sscanf(str,"%d",&n);
    printf("%d",n);
    sprintf(str,"%d",n);
    printf("%s",str);
    return 0;
}

2.函数部分

  • 1.以数组作为函数参数,参数中数组的第一位不需要填写长度(如果是二维数组,那么第二维需要填写长度),实际调用时只需填写数组名。注意数组作为参数时,在函数中对数组元素的修改相当于对原数组元素的修改
#include
#include
void change(int a[],int b[][5]){
    a[0]=1;
    a[1]=2;
    a[2]=3;
    b[0][0]=4;
}
int main(){
    int a[3]=0;
    int b[5][5]={0};
    change(a,b);
    return 0;
}

3.指针

#include
int main(){
    int a[10]={1};
    int *p=a;
    printf("%d\n",*p);
    return 0;
}

指针变量存储的是地址,指针可以理解为是变量的地址,指针变量支持自增自减操作,p+i代表p偏移i个int型变量的地址。在上述实例中a代表数组a首地址,即a[0]的地址,a代表&a[0],a+i代表&a[i], *(a+i)等价于a[i]

#include
int a[10];
int main(){
for (int i=0;i<9;i++){
    scanf("%d",a+i);
    }
for (int j=1;j<9;j++){
    printf("%d",*(a+i));
    }
return 0;
}

4.引用

  • 引用是继指针之后可以直接改变参数对应的变量的值的方式。引用的作用原理是相当于给原来的变量起了个别名,与原名称指向同一变量,使用方式为,在函数参数类型后直接加&即可void change(int &a)//由于是c++的语法,必须保存为.cpp类型
//可以通过引用实现交换传入的地址以实现变量交换的目的
#include
void swap(int *&p,int *&q){
    int *temp=p;
    p=q;
    q=temp;
    }

引用是变量的别名,不能对常量使用引用

5.结构体

  • 将若干个数据类型不同的变量或者数组封装在一起,以存储自定义的数据结构,方便存储一些符合数据。
  • 基本结构struct Name{//一些基本的数据结构或者自定义的数据类型};
struct Node{
    Node n;//此处错误,会引起循环定义的问题
    Node *next;//此处可以这样定义
};
  • 访问结构体内元素
    • 两种方式 “.”操作和“->”操作,
struct Student{
    int id;
    char name[20];
    student *next;
}stu,*p;
//访问stu中的变量的写法如下
stu.id;
stu.name;
stu.next;
//访问*p中的变量的写法为
(*p).id;
(*p).name;
(*p).next;
//另一套写法
p->id;
p->name;
p->next;

  • 结构体的初始化:构造函数

6.补充内容

  • 浮点数的比较:
const double eps=1e-8; 
#define Equ(a,b) (fabs((a)-(b))<(eps));
#define More(a,b){((a)-(b))>((eps)};
#define Less(a,b){((a)-(b))<(-eps)};
#define MoreEqual(a,b){((a)-(b))>(-eps)};
#define LessEqual(a,b){((a)-(b))<(eps)};
  • 圆周率 const double Pi=acos(-1.0);
  • 多点测试,用来实现读取所有数据的三种方法
    • while(scanf("%d",&n)!=EOF){ ……}
    • while(scanf("%d %d",&a,&b)!=EOF){ if (a==0 && b==0) break;……}或者是while(scanf("%d %d",&a,&b),a||b){……}
    • while(T--){……};
    • -

你可能感兴趣的:(PAT程序设计练习题)