一,實驗總結
本此實驗共9組練習,其中前5組為練習c程序結構與書寫規范,3組為補全程序,最后一組為自主編寫。
Part 1
前五組中沒有出現什么問題,但在學習指導P116第一題中:
#include<stdio.h> int main(){ int a=5,b=7,c=100; int f,e,d; d = a/b*c; e = a*c/b; f = c/b*a; printf("d=%d,e=%d,f=%d",d,e,f); return 0;
最開始 f 的運算式寫成了
f=c/d*a
,運算一直是錯誤的,由此分析得出,出現除數為0時,都會出現除法溢出異常,程序不能正常運行。此情況下運算結果如下圖,可見程序未正常運行並進行報錯。
將表達式修改回來之后,即可正常運行且結果無誤。
Part 2
(1)判斷奇偶: ex1.c
補全后如圖
// 程序功能: // 要求用戶從鍵盤輸入一個整數,判斷其是奇數還是偶數 #include <stdio.h> int main() { int x; printf("輸入一個整數: \n"); scanf("%d",&x); // 在×××處填寫相應表達式 // 使得當表達式成立時,判定x是奇數,否則是偶數 if(x%2==!0) printf("是奇數"); else printf("是偶數"); return 0; }
運行結果為
(2)根據不同的輸入,顯示不同提示信息:ex2.c
補全后如圖
/* 程序功能: 要求用戶從鍵盤輸入1~7之間的整數 如果輸入的是1~5, 提示用戶是工作日,要努力工作; 如果輸入的是6或7,提示用戶是休息日,放松休息; 否則,提示用戶輸入不在合法范圍 */ #include <stdio.h> int main() { int days; printf("輸入一個整數: \n"); scanf("%d",&days); // 補足×××處的表達式,使得滿足程序功能描述 if(days<=5&&days>0) // days在1到5之間 printf("workdays, fighting\n"); else if(days==6||days==7) // days是6或7 printf("weekend, relax~\n"); else printf("Ooops, not in 1~7\n"); return 0; }
運行結果為
(3)根據用戶輸入字符,判斷如果是小寫字母,則轉換成大寫;否則保持原樣: ex3.c
補全后如圖
// 功能: // 從鍵盤上輸入單個字符 // 如果是小寫字母,則轉換成大寫后輸出 // 否則,什么也不做,原樣輸出 #include <stdio.h> int main() { char ch; printf("輸入一個字符:\n"); scanf("%c",&ch); // 根據程序功能描述,補足程序 if(ch>='a'&&ch<='z') // 如果ch是小寫字母,補足判定ch是小寫字母的表達式 ch-=32; // 補足把ch中的小字母轉換成大寫字母的表達式語句 // 說明:語句就是在表達式末尾加分號; printf("%c\n",ch); return 0; }
運行結果為
Part 3
由十進制轉換為二進制的數學計算方法可知,采用“除二取余,逆序排列”的方法。
在嘗試編寫代碼的過程中,我主要遇到了兩個問題:(1)如何進行逆序排列;(2)當數值過大時,程序無法成功將十進制數轉化為二進制數。
首先嘗試了
#include<stdio.h> int main() { int z=0,k=1,i,a,b; printf("輸入一個十進制整數:\n"); scanf("%d",&a); b=a; while(a>0) { i=a%2; z=k*i+z; k=k*10; a=a/2; } printf("十進制整數%d的二進制為:%d",b,z); return 0; }
結果在1023及以前,運算結果都是正常的;到了1024之后,結果就不是二進制數了。
此后參考了博主“低俗小怪”使用了【do while】的代碼(如下),但無法理解其中使用黃色標記的部分(鏈接https://www.cnblogs.com/didiaoxiaoguai/p/6731310.html)
#include<stdio.h> int main() {int a; char s[20]; int i = 0, rem; printf("Input number:"); scanf("%d", &a); do { rem = a % 2; a = a / 2; s[i] = rem; i++; } while (a != 0); printf("輸出二進制:"); while (i > 0) printf("%d", s[--i]);// return 0; }
二、實驗總結與體會
1.本此實驗中,主要使用了Dev C++軟件,同時嘗試使用了Visual Studio 2010 和Visual Studio 2012。vs的功能更加健全,但Dev更便於在學習過程中進行操作。
2.無論是在編程過程或者測試過程中,都需要注意英文符號與中文符號的不同之處,不可混淆。
3.要繼續加強關系運算符和邏輯運算符的學習與記憶,明確在哪里使用哪個運算符以及運算符間的優先級關系。
4. 注意進行測試,要多次不重復且跨度盡量大的進行測試,避免偶然性的出現。