C語言作業--數據類型


一、PTA實驗作業

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

1. 本題PTA提交列表

2. 設計思路

定義整型變量 n,i,space,m,q,其中n表示行數,space表示空格
輸入一個奇數n
    菱形上半部分
	space=1 
           滿足space<=(n+1)/2-i
           space遞增,實現循環輸出空格
           m=1
           滿足m<=2*i-1
           m遞增,實現循環輸出星號后跟空格	
     循環結束后換行

      菱形下半部分
    space=1
       滿足space<=i-(n+1)/2
        space遞增,循環輸出空格
      q=1
       滿足q<=2*n-2*i+1
       q遞增,實現循環輸出星號后跟空格
           循環結束后換行

            i遞增,直到不滿足i<=n
           return 0;

3.代碼截圖

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

主要就格式問題,明明不管怎么輸都是正確的圖案,提交一直顯示是格式錯誤。。。包括換行,包括空格都有考慮進去,但是圖案是越改越離奇。就從代碼開始分析,發現利用if語句判斷后實現循環結束換行完全是多余的,轉換成循環體外加一個輸出換行就可以實現我們想要的效果了。刪掉后,提交顯示正確。

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

1.本題PTA提交列表

2.設計思路

函數聲明int fun(int a);
int i,N0,其中N0表示第一個數
輸入N0
int a[3000];
把N0的值賦給a數組第一個元素
調用函數計算 fun(N0),並將它賦值給a[i]
i=2;
滿足要求a[i-1]!=a[i-2],輸出行數i-1和a[i=1]
不滿足條件,執行a[i]=fun(a[i-1]),i遞增

函數int fun(int a)
定義變量ones表示末尾數字,sum表示各數字和,result表示計算結果
sum=0;
當a不等於0時
計算末尾數字ones=a%10;
去除末尾數字a=a/10;
各數字和sum=sum+ones;
計算結果result=sum*3+1;
返回計算結果result

3.代碼截圖

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

這一題沒遇到什么問題,主要就是利用了剛學的數組,不太熟悉,就寫下怎么寫的吧
這一題閱讀完題目后發現下標很重要,而數組特別適合用來表示下標,於是選擇了數組。另外計算result的過程有多次,選擇利用函數,這樣通過引用函數來進行計算代碼比較清晰

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

1.本題PTA提交列表

2.設計思路

定義倆個整型變量 m,n;
定義整型變量 result表示是計算結果
定義字符型變量op
scanf("%d",&m);
result=m;
讀入的字符不是等號時
	scanf("%d",&n);
	    如果字符為 '+':result=m+n;跳出循環
	     如果字符為'-':result=m-n;跳出循環
	     如果字符為 '*':result=m*n;跳出循環
	     如果字符為 '/':
			如果n不為0
		        計算result=m/n;
			如果n為0,輸出ERROR,程序結束
	     如果字符不是加減乘除 printf("ERROR"),程序結束
	               m=result
                       輸出result
                           程序結束

3.代碼截圖

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

問題:沒有判斷輸入m后輸入的字符是= 這種情況

解決辦法:增加if語句,判斷輸入字符是=,但是運行發現這個問題是解決了,但是正常輸入,結果都是ERROR,經過調試發現直接跳到default這個分支,輸出ERROR.。可以將m賦值給result,就可以實現輸出類似1=1這種情況

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

三、本周學習總結

1.你學會了什么?

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

一維數組定義一般形式: 類型名 數組名 [數組長度] 如 int a[10]
(1)類型名指定數組中每個元素的類型
(2)數組名是數組變量的名稱,是一個合法的標識符
(3)數組長度是一個整型常量表達式,設定數組大小

初始化
數組中有若干元素,可以在{}中給出各數組初值,各初值之間用逗號隔開,把{}中初值依次賦值給各元素
注意:初始化的數據個數不能超過數組元素的個數,否則出錯,如 int a[4]={1,2,3,4,5}是錯的

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

數組名是一個地址常量,存放數組內存空間的首地址

1.3 為什么用數組?

在程序中使用數組,可以讓一批相同類型的變量使用同一個數組變量名,用下標來相互區分。表達簡潔,可讀性好,便於使用循環結構

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

(1)選擇法排序

定義整型變量i,index,k,n,temp,index存放最小值所在的下標
定義數組a[10]
輸入n
i=0
當i<n時,輸入數, i遞增
將輸入的數依次賦給數組a的n個元素
k=0;k<n-1,用index來存放最小值所在下標
判斷數組a中元素與a[index]大小
如果a[i]<a[index],index=i,最小元素與下標為k的元素交換
temp=a[index];
a[index]=a[k];
a[k]=temp;
輸出排好后的n 個數組元素的值

(2)冒泡法排序
定義數組a[n]
定義整型變量i,j,temp,n
i=0
滿足i<=n-1時
輸入數
i++
將這組數據依次賦值給a[n]
判斷相鄰倆個數據,如果a[j]>a[j+1]
temp=a[j]
a[j]=a[j+1]
a[j+1]=temp
像這樣的過程要重復n=q-i次
循環結束后輸出新數組

(3)直接插入法排序
定義數組a[n]
定義整型變量i,j,k,temp
i=0;
滿足i<=n-1時
輸入數
i=0;
temp表示最小值的角標
判斷數據a[j]和temp的大小
如果temp<a[j],a[j]=temp
通過a[k+1]=a[k]實現插入位置后的數據整體往右挪
重復n -1次,輸出新數組

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

對一組有序的數字中進行查找,傳遞相應的數據,比較與元數據相同的數據,查找到后返回對應數組下標

區別:順序查找的特點是從第一個元素開始一個一個往下查找,如果和目標一致的元素,則查找成功,如果到最后一個元素仍沒有目標元素,則查找失敗。而二分查找就是從表的中間查找目標元素,如果找到一致元素,這查找成功,如果中間元素比目標元素小,仍用二分查找表的后半部分,反之,中間元素比目標元素大,則查找表的前半部分。

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

二維數組定義形式:類型名 數組名 [行長度][列長度]

初始化:
(1)分行賦初值
一般形式:類型名 數組名 [行長度][列長度]={{初值表0},...,{{初值表k},...}
把初值表中的K中所有數據依次賦給第k行的元素

(2)順序賦值法
一般形式:類型名 數組名 [行長度][列長度] = {初值表}
根據數組元素在內存中的存放順序,把初值表中的數據依次賦給元素

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

行下標與列下標互換。 下三角:i<=j 上三角:i>=j 對稱矩陣: a[i][j]=a[j][i]

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

(1)矩陣的轉置
(2)求最大元素值及其行列號

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

開始接觸偽代碼,明白代碼意思,但是不熟悉偽代碼要如何表達,寫的很混亂,尤其是像冒泡,插入,順序排序這種,看上面的就知道是個什么狀態了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM