DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> AJAX入門 >> AJAX詳解 >> 我學習理解的c++歷程(2)
我學習理解的c++歷程(2)
編輯:AJAX詳解     
 又一個星期過去了,我的c++學習碰到了釘子,一個很簡單的功能實現,我卻要花一個下午都搞不定.處處都有問題.我感覺那個編譯器好象和我有仇,只要是我的代碼,不改那麼十遍八遍別想運行.在論壇上別人一眼就看出我的錯誤,而我自己卻找不到.靜下心想想,自己根本沒有消化以前看過的知識點,循環,指針,自認為掌握了,可實際真的是一知半解,我算看明白了,這樣繼續看書,思路會越來越亂,所以我這周重點在鞏固對控制語句的應用,這關過不了,就別想走下去,更別想寫出漂亮的代碼.另外,數學知識的欠缺也暴露出來.總的來說,基礎的東西雖然簡單,但絕不能因為簡單就不看,所以我的c++ 又倒退50頁書,重新來第2遍,另外又去書店買了本國產c++ 教程,雖然不如國外那些書權威,不過還是不錯,重點是通過程序講知識點,和<think in c++>結合起來看,學這門語言,我覺得問題還是要靠實踐去發現,和學數學一樣,不做習題,根本別想學好,這些就是我這周的體會,下面貼一段我這周的問題代碼,主要是練習控制語句,最後討論出兩種主要思路實現.

1.要求輸入一個整數做上界,然後在其范圍內列出所有素數(只能被1和本身整除的數),用兩個for循環完成.

#include <iOStream>
using namespace std;
int s,i,n;
void main(){
    cout << "please tell me your end number" << endl;
 cin >> s;
 for(n=1; n<s; n++) /在界限范圍內自加數
  for(i=1; n%i!=0;i++) /檢驗是否被其它數整除
   if(i+1==n) /如果加一後就已是n本身,說明n是質數
    cout << n <<endl;

上面是第一次的代碼,現在看錯誤滿篇,但思路是對的,各位可以試著修改(-_-!自己的程序成改錯題了)


#include <iOStream>
using namespace std;
int s,i,n;
void main(){
    cout << "please tell me your end number" << endl;
 cin >> s;
 for(n=2; n<s; n++) //在界限范圍內自加數
 
    { 
     for(i=2;n%i!=0;i++);
        if(i==n) //如果加一後就已是n本身,說明n是質數
    cout << n <<endl;
 }
  
 }

上面這段是修正過正確的.

上面兩段主要是通過定義來判斷的,在c++中,for 語句大部分時候起到一個計數的作用,而我把其中一個直接用來判斷,雖然是對的,但看起來則不是很清晰.

下面兩段是通過素數的推倒判斷實現: 判斷一個數n是不是素數,
只要判斷是否存在 <= sqrt(n)的素數是n的約數

#include <iOStream>
#include <conio.h>
#include <math.h>
void main()
{
 int s;
 std::cout << "please tell me your end number" << std::endl;
 std::cin >> s;
 if(s<2)
 {
  std::cout<<"Nothing";
  return;
 }
 std::cout<<"2";
 for(int n=3; n<=s; ++n)
 {
  int p=float(sqrt((float)n));
  bool is=true;
  for(int i=2; i<=p;++i)
  {
   if(n%i==0)
   {
    is=false;
    break;
   }
  }
  if(is)
  {
   std::cout<<'\t'<< n;
  }
 }
 getch();
}

程序中用了bool完成了判斷,而且結構清晰

底下是個篩選法求解
時間復雜度比直接求底
#define N  1111  //輸出小於2*N的全部素數
main()
{
 int i,m,k;
 int a[N]={0};
 for(i=1;i<N;i++)
 {
  if(a[i]==1) continue;
  for(k=1;k<N;k++)
  {
   m=(2*k+1)*i+k;
   if(m>=N) break;
   a[m]=1;
  }
 }
 printf("   2");
 for(i=1,m=1;i<N;i++)
   if(a[i]==0)
   { 
  printf("%6d ",2*i+1);
        if(m++%10==0) printf("\n");
   }
}

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved