主頁 > 軟體設計 > 入門級 C語言期末復習(1)——基本概述

入門級 C語言期末復習(1)——基本概述

2021-01-04 11:50:25 軟體設計

期末將至,希望同學們能好好復習,成績理想,在此寫下一些本學期的學習體會,希望能幫到大家,

文章目錄

        • 寫程式前的準備
        • 程式錯誤
        • 代碼風格
        • 資料型別
        • 運算子和運算式

寫程式前的準備

我們這門課程的核心能力就是寫程式,但是寫一個程式不僅僅是敲幾行代碼這么簡單,寫程式是一個綜合的程序需要我們分析問題、設計演算法、撰寫程式、編譯程式、除錯程式、日后我們還需要撰寫程式檔案,這些步驟缺一不可,而且都很重要,

有的同學看見一道題目想了想就直接開始在電腦上敲了,其實這是不對的,對于我們而言,在敲代碼之前,首先要審題,把題目要求看懂,比方說【判斷點是否在圓上】這一題,之前我就看見有同學判斷的是點是否在園內,這樣犯錯得不到分是很冤的,
在這里插入圖片描述
其次一定要有全域思考的程序,要非常清楚整個程式的思路流程,我的個人建議是:最好把程式思路寫一遍,哪里需要注意的,哪里是實作演算法的關鍵地方,哪里容易忽略的,都應該在草稿紙上呈現出來,因為當你思考整個程式的時候,一些細節就可以注意到,這樣你在打代碼的時候就不會疏漏,倘若是一邊打代碼,一邊思考,很容易就會忽略重要的東西,最糟糕的是,當你把代碼全部寫好后,一編譯,全是錯誤,辛辛苦苦把錯誤改正好后,一運行,結果跟自己想的不同,然后又重新開始看自己的代碼哪里有問題(當然有時候這個環節不可避免,改程式會在后面講到),

在紙上把流程寫好后,把代碼打好,對于我們來說就是一個不難的事情了,從這點看來,我們實際上就是工程師,把我們已掌握的知識進行組合,再用程式這個工具加以實作,對于工程師來所,圖紙是最重要的東西,有了圖紙,萬丈高樓才能搭建起來,

當然了,之前講到,程式有錯誤是難以避免的,我們盡可能在準備階段減少問題發生的可能性,但一旦問題發生了,我們還得去改正,

程式錯誤

程式錯誤無非就是三類,一是語法錯誤,這個是很容易改正的,因為編譯器會報錯,但有的語法在codeblocks上沒問題,但是在OJ系統上是過不了的,暫時發現了幾個,跟大家分享下:

1、 gets函式和puts函式在現在codeblocks的版本中是包含在stdio.h中的,一些數學函式如abs等在stdio.h中也是有的,這時后如果你沒有寫 <string.h>或<math.h>,OJ系統是判定你錯誤的,
2、 在寫多個函式時最好現在main函式前宣告,然后再在main函式下方寫已宣告的函式,否者的話,OJ系統有可能報錯,
3、 定義結構體時,應該在main函式前定義,如果在main函式里面定義結構體,OJ系統會現實編譯錯誤,
4、 沒有return 0;有超時的可能性

第二類的錯誤是運行錯誤,即由于編譯成功了,但是由于程式中的不合理操作,導致無法繼續正常運行的錯誤,例如:

1、 死回圈,
2、 用scanf陳述句輸入時變數前沒有取地址“&”.
3、 鏈表“斷開”了(上一個結點的指標域不能指向下一個結點)

第三類錯誤是邏輯錯誤,這類錯誤往往比較難以發現和改正.

有時候表現為自己的結果和預期結果不同,這種可通過跟蹤變數來改錯,也就是Debug,當然也可以直接在程式的不同位置輸出資料來跟蹤變數的變化情況,

有的時候,表現為自己測驗的資料正確,提交到OJ上判定為錯,這時候情況呢比較棘手,需要通過自己設計資料來判斷發現錯誤,一般可以設計邊界值,特殊值,例如尋找鞍點這一道題,有沒有可能鞍點在第一個位置但是程式判斷不到呢,有沒有可能鞍點有兩個呢,有沒有可能有重復資料呢,這些資料都是可以自己輸入判斷的,如果在設計最開始沒有考慮到這些問題,就要在改程式的時候去驗證,去改正,

代碼風格

