標籤:clu 資料 有關 查看 輸入輸出 c語言 dig 學習 區別
(一)改錯題
1.輸出華氏攝氏溫度轉換表:輸入兩個整數lower和upper,輸出一張華氏攝氏溫度轉換表,華氏溫度的取值範圍是{lower,upper},每次增加2℉。計算公式如下:
c = 5×(f-32)/9
其中,c表示攝氏溫度,f表示華氏溫度。
錯誤資訊1:
錯誤原因1:for語句後不能加分號。
改正方法:將if後的分號去掉
錯誤資訊2:
錯誤原因2:for迴圈內語句大於一句時要加{}
改正方法:將for內語句用{}括起
錯誤資訊3:
錯誤原因3:for內的語句要用;間隔
改正方法3:將for內的逗號改為;
編譯錯誤!
仔細查看程式後,發現變數輸入輸出格式並不匹配
錯誤資訊4:fahr變數定義為整型,但輸出確是以浮點型輸出
改正方法4:將%3.0f改為%d
錯誤資訊5:
錯誤資訊5:celsius為double型,與計算結果不匹配
改正方法5:在5/9前加強制類型轉換(double)
運行正確!
二.學習總結:
1.詳細描述程式的執行過程,即說明程式的每一步是執行的哪條代碼,執行順序如何。迴圈需描述前兩次迴圈和最後一次迴圈的詳細執行過程。最後說明程式實現的功能是什麼。
答:①定義了四個整形常量i num odd even
②分別給odd和even賦初值0
③進入for迴圈,i=1,條件為真
④輸出一個整數num,判斷num的奇偶性,並給相應的統計奇偶的個數的數值加一,此為第一次迴圈
⑤執行i++,此時i=2,條件為真,開始第二次迴圈
⑥輸入一個整數num,判斷奇偶性並給統計其個數的數值加一,此為第二次迴圈
⑦重複執行
⑧當i=11時,條件為假,無法執行該迴圈,故迴圈結束
實現功能:輸入任意的10個整型數,分別統計其中奇數的個數和偶數的個數
2.遞增運算子
(1)運行下面程式,結果是什嗎?遞增運算子在單獨使用時,首碼和尾碼形式有區別嗎?
結果為
該遞增運算子本身是有不同的,++i指先讓i自加,而後執行語句,i++指先執行語句,而後i自加,但在本程式中,遞增運算子在單獨使用時,首碼和尾碼並沒有影響。
(2)運行下面的程式,結果是什嗎?兩條輸出語句的執行過程是怎樣的?說明什麼問題?這兩條輸出語句執行完後,i和j的值分別是多少?
結果為
第一條輸出語句printf("%d\n",i++);是先輸入i的值,而後i的值加一;第二條輸出語句printf("%d\n",++j); 是先講j的值加一,而後輸出。說明遞增運算子在語句運行時是有一定區別的。兩條輸出語句執行完後,i和j的值均為3.
3.有些迴圈語句後面有{},有些沒有,有些語句有縮排,運行下面的四個小程式,運行結果有什麼不同?迴圈體的認定與縮格形式是否有關?與{}是否有關?那麼,應該如何正確判斷一個迴圈語句中的迴圈體?下面的程式中,哪幾種格式是正確的縮排格式。
1、
2、
3、
4、
結合1,2來分析,縮排的格式並不相同,但結果是一樣的,因此迴圈體與縮格並無關係。
結合2,3來分析,很明顯3多了{},輸出結果不同;結合3,4都有{},但是裡邊所含的語句個數不同,輸出結果也不同,因此與{}有關。
第二種縮排不正確
4.對其他你認為需要進行總結的內容進行總結。
1、要注意增量符i++與++i的區別,正確使用。
2、for語句中的判斷條件是否成立應用“==”來表示,“=”為賦值不要混淆。
三.實驗總結
1.(1)題目
求奇數分之一序列前N項和
本題要求編寫程式,計算序列 1 + 1/3 + 1/5 + ... 的前N項之和。
(2)流程圖
(3)原始碼
#include<stdio.h>
int main()
{
int i,N,x=1;
double y,S=0.0;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
y=(double)1/x;
S=S+y;
x=x+2;
}
printf("sum = %.6f",S);
return 0;
}
(4)實驗分析:
問題:把“sum = sum + 1.0 / i”寫成了“sum = sum + 1 / i”
原因:精確度不準確,導致結果錯誤
解決辦法:把“sum = sum + 1 / i”改為“sum = sum + 1.0 / i”
(5)本題PTA提交列表
3. (1)題目:奇偶分家
給定N個正整數,請統計奇數和偶數各有多少個?
(2)流程圖
(3)原始碼
#include<stdio.h>
int main()
{
int N,i,x,count1=0,count2=0;
scanf("%d",&N);
for(i=0;i<N;i++)
{
scanf("%d",&x);
if(x%2==1)
count1++;
else
count2++;
}
printf("%d %d",count1,count2);
}
(4)實驗分析
問題:if語句內的判斷唯寫了一個等號
原因:=為賦值,if內==才是判斷
改正方法:改為==
(5)本題PTA提交列表
5.(1)題目:統計字元
本題要求編寫程式,輸入10個字元,統計其中英文字母、空格或斷行符號、數字字元和其他字元的個數。
(2)流程圖
(3)原始碼
#include <stdio.h>
#include <string.h>
#define N 10
int main()
{
int letter=0,blank=0,digit=0,other=0,i;
char x;
for(i=0;i<N;i++)
{
scanf("%c",&x);
if((x>=‘a‘&&x<=‘z‘)||(x>=‘A‘&&x<=‘Z‘))
{
letter++;
}
else if(x==‘ ‘||x==‘\n‘)
{
blank++;
}
else if(x>=‘0‘&&x<=‘9‘)
{
digit++;
}
else
{
other++;
}
}
printf("letter = %d, blank = %d, digit = %d, other = %d",letter,blank,digit,other);
return 0;
}
(4)實驗分析
問題:if((a >= "a"&& a <="z")||(a >= "A"&& a <= "Z"))
原因:判斷的是字元,要用‘’
改正方法:if((a >= ‘a‘ && a <= ‘z‘)||(a >= ‘A‘ && a <= ‘Z‘))
(5)本題PTA提交列表
7.(1)題目:求交錯序列前N項和
本題要求編寫程式,計算交錯序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N項之和。
(2)流程圖
(3)原始碼
#include<stdio.h>
int main()
{
int i,j=3,N;
double a=1,b;
scanf("%d",&N);
if(N!=1)
{
for(i=2;i<=N;i++)
{
b=(double)i/j;
if(i%2==0)
{
b=-b;
}
a=a+b;
j=j+2;
}
}
printf("%.3f",a);
return 0;
}
(4)實驗分析
發現運行結果i資料不精確時,要仔細檢查,常常是要使用強制類型轉換的!
(5)本題PTA提交列表
四.部落格互評
http://www.cnblogs.com/zrx--/p/7814055.html
http://www.cnblogs.com/ziluo/p/7819483.html
http://www.cnblogs.com/xiaoqi1/p/7821666.html
C語言程式設計第五次作業