实验四报告

一、实验结论:

Part1 ~ Part4 

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

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

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

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

 

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:补全程序,使用冒泡法对字符数组由大到小排序。
#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;}
    }
  }
}

运行结果:

 

 
二、实验反思
(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;
    }
  }
}

 

 

posted @ 2019-04-25 18:58  夏尔何  阅读(165)  评论(0编辑  收藏  举报