第八章 数组习题
8-1、统计次数
question:输入十个数
answer:
#include <stdio.h>
int main()
{
const int number = 10; //数组大小
int x;
int cnt[number];//计数器 -定义数组
int i;
//初始化cnt[0]~cnt[9]计数器 -初始化数组
//方法一:int cnt[number] = {0};
for(i=0; i<number; i++){//方法二
cnt[i] = 0;
}
scanf("%d",&x);
while(x != -1){
if(x>=0 && x<=9){
cnt[x]++;//数组参与运算
}
scanf("%d",&x);
}
for(i=0; i<number; i++){
printf("%d:%d\n",i,cnt[i]);
}
return 0;
}
8-2、查找数字
question:找出key在数组a中的位置
- key要寻找的数字
- a要寻找的数组
- length数组a的长度
- 如果找到,返回其在a中的位置;如果找不到则返回-1
answer:
#include <stdio.h>
int search(int key, int a[], int length);
int main(void)
{
int a[] = {2,4,6,7,1,3,5,9,11,13,23,14,32};
int x;
int loc;
printf("请输入一个数字:");
scanf("%d",&x);
loc = search(x, a, sizeof(a)/sizeof(a[0]));
if(loc != -1){
printf("%d在第%d个位置上\n", x, loc);
} else{
printf("%d不存在!\n",x);
}
return 0;
}
int search(int key, int a[], int length)//遍历查找x
{
int ret = -1;
int i;
for(i=0; i<length; i++){
if(a[i] == key){
ret = i;
break;
}
}
return ret;
}
8-3、构造素数表–调试
思路:
伪代码:
answer:
#include <stdio.h>
int main()
{
const int maxnumber = 25;
int isprime[maxnumber];
int i;
int x;
for(i=0; i<maxnumber; i++){
isprime[i] = 1;//将所有数标记为素数
}
//调试 for test
printf("\t") ;
for(i=2; i<maxnumber; i++){
printf("%d\t",i);
}
printf("\n");
//调试 for test
for(x=2; x<maxnumber; x++){
if(isprime[x]){
for(i=2; i*x<maxnumber; i++){//将第一个素数的倍数标记为非素数
isprime[i*x] = 0;//标记为非素数
}
}
//调试 for test
printf("%d\t",x) ;
for(i=2; i<maxnumber; i++){
printf("%d\t",isprime[i]);
}
printf("\n");
//调试 for test
}
for(i=2; i<maxnumber; i++){
if(isprime[i]){
printf("%d\t",i);
}
}
printf("\n");
return 0;
}
8-4、查询最大值、最小值(指针应用一)–返回值
#include <stdio.h>
void minmax(int a[], int len, int *max, int *min);
int main(void)
{
int a[] = {1,2,3,4,5,6,7,8,9,12,13,14,16,17,21,23,55,};
int max,min;
minmax(a, sizeof(a)/sizeof(a[0]), &max, &min);
printf("min=%d, max=%d\n",min ,max);
return 0;
}
void minmax(int a[], int len, int *max,int *min)
{
int i;
*min = *max = a[0];
for(i=0; i<len; i++){
if(a[i] < *min){
*min = a[i];
}
if(a[i] > *max){
*max = a[i];
}
}
}
8-5、除法计算(指针应用二)–返回状态+值
#include <stdio.h>
int divide(int a, int b, int *result);
int main(void)
{
int a = 5;
int b = 2;
int c;
if(divide(a,b,&c)){
printf("%d/%d=%d\n",a,b,c);
}
return 0;
}
int divide(int a, int b, int *result)
{
int ret = 1;
if(b == 0){
ret = 0;
}else{
*result = a/b;
}
return ret;
}