实验4作业

实验结论


1.Part 1~4

1.数组名作为函数参数时,形参、实参的语法形式书写注意事项:
形参必须指明数组类型且数组名后加上一对中括号表明参数是数组;
而实参只需写出数组名,因为使用前已经对其进行了定义。
2.函数调用和参数传递过程:
当发生函数调用时,转入子函数去执行。实际参数的值被拷贝/传递给形式参数。
数组名作为参数进行参数传递时,是把实参中数组名代表的地址变量值传递给了形参,所以通过形参这个地址对数组元素进行操作的时候,实际上就是对实参数组进行操作。实参形参对应的是同一组内存空间。
3.对冒泡法排序算法的理解:
用冒泡法对n个数小→大排序,
共需扫描(n-1)遍,第i遍扫描时需要比较(n-i)次。
关于边界条件:
因为数组元素下标从零开始,比较(n-1)次的循环控制条件为“j<n-1-i”。

2.Part 5 编程练习

ex1.c

// 功能描述:输入一组整数,输出最大值 
#include <stdio.h>
int findMax(int x[], int n); // 函数声明
const int N=5;

int main() {
	int a[N];
	int max, i;
	
	printf("输入%d个整数: \n", N);
	
	// 补足程序1 , 利用循环输入N个整数给数组a 
	for(i=0;i<N;i++)
	scanf("%d",&a[i]);
			
	max = findMax(a,N);    // 补足程序2,调用子函数max求数组a的最大元素值,并赋值给max 
		
	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=0;i<n;i++)
    {
        if(x[i]>max)
            max=x[i];
    }
    return max;
}

运行结果:

ex2.c

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

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

运行结果:

选做部分 ex3.c

程序源码:

//程序功能:对用户输入的四个任意字符使用冒泡法进行由大到小排序
#include <stdio.h>
const int N=4;
char string[N];
void output(char x[], int n);
void input(char string[], int n);
void stringSort(char x[],int n);

int main() {
	printf("输入四个字符:\n");
	input(string,N);
	printf("排序前: \n");
	output(string, N);
	
	stringSort(string,N);
	
	printf("\n排序后: \n"); 
	output(string, N);
	printf("\n");
	
	return 0;	
} 

void output(char x[], int n) {
	int i;
	for(i=0; i<N; i++)
		printf("%c", x[i]);
} 

//功能描述:输入函数,完成字符串输入
void input(char string[], int n){
	int i;
	for(i=0;i<n;i++)
		scanf("%c",&string[i]);
}

void stringSort(char 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;
			}
		}
	}
}

运行测试截图:

实验总结与体会


1.理解书上的代码不难,但是要自己完完整整写一段程序就很费力很慢。说明自己训练实践得太少。
2.不同的函数中可以定义相同名称的变量和相同名称的数组。
3.标识符命名是区分大小写的。大小写不同的变量 名、数组名、函数名不同。
4.变量和常量的使用要在定义和初始化后。如ex2.c中要先定义“const int N=4"后才能在定义字符数组“char string[N]”时使用常量N。
5.ex3.c中自定义的input函数可以是无参的,只要把for循环条件设计的形参int n改成常量N。
6.疑问:
1)关于part 5的ex2.c中为什么主函数中要定义一个整形变量int i?
2)字符常量和变量在内存中是以整型方式存储吗?在做ex3.c将字符由大到小排序时直接把字符数组元素当作整形相互比较大小并且与整型变量t互相赋值。

posted @ 2019-04-25 23:17  梓樊  阅读(122)  评论(0编辑  收藏  举报