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[ix] = 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;
}
运行结果: