第三四次pta實驗報告
在寫這些作業之前,我都已經事先預習過,提交pta時不能一次過關,實在不應該,以後要認真檢查代碼,力爭一次做對,不然這對以後的上機考試和參加競賽都是大大的不利。
在寫這些這些程序方面,目前寫的都是比較短的代碼,基本用幾條語句,幾個循環就能出來,但以後代碼一次就不一樣了,一個代碼要分成好幾段來寫,同時在定義變量方面盡量用他們的英文到時會更好理解。
一.在編譯方面
常常會漏掉一些符號,例如& ;(要註意哪些語句要分號哪些不要)像do {}while();中while()後面就得帶分號,同時還會忘記\n的好習慣,這對代碼的呈現十分致命。而且有時還會將printf打成pritnf,這簡直是蠢,可怕的是我還打了好幾次,這可要註意啊,這個問題是壓根不能犯的。
二.在格式方面
我覺得在格式方面需要經驗的積累吧,慢慢習慣給格式的錯誤後,也就犯的可能性小很多。
但格式問題也很致命,打錯一個格式整題就是錯了,他人部分正確都比你分高。所以一定要檢查一遍。
就如這題空格沒打整題沒分。
這兩題很典型(讀題錯誤),他要求的是前n項和,而不是求到n為底的那一項,所以第二題的循環是 for(int i=1;i<=2*N;i+=2)
三.代碼思路方面
代碼最後運行要在腦子裏過上一遍,經常就是循環沒搞好,弄個死循環出來,要麽出現一堆答案要麽一個答案都輸出不了,在未來的寫算法這方面,肯定是不行的,思路要清晰。
四.在部分正確方面
心裏無數mmp,明明是正確的代碼,就因為一些極端值
就如當初的時間錯位和邊界測試,
五.在代碼精簡方面
這個就是要多用腦子了,或許現在運行的代碼是對的,但有時代碼太繁瑣,計算機的負荷太大,對時間方面和占用內存方面十分不利,要盡量減少計算過程與量(現在用的比較少,但大數溢出的問題很麻煩,這幾次實驗未涉及,就不過多敘述),這經常是要用到自己在紙上想想如何精簡。
unsigned int 0~4294967295
int 2147483648~2147483647 (-2^31~2^31-1)
unsigned long 0~4294967295
long 2147483648~2147483647
long long的最大值:9223372036854775807
long long的最小值:-9223372036854775808
unsigned long long的最大值:1844674407370955161
char:-128~127 (因為還有個0,所以右邊少一個) short:-32768~32767
__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615
超出這些範圍數就會算不了,所以要定義好,所需答案的範圍。
錯誤題:
在第四次作業稍有一點難度了,有用到了各語句的嵌套
這題我定義的較多的變量,這時就需要變量的英文來定義更好看,畢竟能讓越多人看得懂的代碼才是好代碼,這題利用fabs()時記得加好頭文件哦~
哈哈,無敵裝睡睡,是這幾次作業最難的一題,本來用數組就好了,結果用數組沒解成功,一下用了個剛學的結構
#include<stdio.h>struct student{
char name [10];
int hu;
int xin;
};
int main()
{
int N;
int i;
int p;
char *j[100];
struct student students[50];
scanf("%d",&N);
for( i=0;i<N;i++)
{
scanf("%s%d%d",&students[i].name,&students[i].hu,&students[i].xin);
}
for(i=0;i<N;i++)
{
if((students[i].hu>20||students[i].hu<15)||(students[i].xin>70||students[i].xin<50))
printf("%s\n",students[i].name);
}
return 0;
}
emmmmmm我覺得我也是自找麻煩,哈哈。其實也就是將名字存下,也用不了那麽麻煩吧。
char s[5];
int a,b,n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s%d%d",s,&a,&b);
if(a<15||a>20||(b<50||b>70))
printf("%s\n",s);
} 明明很簡單好嗎!!!
第三四次pta實驗報告