Bootstrap

(8)数组-7.2

1.数组的赋值
  .数组变量本身不能被赋值[其本质为const指针常量]
  .要把数组的所有元素交给另一个数组,只能通过遍历
  数组的形式.
2.数组作为函数参数时,往往需要用另一个参数来传递参
  数的大小
  .应用实例:给出一个数组,找出指定数据在数组中的
  位置,若找不到则返回"-1".[ 1-5.cpp ]
   .数组作为函数的参数时:
    .不能在[]中给出数组的大小,给出了也没有用
    .不能再用sizeof()来计算数组的元素个数

#include <stdio.h>

int search(int number, int a[], int length);

int main()
{
	int a[]={
		1,2,3,4,5,6,7,8,9,0,12,34,56,4,6,67,46,3,65,34,57,457,36,676
		};  //给定待检索数组
	int x;  //给定检索值
	int loc;//定义待检索值在数组中的位置	
	scanf("%d", &x);
	loc = search(x, a, sizeof(a)/sizeof(a[0])); //这里a的含义在指针中说明
	
	printf("%d的位置:%d\n", x, loc);
	
	return 0;
}

int search(int number, int a[], int length) //数组作为函数参数时,往往必须再用另一个参数传入数组的值
{
	int i;
	int ret = -1;
	for(i=0; i<length; i++)
	{
		if(a[i] == number)
		{
			ret = i;
			break;
		}
	}

	return ret;
}

3.数组的例子:素数
 .根据定义,除了能被1和它本身整除的数为素数
 .将所有偶数去掉,只对x-1以下的奇数检查
 [1-6.cpp]
 .判断是否能被已知的且<x的素数整除[ 1-7.cpp ]
1-6.cpp:

#include <stdio.h>

int isPrime(int x);

int main()
{
	int x;
	scanf("%d", &x);
	if(isPrime(x))
	{
		printf("%d is prime.\n", x);
	}
	else
	{
		printf("%d is not prime.\n", x);
	}

	return 0;
}

/**********************************************************************************************
//read from 2 to x-1
**********************************************************************************************/
/*int isPrime(int x)
{
	int ret;
	int i;
	if(x == 1) ret = 1;
	for(i=2; i<x; i++)
	{
		if(x%i == 0)
		{
			ret = 0;
			break;
		}
	}

	return ret;
}
*/

/**********************************************************************************************
现将所有的偶数去掉,然后检查在所有的奇数中检查
**********************************************************************************************//*
int isPrime(int x)
{ 
	int ret=1;
	if(x%2==0 && x!=2)
		ret = 0;
	else
	{
		for(int i=3; i<x; i+=2)
		{
			if(x%i == 0)
			{
				ret = 0;
				break;
			}
		}
	}

	return ret;
}

1-7.cpp:

/*******************************************************************************
Output the first 10 primes
********************************************************************************/
#include <stdio.h>

int isPrime(int i, int prime[], int count);  //Function declaration to check whether it is a prime.

int main()
{
	const int number = 10;  
	int prime[number] = {2}; //The array used to store the first 100 primes. prime[0] = 2.
	int count = 1;  //Current array subscript
	int i = 3;

	//for test--Output a header
	{
		printf("\t\t\t\t");
		for(int i=0; i<number; i++)
		{
			printf("%d\t", i);
		}
		printf("\n");
	}

	while( count < number )
	{
		if( isPrime(i, prime, count) )  //Determine whether current value is a prime number.
		{ 
			prime[count++] = i; //if 'i' is prime, put it to current array uint, and count points to next array unit.
		}

		//for test
		{
			printf("i=%d \tcnt=%d\t", i, count);
			for(int i=0; i<number; i++)
			{
				printf("%d\t", prime[i]);
			}
			printf("\n");
		}

		i++;
	}
	//print array elements in a specific format.
	for( i=0; i<number; i++ )
	{
		printf("%d", prime[i]);
		if( (i+1)%5 ) printf("\t");
		else printf("\n");
	}

	return 0;
}

int isPrime(int x, int knownprime[], int numberofknownprimes)
{
	int ret = 1;
	int i;
	for( i=0; i<numberofknownprimes; i++)
	{
		if( x%knownprime[i] == 0)
		{
			ret = 0;
			break;
		}
	}
	return ret;
}

4.构造素数表[1-8.cpp]
 .构造n以内的素数表:
  .令x=2;
  .将2x,3x,4x直至ax< n 的数标为非素数
  .令x为下一个没有被标记为非素数的数,重复第2
   步,直至所有的数都尝试完.
 .伪代码:
  .开辟prime[n],初始化其所有的元素为1,prime[x] 为
   1表示x为素数.
  .令x=2
  .如果x为素数,则对于(i=2; xi<n; i++)
   令prime[i
x] = 0
  .令x++,如果x<n,重复上一步,否则结束.

/****************************************************************************************
Constructing prime table within n.
****************************************************************************************/
#include <stdio.h>

int main()
{
	const int maxnumber = 10; //n = 10
	int x;
	int isPrime[maxnumber];  
	for(int i=0; i<maxnumber; i++)  //Initialize elements of array to 1. The subscript of array is elements of array.
	{
		isPrime[i] = 1;
	}

	//for test--Output a header
	{
		printf("\t\t");
		for(int i=2; i<maxnumber; i++)
		{
			printf("%d\t", i);
		}
		printf("\n");
	}

	for(x=2; x<maxnumber; x++)
	{
		if(isPrime[x])
		{
			for(int i=2; i*x<maxnumber; i++)
					isPrime[i*x] = 0;
		}

		//for test
		{
			printf("x=%d \t", x);
			for(int i=2; i<maxnumber; i++)
			{
				printf("%d\t", isPrime[i]);
			}
			printf("\n");
		}
	}

	for(int i=2; i<maxnumber; i++)
	{
		if(isPrime[i])
		{
			printf("%d", i);
			if( (i-1)%5 ==0 ) printf("\n");
			else printf("\t");
		}
	}
	printf("\n");

	return 0;
}

运行结果:
在这里插入图片描述

;