利用函数实现模块化程序设计

Rand_Ar.h

#ifndef RAND_AR_H
#define RAND_AR_H

extern void Swap_Int(int* ap, int* bp);

extern bool Init_Ar(int* br, int n);

extern bool Init_Range_Ar(int* br, int n, int ran);

extern void Print_Ar(int* br, int n);

extern void BubbleSort(int* br, int n);

#endif
 

Rand_Ar.c

#include <stdbool.h>
#include <stdio.h>
#include <limits.h>
#include <assert.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include<malloc.h>
#include"Rand_Ar.h" 



void Swap_Int(int* ap, int* bp)
{
	assert(ap != NULL && bp != NULL);
	int tmp = *ap;
	*ap = *bp;
	*bp = tmp;
}
int FindValue(const int* br, int n, int val)
{
	assert(br != NULL);
	if (n < 1) return -1;
	int pos = n - 1;
	while (pos >= 0 && br[pos] != val)
	{
		--pos;
	}
	return pos;
}
/*
bool Init_Ar_NotRepeat(int* br, int n)
{
	assert(br != NULL);
	if (n < 1) return false;
	int* table;
	table = (int*)malloc(n,sizeof(int));
	int val = 0;
	int i = 0;
	while (i < n)
	{
		val = rand() % 100 + 1;
		if (table[val] == 0)
		{
			br[i] = val;
			i++;
			table[val] = 1;
		}
	}
	return true;
}


bool Init_Ar_NotRepeat(int* br, int n)
{
	assert(br != NULL);
	if (n < 1) return false;
	int table[n + 1] = { 0 };
	int val = 0;
	int i = 0;
	while (i < n)
	{
		val = rand() % 100 + 1;
		if (table[val] == 0)
		{
			br[i] = val;
			i++;
			table[val] = 1;
		}
	}
	return true;
}
*/
bool Init_Ar_NotRepeat(int* br, int n) 
{
	assert(br != NULL);
	if (n < 1) return false;
	int val = 0;
	int i = 0;
	while (i < n)
	{
		val = rand() % 100 + 1;
		int pos = FindValue(br, i, val);
		if (pos == -1)
		{
			br[i] = val;
			i = i + 1;
		}
	}
	return true;
}

bool Init_Range_Ar(int* br, int n, int ran)
{
	assert(br != NULL);  //终止程序, printf filename line
	if (n < 1)return false;
	for (int i = 0;i < n;++i) //Init_Ar
	{
		br[i] = rand() % ran + 1; //*(br+i),即br假如被传入的是空指针,而空地址不能进行解引用,会直接导致调用函数失败
	}
	return true;
}

bool Init_Ar(int* br, int n)
{
	assert(br != NULL);  //终止程序, printf filename line
	if (n < 1)return false;
	for (int i = 0;i < n;++i) //Init_Ar
	{
		br[i] = rand() % 100 + 1; //*(br+i),即br假如被传入的是空指针,而空地址不能进行解引用,会直接导致调用函数失败
	}
	return true;
}

void Print_Ar(int* br, int n)
{
	assert(br != NULL);
	for (int i = 0;i < n;++i)
	{
		printf("%5d", br[i]);
		if ((i + 1) % 10 == 0)
		{
			printf("\n");
		}
	}
	printf("\n");
}

void BubbleSort(int* br, int n)
{
	assert(br != NULL);
	if (n < 2) return;
	for (int i = 1;i < n;++i)
	{
		bool tag = true;
		for (int j = 0;j < n - 1;++j)
		{
			if (br[j] > br[j + 1])
			{
				Swap_Int(&br[j], &br[j + 1]);
				tag = false;
			}
		}
		if (tag)
		{
			break;
		}
	}
}

Hello.c

#include <stdbool.h>
#include <stdio.h>
#include <limits.h>
#include <assert.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>
#include"Rand_Ar.h" 
#define ARSIZE 100 
#define _CRT_SECURE_NO_WARNINGS -1




int main()
{
	int ar[ARSIZE] = { 0 };
    //Init_Ar(ar, ARSIZE);
	Init_Ar_NotRepeat(ar, ARSIZE);
	Print_Ar(ar, ARSIZE);
	BubbleSort(ar, ARSIZE);
	Print_Ar(ar, ARSIZE);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值