C语言第六章-利用数组处理批量数据

1、用筛选法求100之内的素数

include <stdio.h>

//判断模块,返回0状态为不是,1状态为是素数
int judge_a_prime_number(int a_number)
{
int input_number = a_number;
int i;
int prime_state=1;//0状态为不是,1状态为是素数
for(i=2;i<input_number;i++)
{
if((input_number%i)==0)
{
prime_state = 0;
}
}
return prime_state;
}

int main()
{
int i;
int a[100];
int flag;

//让数组a存1-100的数
for(i=0;i<100;i++)
{
a[i]=i+1;
}
//进行筛选,把非素数变为0
for(i=0;i<100;i++)
{
flag=judge_a_prime_number(a[i]);
if((flag0)||(a[i]1))
a[i]=0;
}
//打印出素数
for(i=0;i<100;i++)
{
if(a[i]!=0)
{
printf("%d ",a[i]);
}
}
return 0;
}

image

2、用选择法对10个整数排序
排序题先用冒泡,有时间再用其它算法排序

3、求一个3 X 3的整形矩阵对角线元素之和

include <stdio.h>

int main()
{
int i,j;
int a[3][3];
int sum = 0;
printf("请输入3x3矩阵数据\n");
//输入数据
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
//打印出来看看
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
//求和
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if((ij)||(i+j2))
{
sum = sum + a[i][j];
}
}
}
printf("矩阵对角线元素之和sum为:%d\n",sum);
return 0;
}

image

这里可以和书上不太一样,我是把两条对角线的都求了

4、有一个已经排好序的数组,要求输入一个数后,按原来顺序的规律将它插入数组中

也是排序问题。。略

5、将一个数组中的值按逆序重新存放。例如:原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。

又是套用冒泡排序直接秒杀

include<stdio.h>

//输入一个数组、数组的长度 从小到大排序
int bubble_sort_min_to_max(int a[], int len)
{
int temp_value,i,j;
//冒泡排序
for(i=0;i<len-1;i++)//扫描轮数,(len-1)次就足够,例如len=10时,这里是9轮。
{
for(j=0;j<len-1-i;j++)//比较次数len-1-i。例如len=10时:第一轮比较了9次,第二轮比较了8次,...,第9轮比较了1次
{
if(a[j]>a[j+1]) //比较大小,大的冒泡
{
temp_value=a[j];
a[j]=a[j+1];
a[j+1]=temp_value;

}
}

}

}

//输入一个数组、数组的长度 从大到小排序
int bubble_sort_max_to_min(int a[], int len)
{
int temp_value,i,j;
//冒泡排序
for(i=0;i<len-1;i++)//扫描轮数,(len-1)次就足够,例如len=10时,这里是9轮。
{
for(j=0;j<len-1-i;j++)//比较次数len-1-i。例如len=10时:第一轮比较了9次,第二轮比较了8次,...,第9轮比较了1次
{
if(a[j]<a[j+1]) //比较大小,小的冒泡
{
temp_value=a[j];
a[j]=a[j+1];
a[j+1]=temp_value;

}
}

}

}

int main()
{
int number[]={8,6,5,4,1};
int len_number = 5;
int i,j;

printf("排序前:");
for(i=0;i<len_number;i++)
printf("%d ",number[i]);
printf("\n");

//从小到大排序
bubble_sort_min_to_max(number,len_number); //调用冒泡排序
printf("从小到大排序后:");
for(i=0;i<len_number;i++)
printf("%d ",number[i]);
printf("\n");

/*
//从大到小排序
bubble_sort_max_to_min(number,len_number); //调用冒泡排序
printf("从大到小排序后:");
for(i=0;i<len_number;i++)
printf("%d ",number[i]);
printf("\n");
*/
return 0;
}

image

6、输出杨辉三角(要求输出10行) 杨辉三角:

杨辉三角:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
……
代码如下

include<stdio.h>

int main()
{
int line;//打印的行数
printf("请输入需要打印的杨辉三角行数:");
scanf("%d",&line);
int a[100][100];
int i,j;
a[0][0] = 1;//c语言数组其它会默认为0

//第一步、赋值杨辉三角
//先赋值第1列和对角线
for(i=0;i<line;i++)
{
for(j=0;j<line;j++)
{
if((ij)||(j0))
{
a[i][j] = 1;
}
}
}
//再赋值中间的
for(i=1;i<line;i++) //第2行到第line行,第1行不需要的
{
for(j=1;j<line-1;j++) //第2列到第line-1列,因为第1列和最后一列是固定的
{
if(i>j){
a[i][j] = a[i-1][j-1]+a[i-1][j];
}
}
}
printf("\n");

//第二步、输出杨辉三角的数字,显然是i>=j吧
for(i=0;i<line;i++) //第2行到第line行
{
for(j=0;j<line;j++) //第1列到第line列
{
if(i>=j){
printf("%d ",a[i][j]);
}

}
printf("\n"); //一行输出完换行
}

return 0;
}

image

7、
image

posted @ 2022-04-02 20:48  JaxonYe  阅读(284)  评论(0)    收藏  举报