1. 程式人生 > >C語言博客作業--數據類型

C語言博客作業--數據類型

https 不變 images 下半部 例如 應該 for 循環 9.png

一、PTA實驗作業

題目1:7-4 打印菱形圖案

1.本題PTA提交列表

技術分享圖片

2.設計思路

{
    int n,j,i,k; 
    輸入n;
    /*輸出上半部分*/ 
    for (i=1;i<=n;i=i+2) { 輸出上半個菱形 
        for(j=n-i;j>0;j--)每一行輸出的空格比上一行少兩個
            printf(" "); 
        for(k=i;k>0;k--)每一行輸出的* 等於行數
            printf("* ") ;
        putchar(‘\n‘);換行 
    } 
    /*輸出下半部分*/
    for(i=n-2;i>0;i=i-2) {  下半部分與上半部分相反
        for(j=n-i;j>0;j--) 輸出的空格數
            printf(" "); 
        for(k=i;k>0;k--)每一行輸出的* 等於行數
            printf("* ") ;
        putchar(‘\n‘);換行
    }
    return 0;
}

3.代碼截圖

技術分享圖片

4.本題調試過程碰到問題及PTA提交列表情況說明

  • 碰到的問題:輸出空格時判斷條件寫成(j=n-i+1;j>0;j--),導致多輸出一個空格
    技術分享圖片

  • 調試過程:輸入3,輸出空格後
    技術分享圖片
    輸出*
    技術分享圖片
    換行後,發現又輸出了空格,n=3時,第二行應該沒有空格
    技術分享圖片
    技術分享圖片

題目2:7-6 掉入陷阱的數字

1.本題PTA提交列表

技術分享圖片

2.設計思路

{
    定義變量分別存放原來的數以及計算後的數,定義count=1表示計算的次數
    輸入第一個數num1 
    儲存num1,令num2=num1
    調用trap函數,傳入num1並將返還值存於num1 
    if(num1==num2)
        輸出printf("%d:%d",count,num1); 
    else{
        while(num1!=num2){
            儲存num1的值,num2=num1;
            調用函數num1=trap(num1);
            輸出printf("%d:%d",count,num1); 
            count++; 
        } 
        循環結束再輸出一次 printf("%d:%d",count,num1);
    }
    結束 ;
} 
int trap(int n)     計算陷阱數函數
{
    int x,sum=0;
    while(x>0){
        取出最低位x=n%10;
        累加到 sum;
        去掉最低位 x/=10;
        }
    sum = 3*sum+1;
    返還函數值 ;
} 

3.代碼截圖

技術分享圖片

4.本題調試過程碰到問題及PTA提交列表情況說明

  • 碰到的問題:最開始沒有儲存num1的值,調用函數後沒有判斷num1==num2,導致本來應該不進入循環,只輸出一遍結果,而進入循環後輸出一遍結果循環結束後有輸出了一次結果
  • 調試過程:輸入值為13
    技術分享圖片
    函數結束後返還值為13,此時應該直接輸出結果然後結束程序,但沒有判斷返還前後的值是否相等,導致進入while循環
    技術分享圖片
    循環中輸出一次結果
    技術分享圖片
    循環結束後再出輸出,共輸出兩次,但是要輸出一次就夠
    技術分享圖片

PTA列表說明:主要情況就是上述問題

題目3:7-10 簡單計算器

1.本題PTA提交列表

技術分享圖片

2.設計思路

{
    定義變量 int num,sum;
    char op;
    輸入第一個數字num和第一個運算符op;
    賦值sum=num;
    while op!=‘=‘{
         輸入數字num;
        if (op==‘/‘&&num==0)||(op!=‘+‘&&op!=‘-‘&&op!=‘*‘&&op!=‘/‘&&op!=‘=‘){    //如果運算符為‘/’同時輸入數為0或者運算符不為‘+’,‘-’,‘*’,‘/’
                輸出Error;
                結束 return 0;
        }
        else{
            switch(op){        //判斷運算符並進行相應運算
                case ‘+‘:sum+=num;break;
                case ‘-‘:sum-=num;break;
                case ‘/‘:sum/=num;break;
                case ‘*‘:sum*=num;break;
                }
            輸入下一個運算符 op;
        }
    }
    輸出結果sum;
    結束 return 0;
} 

3.代碼截圖

技術分享圖片

4.本題調試過程碰到問題及PTA提交列表情況說明

  • 本題調試過程碰到的問題: (op==‘/‘&&num==0)的條件寫成 (op=‘/‘&&num==0),少了一個等號導致判斷條件錯誤
    技術分享圖片

  • PTA提交列表說明
    PTA2分的提交列表是因為op==‘/‘中少了一個等號,16分是因為沒有對分母為0以及非法運算符進行判斷

二、截圖本周題目集的PTA最後排名

技術分享圖片

三、本周學習總結

1.你學會了什麽?

1.1 一維數組如何定義、初始化?

定義 : 類型名 變量名 [數組長度]
初始化:

  • 定義時直接初始化,如:int n[1]={0};
  • 通過循環結構實現,如:

    int n[10];
    for(i=0;i<10;i++){
        scanf("%d",n[i]);
    }

1.2 一維數組在內存中結構?可畫圖說明。數組名表示什麽?

技術分享圖片

1.3 為什麽用數組?

數組是把相同類型的一系列數據統一編制到某一個組別中,這樣就可以通過數組名+索引號簡單快捷的操作大量數據。

1.4 介紹選擇法、冒泡法、直接插入排序如何排序?偽代碼展示.

選擇法:
技術分享圖片

冒泡法:
技術分享圖片

直接插入排序:
技術分享圖片

1.5 介紹什麽是二分查找法?它和順序查找法區別?

二分查找法:取中間元素與查找元素進行比較,如果查找元素比中間元素大,則在中間元素右邊查找,如果查找元素比中間元素小,則在中間元素的左邊查找。
與順序查找法的區別:二分查找法的效率更高

1.6 二維數組如何定義、初始化?

二維數組定義:類型名 變量名 [行長度] [列長度]
初始化:

  • 分行賦初值:
    一般形式為: 類型名 變量名 [行長度] [列長度]{{初值表0},...{初值表k},...}
    例如:int a[2][3] = {{1,2,3},{4,5.6}}

  • 順序賦初值:
    一般形式為: 類型名 變量名 [行長度] [列長度]{ 初值表 }
    例如:int [2][3]{1,2,3,4,5,6}

技術分享圖片

1.7 矩陣轉置怎麽實現?方陣中:下三角、上三角、對稱矩陣的行標i列標j的關系?請說明。

矩陣轉置過程:對角線上元素不變,其余元素兩個下標互換,如:n[0][1] 轉置後變為 n[1][0]
下三角:i>=j
上三角:i<=j
對稱矩陣:i=j

1.8 二維數組一般應用在哪裏?

應用在數組為矩陣形式的時候

2.本周的內容,你還不會什麽?

  • 對於本周數組的內容,定義函數時,對於數組的傳參還不是很熟悉
  • 對於數據類型的位運算也還不太會
  • 本周PTA主要問題及錯誤點:7-8 判斷合法標識符:對於本題我最開始的思路是循環輸入一串字符,分開判斷第一個字符以及之後每個字符,如果出現非法的字符就輸出NO,但運行過程中發現這樣輸出No之後,如果字符還沒輸入完,後面剩余的字符就會被當做另一個新的字符串,導致答案錯誤;於是改變思路定義一個 flag=0,循環輸入每一個字符,同樣進行判斷,出現非法字符就 flag=1,循環結束後再通過判斷 flag 的值輸出Yes或No。

C語言博客作業--數據類型