精华内容
下载资源
问答
  • 原标题:C语言之数组的另一种有趣的排列方法,以及输出数组中最大的元素的方法上一讲呢我们介绍了数组的“冒泡排序”法,这一节我们在来看看数组的另一种排列方式-“选择排序方法”和用“打擂台”的方法来求出数组的...

    原标题:C语言之数组的另一种有趣的排列方法,以及输出数组中最大的元素的方法

    上一讲呢我们介绍了数组的“冒泡排序”法,这一节我们在来看看数组的另一种排列方式-“选择排序方法”和用“打擂台”的方法来求出数组的最大值。

    我们先来看看选择排序法:

    选择排序法是以冒泡排序法为基础,进化出来的更有效率的数组排序方法。

    我们先来看一个例子,我们从小到大排列5、3、4、1、2这5个数。

    代码如下:

    /*数组元素从小到大进行排序*/

    #include

    int main()

    {

    int a[5], i, j=1,min;//i控制的是数组的下标,j代表的是i的下一个元素,k控制的是最小的值

    printf("请输入数组元素:\n");

    /*以下循环代表的是数组元素的输入*/

    for (i = 0; i < 5; i++)

    {

    scanf_s("%d", &a[i]);

    }

    /*以下循环是排序循环*/

    for (i = 0; i < 5; i++)

    {

    for (j= i+1; j < 5; j++)//j代表的是数组元素a[i]的下一个元素

    {

    if (a[i] > a[j])

    {

    min = a[j];

    a[j] = a[i];

    a[i] = min;

    }

    /*大家一定要搞懂以上循环的意义*/

    }

    }

    /*以下循环是数组元素的输出*/

    for (i = 0; i < 5; i++)

    {

    printf("%d", a[i]);

    }

    return 0;

    }

    dbde18d2c4f85721fe2a7881b3236dcb.png

    我们来看看程序具体的运行过程是怎样的:

    首先,程序通过scanf_s语句(scanf_s语句是visual stdio 2019版本的编译器中的输入语句,像VC++6.0和DEVC++编译器所用的输入语句是scanf)从键盘获取数组的元素。

    for(i=0;i<5;i++)这层循环先执行,此时的i=0,选出a[0]这个元素与后面的元素比较。

    (所谓的选择排序就是先选择一个数,用这个数与其他数进行比较,如果这个数小于(大于)其他数,就交换位置,否则就不动,继续与下一个数进行比较。)

    程序在向后执行,到了for(j=i+1;j<5;j++)这层循环上了。

    此时的j=1,这是开始执行if语句进行比较,将较小的数向前移动,较大的数向后移动。

    这一个被选出来的元素a[0]和剩余的数比较完成后,在开始第二个数的比较,一次类推····

    直到比较完毕。

    选择排序法的执行效率要比冒泡排序法高。

    我们介绍完了这一种数组的排序方式之后,我们在来介绍一下如何在数组中求出其最大值。

    这个问题我们使用的“打擂台”的方法。

    和选择排序法类似,“打擂台”法也是先选出一个数,假定它是最大的,即这个数是擂主,其他的数依次与擂主进行比较,如果其他的某数大于这个擂主,那么那个数将成为新的擂主,最后输出这个数就行了。

    我们来看一个例子,还是用5、3、4、1、2这5个数,要求我们编写一个程序输出这五个数中最大的数,这和我们在日常考试中碰到的输出某个班级的最高分数类似。

    代码如下:

    #include

    int main()

    {

    int a[5], i,max;

    /*这个循环是控输入数组元素*/

    printf("请输入数组的元素:\n");

    for (i = 0; i < 5; i++)

    {

    scanf_s("%d", &a[i]);

    }

    max = a[0];//我们假定a[0]是最大的元素

    /*以下循环是为了比较出数组中最大的元素*/

    for (i = 0; i < 5; i++)

    {

    if (a[i + 1] > max)

    {

    max = a[i + 1];

    }

    }

    /*最后输出这个比较出来的值就可以了*/

    printf("数组中最大的元素是:%d\n",max);

    return 0;

    }

    1446f60a65726bbe5955274b34ebb4cb.png

    

    好了,今天的讲述就到这里了。返回搜狐,查看更多

    责任编辑:

    展开全文
  • C语言 输出数组中的全部元素的三种方法

    万次阅读 多人点赞 2018-07-31 10:11:10
    1)下标法。 #include "stdio.h" void main() {  int i;  int a[10]={1,2,3,4,5,6,7,8,9,10};  for(i = 1 ;i &lt; 10; i++)  {  printf("...2)通过数组名计算数组元素...

    1)下标法。

    #include "stdio.h"
    void main()
    {
        int i;
        int a[10]={1,2,3,4,5,6,7,8,9,10};
        for(i = 1 ;i < 10; i++)
        {
            printf("%d ",a[i]);
        }
        printf("\n");
    }


     

    2)通过数组名计算数组元素地址,找出元素的值。

    #include "stdio.h"
    void main()
    {
        int i;
        int a[10]={1,2,3,4,5,6,7,8,9,10};
        int *p;
        p = a;
        for( i = 0 ; i < 10 ; i++ )
        {
           printf("%d ",*(p+i) );

        }
        printf("\n");

    }



    3)用指针变量指向数组元素。

    #include "stdio.h"
    void main()
    {
        int i;
        int a[10]={1,2,3,4,5,6,7,8,9,10};
        int *p;
        for( p = a; p < (a+10) ;p++ )
        {
           printf("%d ",*p);

        }
        printf("\n");

    }

     

    展开全文
  • c语言删除数组中重复元素

    千次阅读 多人点赞 2020-01-25 19:47:54
    原题:把一个数组中的重复元素去掉。如a[12]={1,1,2,7,3,2,3,4,5,8,7,4},输出为:1,2,7,3,4,5,8 在csdn上查了一下,发现给出的方法都很复杂,对新手很不友好,于是写了一个比较简单的,源码如下: #include<...

    原题:把一个数组中的重复元素去掉。如a[12]={1,1,2,7,3,2,3,4,5,8,7,7},输出为:1,2,7,3,4,5,8
    在csdn上查了一下,发现给出的方法都很复杂,对新手很不友好,于是写了一个比较简单的,源码如下:

    #include<stdio.h>
    #define N 12
    int main()
    {
        int i,j,n=N,k;
        int num[N]={1,1,2,7,3,2,3,4,5,8,7,7};
        for(i=0;i<n-1;++i)	
    	{
            for(j=i+1;j<n;++j)	//从num[i]的下一位开始比较,直到最后一位
                if(num[i]==num[j])	//如果数字重复
                {
                    for(k=j;k<n-1;++k)	//从num[j]开始,所有数字前移一位
                        num[k]=num[k+1];
                    --n;              //数组长度-1
        		    --j;				//因为有++j,所以这里先减一下,否则num[i]比较的是移动之后的下一位,会漏掉一个数
       	   		}
       }
        for(i=0;i<n;++i)
            printf("%d,",num[i]);
        return 0;
    }
    
    
    

    希望对大家有所帮助,还有,新年快乐鸭!!!!

    展开全文
  • 主要介绍了C语言数组中元素的数排序输出的相关问题解决,文中题目是将元素连接起来排成一个数并要求出这类结果中数最小一个,需要朋友可以参考下
  • C语言&数组中最大元素的乘积

    千次阅读 2020-06-19 22:20:09
    给一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)(nums[j]-1) 取得最大值。 请计算并返回该式最大值。 输入 {1,4,5,2} 输出:12 解释:12=(4-1)(5-1) 输入:{1,5,5,3} 输出:16 16=(5-1)*(5-1...

    LeetCode链接:https://leetcode-cn.com/problems/maximum-product-of-two-elements-in-an-array

    给一个整数数组 nums,请你选择数组的两个不同下标 i 和 j,使 (nums[i]-1)(nums[j]-1) 取得最大值。
    请计算并返回该式的最大值。
    示例1:
    输入:{1,4,5,2}
    输出:12
    解释:12=(4-1)(5-1)
    示例2:
    输入:{1,5,5,3}
    输出:16
    16=(5-1)(5-1)
    方法一:利用排序算法将数组中的元素先排好,然后将排好序的最后一个元素和倒数第二个元素分别减一再相乘。
    在这里采用了冒泡排序的方法,时间复杂度为O(n^2)
    代码如下

    void Swap(int *a,int *b)//交换函数
    {
    	int tmp=*a;
    	*a=*b;
    	*b=tmp;
    }
    int maxProduct(int* nums, int numsSize)
    {
    	int i,j;
    	//冒泡排序
    	 for(i=0;i<numsSize-1;i++)//趟数
    	 {
    		 for(j=0;j<numsSize-1-i;j++)//对数组元素进行比较
    		 {
    			 if(nums[j]>nums[j+1])
    			 {
    				 Swap(&nums[j],&nums[j+1]);
    			 }
    		 }
    	 }
    	 return (nums[numsSize-1]-1)*(nums[numsSize-2]-1);
    }
    

    当然,用排序算法只能是下下策,排序算法中最快的时间复杂度为O(nlogn),比如快速排序等。在实在没有办法解决的情况下再去考虑使用排序。

    第二种方法很简单,其时间复杂度为O(n).
    使用两次单趟循环就可以解决该问题。
    代码如下:

    void Swap(int *a,int *b)
    {
    	int tmp=*a;
    	*a=*b;
    	*b=tmp;
    }
    int maxProduct(int* nums, int numsSize)
    {
    
    	int i=0,k=0;
    	int max1=nums[0];//假设数组中的最大元素是0号下标的元素
    	for(i=1;i<numsSize;i++)//依次与下标为1~numsSize-1的元素作比较
    	{
    		if(max1<nums[i])//若后面有元素比max1大
    		{
    			Swap(&max1,&nums[i]);//将大的那个数与max1做交换
    		}
    	}
    	int max2=nums[1];//假设第二大元素是1号下标元素
    	for(k=2;k<numsSize;k++)//依次与下标为2~numsSize-1的元素作比较
    	{
    		if(max2<nums[k])//若后面有元素比max2大
    		{
    			Swap(&max2,&nums[k]);//将大的那个数与max2做交换
    		}
    	}
    	return (max1-1)*(max2-1);//返回要求的值	
    }
    
    展开全文
  • 问题描述:输入一个正整数数组,将它们连接起来排成一个数,输出能排出所有数字最小一个。例如输入数组{32, 321},则输出这两个能排成最小数字32132。请给出解决问题算法,并证明该算法。思路:先将整数数...
  • C语言删除数组中的0元素

    千次阅读 2020-06-18 23:09:36
    编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移动。注意,CompactIntegers函数需要接收数组及其元素个数作为参数,函数返回值应为删除操作执行后数组的新元素个数。 输入时首先读入数组...
  • //数组运算/*==================================================================题目:查找数组的最大元素,并输出其位置和值!==================================================================*/#include#...
  • C语言 输出一个数组中,所有元素之和为0子序列本程序用到了一个时间种子,来随机产生10个整数[-5~5],函数是randData( )。还有一个计算子序列为0函数ZeroSubarray( )。randData( )如下:int arr[10];void rand...
  • 本程序用到了一个时间种子...还有一个计算子序列为0函数ZeroSubarray( )。randData( )如下:int arr[10];void randData(int a[], int start, int end){srand(time(NULL));for (int i = start; i <= end; ++i)a...
  • 2.输出数组中的全部元素 (1)数组下标 #include &lt;stdio.h&gt; #define M 10 void main() { int a[M],i; for(i=0;i&lt;M;i++) scanf("%d",&amp;a[i]); //输入1~10下标 for(i=0;i&...
  • 利用C语言可以实现对数组各种操作,如输入数组元素输出数组元素、求数组元素平均值、输出数组元素最大值、输出数组元素最小值、查找某数值元素是否存在、给数组元素排序等功能。本压缩文件是上述功能对应...
  • 数组参数属于指针参数,指针参数即时传址参数(或叫引用参数), 如果想在函数修改参数值, 这是唯一途径.如果把数组当作参数, 不管愿意与否, 它就是指针, 指向第一个值指针.1. 数组参数就是指向第一个元素的...
  • 使用指向数组的指针变量来处理数组中的元素,不仅可使程序紧凑,而且还可提高程序的运算速率。7.2.1 一维数组与指针1.数组指针数组的首地址称为数组指针。若定义整型数组a[5],系统为数组分配的地址从10...
  • 主要介绍了C语言输出旋转后数组中的最小数元素的算法原理与实例,数组旋转就是把开头的几个指定的元素放到数组的末尾,需要的朋友可以参考下
  • c语言 查找数组元素

    千次阅读 2020-03-08 22:12:56
    输入n个整数构成一个数组,在这个数组中查找x是否存在,如果存在,删除x,并输出删除元素数组。如果不存在,输出“Not Found”。 定义一个查找函数find(),在数组a中查找x,若找不到函数返回-1,若找到返回x...
  • 在做第三个题目时候,整个人思路卡住了,因为if()函数里面不能嵌套for()循环,然后如果在for()函数里面嵌套了if_else()判断思路,则需要进行每一次的数组元素判断,这样打印输出的结果是每一次判断结果,...
  • 有一个整形数组a,有10个元素,要求输出数组中的全部元素 解题思路:引用数组中各元素的值有3种方法:1.下标法,如a[3];2.通过数组名计算数组元素的地址,找出元素的值 3.用指针变量指向数组元素。 //用指针变量指向...
  • C语言 · 数组输出

    2017-03-24 17:56:00
     输入一个3行4列的数组,找出该数组中绝对值最大的元素输出该元素及其两个下标值。如有多个输出行号最小的,还有多个的话输出列号最小的。 样例输入 1 2 3 5-2 5 8 96 -7 5 3 样例输出 9 2 4 1 #...
  • 例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}, 由于数组中数字2出现了5次,超过数组的长度的一半,因此输出2一种办法是先把数组排序,那么超过一半的元素一定是数组最中间的元素。第二种办法比较抽象,...
  • 数组中,找到仅出现一次的元素,然后在屏幕上显示它们。 #include <stdio.h> int main(){ const int N = 10; int num[N]; for (int i = 0; i<N; i++) { scanf("%d",&num[i]); } //先排序 ...
  • C语言求解数组元素逆置四种方法

    千次阅读 2019-12-23 11:26:30
    1、题目描述 将一个长度为10的整型数组中的值按逆序重新存放。 如:原来的顺序为1,2,3,4,5,6,7,8,9,0,要求改为0,9,8,7,6,5,4,3,2,1。 2、方法1 思路:直接倒序输出 #include <stdio.h> int main(){ int a[10...
  • 使用指向数组的指针变量来处理数组中的元素,不仅可使程序紧凑,而且还可提高程序的运算速率。7.2.1 一维数组与指针1.数组指针数组的首地址称为数组指针。若定义整型数组a[5],系统为数组分配的地址从10...
  • 采用类比和等效法解决一个数组指针在指向数组中的元素时,又指向了一个p[size]数组理解 代码例图 char *lines[5] = //数组指针 { "COSC1283/1984", "Programming", "Techniques", "is", "great fun" ...
  • 数组a包括10个整型元素,用C语言编程序,求出数组a相邻两个元素的和,并将这些和存在数组b,按每行3个元素的形式输出。#include int main() { /*定义数组 声明变量*/ int a[10]; int b[9]; int i, j,k; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,460
精华内容 584
关键字:

c语言输出数组中的元素

c语言 订阅