1. 程式人生 > >C語言一維陣列&&二維陣列練習

C語言一維陣列&&二維陣列練習

    哥們今天剛學習了C語言的陣列,就課後作業幾道小練習,拿給大家分享一下,程式碼肯定不夠簡潔,不過思路大致沒錯,Seeking advice!!!!

/*
輸入6個人的成績(各不相同),打印出最大成績的是第幾個人?
*/
#include <stdio.h>
void main()
{
	int i,a=6,max,z;
	int score[a],two[a];
	for(i=0;i<a;i++)
	{
		printf("請輸入第%d個人的成績(注意:合計需輸入6個人的成績):",i+1);
		scanf("%d",&score[i]);	
	}
	//將使用者輸入的6個人的成績賦給two陣列; 
	for(i=0;i<a-1;i++)
	{
		two[i]=score[i];					
	} 
	
	//求出輸入的6個人的最大成績 
	for(i=0;i<a-1;i++)
	{
		if(two[i]>two[i+1])
		{
			max=two[i];
			two[i]=two[i+1];
			two[i+1]=max;
		}					
	} 	
	printf("\n");
		
	for(i=0;i<a;i++){
		if(score[i]==max)
		{
			printf("第%3d 個人的成績是最大的:\n",i+1);	
		}	
	}
}

/*
2、在一個長度為10的整形陣列中,前9個元素是{12,23,34,45,56,67,78,89,90}。
現在要求輸入一個整數,把它放到陣列中正確的位置當中。(不能刪除已有元素)
*/ 
#include <stdio.h>
void main()
{
	int i,small;
	int number[10]={12,23,34,45,56,67,78,89,90};
	printf("請輸入一個整數:");
	//將使用者輸入的整數賦給陣列名為number的下標為9的元素中; 
	scanf("%d",&number[9]);
	
	//倒序排列,從小到大; 
	for(i=9;i>0;i--)
	{
		if(number[i]<number[i-1])
		{
			small=number[i];
			number[i]=number[i-1];
			number[i-1]=small;	
		}	
	}
	printf("根據你輸入的一個整數從小到大排列的順序是:\n");
	for(i=0;i<10;i++)
	{
		printf("%d\n",number[i]);	
	}
	
}

<pre class="plain" name="code">/*
3、在一個長度為10的整形陣列中,已經放置好了任意10個整數。要求使用者任意輸入
一個整數,判斷該數字是否在陣列中。如果在,刪除陣列中該元素,並把後面的
元素往前挪。(讓空出的位置在最後)

注意:為了讓使用者更清楚的知道這個陣列中分別有哪些元素,他好決定刪除哪一個;
順便也好讓他更清楚的知道該元素是否已經刪除,所以這裡的10個元素,
採用讓使用者輸入的形式! 
*/
#include <stdio.h>
void main()
{
	int i,j,z,k=0,a=10,b;
	int number[a];
	
	for(i=0;i<a;i++)
	{
		//提示使用者輸入; 
		printf("請您輸入第%d個整數(注意:請任意輸入10個整數):",i+1);
		//將獲取到使用者輸入的整數利用for迴圈分別賦給該陣列的每一個元素中;
		scanf("%d",&number[i]); 
	}
	printf("\n");
	//獲取使用者想要刪除的整數 
	printf("不錯嘛,這麼快就輸入完了\n");
	printf("想好了,您要刪除哪個整數了嗎?不要猶豫,騷年!!!:");
	scanf("%d",&b); 
	
	//為了避免刪除的數有重複的,就再迴圈一次(實現方式很多,小弟初學,只想到這種笨方法,見諒...); 
	for(z=0;z<2;z++)
	{
		for(i=0;i<a;i++)
		{
			//利用迴圈判斷使用者要刪除的數是否存在該陣列的某一個元素中; 
			if(number[i]==b)
			{
				/*當滿足條件時,將滿足條件的那個元素的後一個元素的值 
				賦給滿足條件的那個元素,並利用迴圈分別將後一個元素的值賦給
				前一個元素; */ 
				for(j=0;j<a-1;j++)
				{
					number[i+j]=number[i+j+1]; 	
				}
				k++;//當刪除一個數據時,k自增;
			}
		}
	}
	
	//將使用者刪除掉的數都賦值為0; 
/*	for(i=a-k;i<a;i++)
	{
		number[i]=0;	
	}  */
	
	printf("考考您的記憶,您自已好好看看刪除了沒?\n");
	/*這裡迴圈的次數由你決定;如果迴圈所有的元素,那麼for迴圈的判斷條件為i<a;
	因為上面註釋掉的for迴圈裡已經將使用者需刪除掉的數字都賦值為0,所有個人覺得在這裡就沒必要列印了;
	所以只打印了沒有刪除掉的數,即判斷條件為 i<a-k 
	*/ 
	for(i=0;i<a-k;i++)
	{
		printf("%d\n",number[i]);	
	} 
}


/*
4、使用者任意輸入一個3*3矩陣,要求打印出左右對角線之和。
*/
#include <stdio.h>
void main()
{
	int i,j,a=3,b=3,c,sum=0; 
	int number[a][b];
	//行 
	for(i=0;i<a;i++)
	{
		//列 
		for(j=0;j<b;j++)
		{
			printf("騷年!請輸入第%d行的第%d個整數(注意:請任意輸入%d個整數)",i+1,j+1,a*b);
			scanf("%d",&number[i][j]); 
		}	
	}
	printf("\n");
	//打印出剛才使用者輸入的矩形; 
	printf("騷年,這是您剛才輸入的%d*%d的矩形\n",a,b);
	for(i=0;i<a;i++)
	{
		for(j=0;j<b;j++)
		{
			printf("%-4d",number[i][j]); 
		}
		printf("\n");	
	}
	
	printf("騷年,想不想打印出左右對角線之和?(注意:如果想的話請輸入-1)\n");
	scanf("%d",&c);
	
	if(c==-1)
	{
 		sum=number[0][0]+number[a-1][b-1];
		printf("騷年,左右對角線之和為:%d\n",sum);
	}
	else
	{
		printf("不想拉倒...");
	}
}

/*
5、使用者任意輸入10個數,把它們按從小到大排序。(氣泡排序)
解析:很簡單的氣泡排序練習; 
*/ 
void main()
{
	int i,j,a=10,max;
	int number[a];
	//獲取使用者輸入的10個數; 
	for(i=0;i<a;i++)
	{
		printf("騷年,這是您輸入的第%d個數(注意:合計輸入10個數):",i+1);
		scanf("%d",&number[i]);
	}
	
	//從小到大排序;
	for(j=0;j<a;j++)
	{
		for(i=0;i<a-1;i++)
		{
			if(number[i]>number[i+1])
			{
				max=number[i];
				number[i]=number[i+1];
				number[i+1]=max;
			}	
		} 
	} 
	
	printf("\n");
	printf("根據騷年您輸入的%d位數,從小到大的排列順序如下:\n",a);
	
	//從小到大列印輸出
	for(i=0;i<a;i++)
	{
		printf("%d\n",number[i]);	
	} 
}