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((flag==0)||(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((i==j)||(i+j==2))
            {
                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((i==j)||(j==0))
				  	{
			  		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  阅读(229)  评论(0编辑  收藏  举报