回到寫代碼這個問題上,首先希望大家能有一個好的代碼風格,雖然C語言對源代碼的格式沒有特別規定,可以將幾條陳述句寫在一行,也可以換行不縮進,但是這樣的程式可讀性差,不易于理解,一方面不方便自己查改,另一方面不方便與人交流,再者當以后我們的程式寫的很長的時候,不好的代碼風格可能會影響你的思路開展,我們可以參照下課本的代碼,或者我們寫的題解的代碼風格也基本和書本上是一致的,大家可以參照下面的例子:【學生資訊管理】,

#include <stdio.h>

struct student
{
    int screo[11];
};
typedef struct student DEG;

int main()
{
    DEG stu[1005],t;
    int i,j,n,m,sum[20],t1;					//變數取名盡量望名知意
    double ave[20];
    scanf("%d%d",&n,&m);
											//一個較為完整的功能塊結束后可以適當換行
    for (i=0;i<n;i++)
    {										//用大括號后縮進一個Tab
        for(j=0;j<m;j++)                    //讀入資料(做適當的注釋,方便自己和他人的理解)
        {
            scanf("%d",&stu[i].screo[j]);   //注意結構體的使用
            sum[i]+=stu[i].screo[j];
        }
    }

    for (i=0;i<m;i++)                       //注意m,n的使用
    {
        for (j=0;j<n;j++)
        {
            ave[i]+=stu[j].screo[i];
        }
        ave[i]/=n;                          //算出平均分
    }

    for (i=0;i<n-1;i++)                     //冒泡排序
    {
        for (j=0;j<n-1-i;j++)
        {
            if (sum[j]<sum[j+1])            //交換學生資訊的同時還要交換總分
            {
                t=stu[j];
                stu[j]=stu[j+1];
                stu[j+1]=t;

                t1=sum[j];
                sum[j]=sum[j+1];
                sum[j+1]=t1;
            }
        }
    }

    for (i=0;i<n;i++)                       //輸出資料
    {
        for (j=0;j<m;j++)
        {
            printf("%d ",stu[i].screo[j]);
        }
        printf("\n");
    }

    for (i=0;i<m;i++)
    printf("%.1lf ",ave[i]);

    return 0;
}

資料型別

關于資料型別,分為基本型別構造型別指標型別,和空型別(void),基本型別的大類是整型、浮點型、字符型,只是在此基礎上還可以細分,如有無符號,精度是單精度還是雙精度等,基本使用上我們都懂,只是我們應該注重細節,加深理解,

整型的運用大家都比較熟練,浮點型大家記住沒有特別要求就用double型別就好了,用float的話,某些情況下OJ有可能會判錯,但是用double的話也要記得輸入時要用“lf”的格式字符,這里要注意1.23e3是浮點型資料的一種表示方法,代表1.23*10^3,關于字符型的使用,大家要記得轉義字符的使用,我們比較常用的是‘\n’、‘\0’,但還又其他的一些轉義字符的使用,大家翻課本回憶下,

講到資料型別就不得不提及資料存盤的問題了,大家得清楚資料在記憶體中存盤的原理,例如,宣告了整型資料型別a后(int a),系統就為其開辟了一個4個位元組(不同型別位元組數不同)的空間,專門用于存放資料(以二進制的形式),并且給這4個位元組命名為a,當你要使用這個資料是,通過變數名a就可以直接呼叫,亦或者你取a的地址,知道了這個資料所在的位置,你就可以通過地址直接定位到資料的位置使用,通過改動記憶體中這4個位元組中存盤的內容,就可以實作改變資料,理解清楚這一點后,對后面指標和鏈表的學習非常有幫助,

資料的存盤,比較特別的是字符型的存盤,在記憶體中是以ASCII碼的形式存盤的,其實也可以理解為用特定的一些數字代表特定的字符,這就意味著,字符型是可以做運算的,

對于不同資料型別之間的運算和資料型別資料的轉換,大家也要注意,自動型別轉化,浮點型和整型之間的計算,字符型和整型之間,都是一個怎么樣的運算關系,強制型別轉換,在判斷整數如何使用,這里設計的細節比較多,而且課上都講過,大家看看書,回憶一下,回憶不起來也沒有關系,看書也可以看懂,

運算子和運算式

就運算子和運算式來說,值得注意的是資料的運算規則,尤其是一些比較細的地方,例如整型相除向0取整的規則,求模結果的符號與被除數的相同,自加自減運算(i++、++i)中,是先計算結果還是先運算的問題,還有各種運算子的優先級,結合性,大家都要搞清楚,在書本208頁,有“運算子及其特征的表格”內容比較詳細,大家可以稍加記憶,在這里插入圖片描述

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/244330.html

標籤:其他

上一篇:(六)DSP28335基礎教程——SPI通信實驗(TFT顯示控制)

下一篇:飛機大戰——圖文詳解

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more