版权声明:本文为博主原创文章,转载请注明出处 https://blog.csdn.net/sophies671207/article/details/81395635
1.数组部分
- memset可用来对数组中每一个元素赋0或-1的初值
语法为 memset(数组名,初始值,sizeof(数组名))
- 如果不是使用
scanf
的%s格式读入字符串或gets函数输入字符串(例如使用getchar()),一定要在输入的每个字符串后面加\0 string.h
头文件中的常用字符串函数
strlen(字符数组)
函数可以得到一个字符数组中\0前的元素个数strcmp(字符数组1,字符数组2)
返回两个字符串大小比较结果(字典序)>返回正整数,小于返回负整数,相等返回0strcpy(字符数组1,字符数组2)
把字符数组2赋值给字符数组1,包括\0strcat(字符数组1,字符数组2)
把字符数组2接在字符数组1的后面
sscanf
和sprintf
函数 语法:sscanf(str,"%d",&n);//将str 以%d的格式写入n中
,sprintf(str,"%d",n)//将n以%d的形式写入str中
#include<stdio.h>
#include<string.h>
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<stdio.h>
#include<string.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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--){……};
-