2019春第四周做業

這個做業屬於的課程 c語言程序設計2
這個做業的要求在哪裏 2019年春季第四周做業
我在這個課程的目標是 能編寫一些簡單的軟件應用
這個做業在哪一個具體方面幫助我實現目標 這個做業很好的鍛鍊了個人思惟能力,而且學習到了新算法,豐富了個人知識
參考文獻 C語言程序設計
#2019春第四周做業(基礎題)計算機
5-1
輸入一個正整數 n (1≤n≤10)和n 階方陣a的元素,若是方陣a中的全部元素都沿主對角線對稱,輸出「Yes」, 不然,輸出「No」。主對角線爲從矩陣的左上角至右下角的連線,方陣a中的全部元素都沿主對角線對稱指對全部i, k,a[i][k]和a[k][i]相等。輸入輸出示例以下:
輸入:
3
1 2 3
4 5 6
7 8 9
輸出:
No
##實驗代碼
#include <stdio.h>
int main(void)	
{	
   	int found, i, k, n;
   	int a[10][10];

   	scanf ("%d", &n);
   	for (i = 0; i < n; i++)	
   		for (k = 0; k < n; k++)
			scanf("%d", &a[i][k]);

 	found = 1;
   	for (i = 0; i < n; i++){	
   		for (k = 0; k < i; k++){
   			if ((3分)) {	
			    ;          
           	            break;
       	                 }
		}
		if (){
			break;
   		}
  	}

  	if (found != 0){
  		printf("Yes\n");
  	}  
  	else{
  		printf("No\n");
  	}  

	return 0;
}

##作題思路 直接在空格內比較與他對稱的數是否相等,若是不相等,則found賦值爲零,跳出內層for循環。由於還有一個外層for循環,因此若是found已經爲零,則跳出外層循環。c++

#7-2 選擇法排序 (20 分) 本題要求將給定的n個整數從大到小排序後輸出。 輸入格式: 輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。 輸出格式: 在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。 輸入樣例: 4 5 1 7 6 輸出樣例: 7 6 5 1 ##實驗代碼算法

#include<stdio.h>
int main (void)
{
	int n, big, i, x, sum;
	scanf("%d", &n);
	int a[n];
	for(i=0; i<n; i++){
		scanf("%d", &a[i]);
	}
	for(x=0; x<n-1; x++){
		big=x;
		for(i=x+1; i<n; i++){
			if(a[i]>a[big]){
				big=i;
			}
		}
		sum=a[x];
		a[x]=a[big];
		a[big]=sum;
		printf("%d%s", a[x], " ");
	}
	printf("%d", a[x]);
	
	return 0;
}

##設計思路 具體思路:用·第一個for語句來控制總循環次數,第二個for語句來判斷大小:若是後面的數比前面的數大,則把下標賦值給big,找出最大值對應的下標。 判斷大小的for語句結束後,把最大值與比較的第一個數交換位置,而後第一個for增一。使得上一次比較出來的最大值不用再計算。編程

##3)本題作對過程碰到問題及解決辦法 一遍過,書上也有。數組

##正確截圖 學習

#7-1 找鞍點 (20 分) 一個矩陣元素的「鞍點」是指該位置上的元素值在該行上最大、在該列上最小。 本題要求編寫程序,求一個給定的n階方陣的鞍點。 輸入格式: 輸入第一行給出一個正整數n(1≤n≤6)。隨後n行,每行給出n個整數,其間以空格分隔。 輸出格式: 輸出在一行中按照「行下標 列下標」(下標從0開始)的格式輸出鞍點的位置。若是鞍點不存在,則輸出「NONE」。題目保證給出的矩陣至多存在一個鞍點。 輸入樣例1: 4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9 輸出樣例1: 2 1 輸入樣例2: 2 1 7 4 1 輸出樣例2: NONE測試

##實驗代碼設計

