第一篇:《C語言程序設計》課程標準.
《C語言程序設計》課程標準
一、課程定位
《C語言程序設計》是計算機網絡技術專業的一門專業核心課。在網絡技術專業課程體系中,計算機專業領域的程序設計將從這門課開始。本課程總學時為64學時,開設于第2學期,主要培養學生基本的C程序閱讀能力、簡單算法的編寫能力、程序設計的基本方法,并逐步形成正確的程序設計思想和良好的程序設計風格,讓未接觸過程序設計的學生借助于C語言養成良好的程序書寫習慣和編程思維習慣從而跨入程序設計的門檻,為學習后續課程的學習打下良好基礎。該課程的前導課程是計算機應用基礎,后續課程有數據庫應用、動態網頁編程, B/S架構編程等。
二、課程教學目標
通過對《C語言程序設計》的學習,建立起程序設計概念,掌握程序設計的基本理論、基本知識和基本技能,逐步積累算法設計和程序設計的常用技巧;能初步用C語言解決常見的應用問題,并養成良好的編程風格,為進一步學習后續課程奠定良好的基礎。
知識目標: ?掌握計算機編程的基本思維;?熟悉C語言語法,記住C語言的常用標識符;?理解常量、變量、運算符、表達式、語句的含義;?掌握C語言常用的輸入輸出庫函數;?掌握順序、選擇、循環三種基本程序結構;?掌握函數的定義及調用;?理解數組的作用及使用方法;
?了解指針與計算機內存的關系,掌握指針的使用方法;?理解結構體與共用體的使用方法。能力目標: ?能讀用C語言編寫的程序代碼;?能夠用常量、變量、運算符編寫各類表達式,并能完成運算;?能夠用輸入輸出語句,接受鍵盤的鍵入并在屏幕上輸出指定的值;?能夠根據程序要求,用適當的結構組織語句;?能夠將一個復雜程序拆分模塊編寫,實現函數間的共享;?能夠定義使用數組,對批量數據與循環結合實現編程;?能夠用指針形式訪問簡單的數據;?會定義、引用和初始化結構體變量并能用創建和使用鏈表;?綜合能力:具有理解和應用開發規范,能夠將實際問題轉化為計算機語 言計算機模型的能力。素養目標: ?養成良好的程序書寫習慣和嚴謹的科學態度;?養成良好的用計算機解決實際問題的思維習慣;?養成良好的軟件開發團隊素質和溝通與協作能力;
三、課程設計思路
根據教育部的規定,程序設計語言作為計算機基礎教育的核心內容之一。我們通過教學方式和手段改革、建立以項目為導向, 知識傳授與能力培養并重的教學指導思想,特別強調良好編程習慣的養成。
課程的教學目標是以對學生的職業能力培養為主,為了提高學生職業技能,根據軟件開發崗位群及能力要求,改革了傳統的課程體系和教學方法,將原來以課堂理論教學為主,輔助以相應的實踐教學的課程設計思路,以程序設計方法為主線,由淺入深,先講授程序設計的基本結構,再從數組、函數、指針、結構和文件等方面講授程序設計的方法,突出基本概念和基本技能,強調分析問題、解決問題的思路和方法。以實踐技能培養為主,項目驅動教學的設計思路。
四、教學內容安排及學時分配 詳見表一
五、教學實施方案設計 詳見表二
六、教學實施條件
1、教師任職條件
本課程專任教師應具備本科及以上學歷、3年以上教學經驗、講師及以上職稱;兼職教師的行業企業C語言實際開發工作崗位年限要求為5年、具備軟件設計師職業資格。
2、實踐教學條件
本課程要求在理論部分在多媒體教室進行;實踐部分在計算機機房,一臺教 師機,每個學生一臺學生機,計算機內安裝有Turbo C 或者visual C運行環境。
3、教學資源條件(教材、參考資料、網站等
?教材:《C語言程序設計》(第三版,譚浩強主編,清華大學出版社, 2010年1月,ISBN:978-7-302-10853-5。
?參考資料:由全國高等職業院校計算機教育規劃教材《C語言程序設計 能力教程》(第二版,趙鳳芝主編,中國鐵道出版社,2010年3月, ISBN:978-7-113-10766-6。
七、教學方法與手段
1、教學方法
本課程教學中應理論與實踐的結合,加強課前、課后的答疑輔導,注意學生能力的培養,使學生通過上機實習對程序設計理論方法有全面的了解,進而掌握
程序設計的基本方法,培養學生利用C語言解決實際問題的能力。(1開展課堂討論式教學法
在C語言程序設計的部分章節采用以實際應用問題為引導的課堂討論式教學,通過實際應用引導和教師指導下的課堂討論、資料查詢、自學等方式啟發學生分析、討論有關程序設計問題,鞏固所學知識。這些章節包括數組、函數、指針、文件等內容。
(2倡導以問題為中心的教學方式
以學生為主體的小組討論式的方法,強調從提出問題入手,激發學生學習的興趣,讓學生有針對性地去探索并運用理論知識,以提高分析和解決問題的能力。
同時在教學過程中穿插案例教學法、倒序式教學法、邊講邊練、講練結合、多媒體網絡教學法來輔助學生對知識和技能的理解和掌握。
2、教學手段
在多媒體教室采用電子課件和軟件開發工具,使用教程與傳統黑板相結合進 行教學,充分利用校園網、互聯網技術開展教學。
八、考核評價
1、考核方式 筆試+技能測試。
2、考核分值比例
期末總評成績=平時成績30%+技能測試30%+期終考試40%,其中平時成績由出勤、作業情況及課堂表現各占10%。
3、技能考核項目、考核項目評分標準(列出測試項目和各項目評分標準 序號實訓項目評分標準 1 循環的應用--水 仙花數
①能否理解題目的意義 ②是否熟練循環語句的用法 ③能否對算法進行分析
④能夠根據算法正確寫出實現打印水仙花數的程序 2 數組的應用—逆 序輸出
①能否理解題目的意義
②對題目進行算法分析,能否畫出流程圖 ③能否寫出算法核心代碼
④能否用數組實現一串數字的逆序輸出過程
4、期末考核及評分標準 試卷考核,具體見試卷標準答案。
九、其他說明
1、適用專業
本課程標準也適用于計算機相關專業的非計算機專業。教學內容安排及學時分配 序號教學內容主要內容學時
一第1章 C語言概述1 C語言概述;簡單C程序介 紹;TurboC2.0開發環境介紹 2 二第2章程序的靈魂—算法 2 算法概念、特性及表示方法 2 三第3章數據類型、運算符與 表達式 數據類型、常量及變量 4 4 運算符和表達式 4
四第4章順序結構程序設計5 C語句概述、數據輸入輸 出、程序舉例 4 五第5章選擇結構程序設計6 邏輯運算和表達式、關系運 算和表達式、if switch語句 4 六第6章循環結構程序設計7 while語句、do…while語 句、for語句、break和continue語句、多重循環 4 七第7章數組 一維數組和二維數組 4 10 字符數組和程序舉例 4 八第8章函數11 函數的定義與調用 4 12 函數的嵌套與遞歸、數組 作為函數參數、局部變量和全 局變量 4 九第9章預處理命令13 概述、宏定義、文件包含、條件編譯 十第10章指針13 指針概述、指針變量、指 針與數組、指針與函數 4
14、字符串的指針、指向字符 串的針指變量、函數指針、指 針數組和指向指針的指針 4 十一第11章結構體與共用體 16 結構變量的說明、賦值和 初始化,結構數組說明和使用 4 十二第12章文件17 C文件概述、文件指針、文件的打開與關閉、文件的讀 寫操作 4 十三總復習、習題講解與答疑 6 合計64 教學實施方案設計 1 第1章C語言概述學時 2
教學目標
通過本章學習,使學生了解C語言的歷史、特點、熟悉C語言的結構特點,掌握C語言的運行環境和C程序的上機步驟。
教學內容
C語言的歷史與發展、C語言的結構與特點、TurboC2.0開發環境介紹及C語言的上機步驟。
教學方法使用多媒體教學課件授課 教學建議在多媒體教室授課 考核評價無 第2章程序的靈魂—算法學時 2 教學目標
通過本章學習,使學生了解算法的概念,特性及表示方法,掌握算法的思想。教學內容
算法的概念、算法的特性、如何用自然語言和流程圖表示算法、結構化程序設計方法。
教學方法使用多媒體教學課件授課 教學建議在多媒體教室授課 考核評價無 第3章(數據類型、運算符學時 2 教學目標
通過本節學習,使學生了解C的數據類型,熟悉基本數據類型的存儲方式,表示方法。
教學內容C的數據類型、標識符、常量與變量教學方法使用多媒體教學課件授課
教學建議在多媒體教室授課 考核評價章節習題 用Turbo C 運行第一個C程序學時 2 教學目標
通過上機體驗C語言的語法規則,掌握C程序的上機步驟,能夠用Turbo C編輯、編譯、連接、運行C程序。
教學內容用Turbo C編輯和運行一個簡單的C程序 教學方法教師指導,學生操作 教學建議在實訓機房授課
考核評價對本次實訓過程,按操作步驟撰寫實訓報告 5 第3章(運算符和表達式學時 2 教學目標
通過本章學習,使學生掌握不同類型間數據轉換的原則與方法,掌握有關運算符與表達式的運用。
教學內容類型轉換、運算符與表達式 教學方法使用多媒體教學課件授課
教學建議在多媒體教室授課 考核評價章節習題 運用printf(函數完成簡單編程學時 2 教學目標
通過本章學習,使學生學會使用常量和變量;熟悉C 語言的基本數據類型。教學內容
定義一個值為5的符號常量M和一個變量N,輸入它們的乘積。運用printf(函數輸入表達式的結果。
教學方法教師指導,學生操作 教學建議在實訓機房授課
考核評價對本次實訓過程,按操作步驟撰寫實訓報告 7 第4章順序結構程序設計學時 2 教學目標
通過本章學習,使學生了解三種基本程序設計結構、掌握數據的輸出函數和輸入函數、設計順序結構程序。
教學內容
C語句概述、賦值語句、數據輸入輸出的概念及在C 語言中的實現、字符數據的輸入輸出、格式輸入與輸出、順序結構程序設計舉例。
教學方法使用多媒體教學課件授課 教學建議在多媒體教室授課
考核評價章節習題 順序結構程序應用-實訓學時 2 教學目標
使學生體驗設計順序結構程序,能靈活應用printf(、scanf(、putchar(、getchar(。
教學內容
輸入一個三位數整數,正確分離它的個位、十位和百位數字,并分別在屏幕上輸出。
教學方法教師指導,學生操作 教學建議在實訓機房授課
考核評價對本次實訓過程,按操作步驟撰寫實訓報告 9 第5章選擇結構程序設計學時 2 教學目標
熟練掌握選擇型程序設計語句的用法;熟練掌握三種循環語句的運用;熟悉break和continue語句的使用方法。
教學內容
邏輯運算符和表達式、關系運算符和表達式、if語句、switch語句 教學方法使用多媒體教學課件授課 教學建議在多媒體教室授課 考核評價章節習題 選擇結構程序應用-實訓學時 2 教學目標
能會用if語句、if…else語句、嵌套if語句,能會用條件運算符。教學內容編程實現:從鍵盤輸入一個英文字母,如果是大寫字 母,則將它變為小寫輸出;如果是小寫字母,則將其變 為大寫輸出。
教學方法教師指導,學生操作 教學建議在實訓機房授課
考核評價對本次實訓過程,按操作步驟撰寫實訓報告 11 第6章循環結構程序設計學時 2 教學目標
掌握while語句、do-while語句、for語句(含缺省表達式的情況一般形式及執行過程;for語句的一般形式改寫while循環的形式;三種循環的異同;break 與continue語句的用途。掌握循環的嵌套。
教學內容
while語句、do…while語句、for語句、break和continue語句 教學方法使用多媒體教學課件授課 教學建議在多媒體教室授課 考核評價章節習題 循環結構程序應用(1-實訓學時 2 教學目標
區別三種循環語句的用法,體驗循環效果,并能應用于解決數字問題,編寫并調試出正確的程序。
教學內容
分別用while、do…while、for 語句打印100-1000之間的水仙花數。教學方法學生獨立完成編程教學建議在實訓機房授課 考核評價
本次實訓作為一次技能測試,課堂檢查每個同學的完成情況。評價標準:能否正確打印水仙花數;能否分別用三種循環語句實現;程序是否簡潔,思路是否清楚。第7章數組(一維數組和二維數組學時 2 教學目標
掌握一維數組的定義及初始化;一維數組元素的引用(下標法;二維數組的定義及初始化;二維數組元素的引用。
教學內容一維數組的定義和引用、二維數組的定義和引用教學方法使用多媒體教學課件授課
教學建議在多媒體教室授課 考核評價課后習題 14 數組應用(1-實訓學時 2 教學目標
使學生對數組類型有一個系統的認識,并能靈活的在具體問題中進行應用。教學內容
一個班有30個同學,通過鍵盤輸入成績,并打印輸出,每行輸出10個同學的成績,并對成績進行排序。
教學方法教師指導,學生操作 教學建議在實訓機房授課 考核評價無 第7章數組(字符數組學時 2 教學目標
掌握字符數組和字符串的應用及常用的字符串處理函數。教學內容字符數組、程序舉例 教學方法使用多媒體教學課件授課 教學建議在多媒體教室授課 考核評價無 數組應用(2-實訓學時 2 教學目標
能夠掌握字符數組的應用,能編寫字符串處理程序,能夠理解數據的概念和意義,正確利用數組解決實現問題。
教學內容
編寫程序:實現將字符數組s2中的全部字符復制到字符數組s1中。
教學方法教師指導,學生操作 教學建議在實訓機房授課
考核評價作為一次課堂作業,檢查學生的完成情況 17 第8章函數(函數的定義與調用學時 2 教學目標
了解模塊化程序設計思想;熟練掌握函數的定義、聲明和調用方法;熟練掌握參數傳遞的方式(“值傳遞”和“地址傳遞”
教學內容
函數概述、函數定義、函數參數及其返回值、函數的聲明與調用、函數參數的傳遞方式。
教學方法使用多媒體教學課件授課 教學建議在多媒體教室授課 考核評價無 函數的應用(1-實訓學時 2 教學目標
通過本次實訓內容,使學生對函數的定義及應用能系統認識,并能熟練地在編程中體現出來。
教學內容編寫函數實現由小到大排序。教學方法教師指導,學生操作 教學建議在實訓機房授課
考核評價對本次實訓過程,按操作步驟撰寫實訓報告。19 第8章函數(函數的嵌套與遞歸學時 2 教學目標
熟悉函數嵌套調用和遞歸調用的機制和過程;了解變量的存儲屬性,作用域、生命期的概念,掌握全局變量與局部變量的用法。
教學內容函數的嵌套與遞歸、函數舉例、數組作為函數參數、變量的存儲屬性。
教學方法使用多媒體教學課件授課 教學建議在多媒體教室授課 考核評價無 教學目標 教學內容 教學方法 教學建議 考核評價 21 教學目標 函數的應用(2-實訓 學時 2 能夠利用函數的遞歸調用將復雜的結構化過程簡單 化。用遞歸法計算 n!(通過函數的遞歸調用計算階乘)教師指導,學生操作 在實訓機房授課 無 第 9 章 預處理命令 學時 2 了解編譯預處理的含義,熟悉使用宏替換編寫程序。教學內容 教學方法 教學建議 考核評價 22 教學目標 編譯預處理、宏定義、文件包含、條件編譯 使用多媒體教學課件授課 在多媒體教室授課 無 第 10 章 指針(指針概述、指針變量、學時 2 指針與數組)熟悉指針的概念;掌握指針變量的定義與引用;掌握 指針與變量,指針與數組,指針與字符串的關系及操作 方法。指針的概念、指針變量作函數參數、指針與數組 使用多媒體教學課件授課 在多媒體教室授課 無 指針應用(1)-實訓 學時 2 教學內容 教學方法 教學建議 考核評價 23 教學目標 理解指針與地址的關系,運用指針間接引用變量并 設計程序。
教學內容 教學方法 教學建議 考核評價 24 程序 1:指向簡單變量的指針變量的應用。程序 2:利用指向數組的指針變量輸出數組的全部元素。教師指導,學生操作 在實訓機房授課 無 第 10 章 指針(指針與函數、字符串的 指針指向字符串的
針指變量、函數指針、學時 指針數組和指向指針的指針)2 教學目標 掌握用指針作為函數參數的使用方法,了解函數指針 的含義與用法。指針與函數、字符串的指針指向字符串的針指變量、函數指針 使用多媒體教學課件授課 在多媒體教室授課 無 指針應用(2)-實訓 學時 2 教學內容 教學方法 教學建議 考核評價 25 教學目標 教學內容 教學方法 教學建議 考核評價 26 指針與函數的結合應用是一個重點和難點,通過具 體題目的訓練能領會指針的本質,并應用在程序設計中。指針變量作為函數參數的應用--排序 教師指導,學生操作 在實訓機房授課 無 第 11 章 結構體與共用體 學時 2 了解結構的概念; 熟悉結構的聲明方法; 掌握結構變 教學目標 量的定義和引用方法;掌握結構數組的使用方法;熟悉 typedef 定義類型的方法。教學內容 結構變量的說明、賦值和初始化,結構數組定義、說明和使用,動態存儲分配和鏈表的概念。
教學方法 教學建議 考核評價 27 教學目標 使用多媒體教學課件授課 在多媒體教室授課 無 結構體與共用體應用-實訓 學時 2 教學內容 教學方法 教學建議 考核評價 28 教學目標 使學生初步了解構造類型--C 語言結構體類型,掌握 結構體類型的定義、結構體數組的定義、結構體指針的 定義及初始化、引用、應用。一個學生的基本信息有:學號、姓名、性別和年齡,現要存放 5 個同學的信息,編程實現把各項信息輸出出 來。教師指導,學生操作 在實訓機房授課 對本次實訓過程,按操作步驟撰寫實訓報告。第 12 章 文件 學時 2 使學生了解文件的定義與分類;掌握文件和文件指 針的概念和文件的操作方法;掌握文件讀寫和定位的操 作方法。文件概述、文件指針、文件的打開與關閉、文件的讀 寫操作。使用多媒體教學課件授課 在多媒體教室授課 無 文件操作-實訓 學時 2 教學內容 教學方法 教學建議 考核評價 29 教學目標 教學內容 教學方法 教學建議 使學生初步了解 C 語言中文件操作的類型,掌握文 件的打開及關閉的操作,并能熟練進行字符及數據塊的 讀寫操作。程序 1: 從鍵盤上接收字符寫到文件中去,然后將其關閉。程序 2:從文件中讀取字符,并通過顯示器顯示出來,然 后將其關閉。教師指導,學生操作 在實訓機房授課
考核評價 無 備注:
1、表二中教學建議欄可填寫:對教師的教有何建議(如上課地點、需要教具、設備、資料等),對學生的學有何建議。
2、表二中考核評價欄可填寫:練習評價或技能測試評價等,要求填細。如果本 次課后無練習,也無技能測試項目,則填“無”。
第二篇:C語言程序設計
1.Problem A: Hello world!Description Xiao_ming有兩個哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放學回家,父母分別跟他們打招呼。
Input 無
Output 請輸出: Hello Da_min, Hello Er_min, Hello Xiao_ming!
Sample Input Sample Output Hello Da_min, Hello Er_min, Hello Xiao_ming!
HINT 請注意換行符
Append Code #include
printf(“Hello Da_min,n”);
printf(“Hello Er_min,n”);
printf(“Hello Xiao_ming!n”);} 2.Problem B: 求圓的面積和周長 Description 從鍵盤輸入圓的半徑,求圓的面積和周長,圓周率取3.14。
Input 輸入一個浮點型數據,有效數字不會超過十進制的6位。
Output 輸出為兩行。
第一行為圓的面積,第二行為圓的周長,格式見sample。
Sample Input 3
Sample Output Area: 28.260000 Perimeter: 18.840000
HINT 了解浮點類型的輸入、輸出和算術運算符
Append Code 法一
#include
#include
double r;
scanf(“%d”,&r);
printf(“Area: %lfn”,pi*r*r);
printf(“Perimeter: %lfn”,2*pi*r);
}
3.Problem C:平均值 Description 求3個數的平均值。
Input 輸入只有一行,為3個較小的整數。
Output 輸出為這3個整數的平均值,保留3位小數。
Sample Input 1 2 3 Sample Output 2.000
HINT 注意除法運算對整型數據和浮點型數據是不一樣的。
Append Code #include
4.Problem D: 求字符的值 Description 從鍵盤輸入3個字符(不含雙字節字符),分別輸出每個字符的十進制值(ASCII碼)、八進制值和十六進制值。
Input 輸入為3個字符。
Output 輸出為3行。
每一行為每個字符(對應輸入順序)的十進制、八進制和十六進制值,用空格分隔開。每個輸出的值占3個字符,不足3個字符前面補0。
Sample Input 0 A
Sample Output 048 060 030 032 040 020 065 101 041
HINT 了解字符值的存儲和整型的關系。
Append Code #include
5.Problem A: 最簡單的程序 Description 輸出一行“Hello world!”。
Input 無
Output Hello world!
Sample Input Sample Output Hello world!
HINT Append Code #include
printf(“Hello world!”);}
6.Problem B: 算術基本運算 Description 計算兩整數x和y(0 Input 輸入只有一行,格式見sample。 Output 輸出為多行,按順序每行輸出x,y的和、差、積、商、余數、x的平方和y的三次方,格式見sample Sample Input x = 11, y = 3 Sample Output x + y : 14 xy : %dn“,x-y); printf(”x * y : %dn“,x*y); printf(”x / y quotient: %d, remainder: %dn“,x/y,x%y); printf(”x ^ 2 : %dn“,x*x); printf(”y ^ 3 : %dn“,y*y*y);} 7.Problem C: 自增自減運算 Description C語言中有自增運算++、自減運算--,并且可以前置和后置。 編寫一個程序:對輸入的一個整數a,輸出a++、a--、++a、--a的值。 Input 一個整數a,a是很小的整數。 Output 輸出為5行,第一行為a的值,后面依次為--a、a--、a++、++a的值。 5行輸出縱向a要對齊,“:”對齊,“:”前后各一個空格,后面的數值不用對齊。每行行尾都有回車。 Sample Input 0 Sample Output a : 0--a :-1 a--: 0 a++ : 0 ++a : 1 HINT Append Code #include : %dn“,a);printf(”--a : %dn“,--a);a=x;printf(” a--: %dn“,a--);a=x;printf(” a++ : %dn“,a++);a=x;printf(”++a : %dn“,++a);} 8.Problem F: 絕對值 Description 求整型數據和浮點型數據的絕對值。 Input 輸入兩個數,第一個是整數,第二個是浮點數。 Output 輸出為兩行,第一行為整數的絕對值,第二行為浮點數的絕對值,注意浮點數的絕對值不輸出無意義的0。 Sample Input-1 1 Sample Output 1 1 HINT 求絕對值可以用標準庫函數來完成,也可以自己判斷。注意浮點數的輸出格式。求絕對值的函數在哪個頭文件?貌似很多人會搞錯,包括很多編書的人! Append Code #include int n; float m; scanf(”%d%f“,&n,&m); //n=abs(n); //m=fabs(m); if(n<0) { n=-n; } if(m<0) { m=-m; } printf(”%dn“,n); printf(”%g“,m); return 0;} 9.Problem A: 奇數還是偶數? Description 輸入一個整數,判讀它是奇數還是偶數。 Input 輸入只有一行,為一個100以內的正整數。 Output 輸出為一行。 若輸入為偶數則輸出“even”,奇數輸出“odd”。Sample Input 30 Sample Output even HINT 用整數運算可以解決,練習“?:”表達式。 Append Code #include int n; scanf(”%d“,&n); if(n>=0&&n<=100){ if(n%2==0)printf(”evenn“); else printf(”oddn“); } return 0;} 10.Problem B: 簡單的打折計算 Description 商店規定:消費滿n元,可以打八八折。設某件商品標價m元,輸入購買的件數x,計算出需要支付的金額(單位:元),精確到分。 Input 輸入只有一行,三個整數m、n和x,且0 Sample Input 95 300 4 Sample Output 334.40 HINT 了解浮點型的輸出控制,注意整型和浮點型混合運算過程中的數據類型轉換。 Append Code #include int m,x,n,a; float b; scanf(”%d%d%d“,&m,&n,&x); 0 x m a=m*x; if(a>n) b=0.88*a; else b=a; printf(”%.2fn“,b); } 11.Problem C: 判斷閏年 Description 輸入一個正整數的年份,判斷是否為閏年。 Input 輸入只有一行,為一個10000以內的正整數。 Output 輸出為一行。 若輸入為閏年偶數則輸出“Yes”,否則輸出“No”。 Sample Input 2010 Sample Output No HINT 了解邏輯運算符和關系運算符。 Append Code #include int x; scanf(”%d“,&x); if(x>0&&x<10000) { if(x%4==0&&x%100!=0) printf(”Yesn“); else if(x%400==0) printf(”Yesn“); else printf(”Non“); } else printf(”error“);} 12.Problem D: 水仙花數 Description 如果一個三位十進制數等于其各位數字的立方和,則稱這個數為水仙花數。如:13+53+33=153。 Input 一個整數x,100<=x<=999。 Output x是水仙花數,則輸出“YES”,否則為“NO”。 Sample Input 153 Sample Output YES HINT Append Code #include int a,b,c,x; scanf(”%d“,&x); a=x/100; b=x/10%10; c=x%10; if(x==a*a*a+b*b*b+c*c*c) printf(”Yes“); else printf(”No“);} 13.Problem E: 三個數比較大小 Description 從鍵盤上輸入0~100之間的三個數,按從小到大的順序輸出。 Input 輸入只有一行,為三個整數。 Output 按從小到大輸出這三個數。 Sample Input 15 10 20 Sample Output 10 15 20 HINT 用if語句判斷各種情況可以解決這個問題。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a>=b) { if(b>=c) printf(”%d %d %dn“,c,b,a); else if(c>=a) printf(”%d %d %dn“,b,a,c); else printf(”%d %d %dn“,b,c,a); } else { if(a>=c) printf(”%d %d %dn“,c,a,b); else if(b>=c) printf(”%d %d %dn“,a,c,b); else printf(”%d %d %dn“,a,b,c); } } 14.Problem F: 奇怪的求和之一 Description 給定3個正整數a、b和c,按照如下規則求和: 如果這個數字是偶數,則累加到和中; 如果這個數字是奇數,則將大于該數的最小偶數累加到和中。 Input 三個正整數,均在100以內。 Output 一個和。 Sample Input 2 3 5 Sample Output 12 HINT 如果不會使用分支語句,可使用條件運算符判斷到底將哪個數累積到和中。 Append Code #include int a,b,c; scanf(”%d%d%d“,&a,&b,&c); if(a%2!=0)a++; if(b%2!=0)b++; if(c%2!=0)c++; printf(”%dn“,a+b+c); } 15.Problem G: 你過線了嗎? Description 經過四年的學習,你決定報考我國著名的“285”高校之一的北青大學,經過認真的復習,殘酷的考試,終于知曉了自己的考試成績,也知道了北青大學的錄取分數線,請你編程判斷,自己過線了嗎? Input 輸入有2行,第一行有4個正整數,分別表示三門課程的分數線以及總分分數線。第二行有3個非負整數,分別表示你考的三門課程的成績。 Output 如果你的三門課程成績都不低于相應課程的分數線,且你的考試總分也不低于北青大學的總分分數線要求,則輸出“congratulations”,否則輸出“sorry”。 Sample Input 70 80 70 240 80 80 82 Sample Output congratulations HINT 如果你不會使用分支語句,同樣可以使用條件運算符實現該程序。 Append Code #include int a,b,c,d,e,f,g,h; scanf(”%d %d %d %dn%d %d %d“,&a,&b,&c,&d,&e,&f,&g); h=e+f+g; if(e>=a&&f>=b&&g>=c&&h>=d) printf(”congratulations“); else printf(”sorry“);} 16.Problem I: A+B Problem(II): Input/Output Practice Description 計算a+b,0<=a,b<1000。 Input 輸入的第一行是一個整數N,后面有N對整數a和b,每對a和b占一行,a,b用空格分開。 Output 每行輸出一個a+b的和,順序與輸入對應。 Sample Input 2 1 2 10 20 Sample Output 3 30 HINT N給出了測試樣例數,用for循環處理方便。 Append Code #include int n,a,b,i;Scanf(“%d”,&n);For(i=0;i 17.Problem H: A+B Problem Description 計算a+b,0<=a,b<1000。 Input 輸入有多對整數a和b組成,每對a和b占一行,a,b用空格分開。 Output 每行輸出一個a+b的值,順序與輸入對應。 Sample Input 1 2 10 20 Sample Output 3 30 HINT OJ系統上測試輸入結束符為EOF(End Of File),其值為-1。用scanf()把文件所有內容讀完后,會讀到EOF,所以可以用來判斷輸入是否完成,測試時可以用Ctrl+Z產生EOF。本題解法參看FAQ。Append Code #include int a,b; while(scanf(”%d%d“,&a,&b)!=EOF){ printf(”%dn“,a+b); } return 0;} 18.Problem A: 判斷是否是元音字母 Description 輸入一個英文字母,判斷是否是元音字母。元音字母是:a,e,i,o u,A,E,I,O,U Input 輸入一個英文字母 Output 是元音字母,輸出“yes”,否則輸出“no”,行尾沒有回車。 Sample Input A Sample Output yes HINT Append Code #include char ch; scanf(”%c“,&ch); if(ch>='A'&&ch<='Z') ch=ch+32; if(ch=='a') printf(”yes“); else if(ch=='e') printf(”yes“); else if(ch=='i') printf(”yes“); else if(ch=='o') printf(”yes“); else if(ch=='u') printf(”yes“); else printf(”no“); } 19.Problem B: 按順序輸出三個數 Description 對于輸入的3個整數,按照從小到大的順序輸出。 Input 輸入3個int類型內的整數,兩兩之間用一個空格隔開。 Output 按照從小到大的順序輸出上述三個數,兩兩之間用一個空格隔開。 Sample Input 2 1 3 Sample Output 1 2 3 HINT Append Code #include int a,b,c,temp; scanf(”%d%d%d“,&a,&b,&c); if(a { temp=a; a=b; b=temp; } if(a { temp=a; a=c; c=temp; } if(b { temp=b; b=c; c=temp; } printf(”%d %d %dn“,c,b,a);} 20.Problem E: Description 判斷輸入整數的奇偶性。 判斷奇偶數 Input 輸入為一個整數。 Output 輸出只有一行,代表判斷結果。如果輸入的整數n是一個偶數,輸出: n is an even number.否則輸出: n is an odd number.見樣例。 Sample Input 12 Sample Output 12 is an even number.HINT Append Code #include int a; scanf(”%d“,&a); if(a%2==0) printf(”%d is an even number.“,a); else printf(”%d is an odd number.“,a);} 21.Problem A: 判斷兩個整數的大小關系 Description 輸入2個整數a和b,如果a>b,則輸出1,否則輸出0。 Input 兩個整數a和b,均不超過int類型的表示范圍。 Output 表示a>b的結果:如果a>b,則輸出1,否則輸出0。 Sample Input 3 4 Sample Output 0 HINT Append Code #include printf(”1“); else printf(”0“);return 0;} 22.Problem D: 成績的等級 Description 把百分制的考試成績轉換成五級制的成績: 90~100:Excellent 80~89:Good 70~79:Average 60~69:Pass 0~59:Failing 不在0~100之間的輸入是非法數據,輸出“Error”。 Input 輸入多行,每行一個整數。 Output 輸入所對應的成績等級。 Sample Input-1 81 92 35 68 72 100 Sample Output Error Good Excellent Failing Pass Average Excellent HINT 用switch語句解決這個問題比較方便。 Append Code #include int score; while(scanf(”%d“,&score)!=EOF) { if(score<0||score>100) printf(”Errorn“); else { switch(score/10) { case 0: case 1: case 2: case 3: case 4: case 5:printf(”Failingn“);break; case 6:printf(”Passn“);break; case 7:printf(”Averagen“);break; case 8:printf(”Goodn“);break; case 9: case 10:printf(”Excellentn“);break; } } } return 0;} 23.Problem E: 輸出是m的倍數或n的倍數、但不是 m和n的公倍數的數 Description 輸出1~k之間是m的倍數或n的倍數、但不是m和n的公倍數的數,其中1<=m,n Input 輸入三個整數,依次為k、m、n。 Output 從小到大輸出符合題意的所有整數,兩數之間用一個空格分開。 Sample Input 15 2 3 Sample Output 2 3 4 8 9 10 14 15 HINT 難點在于輸出格式的控制:空格在數的中間,學會用循環時邊界情況的特殊處理。 Append Code #include a=m;else a=n;printf(”%d“,a);for(i=a+1;i<=k;i++){ } if((i%m==0&&i%n!=0)||(i%n==0&&i%m!=0)) printf(” %d“,i);} return 0; 24.Problem B: 兩整數相加減 Description 計算a+b和a-b。 Input 輸入為一對整數a和b。a,b用空格分開。 Output 輸出a+b和a-b的計算結果,各占一行。 Sample Input 1 2 Sample Output 3-1 HINT Append Code #include printf(”%dn“,a+b); printf(”%dn“,a-b);} 25 Problem C: 它滿足條件嗎? Description 需要判斷給定的一個整數是否同時滿足如下三個條件: 1.它是一個完全平方數。2.它是一個偶數。3.它是一個正數。 注:若一個數能表示成某個自然數的平方的形式,則稱這個數為完全平方數。例如: 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361,400,441,484,529 Input 一個int范圍內的整數。 Output 如果輸入的數字滿足條件,則輸出yes,否則輸出no。 Sample Input 100 Sample Output yes HINT 注意邏輯表達式判斷三個條件的順序。如果你不會使用分支語句,同樣可以使用條件運算符實現該程序。 庫函數sqrt()可以用于求一個數的平方根。 Append Code #include if(a==sqrt(a)*sqrt(a)&&a%2==0&&a>0) printf(”yes“); else printf(”no“);} 26.Problem F: 多路分支 Description 編寫一個完整的程序,運行時向用戶提問”你考試考了多少分?(0-100)“接受輸入后判斷其等級并顯示出來等級: 優:90<=分數<=100 良:80<=分數<90 中:60<=分數<80 差:0<=分數<60 Input 輸入任意一個整數分數值,顯示等級;再輸入任意一個整數分數值,顯示等級;....直到測試數據較充分,可輸入-1止。 Output 對任意輸入的分數值,輸出對應的等級,直到輸入的數為-1時才退出運行.Sample Input 102 100 90 80 70 60 50 0-80-1 Sample Output grad must between 0 and 100 優 優 良 中 中 差 差 grad must between 0 and 100 grad must between 0 and 100 HINT Append Code #include int x; while(scanf(”%d“,&x)!=EOF) { if(x<0||x>100) printf(”grad must between 0 and 100n“); else if(x>=90) printf(”優n“); else if(x>=80) printf(”良n“); else if(x>=60) printf(”中n“); else if(x>=0) printf(”差n“); } return 0;} Problem D: 有多少人? Description 學校舉行運動會,如果全體學生按照3人一隊列隊,則多了1個人;如果按照4人一隊列隊,則多了2個人;如果按照5人一隊排隊,則多了3個人。請問這個學校有多少學生? Input 一個int類型的正整數N,是學生人數的上界,即:該校學生數不超過N。 Output 所有可能的學生數,每個數占一行。 Sample Input 200 Sample Output 58 118 178 HINT Append Code #include int n,i; scanf(”%d“,&n); for(i==1;i<=n;i++){ if(i%3==1&&i%4==2&&i%5==3) printf(”%dn“,i);} return 0;} Problem C: 正負數各有幾個? Description 輸入若干個整數,求其中正數、負數的個數。 Input 輸入分為2行:第一行是一個數字N>0,表示下面有N個整數。第2行是N個整數,都是int類型的。 Output 輸出所輸入的N個整數的正數個數和負數個數,并用空格分開2個輸出。Sample Input 10 2 3 4 5-1-2-3-4-5 Sample Output 5 5 HINT 貌似還有一種叫做0的數。 Append Code #include int n,a,i,num1=0,num2=0; scanf(”%d“,&n);for(i=0;i { scanf(”%d“,&a); if(a>0) num1++; else if(a<0) num2++; } printf(”%d %dn“,num1,num2); return 0;} Problem A: A+B Problem(III): Input/Output Practice Description 計算a+b,0<=a,b<1000。 Input 輸入有多對整數a和b組成,每對a和b占一行,a,b用空格分開。當測試樣為0 0時表示輸入結束,0 0不參與運算。 Output 每行輸出一個a+b的值,順序與輸入對應。 Sample Input 1 2 10 20 0 0 Sample Output 3 30 HINT 練習break的使用。 Append Code #include { if(a!=0||b!=0) } printf(”%dn“,a+b); else break; return 0;} 30 Problem B: A+B Problem(IV): Input/Output Practice Description 計算a+b,0<=a,b<1000。 Input 輸入有多對整數a和b組成,每對a和b占一行,a,b用空格分開。 Output 每行輸出一個a+b的值,順序與輸入對應。每個格式樣例之間用一個空行分隔開。 Sample Input 1 2 10 20 15 35 Sample Output 3 30 50 HINT 由于輸出的和比空行多一個,所以全部計算放在一個循環里是不行的,必須要特殊處理開頭或者結尾。 Append Code #include n++; if(n==1) printf(”%dn“,a+b); else printf(”n%dn“,a+b); } return 0;} Problem C: n個數的最大值和最小值 Description 找出n個數中最大的數和最小的數,并將它們的值輸出出來。 Input 輸入為n+1個整數,都在int類型范圍內。這些數可能用若干空格或者換行符分隔開。輸入的第1個數為n,表示后續有n個數輸入。從輸入的第2個數開始,求出直到第n+1個數中最大的數和最小的數。 Output 輸出為兩行,格式見sample。 Sample Input 3 0 1-1 Sample Output The maximum number is 1.The minimum number is-1.HINT 分隔符是空格還是回車都是空白符,對scanf(”%d“)來說沒有區別;先讀入n,然后用for循環就很容易控制讀入n個數的過程。 Append Code #include int n,i,max,min; scanf(”%d“,&n); int a[n]; for(i=0;i scanf(”%d“,&a[i]); max=a[0]; min=a[0]; for(i=0;i { if(max max=a[i]; if(min>a[i]) min=a[i]; } printf(”The maximum number is %d.n“,max); printf(”The minimum number is %d.“,min); return 0;} 32.Problem D: 求100以內的素數 Description 素數是只能被1和自身整除的正整數,根據數學定義1不是素數。素數也叫質數。 Input 輸入為兩個整數m和n,滿足0<=m<=n<=100。 Output 從大到小輸出m~n之間的所有素數,一個素數一行。如果m~n之間沒有素數,則不輸出任何數。 輸出的所有數在兩行“=====”之間。 Sample Input 2 12 Sample Output ===== 11 7 5 3 2 ===== HINT 利用素數的數學規律可以很容易的解出此題,題目給出的數據范圍是關鍵。 Append Code #include t=0; for(j=2;j<=sqrt(i);j++) if(i%j==0) t=1; if(t==0&&i>1) printf(”%dn“,i);} printf(”=====“);return 0;} 33.Problem E: 是否構成三角形? Description 給出三個整數,代表三條邊的長度,判斷這三條邊的長度是否能構成一個三角形? Input 第一行是n(1<=n<=100),表示有n組測試數據 接下來有n行,每一行包含三個整數,表示三個邊長(1<=邊長<=100) Output 如果三條邊能構成三角形,輸出YES,否則輸出NO Sample Input 3 1 2 3 2 8 7 20 20 1 Sample Output NO YES YES HINT Append Code #include {scanf(”%d%d%d“,&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a) printf(”YESn“);else printf(”NOn“);} return 0;} 34.Problem C: 簡單的整數排序 Description 對給出的若干整數按從小到大排序。 Input 輸入的第一個數為n(n<=1000),后接n個整數。 Output 按從小到大的順序輸出這些整數,每兩個整數之間用一個空格分隔開,最后一個整數后面沒有空格。 Sample Input 10 3 9 1 5 2 8 5 6 7 3 Sample Output 1 2 3 3 5 5 6 7 8 9 HINT 排序前必須把所有的整數都存儲下來。因為只有最多1000個數,1秒的時間足夠任何排序算法運行處結果來。 Append Code #include int c,i,n,j; int a[1000]; scanf(”%d“,&n); for(i=0;i scanf(”%d“,&a[i]); for(i=1;i<=n-1;i++) { for(j=0;j { if(a[j]>a[j+1]) { c=a[j]; a[j]=a[j+1]; a[j+1]=c; } } } printf(”%d“,a[0]); for(i=1;i printf(” %d“,a[i]); return 0;} 35.Problem A: Description 購物的路程 Saya和Kudo一起去購物。假定她們逛的街是一條直線,而商鋪是這條直線上的一些點。她們將車停在該直線最左端的店鋪處,然后從左向右開始逛每一個店鋪,然后從最右邊的店鋪再返回到停車處。你的任務是計算她們走了多少路。 Input 輸入有多組。每一組的第一行是N(0 Output 對每組輸入,輸出她們走的路長。 Sample Input 4 13 89 37 6 7 30 41 14 39 42 0 Sample Output 152 70 HINT Append Code #include int n,i,max,min,a[100001]; while(scanf(”%d“,&n)&&n!=0) { scanf(”%d“,&a[0]); min=max=a[0]; for(i=1;i { scanf(”%d“,&a[i]); if(a[i]>max) max=a[i]; if(a[i] min=a[i]; } printf(”%dn“,(max-min)*2); } return 0;} 36.Problem B: 求累加和 Description 編程求min~max的累加和(含min和max),其中max>=min>0。部分程序已經給出,請填充其中的空白語句,并提交填充后的完整程序。 Input 輸入為多行。第一行是一個整數N>0,表示后面有N個測試用例。后面有N行,每行包含2個整數,分別是min和max。 Output 輸出為N行,每個測試用例的計算結果占據一行。每行的格式為: case i:sum=s.其中i表示測試用例的編號(從1開始),s是該測試用例對應的累加和(設不超過int的表示范圍)。 Sample Input 3 1 10 1 100 1 1 Sample Output case 1:sum=55.case 2:sum=5050.case 3:sum=1.HINT Append Code #include int n,i,j,max,min,sum; scanf(”%d“,&n); for(i=0;i { sum=0; scanf(”%d%d“,&min,&max); if(max==min) printf(”case %d:sum=%d.n“,i+1,min); else { for(j=min;j<=max;j++) sum=sum+j; printf(”case %d:sum=%d.n“,i+1,sum); } } return 0;} 37.Problem G: 順序輸出字母 Description 按字母順序輸出兩個字母st和ed之間的所有字母,但不包括st和ed。不輸出逆序。 Input 兩個字母st和ed,都是大寫字母,用一個空格分開。 Output 在一行內按順序輸出st和ed之間的所有字母,但不包括st和ed。例如: 輸入為A和E,則輸出為BCD; 輸入為A和B,則什么字母也不輸出,只有一個空行; 輸入為E和A,也是什么字母也不輸出,只有一個空行。最后要輸出一行(行尾不回車): ***END*** Sample Input A C Sample Output B ***END*** HINT Append Code #include char st,ed,a; int i; scanf(”%c%c%c“,&st,&a,&ed); { for(i=st+1;i printf(”%c“,i); printf(”n***END***“); } return 0;} 38.Problem F: 單字母變換 Description Tom和Jack是密碼學愛好者,他們在聊天時經常使用一些暗語。他們使用的一種最簡單的暗語是:將要說的每句話里面的英文字母變成這個字母之后的某個字母。現在要求你寫一個程序,將一個字母變成它之后的某個字母。 Input 輸入有2個:一個大寫字母c和一個正整數d(0 Output 輸出字母c之后的第d個字母。大小寫與c一致。如果c之后的某個字母已經超出'Z',則再從字母'A'開始計數。 如:c='A',d=3,則輸出應為:D。若:c='Y',d=3,則輸出應為:B。 Sample Input A 3 Sample Output D HINT Append Code #include char c; int d; scanf(”%c%d“,&c,&d); if(c+d<='Z') printf(”%c“,c+d); else printf(”%c“,c+d-26); return 0;} 39.Problem B: 登錄密碼驗證 Description 編寫一個程序,模擬用戶登錄系統的密碼驗證過程。系統提供給用戶的密碼長度最長為20個字符,若密碼輸入錯誤可以再次輸入。但為了保證用戶密碼安全,若連續輸入密碼錯誤超過5次就會鎖定賬號一段時間。 Input 輸入為若干個串,至EOF結束。輸入的第一個串是用戶的正確密碼,后面的串為模擬用戶登錄時的輸入的密碼。 Output 每次輸入錯誤的密碼,輸出一個“Wrong!”,若輸入的密碼為正確的,輸出一個“Welcome!”,并結束密碼測試。若前5次輸入的密碼都是錯誤的,則后面的輸入中不管是否有正確的密碼都輸出“Out of limited!”。 Sample Input abcdefg 123456 kkkkkkkk abcdefg Sample Output Wrong!Wrong!Welcome! HINT 輸入可以用scanf(”%s“)處理,密碼比較用字符串的比較可以完成。 Append Code #include char a[20],b[20]; int i,j=1; scanf(”%s“,a); while(scanf(”%s“,b)!=EOF) { if(j<=5) { if((strcmp(a,b)==0)) { printf(”Welcome!n“); break; } else printf(”Wrong!n“); j++; } else printf(”Out of limited!n"); } } 40.Problem C: 兔子的繁殖問題 Description 假設一對兔子每月能生一對小兔(一雌一雄),每對小兔出生后的下一個月是沒有繁殖能力的,至出生后的第三個月開始又可以每月生一隊小兔,問從一對剛出生的小兔開始,經過若干個月后一共有多少兔子(假設在此過程中兔子沒有死亡)? 這個問題是意大利數學家菲波那契(Fibonacci)在他1202年出版的《算盤全書》中提出來的,從第一對剛出生的小兔開始每月的兔子數被乘坐菲波那契序列。 Input 輸入的第一個數為n,接下來有n個數字。每個數字為一個月份m(m<=45)。 Output 輸出為n行,每行為第m個月后的兔子總數。 《C 語言程序設計》主要在計算機軟件、計算機網絡、計算機應用、通信技術、智能電子、電子信息工程、多媒體以及核工程與核技術等專業中開設,是電子信息類、機械類等工科專業的重要專業基礎課。 本校從2001至今,每年都開設《C語言程序設計》課程,由于,我校最開始時的特殊情況,主要把重點放在C語言中的各類重點、難點的語法、語義上,使得學生經過比較復雜和痛苦的過程后,對C語言在使用上很難做到自己編寫程序。而且很多學生產生了畏懼心理。 2004年,學院成立計算機科學與技術系,為了更好學習和掌握C語言,計算機科學與技術專業和計算機維護專業(計算機應用技術前身)除了開設《C語言程序設計》課程外,在后續一學期還開設了《C語言程序設計課程設計》,使得計算機專業學生編程思想和能力得到了極大提高。 2005年,為了讓我院工科學生更好的掌握C語言編程以及通過四川省計算機二級考試,在《C語言程序設計》課程后設置《C語言程序設計課程設計》,極大地提高了學生的動手機會和能力,過級率顯著提高! 2007年,依托我校建設精品課程的契機,我們將C語言中的各個知識點進行重新規整,提出適用于三本院校學生的語言設計學習的方法。我們提出,先了解C語言,再學習C語言,再用C語言的思想。即在開始時讓學生初步知道C語言,然后引入比較簡單的運算符以及基本輸入、輸出和簡單的順序結構程序設計。通過這樣的方式,我們發現,學生在C語言的學習就不會從開始的時候陷入大量難懂的語法、語義和數據結構中。有了以上鋪墊再層層進入,最終進入復雜的各類數據結構以及指針等學習。通過以上的內容規整后,教學效果有明顯提高。 經典C語言程序設計例題 【程序1】 題目:有1、2、3、4個數字,能組成多少個互不相同且無重復數字的三位數?都是多少? 1.程序分析:可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列后再去 掉不滿足條件的排列。2.程序源代碼: main(){ int i,j,k;printf(“n”);for(i=1;i<5;i++) /*以下為三重循環*/ for(j=1;j<5;j++) for(k=1;k<5;k++) { if(i!=k&&i!=j&&j!=k) /*確保i、j、k三位互不相同*/ printf(“%d,%d,%dn”,i,j,k); } } 【程序2】 題目:企業發放的獎金根據利潤提成。利潤(I)低于或等于10萬元時,獎金可提10%;利潤高 于10萬元,低于20萬元時,低于10萬元的部分按10%提成,高于10萬元的部分,可可提 成7.5%;20萬到40萬之間時,高于20萬元的部分,可提成5%;40萬到60萬之間時高于 40萬元的部分,可提成3%;60萬到100萬之間時,高于60萬元的部分,可提成1.5%,高于 100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數? 1.程序分析:請利用數軸來分界,定位。注意定義時需把獎金定義成長整型。 2.程序源代碼: main(){ long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(“%ld”,&i);bonus1=100000*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;if(i<=100000) bonus=i*0.1;else if(i<=200000) bonus=bonus1+(i-100000)*0.075; else if(i<=400000) bonus=bonus2+(i-200000)*0.05; else if(i<=600000) bonus=bonus4+(i-400000)*0.03; else if(i<=1000000) bonus=bonus6+(i-600000)*0.015; else bonus=bonus10+(i-1000000)*0.01;printf(“bonus=%d”,bonus);} ---------------【程序3】 題目:一個整數,它加上100后是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少? 1.程序分析:在10萬以內判斷,先將該數加上100后再開方,再將該數加上268后再開方,如果開方后 的結果滿足如下條件,即是結果。請看具體分析: 2.程序源代碼: #include “math.h” main(){ long int i,x,y,z;for(i=1;i<100000;i++){ x=sqrt(i+100);/*x為加上100后開方后的結果*/ y=sqrt(i+268);/*y為再加上168后開方后的結果*/ if(x*x==i+100&&y*y==i+268)/*如果一個數的平方根的平方等于該數,這說明此數是完全平方數*/ printf(“n%ldn”,i);} }---------------【程序4】 題目:輸入某年某月某日,判斷這一天是這一年的第幾天? 1.程序分析:以3月5日為例,應該先把前兩個月的加起來,然后再加上5天即本年的第幾天,特殊 情況,閏年且輸入月份大于3時需考慮多加一天。2.程序源代碼: main(){ int day,month,year,sum,leap;printf(“nplease input year,month,dayn”);scanf(“%d,%d,%d”,&year,&month,&day);switch(month)/*先計算某月以前月份的總天數*/ { case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf(“data error”);break;} sum=sum+day;/*再加上某天的天數*/ if(year%400==0||(year%4==0&&year%100!=0))/*判斷是不是閏年*/ leap=1;else leap=0;if(leap==1&&month>2)/*如果是閏年且月份大于2,總天數應該加一天*/ sum++;printf(“It is the %dth day.”,sum);}---------------【程序5】 題目:輸入三個整數x,y,z,請把這三個數由小到大輸出。 1.程序分析:我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然后再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。 2.程序源代碼: main(){ int x,y,z,t;scanf(“%d%d%d”,&x,&y,&z);if(x>y){t=x;x=y;y=t;} /*交換x,y的值*/ if(x>z){t=z;z=x;x=t;}/*交換x,z的值*/ if(y>z){t=y;y=z;z=t;}/*交換z,y的值*/ printf(“small to big: %d %d %dn”,x,y,z);}---------------【程序6】 題目:用*號輸出字母C的圖案。 1.程序分析:可先用'*'號在紙上寫出字母C,再分行輸出。2.程序源代碼: #include “stdio.h” main(){ printf(“Hello C-world!n”);printf(“ ****n”);printf(“ *n”);printf(“ * n”);printf(“ ****n”);}---------------【程序7】 題目:輸出特殊圖案,請在c環境中運行,看一看,Very Beautiful!1.程序分析:字符共有256個。不同字符,圖形不一樣。 2.程序源代碼: #include “stdio.h” main(){ char a=176,b=219;printf(“%c%c%c%c%cn”,b,a,a,a,b);printf(“%c%c%c%c%cn”,a,b,a,b,a);printf(“%c%c%c%c%cn”,a,a,b,a,a);printf(“%c%c%c%c%cn”,a,b,a,b,a);printf(“%c%c%c%c%cn”,b,a,a,a,b);}---------------【程序8】 題目:輸出9*9口訣。 1.程序分析:分行與列考慮,共9行9列,i控制行,j控制列。2.程序源代碼: #include “stdio.h” main(){ int i,j,result;printf(“n”);for(i=1;i<10;i++) { for(j=1;j<10;j++) { result=i*j; printf(“%d*%d=%-3d”,i,j,result);/*-3d表示左對齊,占3位*/ } printf(“n”);/*每一行后換行*/ } }---------------【程序9】 題目:要求輸出國際象棋棋盤。 1.程序分析:用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格。 2.程序源代碼: #include “stdio.h” main(){ int i,j;for(i=0;i<8;i++){ for(j=0;j<8;j++) if((i+j)%2==0) printf(“%c%c”,219,219); else printf(“ ”); printf(“n”);} }---------------【程序10】 題目:打印樓梯,同時在樓梯上方打印兩個笑臉。 1.程序分析:用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數。2.程序源代碼: #include “stdio.h” main(){ int i,j;printf(“11n”);/*輸出兩個笑臉*/ for(i=1;i<11;i++){ for(j=1;j<=i;j++) printf(“%c%c”,219,219);printf(“n”);} } 【程序11】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月 后每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 1.程序分析: 兔子的規律為數列1,1,2,3,5,8,13,21....2.程序源代碼: main(){ long f1,f2;int i;f1=f2=1;for(i=1;i<=20;i++){ printf(“%12ld %12ld”,f1,f2); if(i%2==0)printf(“n”);/*控制輸出,每行四個*/ f1=f1+f2;/*前兩個月加起來賦值給第三個月*/ f2=f1+f2;/*前兩個月加起來賦值給第三個月*/ } }---------------【程序12】 題目:判斷101-200之間有多少個素數,并輸出所有素數。 1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。 2.程序源代碼: #include “math.h” main(){ int m,i,k,h=0,leap=1;printf(“n”);for(m=101;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) {leap=0;break;} if(leap){printf(“%-4d”,m);h++; if(h%10==0) printf(“n”); } leap=1; } printf(“nThe total is %d”,h);}---------------【程序13】 題目:打印出所有的“水仙花數”,所謂“水仙花數”是指一個三位數,其各位數字立方和等于該數 本身。例如:153是一個“水仙花數”,因為153=1的三次方+5的三次方+3的三次方。 1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。2.程序源代碼: main(){ int i,j,k,n;printf(“'water flower'number is:”);for(n=100;n<1000;n++){ i=n/100;/*分解出百位*/ j=n/10%10;/*分解出十位*/ k=n%10;/*分解出個位*/ if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf(“%-5d”,n); } } printf(“n”);}---------------【程序14】 題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。 程序分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:(1)如果這個質數恰等于n,則說明分解質因數的過程已經結束,打印出即可。 (2)如果n<>k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數你n,重復執行第一步。 (3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。2.程序源代碼: /* zheng int is divided yinshu*/ main(){ int n,i;printf(“nplease input a number:n”);scanf(“%d”,&n);printf(“%d=”,n);for(i=2;i<=n;i++){ while(n!=i) { if(n%i==0) { printf(“%d*”,i); n=n/i; } else break; } } printf(“%d”,n);}---------------【程序15】 題目:利用條件運算符的嵌套來完成此題:學習成績>=90分的同學用A表示,60-89分之間的用B表示,60分以下的用C表示。 1.程序分析:(a>b)?a:b這是條件運算符的基本例子。2.程序源代碼: main(){ int score;char grade;printf(“please input a scoren”);scanf(“%d”,&score);grade=score>=90?'A':(score>=60?'B':'C');printf(“%d belongs to %c”,score,grade);}---------------【程序16】 題目:輸入兩個正整數m和n,求其最大公約數和最小公倍數。1.程序分析:利用輾除法。 2.程序源代碼: main(){ int a,b,num1,num2,temp;printf(“please input two numbers:n”);scanf(“%d,%d”,&num1,&num2);if(num1 num1=num2; num2=temp;} a=num1;b=num2;while(b!=0)/*利用輾除法,直到b為0為止*/ { temp=a%b; a=b; b=temp;} printf(“gongyueshu:%dn”,a);printf(“gongbeishu:%dn”,num1*num2/a);}---------------【程序17】 題目:輸入一行字符,分別統計出其中英文字母、空格、數字和其它字符的個數。1.程序分析:利用while語句,條件為輸入的字符不為'n'.2.程序源代碼: #include “stdio.h” main(){char c;int letters=0,space=0,digit=0,others=0;printf(“please input some charactersn”);while((c=getchar())!='n'){ if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++;else if(c==' ') space++; else if(c>='0'&&c<='9') digit++; else others++;} printf(“all in all:char=%d space=%d digit=%d others=%dn”,letters, space,digit,others);}---------------【程序18】 題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時 共有5個數相加),幾個數相加有鍵盤控制。1.程序分析:關鍵是計算出每一項的值。2.程序源代碼: main(){ int a,n,count=1;long int sn=0,tn=0;printf(“please input a and nn”);scanf(“%d,%d”,&a,&n);printf(“a=%d,n=%dn”,a,n);while(count<=n){ tn=tn+a; sn=sn+tn; a=a*10; ++count;} printf(“a+aa+...=%ldn”,sn);}---------------【程序19】 題目:一個數如果恰好等于它的因子之和,這個數就稱為“完數”。例如6=1+2+3.編程 找出1000以內的所有完數。 1.程序分析:請參照程序<--上頁程序14.2.程序源代碼: main(){ static int k[10];int i,j,n,s;for(j=2;j<1000;j++){ n=-1;s=j; for(i=1;i { if((j%i)==0) { n++; s=s-i; k[n]=i; } } if(s==0){ printf(“%d is a wanshu”,j);for(i=0;i 題目:一球從100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在 第10次落地時,共經過多少米?第10次反彈多高? 1.程序分析:見下面注釋 2.程序源代碼: main(){ float sn=100.0,hn=sn/2;int n;for(n=2;n<=10;n++){ sn=sn+2*hn;/*第n次落地時共經過的米數*/ hn=hn/2;/*第n次反跳高度*/ } printf(“the total of road is %fn”,sn);printf(“the tenth is %f metern”,hn);} 【程序21】 題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個 第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以后每天早上都吃了前一天剩下 的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。 1.程序分析:采取逆向思維的方法,從后往前推斷。2.程序源代碼: main(){ int day,x1,x2;day=9;x2=1;while(day>0){x1=(x2+1)*2;/*第一天的桃子數是第2天桃子數加1后的2倍*/ x2=x1;day--;} printf(“the total is %dn”,x1);}---------------【程序22】 題目:兩個乒乓球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽簽決定 比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比,請編程序找出 三隊賽手的名單。 1.程序分析:判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。 2.程序源代碼: main(){ char i,j,k;/*i是a的對手,j是b的對手,k是c的對手*/ for(i='x';i<='z';i++)for(j='x';j<='z';j++){ if(i!=j) for(k='x';k<='z';k++) { if(i!=k&&j!=k) { if(i!='x'&&k!='x'&&k!='z') printf(“order is a--%ctb--%ctc--%cn”,i,j,k); } } } }---------------【程序23】 題目:打印出如下圖案(菱形) * *** ****** ******** ****** *** * 1.程序分析:先把圖形分成兩部分來看待,前四行一個規律,后三行一個規律,利用雙重 for循環,第一層控制行,第二層控制列。2.程序源代碼: main(){ int i,j,k;for(i=0;i<=3;i++){ for(j=0;j<=2-i;j++) printf(“ ”);for(k=0;k<=2*i;k++) printf(“*”);printf(“n”);} for(i=0;i<=2;i++){ for(j=0;j<=i;j++) printf(“ ”);for(k=0;k<=4-2*i;k++) printf(“*”);printf(“n”);} }---------------【程序24】 題目:有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。1.程序分析:請抓住分子與分母的變化規律。2.程序源代碼: main(){ int n,t,number=20;float a=2,b=1,s=0;for(n=1;n<=number;n++){ s=s+a/b;t=a;a=a+b;b=t;/*這部分是程序的關鍵,請讀者猜猜t的作用*/ } printf(“sum is %9.6fn”,s);}---------------【程序25】 題目:求1+2!+3!+...+20!的和 1.程序分析:此程序只是把累加變成了累乘。2.程序源代碼: main(){ float n,s=0,t=1;for(n=1;n<=20;n++){ t*=n;s+=t;} printf(“1+2!+3!...+20!=%en”,s);}---------------【程序26】 題目:利用遞歸方法求5!。1.程序分析:遞歸公式:fn=fn_1*4!2.程序源代碼: #include “stdio.h” main(){ int i;int fact();for(i=0;i<5;i++)printf(“40:%d!=%dn”,i,fact(i));} int fact(j)int j;{ int sum;if(j==0)sum=1;else sum=j*fact(j-1);return sum;}---------------【程序27】 題目:利用遞歸函數調用方式,將所輸入的5個字符,以相反順序打印出來。1.程序分析: 2.程序源代碼: #include “stdio.h” main(){ int i=5;void palin(int n);printf(“40:”);palin(i);printf(“n”);} void palin(n)int n;{ char next;if(n<=1){ next=getchar();printf(“n
主站蜘蛛池模板:
亚洲裸男gv网站|
亚洲欧美成人一区二区三区|
亚洲中文色欧另类欧美|
日韩一线无码av毛片免费|
久久久精品人妻久久影视|
乱中年女人伦av二区|
国产69精品久久久久孕妇|
午夜成人爽爽爽视频在线观看|
国产成人免费ā片在线观看|
中文字幕无码不卡在线|
欧美人与物videos另类xxxxx|
色欲av蜜桃一区二区三|
最新中文字幕av无码不卡|
久久久老熟女一区二区三区|
一本大道无码人妻精品专区|
综合无码一区二区三区|
中文字幕亚洲欧美日韩在线不卡|
久久久午夜精品福利内容|
国产精品亚洲mnbav网站|
国色天香社区视频在线|
精品少妇一区二区三区免费观|
久久亚洲色www成爱色|
亚洲美女又黄又爽在线观看|
日韩人妻熟女中文字幕aⅴ春菜|
四虎亚洲欧美成人网站|
黑人大群体交免费视频|
精品国产自在精品国产精华天|
国产精品久久久久久无码|
2020国产成人精品视频|
亚洲国产中文字幕在线视频综合|
亚洲无码不卡|
欧美最猛黑人xxxx黑人猛交98|
精品国产乱码久久久软件下载|
玩弄丰满少妇人妻视频|
超碰97人人做人人爱网站|
99精品视频在线观看免费|
亚洲乱码av中文一区二区|
中文字幕乱码一区二区三区免费|
久久久久国产精品免费免费搜索|
一本大道东京热无码一区|
4455永久免费视频|
第三篇:C 語言程序設計
第四篇:經典C語言程序設計例題