c语言学习--数组

本文介绍了C语言中的数组,包括数组的声明、运算以及二维数组的使用。通过实例展示了如何统计特定范围内整数的出现次数、判断素数以及解决连线游戏问题,帮助读者深入理解数组在编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在编程时往往需要存储很多数,这个时候我们就需要数组这个工具了

1.数组的声明:

<类型>变量名称[元素数量]

double weight[20];  (元素数量必须是整数)

定义:是一种容器(放东西的东西),特点是 1.其中所有的元素具有相同的数据类型  2.一旦创建,不能改变大小   3.数组中的元素在内存中是连续依次排列的。

 

例题:写一个程序,输入数量不确定的[0,9]范围的整数,统计每一个数字出现的次数,输入-1表示结束


{
const int number=10;
int x;
int count[number];
int i;

for(i=0;i<number;i++){
	count[i]=0;
}
scanf("%d",&x);
while(x!=-1){
	if(x>=0&&x<=9){
		count[x]++;
	}
	scanf("%d",&x);
}
for(i=0;i<number;i++){
	printf("%d:%d\n",i,count[i]);
}


}

2.数组的运算

2.1判断数组中某个数是否存在并找到它的位置

进行这个运算很重要的一点就有找到数组长度

1.数组的大小
int a[]={1,2,3,4,5};
double b=sizeof(a)/sizeof(a[0]);
//这个b就是数组a的长度
//sizeof给出整个数组所占据的内容的大小,单位是字节,sizeof(a[0])给出数组中单个元素的大小,于是相除就得到了数组的单元个数。

2.数组的初始化
我们可以直接用大括号给出数组中所有元素的吃醋是值
int a[]={1,2,3,4,5}

3.数组的赋值

int b[]=a;  这是错误的,数组变量本身不能被赋值,我们只能采用遍历的方式将一个数组的所有值交给另一个数组

例题:判断素数

int isprime(int x);
int main()
{
int x;
scanf("%d",&x);
if(isprime(x)){
printf("%d是素数\n",x); 
} else{
	printf("%d不是素数",x);
}
return 0;

}

int isprime(int x){
	int ret=1;
	int i;
	if(x==1)ret =0;
	for(i=2;i<x;i++){
		if(x%i==0){
			ret=0;
			break;
		}
	}
	return ret;
}


//我们可以对这个isprime函数进行修改,因为偶数肯定不是素数,而且次数无需到x-1,到sqrt(x)就够了

int isprime(int x){
	int ret=1;
	int i;
	if(x==1||(x%2==0&&x!=2)) ret=0;
	for (i=3;i<sqrt(x);i+=2){
		if(x%i==0){
			ret=0;
			break;
		}
	}
	return ret;
} 

3.二维数组

3.1 二维数组的声明

int a[][5]={

{0,1,2,3,4},

{2,3,4,5,6},

};

注意:二维数组的列数是必须要给的;每行一个{},逗号分隔;最后的逗号可以存在;如果省略则表示补零

例题:连线游戏  读入一个3乘3的矩阵,矩阵中的数字为1则表示该位置有一个x,为0则表示为o,我们编写程序判断有没有哪一方胜利,输出表示获胜一方的o或x,或输出无人获胜

int main()
{
	

const int size=3;
int board[size][size];
int i,j;
int numofx;
int numofo;
int result=-1;   //-1 表示没人赢,1表示x赢,0表示o赢

//读入矩阵
for(i=0;i<size;i++){
	for(j=0;j<size;j++){
		scanf("%d",&board[i][j]);
	}
} 

//检查行
for(i=0;i<size&&result=-1;i++){
	numofo=numofx=0;
	for(j=0;j<size;j++){
		if(board[i][j]==1){
			numofx++;
		}
		else{
			numofo++;
		}
	}
	if(numofo==size){
		result=0;
	}else if(numofo==size){
		result=1;
	}
} 

//检查列
if(result==-1){
	for(j=0;j<size&&result==-1;j++){
		numofo=numofx=0;
		for(j=0;i<size;i++){
			if(board[i][j]==1){
				numofx++;
			}else{
				numofo++;
			}
		}
		if(numofo==size){
			result=0;
		}else if(numofx==size){
			result=1;
		}
	}
} 

//检查对角线
numofo=numofx=0;
for(i=0;i<size;i++){
	if(board[i][j]==1){
		numofx++;
	}
	else{
		numofo++;
	}
} 
if(numofo==size){
	result=0;
}
else if(numofx==size){
	result=1;
}
numofo=numofx=0;
for(i=0;i<size;i++){
	if(board[i][size-i-1]==1){
		numofx++;
	}
	else{
		numofo++;
	}
}

}


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值