实验四

Part1~~~4实验总结

数组是存放两个或两个以上相邻存储单元的集合,每个存储单元中存储相同数据类型的数据。使用数组时要事先说明,在定义申明中指明数组类型,

数组神明时必须制定每个元素的类型和元素的个数。

inrt类型占4个字节,double类型占8个字节,char类型占1个字节。

数组中方括号是数组的下标(索引)。表示数组元素的位置,下标必须为整型值。

函数名作为参数时,形参,实参的书写格式

函数申明和函数定义中,函数名int后面括号里出现的是形式参数,要加【】,

函数调用中,函数名int后面括号里出现的是实际参数,直接写数组名,即int(b,n,-1)

函数调用时,参数的传递过程分析:

在程序当中到发生函数调用时,转入子程序中去执行

Part4

冒泡法的具体排序过程描述


假设要对n个数由小到大排序,使用冒泡法具体排序过程如下:


第1遍: 对n个数进行第1遍扫描


比较第1个数与第2个数,若a1>a2,则交换;此时,a2中存放a1和a2两个数当中的最大值。


比较第2个数与第3个数,若a2>a3,则交换;此时,a3中存放a2和a3两个数当中的最大值


依次类推…


比较第n-1个数和第n个数,若a n-1 >a n ,则交换;此时,a n 中存放a n-1 和a n 当中的最大值。


经过(n-1)次比较后,最大的数被放在a n


第2遍: 前面n-1个数进行第2遍扫描:


。。。
经过(n-2)次比较后,第2大的数被放在a n-1


… …
第n-1遍: 对前面2个数进行第n-1遍扫描


。。。


经过1次比较后,第2小的数被放a2


至此,排序过程结束。


总结: 用冒泡法对n个数小→大排序,


共需扫描(n-1)遍,第i遍扫描时需要比较(n-i)次

 

// 对一组整型数据由小到大排序(采用冒泡排序算法) 
#include <stdio.h>
const int N=5;
void bubbleSort( int [], int);  // 函数声明 
int main() {
    int i,a[N];
    
    printf("请输入%d个整型数据: \n", N);
    for(i=0; i<N; i++)
        scanf("%d",&a[i]);
        
    printf("排序前的数据: \n");
    for(i=0; i<N; i++)
        printf("%d ",a[i]);
        
    printf("\n");
    
    bubbleSort(a,N);  // 调用函数bubbleSort()对数组a中的N个元素排序 
    
    printf("排序后的数据: \n");
    for(i=0; i<N; i++)
        printf("%d ",a[i]);
        
    printf("\n");
    
    return 0; 
}

// 函数定义
// 函数功能描述:对一组整型数据由小到大排序 
// 形参描述:x是待排序的数组名,n是数组中元素个数 
// 排序算法:冒泡法 
void bubbleSort( int x[], int n) {
    int i,j,t;
    
    for (i=0; i<n-1; i++) {    
        for(j=0; j<n-1-i; j++) {
            if( x[j] > x[j+1] ) {
                t = x[j]; 
                x[j] = x[j+1]; 
                x[j+1] = t;
            }
        }
    }
}
// 注意内外层循环的边界条件
// 冒泡排序算法的归结起来是:
// 对n个数排序,共需要扫描n-1遍

// 变量i用于控制要扫描多少遍
// 变量j用于控制每一遍扫描需要比较多少次
// 由于数组中第一个元素下标从0开始,所以j的取值是从0~n-1-i而不是,从1~n-i 


Part5练习一:我觉得我的程序还是有点问题,希望有人可以帮我找一下问题解决一下。

// 功能描述:输入一组整数,输出最大值 
#include <stdio.h>
int findMax(int a[], int n); // 函数声明
const int N=5;
int main() {
    int a[N];
    int max, i;
    
        printf("输入%d个整数: \n", N);
    
        for(i=0; i<N; i++){// 利用循环输入N个整数给数组a 
     
        scanf("%d",&a[i]);
        
    }
            
        for( i=0; i<N; i++)
        
        max=findMax(a,N);   
        
                       
    
    printf("数组a中最大元素值为: %d\n\n", max); 
        
    return 0;
} 

int findMax(int a[],int n)
{

    int i,j, max;// 功能描述:找出整型数组a中元素的最大值,并返回次此最大值

    for( i=0; i<n-1; i++){
        for( j=0; j<n-1-i; j++){
            if( a[j] > a[j+1]) {
                max = a[j];
                a[j] = a[j+1];
                a[j+1] = max;
             return max;        
            }
        }
    }
                             // 函数定义
}

    // 补足函数findMax()的实现部分3 
// 。。。 

练习二

#include <stdio.h>
const int N=4;
void output(char x[], int n);  // 函数声明 
void rank(char x[]);// 排序函数声// 补足代码1 

int main() {
    char string[N] = {'2','0','1','9'};
    int i;
    
    printf("排序前: \n");
    output(string, N);
    
    rank(string);// 调用排序函数对字符数组中的字符由大到小排序 
    
    printf("\n排序后: \n"); 
    output(string, N);
    
    printf("\n");
    
    return 0;    
} 

// 函数定义
// 函数功能描述:输出包含有n个元素的字符数组元素
// 形参:字符数组,以及字符数组元素个数
void output(char x[], int n) {
    int i;
    
    for(i=0; i<N; i++)
        printf("%c", x[i]);
} 
void rank(char x[])
{
    int num,i,j;
    char t;
    num=sizeof(x)/sizeof(char);
    for(j=0;j<num-1;j++)
      for(i=0;i<num-j-1;i++)
        if(x[i]<x[i+1])
        {
            t=x[i];
            x[i]=x[i+1];
            x[i+1]=t;
        }
}
// 函数定义
// 函数功能描述:对一组字符由大到小排序
// 形参:字符数组,以及字符数组元素个数
// 补足代码3 
// 。。。 

 

此次试验最大的感受就是c语言要我小命,主要问题还是函数自定义那部分吧,回头我再联系联系。

互评

https://www.cnblogs.com/awjwj/p/10771497.html

https://www.cnblogs.com/24cherry/p/10770259.html

https://www.cnblogs.com/dejizhuoma4637/p/10771646.html

 

posted on 2019-04-25 22:59  莫,默,蓦  阅读(164)  评论(1编辑  收藏  举报