一、实验结论:

Part1 ~ Part4 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

(有些老师总结的很完美,就直接套用了)

1.数组名作为函数参数时,形参、实参的语法形式书写注意事项:

函数声明和函数定义中,函数名init后面括号里出现的是形式参数,数组名后面要加[ ]。 即:void init(int a[], int n, int value); 函数调用中,函数名init后面括号里出现的是实际参数,直接写数组名。 即: init(b, N, -1); 

2.函数调用和参数传递过程

实验四报告 随笔 第1张

 

3.对冒泡法排序算法的理解,尤其是边界条件的理解和归纳总结:  冒 泡法的算法思想: 把一组数据中相邻的两个数进行比较,较大的数放到后面。 这样,经过一轮以后,最大的数就放到了最后。 把剩余的数,再进行两两比较,经过第2轮后,第2大的数就放到了倒数第二的位置。  边界条件的理解和归纳总结: 用冒泡法对n个数小→大排序, 共需扫描(n-1)遍,第i遍扫描时需要比较(n-i)次。   4.c语言支持在对数组初始化时,只初始化一部分元素。这种情形下,剩余没有被初始化的元素值,系统自动 设为0。   5.sizeof是c语言中的运算符,用于计算数据占用的字节数。表达式sizeof(a) / sizeof(a[0])用于计算数 组元素的个数。其中: sizeof(a)计算数组a占用的总的字节数 sizeof(a[0])计算数组元素a[0]占用的字节数 由于数组中元素类型相同,每一个元素占用的字节数都是相同的。所以,这样就可以计算出一共有 多少个元素。 同理,使用sizeof(a)/sizeof(int)也可以。因为这里每一个数组元素是int型,sieof(int)计算出一个int型数据 占用的字节数。    6. const:以这个为例const int i=100; 这表示i的值不能被改变,也就是常变量,如果你在程序中再给i赋值,比如i=200;
这就会报错。也可用在函数上,格式:int sort(int ,int) const{}
用处:让不想改变的变量不被无意或有意的改变   Part5: 编程练习 练习1:补全程序,查找一组整型数据的最大值。
// 功能描述:输入一组整数,输出最大值 
#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);
        
    // 利用循环输入N个整数给数组a 
    // 补足程序1 
    for(i=0; i<N; i++)
    scanf("%d",&a[i]);
            
    // 调用子函数max求数组a的最大元素值,并赋值给max 
    // 补足程序2 
    max=findMax(a, N); 
        
    // 输出最大值
    printf("数组a中最大元素值为: %d\n\n", max); 
        
    return 0;
} 

// 函数定义
// 功能描述:找出整型数组a中元素的最大值,并返回次此最大值
// 补足函数findMax()的实现部分3 
int findMax(int x[],int n ){
    int i,max;
    max=x[0];
    for (i=1;i<n;i++){
        if(max<x[i])
        max=x[i];
    }
    return max;
}

运行结果:   实验四报告 随笔 第2张

 

练习2:补全程序,使用冒泡法对字符数组由大到小排序。
#include <stdio.h>
const int N=4;
void output(char x[], int n);  // 函数声明 
// 排序函数声明
// 补足代码1 
void bubbleSort( char b[], int n);

int main() {
    char string[N] = {'2','0','1','9'};
    int i;
    
    printf("排序前: \n");
    output(string, N);
    
    // 调用排序函数对字符数组中的字符由大到小排序 
    // 补足代码2 
    bubbleSort(string, N);
    
    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]);
} 

// 函数定义
// 函数功能描述:对一组字符由大到小排序
// 形参:字符数组,以及字符数组元素个数
// 补足代码3 
 void bubbleSort( char b[], int n){
    int j,k;
    char t;
    for(j=0;j<n;j++){
        for(k=0;k<n-1-j;k++){
        if(b[k]<b[k+1]){
        t=b[k+1];
        b[k+1]=b[k];
        b[k]=t;}
    }
  }
}

运行结果:

实验四报告 随笔 第3张

 

  二、实验反思 (1)在part5练习中,第一次编程中未把max=findMax(a, N);中的“max=”导致运行结果不对,最后去看了其他同学的报告,才知道问题出在哪里。 现在针对问题,总结一下return的用法作用: 1.返回值,这个返回值是和函数的类型有关的,函数的类型是什么,他的返回值就是什么。
例:主函数int main()
{ }这里就必须有一个return,只有void时可以不用返回值。
2.功能函数
int fun()
{
return 1;
}
这个时候fun函数的作用就是返回一个int 类型的值,
可以直接拿来用 如int a=fun();
这里就相当于int a=1;
3。return后面的语句不会执行,我们可以用它来结束程序
比方找出三个数种最大的一个数
void main
{
int a,b,c;
if(a>b)
if(b>c)
{
return printf("最大值为%d",a);
}
.....
}
在这里if(b>c)
我们就可以直接得出a是最大了,就没必要执行下面的语句了,return就起到了终止语句的作用了。
  (2)part5练习二,因为if后面语句的小括号没有打,导致整个运算结果出错。在以后的学习实验中应更加注意细节。
#include <stdio.h>
const int N=4;
void output(char x[], int n);  // 函数声明 
// 排序函数声明
// 补足代码1 
void bubbleSort( char b[], int n);

int main() {
    char string[N] = {'2','0','1','9'};
    int i;
    
    printf("排序前: \n");
    output(string, N);
    
    // 调用排序函数对字符数组中的字符由大到小排序 
    // 补足代码2 
    bubbleSort(string, N);
    
    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]);
} 

// 函数定义
// 函数功能描述:对一组字符由大到小排序
// 形参:字符数组,以及字符数组元素个数
// 补足代码3 
 void bubbleSort( char b[], int n){
    int j,k;
    char t;
    for(j=0;j<n;j++){
        for(k=0;k<n-1-j;k++){
        if(b[k]<b[k+1])
        t=b[k+1];
        b[k+1]=b[k];
        b[k]=t;
    }
  }
}

实验四报告 随笔 第4张

 

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