Lab1:数据组织基础方法及创新应用(基础)

1.数组定义及简单使用

1)分别定义一个 int 型一维数组和二维数组,并通过输出验证各种初始化方法;

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int INF = 0x3f3f3f3f,N=5;
int a[15],b[15][15];
void work1() //循环初始化数组 
{
  for(int i=1;i<=N;i++) a[i]=1;
  for(int i=1;i<=N;i++) 
  	for(int j=1;j<=N;j++) b[i][j]=2;
  for(int i=1;i<=N;i++) printf("a[%d]=%d\n",i,a[i]);
  for(int i=1;i<=N;i++) 
  	for(int j=1;j<=N;j++) printf("b[%d][%d]=%d\n",i,j,b[i][j]);
}
void work2() //memset函数初始化数组 
{
  memset(a,-1,sizeof(a));
  memset(b,0,sizeof(b));
  for(int i=1;i<=N;i++) printf("a[%d]=%d\n",i,a[i]);
  for(int i=1;i<=N;i++) 
  	for(int j=1;j<=N;j++) printf("b[%d][%d]=%d\n",i,j,b[i][j]);
}
void work3() //直接初始化数组 
{
  int t[15]={0};
  int x[15][15]={0,0,1,1,1,1};
  for(int i=1;i<=N;i++) printf("t[%d]=%d\n",i,t[i]);
  for(int i=0;i<=N;i++) 
  	for(int j=0;j<=N;j++) printf("x[%d][%d]=%d\n",i,j,x[i][j]);	
}
int main()
{
  work1();
  work2();
  work3();
  return 0; 
}

分别用三种方法初始化数组,详见注释。
其中需要注意的是,a[10]={} 这种初始化方法只能在定义数组的时候使用,已经声明的数组不可以这样赋值。
其中第三种初始化方法,二维数组初始化若不全部给出,则后面的数组元素均为 \(0\)
部分输出如下:
image
image

2)定义 int,char 一维数组,键盘输入并输出。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int INF = 0x3f3f3f3f;
inline ll read()
{
  ll ret=0;char ch=' ',c=getchar();
  while(!(c>='0'&&c<='9')) ch=c,c=getchar();
  while(c>='0'&&c<='9') ret=(ret<<1)+(ret<<3)+c-'0',c=getchar();
  return ch=='-'?-ret:ret;
}
int a[11];
char c[11]; 
int main()
{
  for(int i=1;i<=10;i++) a[i]=read(); //快速读入 
  cin>>c;
  for(int i=1;i<=10;i++) cout<<a[i]<<' ';
  cout<<c;
  return 0;
}

使用了快速读入
输出如下:image

2.结构体定义及简单使用

1)定义结构体,初始化,输出验证

2)定义结构体,输入数据,输出验证

#include<bits/stdc++.h>
using namespace std;
struct edge{int nxt,to,w;}a;
int main()
{
	//初始化结构体 
	a.nxt=1,a.to=2,a.w=3;
	printf("%d %d %d\n",a.nxt,a.to,a.w);
	//输入结构体 
	cin>>a.nxt>>a.to>>a.w;
	printf("%d %d %d\n",a.nxt,a.to,a.w);
	return 0;
}

image

3指针定义及简单使用

1)定义 int 指针和引用,验证各种初始化方法

2)针对指针,输入数据并输出数据和指针本身

#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline ll read()
{
	ll ret=0;char ch=' ',c=getchar();
	while(!(c>='0'&&c<='9')) ch=c,c=getchar();
	while(c>='0'&&c<='9') ret=(ret<<1)+(ret<<3)+c-'0',c=getchar();
	return ch=='-'?-ret:ret;
}
int main()
{
	int a=1,*p=&a;//*p是指针
	int b=2,&r=b; //r是引用
	cout<<a<<' '<<*p<<endl<<r<<endl;
	int c=read(),*q=&c;//输入c并设置指针q 
	cout<<*q;
	return 0;
}

输出:
image

指针和引用的区别:

  • 指针可以更改赋值,引用一经确定不可更改
  • 指针不一定要初始化,引用一定要初始化
  • 指针额外占用空间,引用不额外占用空间

4结构体指针

#include<bits/stdc++.h>
using namespace std;
struct edge{int nxt,to,w;}a;
edge *p=&a;
int main()
{
	//初始化结构体
	a.nxt=0,a.to=0,a.w=0; 
	p->nxt=1,p->to=2,p->w=3; //指针改变数值 
	printf("%d %d %d\n",p->nxt,a.to,a.w); 
	return 0;
}

这里需要注意,指针 \(*p\) 和原来的 a 结构体是双向的对应关系。改变 a,*p随之改变;改变 *p,a随之改变。
输出:1 2 3

5.定义int型指针并指向int型一维数组,通过指针输出数组(分析数组名和数组第一个元素地址的关系)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline ll read()
{
	ll ret=0;char ch=' ',c=getchar();
	while(!(c>='0'&&c<='9')) ch=c,c=getchar();
	while(c>='0'&&c<='9') ret=(ret<<1)+(ret<<3)+c-'0',c=getchar();
	return ch=='-'?-ret:ret;
}
int main()
{
	int a[6]={1,2,3,4,5,6};
	int *q=&a[0],*r=a;
	for(int i=0;i<6;i++) cout<<q[i];
	cout<<endl;
	for(int i=0;i<6;i++) cout<<r[i];
	return 0;
}

输出:
image

数组名和数组第一个元素的地址是等价的

posted @ 2023-10-10 19:54  conprour  阅读(11)  评论(0编辑  收藏  举报