#include <stdio.h>
int main(void)	
{	
   	int n, line,column,min, min2=0,max1=0, max2=0,sum=9;
   	scanf("%d", &n);
   	int a[n][n];
   	for(line=0; line<n; line++){
   		for(column=0;column<n; column++){
   			scanf("%d", &a[line][column]);
		}
	}
	for(line=0; line<n; line++){
		for(column=1; column<n; column++){
			if(a[max1][max2]<=a[line][column]){
				max1=line;
				max2=column;
			}
		}
	    for(min=0; min<n; min++){
			if(a[max1][max2]<=a[min][max2]){
				min2++;
			}
	    }
	    if(min2==n){
	    	printf("%d %d",max1,max2);
	    	sum=10;
		}
	    min2=0;
	    max1=line+1;
	    max2=0;
    }
	if(sum!=10){
		printf("NONE");
	}
	
	return 0;
}

##設計思路 具體思路:先找出一行中最大值所在位置,而後把它的下標存在max1,max2中。再比較這個數是否在列裏是最小的。在這裏定義了一個計數器min2,計算有多少個數大於等於這個行最大值,若是等於n,則符合題意,輸出,並使sum等於10(說明有符合題意的數)。 再在最後使計數器min2歸零。max1表示的行從下一行開始,max2表示的列從第一個元素開始,。 若是sum!=10.則沒有符合題意的數,輸出NONE.3d

##3)本題作對過程碰到問題及解決辦法 問題:沒有在c++上用對編譯器 解決方法:在班羣裏提出了個人問題,楊大佬問我PTA用的是哪一個編譯器,我改了編譯器後就能夠賦初始值了。 問題:第三個測試點錯誤,但我不知道爲何錯了。 解決方法:換了一個新的思路。調試

##正確截圖 code

#7-1 冒泡法排序 (10 分) 輸入1個正整數n(1<=n<=10),而後輸入n個整數並存放在數組中,將這n個整數從大到小排序後輸出,相鄰數字間有一個空格,行末不得有多餘空格。 輸入格式: 輸入第一行給出一個不超過10的正整數n。第二行給出n個整數,其間以空格分隔。 輸出格式: 在一行中輸出從大到小有序的數列,相鄰數字間有一個空格,行末不得有多餘空格。 輸入樣例: 4 75 71 77 76 輸出樣例: 77 76 75 71

##實驗代碼

#include<stdio.h>
int main (void)
{
	int n, big, i, sum=0;
	scanf("%d", &n);
	int a[n];
	for(i=0; i<n; i++){
		scanf("%d", &a[i]);
	}
	for(i=0; i<n; i++){
		for(big=i; big<n; big++){
			if(a[big]>a[i]){
				sum=a[i];
				a[i]=a[big];
				a[big]=sum;
			}
		}
		if(i<n-1){
			printf("%d ", a[i]);
		}
		else{
			printf("%d", a[i]);
		}
	
	}
	
	return 0;
}

##設計思路 具體思路:和選擇排序法差很少,但冒泡排序法是直接交換數的位置。 若是後一個數a[big]比前一個數a[i]大,則交換兩個數的位置,並把大的那個數存在a[i]當中,如此循環。 內層for每循環一遍,就有一個最大值被頂到循環開始的位置。而外循環就自加一,再把這個已經自加一的值做爲內層for循環的開始值。

##3)本題作對過程碰到問題及解決辦法 一遍過,由於在寒假看書的時候已經作過一遍了。 ##正確截圖

##對本身做業的評價 嗯··,其實呢感受還不夠完美,代碼就是要簡潔易懂嘛。找鞍點這個題作了好久好久,哎,作不對題不能總怪PTA不正確,是本身的問題。要虛心,好好思考。

##學習進度條 |周|這周所花的時間|代碼行|學到的知識點簡介|目前比較迷惑的問題| |-|-|-|-|-| |第四周|十多個小時|134行|選擇排序法,字符數組和字符串的使用|爲何我在PTA和上用的也是c++編譯器,可是在c++上能正確輸出,在PTA上就不正確,爲何呢。| ##學習感悟 找鞍點這個程序寫了好久,寫完以後發現其實很簡單,就是本身不細心,調試的少,因此不能準確知道數據的流向,不清楚數據的變更狀況。要細心,多調試。加油 結對編程隊友:宋志豪

相關文章
相關標籤/搜索