天天看點

數組與函數的綜合應用基礎回顧數組與函數綜合綜合應用典例

數組與函數的綜合應用

  • 基礎回顧
    • 1.數組基礎知識回顧
    • 2.函數基礎知識回顧
  • 數組與函數綜合
      • 1.初步實作
      • 2.問題引入與解決
  • 綜合應用典例

基礎回顧

1.數組基礎知識回顧

int array[10];			//無初始化的數組,僅僅申請了10個整型數的記憶體,最好初始化:int array[10]={0}; 
	int array2[3]={1,2,3};	//有初始化的數組,完整初始化,數組申請了三個整型數的記憶體,并指派1,2,3 
	int array3[10]={1,2,3};	//有初始化的數組,但不完整,數組申請了100個整型的記憶體空間
							//但隻指派三個數1 2 3,放在數組前三個位置 
	int n;
	n=10; 
	int array4[n];	//實際可使用,但教材、考試中認為非法;
	
	//數組通過下标來引用某個元素,從0開始
	//數組的中括号[]隻有在定時時才表示數組大小,其餘任何情況,都表示用下标來通路數組
	printf("array2 的第一個元素是:%d\n",array2[0]);
	
	//通過循環周遊數組
	for(int i=0;i<3;i++){
		printf("array2中第%d個數:%d\n",i+1,array2[i]);
	}
           

2.函數基礎知識回顧

//自定義函數的結構 
/*
函數傳回類型 函數名(形參1;形參2;......形參n) 
{
	函數體	
}	
*/
           
常見自定義函數的幾種類型
void begin()	//無參數、無傳回類型 
{
	printf("****start****\n");
}
void PingFang(int i) 	//有參數、無傳回類型 
{
	printf("%d的平方為:%d\n",i,i*i);
}
//單片機軟體延時函數用了以上兩種方法 
int add(int i,int j) 
{
	int sum,y;
	y=2*i+j;
	sum=i+j;
	return i+j;		//把函數執行的結果傳回給調用者
}
           
//如果調用的函數有參數,必須傳參!!
//調用的時候。傳遞的參數叫實際參數,對格式沒有要求,對資料類型嚴格要求	
//1.形式參數,作用域僅限于該函數
//2.形式參數,也是一個變量,局部變量,有自己的記憶體空間
/*
空間生存期和死亡期
何時申請了空間
	當該函數被調用的時候,才申請了該記憶體的空間,才有了這個變量
	同時空間内的資料被指派變成實際參數的值,函數調用把實際參數的值拷貝一份給形式參數
 何時釋放了該空間
 	函數執行結束後,該空間由内部管理單元自動回收(釋放) 
 */
           
int main() 
{
	int i=10,j=5,sum;
	sum=add(i,j);
	printf("%d\n",sum);	
	return 0; 
} 
           
//看懂一個函數     
//1.參數怎麼傳+參數的類型、參數的個數
//2.函數的傳回值   傳回值的類型 
//3.功能    函數名
           

數組與函數綜合

1.初步實作

#include<stdio.h>
void fun(int data[3])
{
	int i;
	for(i=0;i<3;i++){
		printf("%d\n",data[i]);
	}
} 
int main()
{
	int score[3]={90,88,93};
	//數組和函數結合,數組名當做實際參數 
	fun(score); 
} 
           

2.問題引入與解決

問題提出1:如何計算數組中元素的個數

解:個數=數組總大小/一個類型的大小

//有何異同
	int  a[3];	//一個int型占用空間4個位元組,三個占用空間12個位元組 
	char b[3];	//一個char型占用空間1個位元組,三個占用空間3個位元組 	
	//同:數組元素個數為3
	//異:數組類型不同,數組記憶體大小不同
	//計算所占記憶體大小 
	printf("數組a的大小:%d\n",sizeof(a)); 
	printf("int 型所占記憶體大小:%d\n",sizeof(int));
	
	//問題提出1:如何計算數組中元素的個數
	//解:個數=數組總大小/一個類型的大小
	printf("數組a的個數為:%d",sizeof(a)/sizeof(a[0]));		//sizeof(a)/sizeof(int)
           
問題提出2:數組在函數中的大小
void fun(int data[3])
{
	printf("in fun 數組data的個數為:%d\n",sizeof(data)/sizeof(int));
	for(i=0;i<3;i++){
		printf("### %d\n",data[i]);
	}
} 
    printf("in fun data的大小為:%d\n",sizeof(data));
    printf("in fun int的大小為:%d\n",sizeof(int));
           
數組與函數的綜合應用基礎回顧數組與函數綜合綜合應用典例

小結:

形參中,雖然寫的是一個數組的樣子,但其中的數字是無效的!!!

不管中括号中寫多少,都不能代表形參的數組有多大,甚至可以省略

這裡的中括号的作用僅僅用來表示,該參數是一個(位址!)

問題提出3:形參大小不變,i邊界很難控制

解決方法:引入第二個參數:n(表示數組大小)

//數組傳參列印通用函數

//第一個參數是數組的首位址,第二個參數是數組的個數

void fun(int data[10],int n)
{
	int i;
	for(i=0;i<n;i++){
		printf("%d\n",data[i]);
	}
} 
調用:fun(score,sizeof(score)/sizeof(score[0])); 
	 fun(&score[0],sizeof(score)/sizeof(score[0])); 
           

綜合應用典例

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

//自定義函數的聲明 
void InitArray(int score[] , int size);
int GetMax(int score[] , int size);
int GetMin(int score[] , int size);
float GetAve(int score[] , int size);
void GetRes(int num1 , int num2 , float num3);

int main()
{
	int score[5],i,max,min,total=0;
    float ave;
   	int len=sizeof(score)/sizeof(score[0]);
   	
   	//1.初始化數組 
	InitArray(score,len);  	  
    
    //找到最高分 
	max=GetMax(score,len);	
	
	//找到最低分 
    min=GetMin(score,len);	
    
    //算出平均分 
    ave=GetAve(score,len);	
    
    //輸出結果 
    GetRes(max,min,ave);		
	
  	system("pause");
	return 0;
}

void InitArray(int score[] , int size)
{
	int i;
    printf("***************學生成績分析*************\n");
    printf("******成績輸入********\n");
	for(i=0;i<size;i++)
    {
		printf("請輸入第%d個學生的成績:",i+1);
        scanf("%d",&score[i]);
        if(score[i]>100 || score[i]<0)
		{
			printf("你輸的是成績嗎??!\n不給你用了\n");
            system("pause");
            exit(0);
        }
    }
    printf("******成績輸出********\n");
	for(i=0;i<size;i++)
		printf("第%d個學生的成績為:%d\n",i+1,score[i]);
}

int GetMax(int score[] , int size)
{
	int max,i;
    max=score[0];
    for(i=0;i<size;i++)
    {
		if(score[i]>max)
			max=score[i];
    }
    return max;
}

int GetMin(int score[] , int size)
{
	int min,i;
    min=score[0];
    for(i=0;i<size;i++)
    {
		if(score[i]<min)
			min=score[i];
    }
    return min;
}

float GetAve(int score[] , int size)
{
	int total,i;
    float ave;
    total=0;
    for(i=0;i<size;i++)
    {
		total+=score[i];
    }
    ave=(float)total/size;
    return ave;
}

void GetRes(int num1 , int num2 , float num3)
{
	printf("最高分:%d\n",num1);
    printf("最低分:%d\n",num2);
    printf("平均分:%.2f\n",num3);
}
           

運作環境:DEV-C++ 5.11

運作結果:

數組與函數的綜合應用基礎回顧數組與函數綜合綜合應用典例

繼續閱讀