07 C语言数组

07 C语言数组

1、初试数组

image-20230309152855462

#include<stdio.h>

int main(int argc,char const *argv[]){
	double sum;
	int a[100];
	int i = 0;
	int cnt = 0;
	
	scanf("%d",&i);
	while(i != -1){
		sum += i;
		a[cnt++] = i;
		scanf("%d",&i);
	}
	if(cnt > 0){
		double average = sum / cnt;
		printf("average is %lf\n",average);
		for(i = 0;i < cnt;i++){
			if(a[i] > average){
				printf("%d\n",a[i]);
			}
		}	
	}
	return 0;
}

2、数组的定义和使用

数组是一种容器,特点为:

1、所有元素的数据类型都相等

2、一旦创建不可以改变大小

3、下标从0开始

4、越界访问会有很大问题

3、数组例子-统计个数

image-20230309155239559

#include<stdio.h>

int main(int argc,char const *argv[]){
	const int number = 10;
	int i,j;
	int a[number];
	scanf("%d",&i);
	
	for(j = 0;j < number;j++){
		a[j] = 0;
	}
	
	while(i!=-1){
		if(a[i] >= 0 && a[i] <= 9){
			a[i]++;
		}
		scanf("%d",&i);
	}
	for(j = 0;j < number;j++){
		if(a[j] > 0){
			printf("%d有%d个\n",j,a[j]);
		}
	}
	
	
	return 0;
}

思路:

1、定义数组大小

2、初始化数组

3、数组参与运算

4、遍历输出数组

4、数组运算

数组的初始化

1、直接用大括号,[]里面的值不用填写。

2、如果给定了数组大小,后面大括号没有足够的值,则自动填充0;a[100] = {0}可以自动完成初始化。

3、sizeof(a)/sizeof(a[0])获得数组的大小。

4、数组本身不可以赋值,将数组复制只能遍历逐个复制。

5、遍历数组:从0开始,<数组长度,并且遍历完后i是越界下标不可以再使用。

6、数组作为参数传值的时候,必须传递长度,sizeof无法在另一个函数里使用。

image-20230309164007901

5、数组例子:质数

image-20230309210835935

优化思路:

1、减少对比次数 -> sqar(i),排除偶数

2、构造质数表

#include<stdio.h>
#include<math.h>
int isPrime(int x);
int main(int argc,char const *argv[]){
	int maxNumber,i = 0,j = 0;
	scanf("%d",&maxNumber);
//	maxNumber = 25;
	int prime[maxNumber];
	for(i = 0;i < maxNumber;i++){
		prime[i] = 1;
	}
	for(i = 2;i < maxNumber;i++){
		if(isPrime(i)){
			for(j = 2;(j * i) < maxNumber;j++){
				prime[j * i] = 0;
			}
		}
	}
	for(i = 2;i < maxNumber;i++){
		if(prime[i] == 1){
			printf("%d\n",i);
		}
	}
	
	return 0;
}
int isPrime(int x){
	int i,ret = 1;
	if(x == 1){
		ret = 0;
	}else{
		for(i = 2;i < sqrt(x);i++){
			if(x % i == 0){
				ret = 0;
				break;
			}
		}
	}
	return ret;
}

思路,构建一个数组,然后数组下标对应的值就是下标是否就是质数。

如果下标是质数,则将质数所有的倍数都标记为否。

6、二维数组

列数必须给定,行数可以让编译器来数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值