C語言I博客作業11


一、表格

問題 答案
這個作業屬於那個課程 C語言程序設計II
這個作業要求在哪里 點擊此處查看本次作業要求
我在這個課程的目標是 深入了解C語言,爭取掌握更多的數據類型及結構,熟練地編譯有效代碼
這個作業在那個具體方面幫助我實現目標 學習到了循環的嵌套,深入學習了循環,更加提升使用循環的能力
參考文獻 C語言程序設計、百度

二、本周作業

1. PTA實驗作業

1.1 題目名1

6-2 統計各位數字之和是5的數 (20分)

本題要求實現兩個函數:一個函數判斷給定正整數的各位數字之和是否等於5;另一個函數統計給定區間內有多少個滿足上述要求的整數,並計算這些整數的和。
函數接口定義:
int is( int number );
void count_sum( int a, int b );
函數is判斷number的各位數字之和是否等於5,是則返回1,否則返回0。
函數count_sum利用函數is統計給定區間[a, b]內有多少個滿足上述要求(即令is返回1)的整數,並計算這些整數的和。最后按照格式
count = 滿足條件的整數個數, sum = 這些整數的和
進行輸出。題目保證0<a≤b≤10000。
裁判測試程序樣例:
#include <stdio.h>
int is( int number );
void count_sum( int a, int b );
int main()
{
    int a, b;
    scanf("%d %d", &a, &b);
    if (is(a)) printf("%d is counted.\n", a);
    if (is(b)) printf("%d is counted.\n", b);
    count_sum(a, b);
    return 0;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
104 999
輸出樣例:
104 is counted.
count = 15, sum = 3720

1.1.1 數據處理

定義整型變量int(number是形參、s=0賦初始值為0用於求和、remainder存放余數)
int is( int number )
自定義函數
while(number!=0){//此循環用於計算一個數的各位數之和,當不等於0就一直循環,不滿足條件就跳出循環。
remainder=number%10;//計算余數
number=number/10;//去掉最后一位數
s+=remainder;//求和
if(s==5)
    return 1;//滿足條件返回1
    else
        return 0;//否則返回0
此定義函數結束

void count_sum( int a, int b )
自定義函數
定義整型變量(a,b都是形參,用於接收上面傳遞的數值。x賦初始值為a,用於控制循環。count賦初始值為0用於計數。sum賦初始值為0用於求和)
  for(;x<=b;x++){//x從a到b一次循環
        if(is(x)){
            count++;
            sum+=x;//滿足條件則計數、求和
printf("count = %d, sum = %d",count,sum);//打印輸出
此定義函數結束

1.1.2 實驗代碼截圖

1.1.3 造測試數據

輸入 輸出 說明
104 999 驗證題目數據
23 41 a\b都滿足條件
104 104 a=b的情況

1.1.4 PTA提交列表及說明

部分正確:第二個函數除了錯誤。原因是x<=b忘記=的情況了。之后加上就對了。


1.2 題目名2

7-1 解一元二次方程(*) (10分)

請編寫程序,解一元一次方程 ax
​2
​​+bx+c=0 。
要求:
若a=0,則解一元一次方程。
若方程有唯一解,則輸出方程的根;
若方程無解,則輸出“無解”;
若方程有無窮多解,則輸出“無窮多解”。
若a≠0,則解一元二次方程。
若Δ>0,則輸出方程的兩個不等的實根;
若Δ=0,則輸出方程的兩個相等的實根;
若Δ<0,則輸出方程的兩個共軛的虛根。
所有實數均以%g輸出。
輸入樣例1
0 4.5 -3.6
輸出樣例1
x = 0.8
輸入樣例2
0 0 3.6
輸出樣例2
無解
輸入樣例3
0 0 0
輸出樣例3
無窮多解
輸入樣例4
-2 0.8 -0.06
輸出樣例4
x1 = 0.1, x2 = 0.3
輸入樣例5
-3 1.2 -0.12
輸出樣例5
x1 = x2 = 0.2
輸入樣例6
-0.2 0.04 -0.01
輸出樣例6
x1 = 0.1-0.2i, x2 = 0.1+0.2i
提示:注意實數的負零問題和誤差問題。

1.2.1 數據處理

定義雙精度浮點型變量double(a\b\c分別為一元二次方程的三個系數)
輸入變量
if(a==0){//當a=0的情況為大條件
        if(b!=0)
            if(-c/b!=0)
        	printf("x = %.2g",-c/b);//a=0的條件下b不等於0且x不等於0,則輸出,
	    if(-c/b==0||-c/b==-0)
                printf("x = %.2g",fabs(-c/b));x等於0或-0,加絕對值號是考慮負零的問題
        if(b==0){//b等於0的情況
            if(c!=0)
                printf("無解");b=0的條件下c不等於0,則輸出
            else
                printf("無窮多解");c等於0,則輸出
      else{//a不等於0的情況,考慮到誤差問題,這里用delt與0.000001比較不直接與0 比較
        if(-0.000001<=(b*b-4*a*c)&&(b*b-4*a*c)<=0.000001)
            printf("x1 = x2 = %.2g",fabs(-b/(2*a)));//delt接近於0時輸出
        else if(b*b-4*a*c>0.000001)
        	printf("x1 = %.2g, x2 = %.2g",fabs((-b+sqrt(b*b-4*a*c))/(2*a)),(-b-sqrt(b*b-4*a*c))/(2*a));
//delt大於0.000001時輸出
            else
                printf("x1 = %.2g+%.2gi, x2 = %.2g-%.2gi",fabs(-b/(2*a)),fabs(sqrt(-b*b+4*a*c)/(2*a)),fabs(-b/(2*a)),fabs(sqrt(-b*b+4*a*c)/(2*a)));
//delt小於0.000001時輸出
 程序結束  

1.2.2 實驗代碼截圖

1.2.3 造測試數據

輸入 輸出 說明
0 2 3 x = -1.5 a=0有解的情況
0 0 0 無窮多解 驗證題目數據
0 0 3.6 無解 驗證題目數據
0 2 0 x = 0 0的情況
-2 0.8 -0.06 x1 = 0.1, x2 = 0.3 驗證題目數據
-0.2 0.04 -0.01 x1 = 0.1+0.2i, x2 = 0.1-0.2i 驗證題目數據

1.2.4 PTA提交列表及說明



答案正確:這最后一個點是前面有一個題的正負問題,加上絕對值號就可以了

部分正確:沒找到錯誤,就隨便試試,也沒解決問題

部分正確:應該是解決誤差問題的,之前是按照高中數學思維讓delt與0比較,但由於誤差就給了一個范圍,讓dele與0.000001比較

部分正確:考慮到負零的問題,就加了絕對值號

部分正確:只考慮到題目上給的六種情況,結果就對了六個測試點


2. 代碼互評

自己代碼①

同學代碼①


評論:

1.這道題我和這位同學的方法有很大的差別,他用到了數組,而我只是根據學到的知識來解決這個問題。
2.我在第一個函數中用while(number!=0)來控制循環的,在第二個函數多定義一個變量給其賦值為a。
3.這位同學是用數組的次數來運算的,其實我也不是很理解,我對於數組這個知識還是很陌生的。這位同學很厲害,看來是自己學習到新的知識並加以運用。


自己代碼②

同學代碼②


評論:

  1. 這道題是個簡單卻不容易全對的題目,因為它有10個測試點,還有需要注意但不容易想到的點。
  2. 我就是在能想到的就直接根據數學知識寫的,在同學那里了解到要注意負零和誤差問題后就加上絕對值和0.000001這個誤差值。
  3. 這位同學運用了一個陌生的知識點就是宏,應該是用於解決誤差問題的,但是我卻不是很能理解。

3. 學習總結

3.1 學習進度條

周/日期 這周所花的時間 代碼行 學到的知識點簡介 目前比較困惑的問題
1/9-21 2天 30 初步接觸編程,學習編譯Hello,World!
2/9-30 2天 20 學習了浮點型變量,及溫度轉換
3/9-15 3天 76 使用分段函數了解到if-else語句以及數據類型 對於定義數值還是不太清楚
4/10-16 3天 100 for語句 for循環進行中不清楚循環的細節
5/10-24 3 天 155 學習到了自定義函數 自定義函數的具體定義過程,實參形參有些迷惑
6/11-1 3天 250 學習使用if-else與for語句的嵌套,初步了解了字符型變量 對於字符型變量不是很懂,不明白其作用
7/11-7 2天 200 這周學習了新的分支結構switch結構,這也適用於選擇的情況,其作用類似於if-else。 switch后面的變量表達式和case后的常量表達式弄不清。
8/11-15 3天 150 學習了新的循環結構while語句和do-while語句,和for語句有不一樣的地方,但其作用是一樣的,他們循環的條件不一樣。 不能熟練運用while語句去解決實際問題
9/11-22 3天 151 這周學習了循環的嵌套,可以多次循環。可以解決行與列這種類型的題、以及需要多次循環一個數一個數來的題型等等 感覺知識掌握的還行,但是運用的時候弄不清循環的次數和條件
10/11-27 2天 203 這周沒有學習新知識,在練習上周學的。更加熟練的運用循環嵌套了 知識上的疑惑沒有了,但是在刷題還是會遇到困難
11/12-6 3天 100 這周學習了一些基礎知識,只要是全局變量和局部變量的使用范圍和生存時間 靜態變量,動態變量的一些特殊作用還沒記住,有疑惑

3.2 累計代碼行和博客字數

3.3 學習內容總結

3.4 學習體會

1.這周詳細學習了兩大內容:①函數②變量。函數只要分為庫函數和自定義函數。庫函數由C語言系統提供定義的,可直接調用。自定義函數之前學習過,只要就是函數的聲明、定義、調用,這些都是學習過的。而變量這次主要學習了全局變量和局部變量的生存周期和作用范圍。其中還具體學習了自動變量、靜態變量他們的存儲區及作用。
2.目前自己對於這部分內容還有些疑惑,有些分不清靜態變量和自動變量的具體作用,特別在靜態局部變量和全局變量上很是迷惑。需要自己私下里多研究一下課本上的內容,掌握基礎知識。
3.截至到這周,這一學期的C語言學習就結束了,雖然仍有知識存在疑惑,但是的確學到了很多專業知識,盡管只是初級的,但還是充滿收獲感。下周就考試了,雖然是選擇題但仍然不能放松,還是要堅持學習。加油吧!


免責聲明!

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



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