數組作爲函數參數

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//數組作爲函數的參數,傳遞的是地址(指針),佔4個字節
//函數的參數對於數組沒有副本機制,數組的拷貝非常浪費內存空間以及CPU
void show(int num[10])
{
	for (int i = 0; i < 10; i++)
	{
		printf("%d\n", num[i]);
	}
}

void show1(int *p)
{
	for (int i = 0; i < 10; i++)
		printf("%d\n", p[i]);
}

void show2(int num[3][4])
{
	for (int i = 0; i < 12; i++)
	{
		printf("%d\n", num[i / 4][i % 4]);
	}
}
void show3(int(*p)[4])
{
	for (int i = 0; i < 12; i++)
	{
		printf("%d\n", p[i / 4][i % 4]);
	}
}

void main1()
{
	int num[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int number[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };

	//show1(num);
	//show2(number);
	show3(number);

	system("pause");
}

//數組的值逆序排列
void change(int number[], int n)
{
	int turn;
	for (int i = 0; i < n / 2; i++)
	{
		turn = number[i];
		number[i] = number[n - 1 - i];
		number[n - 1 - i] = turn;
	}
	for (int i = 0; i < n; i++)
		printf("%d\n", number[i]);
}

void main2()
{
	int num[11] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 };
	change(num, 11);
	change(num, 11);

	system("pause");
}


//用指針的方法將數組的值從大到小輸出
//冒泡排序
void order(int *p, int n)
{
	int max, turn;
	for (int i = 0; i < n - 1; i++)
	{
		max = i;
		for (int j = i + 1; j < n; j++)
		{
			if (p[j]>p[max])
			{
				max = j;
			}
		}
		if (max != i)
		{
			turn = p[i];
			p[i] = p[max];
			p[max] = turn;
		}
		printf("%d\n", p[i]);
	}
	printf("%d\n", p[n - 1]);

}

void order1(int *p, int n)
{
	int turn;
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = i + 1; j < n; j++)
		{
			if (*(p + j)>*(p + i))
			{
				turn = *(p + i);
				*(p + i) = *(p + j);
				*(p + j) = turn;
			}
		}
		printf("%d\n", *(p + i));
	}
	printf("%d\n", *(p + n - 1));
}

void main3()
{
	time_t ts;
	srand((unsigned int)time(&ts));

	int num[10];
	for (int i = 0; i < 10; i++)
	{
		num[i] = rand() % 100;
		printf("%d\n", num[i]);
	}

	printf("------------------------------\n");
	order1(num, 10);

	system("pause");
}

//有一個班,3個學生,各學4門課,計算總平均成績以及第n個學生的成績
void avr(int(*p)[4], int n)			//指向一維數組的指針
{
	int res = 0;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			res += p[i][j];
		}
	}
	printf("average score is %d\n", res /= 12);
}

void showstuscore(int num, int(*p)[4])
{

	for (int i = 0; i < 4; i++)
	{
		printf("%d\n", *(*(p + num - 1) + i));

	}
}

//只要有一門成績不及格,則輸出其所有科目的成績
void 抓不及格(int num, int(*p)[4])
{
	for (int i = 0; i < num; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			if (*(*(p + i) + j) < 60)
			{
				printf("第%d位同學的所有成績\n", i + 1);
				showstuscore(i + 1, p);
				break;
			}
		}
	}

}

void main()
{
	int score[3][4] = { { 45, 68, 97, 68 }, { 49, 67, 65, 99 }, { 100, 59, 98, 86 } };
	//avr(score, 3);

	//int num;
	//puts("查看第幾位學生的所有成績?\n");
	//scanf_s("%d", &num);
	//showstuscore(num, score);

	抓不及格(3, score);

	system("pause");
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章