1. 程式人生 > >第三四次pta實驗報告

第三四次pta實驗報告

tdi 檢查 大數 格式 turn har 9.png 找不到 奇怪

  在寫這些作業之前,我都已經事先預習過,提交pta時不能一次過關,實在不應該,以後要認真檢查代碼,力爭一次做對,不然這對以後的上機考試和參加競賽都是大大的不利。

在寫這些這些程序方面,目前寫的都是比較短的代碼,基本用幾條語句,幾個循環就能出來,但以後代碼一次就不一樣了,一個代碼要分成好幾段來寫,同時在定義變量方面盡量用他們的英文到時會更好理解。

一.在編譯方面

  常常會漏掉一些符號,例如& ;(要註意哪些語句要分號哪些不要)像do {}while();while()後面就得帶分號,同時還會忘記\n的好習慣,這對代碼的呈現十分致命。而且有時還會將printf打成pritnf,這簡直是蠢,可怕的是我還打了好幾次,這可要註意啊,這個問題是壓根不能犯的。

二.在格式方面

  我覺得在格式方面需要經驗的積累吧,慢慢習慣給格式的錯誤後,也就犯的可能性小很多。

  但格式問題也很致命,打錯一個格式整題就是錯了,他人部分正確都比你分高。所以一定要檢查一遍。

技術分享就如這題空格沒打整題沒分。

技術分享技術分享

這兩題很典型(讀題錯誤),他要求的是前n項和,而不是求到n為底的那一項,所以第二題的循環是 for(int i=1;i<=2*N;i+=2)

三.代碼思路方面

  代碼最後運行要在腦子裏過上一遍,經常就是循環沒搞好,弄個死循環出來,要麽出現一堆答案要麽一個答案都輸出不了,在未來的寫算法這方面,肯定是不行的,思路要清晰。

四.在部分正確方面

  心裏無數mmp,明明是正確的代碼,就因為一些極端值

,邊界測試之類的,就會弄得人蒙圈,每趟都要回去再找代碼的錯誤,找不到就心很煩,所以還是在提交之前,用devc++測試一下奇奇怪怪的值,要沈下心來,想想極端值,相信會對以後的成長相當有利。一般極大值極小值和0等都要考慮。

就如當初的時間錯位和邊界測試,

五.在代碼精簡方面

  這個就是要多用腦子了,或許現在運行的代碼是對的,但有時代碼太繁瑣,計算機的負荷太大,對時間方面和占用內存方面十分不利,要盡量減少計算過程與量(現在用的比較少,但大數溢出的問題很麻煩,這幾次實驗未涉及,就不過多敘述),這經常是要用到自己在紙上想想如何精簡。

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實驗報告