標籤:錯誤 次數 問題 int 運算子 基礎上 表示 ++ n個元素
一、PTA實驗作業題目1:7-4 列印菱形圖案
本題要求編寫程式,列印一個高度為n的、由“”組成的正菱形圖案。
輸入格式 : 輸入在一行中給出一個正的奇數n。
輸出格式 : 輸出由n行星號“”組成的菱形,如範例所示。每個星號後跟一個空格。
1. 本題PTA提交列表
2. 設計思路上半部分
- 1、定義變數i實現行數的迴圈,j實現空格的迴圈,K實現 * 的迴圈 ,m,n ;
- 2、數的輸入:scanf("%d",&n);
- 3、取奇數且保證為正數;
- 4、進入for外迴圈 實現前(n/2)+1行,即輸出至中間行 for(i=1;i<=n/2+1;i++);
- 5、內迴圈實現空格 (j=((n/2)+1-i)*2;j>=1;j--);
- 6、繼續嵌套迴圈for(k=1;k<=(2i)-1;k++)實現 輸出;
- 7、記得換行: printf("\n");
下半部分
- 8、繼續重複實現後面幾行for(i=1;i<=n/2;i++)
- 9、防止後面多出一行空格,先判斷: if(i!=1) printf("\n");
- 10、接下來的同上;
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
- (1)一開始的思路錯誤,不懂的怎麼實現前面空格,解決:需要找出行數 i 與空格關係;
- (2)格式錯誤&修改錯誤,跟題目要求不一致,多次改動,加星號之間的空格,然後在最後一行應該是沒有空行的,所以要把下半部分,最後面的printf(“\n”)放到for的最開始,否則會從下半部分就出現換行,多空出一行;
題目2:7-5 BCD解密
BCD數是用一個位元組來表達兩位十進位的數,每四個位元表示一位。所以如果一個BCD數的十六進位是0x12,它表達的就是十進位的12。但是小明沒學過BCD,把所有的BCD數都當作位元轉換成十進位輸出了。於是BCD的0x12被輸出成了十進位的18了!
現在,你的程式要讀入這個錯誤的十進位數,然後輸出正確的十進位數。提示:你可以把18轉換回0x12,然後再轉換回12。
1. 本題PTA提交列表
2. 設計思路
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
- (1)題目理解出錯,根據提示先把18轉換回十六進位0x12,然後再轉換回十進位12,結果出錯;
- (2)進位間的轉換不對,在上一個問題基礎上進行修改,反而更亂,再進行計算髮現在第一步就已經轉換成了12,不需要再變,否則相當於沒轉;
題目3:7-10 簡單計算機
類比簡單運算器的工作。假設計算機只能進行加減乘除運算,運算數和結果都是整數,四種運算子的優先順序相同,按從左至右的順序計算。
輸入格式: 輸入在一行中給出一個四則運算算式,沒有空格,且至少有一個運算元。遇等號”=”說明輸入結束。
輸出格式: 在一行中輸出算式的運算結果,或者如果除法分母為0或有非法運算子,則輸出錯誤資訊“ERROR”。
1. 本題PTA提交列表
2. 設計思路
3.代碼
4.本題調試過程碰到問題及PTA提交列表情況說明
- 答案錯誤,輸不出任何值
-答案只滿足輸出範例,改為其他數就是錯誤的;
- 修改多次,仍為部分正確,規定時間內沒法改正確;
二、本周題目集的PTA最後排名
三、本周學習總結1.你學會了什嗎?1.1 一維數組如何義、初始化?一維數組的初始化:在編譯階段進行,不佔用已耗用時間;
- 一維數組定義的一般形式是:類型名 數組名 [數組長度];
- 一維數組的初始化:類型名 數組名 [數組長度] ={ 初值表 };如:a [ 5 ] ={1,2,3,3,4}; static char ch [ 3 ]= {‘p‘,‘q‘,‘q‘};給部分元素賦值 static int a [ 5 ] = {7,6};
1.2 一維數組在記憶體中結構?可畫圖說明。數組名表示什嗎?
- 數組儲存:系統為數組分配記憶體中的一片連續的存貯單元,各元素按下標從小到大的順序排列;
- 一維數組在記憶體中結構:具體見大一C語言課本149-150頁;
- 數組名是一個地址常量,存放數組記憶體空間的首地址;
a
4010 4012 4014 4016 4018 4020 4022 4024 4026 4028 記憶體位址
9 8 7 6 5 4 3 2 1 0 下標
值
1.3 為什麼用數組?
- 數組是可以在記憶體中連續儲存多個元素的結構數組中的所有元素必須屬於相同的資料類型;
- 減少記憶體佔用、代碼定義變數;
1.4 介紹選擇法、冒泡法、直接插入排序如何排序?虛擬碼展示.選擇法:找個最小值min,後續比較比min小就交換;
- 1、定義數組 a [ i ];
- 2、起始:for( i =0 ;i < n - 2;i++);
- 3、下標為 i 的值設為最小值min
- 4、 :數組進行迴圈 for i = 2 to n-2 ,如果 a [ i ] < min ,則 a [ i ] = min;
- 5、 重複迴圈進行比較;
- 6、 min的值賦給a [ i ],返回1;
冒泡法:每次排序時,從下往上查看,若發現順序錯誤,則交換位置,在第 ( n-1) 趟排序完成後,所有的數字都按順序排列完畢,較大的數放在後面;
- 1、定義數組 a [ i ];
- 2、數組起始下標:for ( i=0 ;i< n-3;i++)
- 3、:數組進行迴圈,for i=0 to n-2 ,如果 a [ i ] > a [ i + 1] ,則交換 a [ i ] 與 a [ i +1];
- 4、每次兩個數字之間的交換需要三次的操作;
直接插入法:迴圈尋找插入的位置,將原來數組 a [ i ] 所對應的值變成插入的值,後面數組 a [ i+1 ] 對應原先數組 a [ i ] 的值;
- 1、定義數組 a [ i ];
- 2、起始:for( i =0 ;i < n - 2;i++);
- 3、數組進行迴圈 for i = 2 to n-2 ,從第二個數開始與前一個數進行比較;若前一個數小,則交換到前一個位置;
- 4、重複步驟3,直到該數前面沒數字或者前一個數比它大;
1.5 介紹什麼是二分尋找法?它和順序尋找法區別?
二分尋找法又稱折半尋找,充分利用了元素間的次序關係,它的基本思想是;將n個元素分成大致相等的兩部分,取a[n/2]與x做比較,如果x=a[n/2],則找到x,演算法中止;如果x<a[n/2],則只要在數組a的左半部分繼續搜尋x,如果x>a[n/2],則只要在數組a的右半部搜尋x;
與順序尋找法區別:
- 二分法只用於資料按順序排列,相比於順序法效率會高,減少了比較和移動的次數,降低了複雜程度;而順序法可用於無規律資料的尋找,效率較低;
- 二分法所佔空間記憶體比順序法小;
1.6 二維數組如何定義、初始化?
- 二維數組定義的一般形式是:類型名 數群組類型 數組名[數組行長度][數組列長度]
- 二維數組初始化一般形式是:類型名 數群組類型 數組名[數組行長度][數組列長度]={ { 初值表1},···,{ 初值表k},···};
1.7 矩陣轉置怎麼實現?方陣中:下三角、上三角、對稱矩陣的行標i列標j的關係?請說明
- 定義轉置前數組 a [ i ][ j ],數組的行下標與列下標互換,即 i 與 j 互換,即可實現矩陣轉置;
轉置前:
- 上三角:i > = j;
- 下三角:i < = j;
轉置後:
- 上三角:i < = j;
- 下三角:i > = j;
- 對稱矩陣:a [ i ] [ j ] ==a [ j ] [ i ];
1.8二維數組一般應用在哪裡 ?
- 一個是問題中需要用到行、列的地方,使用二維數組比較方便;
- 二是可以應用於描述表示方陣或矩陣上;
2.本周的內容,你還不會什嗎?
int main(void){ float s[6]={1,3,5,7,9}; float x; int i; scanf("%f",&x); for(i=4;i>=0;i--) if(s[i]>x) s[i+1]=s[i]; else break; printf("%d\n",i+1); return 0;
寫出下列程式的運行結果:
- (1)如果輸入4,則輸出 5 4
- (2)如果輸入5,則輸出 3 5 4
- 這題答案出錯,加上這次的期中考試,發現在閱讀程式這一塊還不夠,需要加強;
- 對於數組,在定義時,及應用都還不熟悉;
- 對於資料類型,在練習運算,包括優先順序等問題;
- 還有寫程式時,盡量精簡內容,要多使用類似於flag 這類的符號語言,減少複雜度;
C語言部落格作業--資料類型