1. 程式人生 > >c++ 程式設計題總結

c++ 程式設計題總結

C++題目總結

型別一:求和

1、求和:S= 1+ 1/(1+2)+1/(1+2+3)+...+1/(1+2+3+...+50)

#include <iostream>

using namespace std;

int main()

{

    float s=1;

    int i,item=1;

    for (i=2;i<=50;i++)

    {

       item+=i;

       s+=1.0/item;

    }

    cout<<"S= 1+ 1/(1+2)+1/(1+2+3)+...+1/(1+2+3+...+50)= "<<s<<endl;

    return 0;

}

2、用公式 e=1+1/1!+1/2!+1/3!+…,求e的近似值,直到最後一項的絕對值小於10-7為止。

#include <iostream>

using namespace std;

int main()

{

    float e=1;

    int i=1,item=1;

    for (;item>1e-7;)

    {

       e+=1.0/item;

       i++;

       item*=i;

    }

    cout<<"e=1+1/1!+1/2!+1/3!+…= "<<e<<endl;

    return 0;

}

3、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。

#include <iostream>

using namespace std;

int main()

{

    int s=0, i,n,a,item=0;

    cout<<"輸入數字a(1~9之間): ";

    cin>>a;

    cout<<"輸入加法項數 n(>=1): ";

    cin>>n;

    cout<<"s=a+aa+aaa+aaaa+aa...a= ";

    for (i=1;i<=n;i++)

    {

       item=item*10+a;

       s+=item;

       if (i>1)

           cout<<"+";

       cout<<item;

    }

    cout<<" = "<<s<<endl;

    return 0;

}

4、古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?

#include <iostream>

using namespace std;

int main()

{

    int fib[45]={1,1},i,n;

    cout<<"輸入月份 n ( 3=<n<=45 ): ";

    cin>>n;

    for (i=2;i<n;i++)

    {

       fib[i]=fib[i-2]+fib[i-1];

    }

    for (i=0;i<n;i++)

    {

       cout<<" "<<i+1<<" 月,兔子總對數是:"<<fib[i]<<endl;

    }

    return 0;

}

型別二:圖形

1、輸出9*9乘法口訣。

#include <iostream>

using namespace std;

int main()

{

    int i,j;

    cout<<"九九乘法表"<<endl;

    for (i=1;i<=9;i++)

    {

   for( j=1 ; j<=i ; j++  )

              cout<<i<<"*"<<j<<"="<<i*j<<"   ";

         cout<<endl;

}

    return 0;

}

2、輸出以下圖案。

                   *

                  ***

                 *****

                *******

#include <iostream>

using namespace std;

int main()

{

    int i,j;

    for (i=1;i<=4;i++)

    {

         for( j=1;j<=4-i;j++)

              cout<<" ";

   for( j=1;j<=2*i-1;j++ )

              cout<<"*";

         cout<<endl;

    }

    return 0;

}

型別三:陣列

1、求一維陣列中最大元素(100個元素)的下標。

#include <iostream>

using namespace std;

int main()

{

    int a[100]

    int i,maxID=0;

    cout<<"輸入陣列的資料:"<<endl;

    for (i=0;i<100;i++)

         cin>>a[i];

    for (i=1;i<100;i++)

         if (a[i]>a[maxID]) maxID=i;

    cout<<"陣列中最大元素的資料是:"<<a[maxID]<< " ,其元素下標為:"<<maxID<<endl;

    return 0;

}

2、一班有50名學生,現統計該班某科課程成績的最高分,最低分,平均分,不及格人數.

#include <iostream>

using namespace std;

int main()

{

    float a[50];

    int i,number=0;

float max,min,average=0;

    cout<<"輸入學生成績:"<<endl;

    for (i=0;i<50;i++)

         cin>>a[i];

    max=min=a[0];

    for (i=1;i<50;i++)

    {

         average+=a[i];

         if (a[i]> max) max=a[i];

         if (a[i]< min) min =a[i];

         if (a[i]< 60 ) number++;

    }

    average/=50;

    cout<<"最高成績是:"<<max<<endl;

    cout<<"最低成績是:"<<min<<endl;

    cout<<"平均成績是:"<<average<<endl;

    cout<<"不及格人數有:"<<number<<endl;

   return 0;

}

3、有一個已經排好序的陣列。現輸入一個數,要求按原來的規律將它插入陣列中。

#include <iostream>

using namespace std;

int main()

{

    int a[11]={1,3,5,7,8,12,55,56,59,80};

int x,i,j,sort=0;                      // sort 排序規律,預設為0(升序)

int z=0;                               // 插入位置

    cout<<"輸出原陣列:";

    for(i=0;i<10;i++)

        cout<<a[i]<<",";

    cout<<endl;

cout<<"輸入要插入的資料:";

    cin>>x;

    // 判斷排序規律, 0 升序,1 降序

    for (i=0;i<9;i++)

         if (a[i]>a[i+1])

{ sort=1; bereak; }

    // 尋找插入資料位置(下標) z

for (i=0;i<10;i++)

    {

         if ( sort )

             if (x>a[i])

{    z=i;

break;

                  }

else

             if (x<a[i])

{    z=i;

break;

             }

    }

    if ( i== 10) z=i;

    // 移動z位置及其之後的資料(向後一位)

    for(i=9;i>z;i--)

        a[i+1]=a[i];

    a[z]=x;

    cout<<"輸出新陣列:";

    for(i=0;i<=10;i++)

        cout<<a[i]<<",";

    cout<<endl;

   return 0;

}

4、用氣泡排序方法,將10個成績按從大到下的順序排序。(本題略,參見教材)

5、從鍵盤輸入10個數,用插入法排序對它們按從小到大的次序排序。

#include <iostream>

using namespace std;

void InsertSort(int x, int n , int * p);

int main()

{

    int a[11];

int x,i,j;

int z=0;                               // 插入位置

    cout<<"輸入任意10個整數構建陣列:";

    for(i=0;i<10;i++)

        cin>>a[i];

    cout<<endl;

    for(i=1;i<10;i++)

        InsertSort(a[i],i,a);

    cout<<"輸出新陣列:";

    for(i=0;i<=10;i++)

        cout<<a[i]<<",";

    cout<<endl;

   return 0;

}

void InsertSort(int x , int n, int * p )   // x-資料,n-陣列當前長度,p-指標

{

    int i , z=0 ;                          // 預設為陣列頭

    // 尋找插入資料位置(下標) z

for (i=0;i<10;i++)

    {

         if (x<p[i])

{   z=i;

break;

          }

    }

    if ( i==n ) z=i ;

    // 移動z位置及其之後的資料(向後一位)

    for(i=n-1;i>z;i--)

        p[i+1]=p[i];

    p[z]=x;

}

6、求二維陣列中最大元素的值及在陣列中的位置。

#include <iostream>

using namespace std;

int main()

{

    int a[5][5];

int max,i,j,row,col;

    cout<<"輸入任意25個整數構建陣列:";

    for(i=0;i<5;i++)

        for(j=0;j<5;j++)

            cin>>a[i][j];

    cout<<endl;

    row=0;

col=0;

    max=a[row][col];    //假設最大數是第一個數

    for(i=0;i<5;i++)

        for(j=0;j<5;j++)

            if (a[i][j])>max )

{    row=i;

     col=j;

     max=a[i][j];

}

    cout<<"陣列中最大資料是:"<<max<<",其位置是:"<< "("<<row<<","<<col<<")"<<endl;

   return 0;

}

7、給定一個二維五五陣列,求主對角元素的和。

#include <iostream>

using namespace std;

int main()

{

    int a[5][5];

int sum=0,i,j;

    cout<<"輸入任意25個整數構建陣列:";

    for(i=0;i<5;i++)

        for(j=0;j<5;j++)

            cin>>a[i][j];

    cout<<endl;

    for(i=0;i<5;i++)

            sum+=a[i][i]+a[4-i][i];

        sum=sum-a[5/2][5/2];

    cout<<"陣列對角線的和是:"<<sum<<endl;

   return 0;

}

大體上必須清楚的

1)程式結構是三種: 順序結構 , 迴圈結構(三個迴圈結構), 選擇結構(if 和 switch)­

2)讀程式都要從main()入口, 然後從最上面順序往下讀(碰到迴圈做迴圈,碰到選擇做選擇)。­

3)計算機的資料在電腦中儲存是以 二進位制的形式. 資料存放的位置就是 他的地址.­

4)bit是位 是指為0 或者1。 byte 是指位元組, 一個位元組 = 八個位.­

5)一定要記住 二進位制 如何劃成 十進位制。­

概念常考到的:­

1、編譯預處理不是C語言的一部分,不再執行時間。C語言編譯的程式稱為源程式,它以ASCII數值存放在文字檔案中。­

2、每個C語言程式中main函式是有且只有一個。­

3、在函式中不可以再定義函式。­

4、演算法的是一定要有輸出的,他可以沒有輸入。­

5、break可用於迴圈結構和switch語句。­

6、逗號運算子的級別最低

第一章­

1)合法的使用者識別符號考查:­

合法的要求是由字母,數字,下劃線組成。有其它元素就錯了。­

並且第一個必須為字母或則是下劃線。第一個為數字就錯了。­

關鍵字不可以作為使用者識別符號號。main  define  scanf  printf 都不是關鍵字。迷惑你的地方If是可以做為使用者識別符號。因為If中的第一個字母大寫了,所以不是關鍵字。­

2)實型資料的合法形式:­

2.333e-1 就是合法的,且資料是2.333×10-1。­

考試口訣:e前e後必有數,e後必為整數。

3)字元資料的合法形式::­

   '1' 是字元佔一個位元組,"1"是字串佔兩個位元組(含有一個結束符號)。­

  '0' 的ASCII數值表示為48,'a' 的ASCII數值是97,'A'的ASCII數值是65。­

4) 整型一般是兩個位元組, 字元型是一個位元組,雙精度一般是4個位元組:­

  考試時候一般會說,在16位編譯系統,或者是32位系統。碰到這種情況,不要去管,一樣做題。掌握整型一般是兩個位元組, 字元型是一個位元組,雙精度一般是4個位元組就可以了。­

5)轉義字元的考查:­

在程式中 int a = 0x6d,是把一個十六進位制的數給變數a 注意這裡的0x必須存在。­

在程式中 int a = 06d, 是一個八進位制的形式。­

在轉義字元中,’\x6d’ 才是合法的,0不能寫,並且x是小寫。­

‘\141’ 是合法的, 0是不能寫的。­

‘\108’是非法的,因為不可以出現8。­

6)算術運算子號的優先級別:­

同級別的有的是從左到右,有的是從右到左。­

7)強制型別轉換:­

一定是 (int)a 不是  int(a),注意型別上一定有括號的。­

注意(int)(a+b)和(int)a+b 的區別。前是把a+b轉型,後是把a轉型再加b。­

8)表示式的考查:­

是表示式就一定有數值。­

賦值表示式:表示式數值是最左邊的數值,a=b=5;該表示式為5,常量不可以賦值。­

自加、自減表示式:假設a=5,++a(是為6), a++(為5);­

執行的機理:++a 是先把變數的數值加上1,然後把得到的數值放到變數a中,然後再用這­

++a表示式的數值為6,而a++是先用該表示式的數值為5,然後再把a的數值加上1為6,­

再放到變數a中。 進行了++a和a++後在下面的程式中再用到a的話都是變數a中的6了。­

考試口訣:++在前先加後用,++在後先用後加。­

逗號表示式:優先級別最低 ;表示式的數值逗號最右邊的那個表示式的數值。­

(2,3,4)的表示式的數值就是4。­

9)位運算的考查:­

 會有一到二題考試題目。­

總的處理方法:幾乎所有的位運算的題目都要按這個流程來處理(先把十進位制變成二進位制再變成十進位制)。­

例1: char a = 6, b;­

    b = a<<2;  這種題目的計算是先要把a的十進位制6化成二進位制,再做位運算。­

例2: 一定要記住,­

例3: 在沒有捨去資料的時候,<<左移一位表示乘以2;>>右移一位表示除以2。­

10)018的數值是非法的,八進位制是沒有8的,逢8進1。 ­

11)%符號兩邊要求是整數。不是整數就錯了。­

12) 三種取整丟小數的情況:­

       1、int a =1.6;­

2、(int)a;  ­

3、     ­

­

第二章­

1)printf函式的格式考查:­

     %d對應整型;%c對應字元;%f對應單精度等等。寬度的,左對齊等修飾。­

     %ld對應 long int;%lf 對應double。­

2)scanf函式的格式考察:­

注意該函式的第二個部分是&a 這樣的地址,不是a; ­

   Scanf(“%d%d%*d%d”,&a,&b,&c); 跳過輸入的第三個資料。­

3)putchar ,getchar 函式的考查:­

   char  a = getchar() 是沒有引數的,從鍵盤得到你輸入的一個字元給變數a。­

   putchar(‘y’)把字元y輸出到螢幕中。­

4)如何實現兩個變數x ,y中數值的互換(要求背下來)­

不可以把 x=y ,y=x; 要用中間變數 t=x;x=y;y=t。­

5)如何實現保留三位小數,第四位四捨五入的程式,(要求背下來)­

這個有推廣的意義,注意 x = (int)x 這樣是把小數部分去掉。­

­

第三章­

特別要注意:c語言中是用非0表示邏輯真的,用0表示邏輯假的。­

1)關係表示式:­

表示式的數值只能為1(表示為真),或0(表示假)­

當關系的表達是為真的時候得到1。如 9>8這個是真的,所以表示式的數值就是1;­

2)邏輯表示式:­

只能為1(表示為真),或0(表示假)­

a)       共有&&   ||   ! 三種邏輯運算子號。­

b)      !>&&>||  優先的級別。­

c)      注意短路現象。考試比較喜歡考到。­

d)      要表示 x 是比0大,比10小的方法。0<x<10是不可以的(一定記住)。是先計算0<x 得到的結果為1或則0;再用0,或1與10比較得到的總是真(為1)。所以一定要用(0<x)&&(x<10)表示比0大比10小。­

3)if 語句­

   else 是與最接近的if且沒有else的相組合的。­

4)條件表示式:­

 表示式1 ?表示式2 :表示式3­

 注意是當非0時候是表示式2的數值,當為0是就是表示式2的數值。­

考試口訣:真前假後。­

5)switch語句:­

a)一定要注意 有break 和沒有break的差別,書上(34頁)的兩個例子,沒有break時候,只要有一個case匹配了,剩下的都要執行,有break則是直接跳出了swiche語句。­

  b)switch只可以和break一起用,不可以和continue用。­

­

第四章­

1)三種迴圈結構:­

   a)for() ; while();   do- while()三種。­

   b)for迴圈當中必須是兩個分號,千萬不要忘記。­

   c)寫程式的時候一定要注意,迴圈一定要有結束的條件,否則成了死迴圈。­

   d) do-while()迴圈的最後一個while();的分號一定不能夠丟。(當心上機改錯)­

2) break 和  continue的差別­

記憶方法:­

break:是打破的意思,(破了整個迴圈)所以看見break就退出真個一層迴圈。­

continue:是繼續的意思,(繼續迴圈運算),但是要結束本次迴圈,就是迴圈體內剩下的語句不再執行,跳到迴圈開始,然後判斷迴圈條件,進行新一輪的迴圈。­

3)巢狀迴圈­

就是有迴圈裡面還有迴圈,這種比較複雜,要一層一層一步一步耐心的計算,一般記住兩層是處理二維陣列的。­

4) while((c=getchar())!=’\n’) 和 while(c=getchar() !=’\n’)的差別­

先看a = 3 != 2  和(a=3)!=2 的區別:­

相關推薦

c++ 程式設計總結

C++題目總結 型別一:求和 1、求和:S= 1+ 1/(1+2)+1/(1+2+3)+...+1/(1+2+3+...+50) #include <iostream> using nam

c/c++筆試中程式設計總結

1.請實現字串右迴圈移位函式,比如:“abcdefghi”迴圈右移2位就是“hiabcdefg”. 函式原型:void RightLoopMove(char *pStr, unsigned short steps) 函式引數說明: pStr: Point to a ‘\0’

(轉)11條最全面的C/C++程式設計規範總結

一、檔案排版方面 1. 包含標頭檔案  • 先系統標頭檔案,後用戶標頭檔案。  • 系統標頭檔案,穩定的目錄結構,應採用包含子路徑方式。  • 自定義標頭檔案,不穩定目錄結構,應在dsp中指定包含路徑。  • 系統標頭檔案應用:#include <xxx.h>  • 自定義同

C++程式設計練習程式碼筆記

從文字檔案old.txt讀取字元,將其中的數字字元‘0’、‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’、‘8’、‘9’ 分別用英文字母字元‘Z’、‘Y’、‘X’、‘W’、‘V’、‘U’、‘T’、‘S’、‘R’、‘Q’替換,其餘字元不變,結果寫入文字檔案new.txt,並分別將兩個

愛奇藝2018秋季校招C++ [程式設計]奇異數

連結:https://www.nowcoder.com/questionTerminal/7442938f5012486499ddd61ce16f9086 來源:牛客網 如果一個數字滿足以下條件,我們就稱它為奇異數: 1、這個數字至少有兩位 2、這個數的最低兩位是相同的 比如: 1488是

愛奇藝2018秋招C++ [程式設計]奶牛編號

連結:https://www.nowcoder.com/questionTerminal/b96da2bd7a574699b4ceaaa7819cf65b 來源:牛客網 牛牛養了n只奶牛, 牛牛想給每隻奶牛編號, 這樣就可以輕而易舉地分辨它們了。 每個奶牛對於數字都有自己的喜好, 第i只奶牛想要

愛奇藝2018秋招C++ [程式設計]紅和綠

連結:https://www.nowcoder.com/questionTerminal/4ea618c551404efc8299c2eaac733329 來源:牛客網 牛牛有一些排成一行的正方形。每個正方形已經被染成紅色或者綠色。牛牛現在可以選擇任意一個正方形然後用這兩種顏色的任意一種進

一道考驗你設計能力的C++程式設計

看到這道題,我們就開始設計這個影象類了,按照面向物件“依賴倒置”的設計原則,我們站在客戶的立場,來考慮我們這個類該提供哪些介面,很快我們設計瞭如下一個類:  class CSimplePicture { public: CSimplePicture(char* init[], i

C/C++程式設計之計算一個數字的立方根

計算一個數字的立方根方法:使用對數和指數組合的方法表示立方根。loga(b)表示 以a為底,b的對數,a(m)表示a的m次方。我們知道a(loga(b))等於b,並且nloga(b)等於log以a為底b的n次方。結合這兩個性質,我們可以得到任何一個數的任何一個次冪的值,自然

c/c++程式設計經驗總結及VS2013使用注意事項

1、fatal error LNK1112: 模組計算機型別“X86”與目標計算機型別“x64”衝突 可能的解決方案:專案名右鍵,點選清理。 2、windows下檢視exe和dll依賴及版本位數 解決方案:在vs安裝目錄下,我的路徑為為D:\vs2013\Common7\Tools\Shor

C++程式設計最常用函式彙總

內容會持續更新,有錯誤的地方歡迎指正,謝謝! 1.型別轉化 string轉int的方式 採用標準庫cstdlib中atoi函式,<cstdlib>是C++裡面的一個常用函式庫, 等價於C中的<stdlib.h>,但不需引入,

二叉樹相關程式設計總結

關於二叉樹的五道面試題的總結 求二叉樹的最遠兩個結點的距離; 由前序遍歷和中序遍歷重建二叉樹; 判斷一棵樹是否是完全二叉樹; 求二叉樹兩個節點的最近公共祖先; 將二叉搜尋樹轉換成一個排序的雙向連結串列。要求不能建立任何新的結點,只能調整樹中結點指標的指向。

C程式設計2

1.寫一個用矩陣法求定積分的通用函式,求#include<stdio.h> #include<math.h> float integral(float a,float b,int n){ int i; float x,h,s; h=(b-1)/n; x

c/c++程式設計 之 猴子選大王(陣列、連結串列兩種方法)

一群猴子要選新猴王。新猴王的選擇方法是:讓N只候選猴子圍成一圈,從某位置起順序編號為1-N號。從第1號開始報數,每輪從1報到3,凡報到3的猴子即退出圈子,接著又從緊鄰的下一隻猴子開始同樣的報數。如此不斷迴圈,最後剩下的一隻猴子就選為猴王。請問是原來第幾號猴子當選猴王?

C/C++程式設計之求兩個數的最大公約數和最小公倍數

求兩個數的最大公約數和最小公倍數 方法:最大公約數使用輾轉相除法求,最小公倍數等於兩個數的乘積/最大公約數 輾轉相除法的原理:用輾轉相除法求幾個數的最大公約數,先求出其中任意兩個數的最大公約數,再

阿里秋招C/C++程式設計

題目: 伺服器都有上下游依賴關係,輸入第一行表示伺服器的數量,和依賴關係的個數。如下表示有5臺伺服器,4個依賴關係。 接下來的5行是每臺伺服器的啟動延遲(單位ms),最後四行是伺服器之間的依賴關係(5臺伺服器用數字0-4表示)。 不考慮存在環。 輸出要求

C/C++程式設計之IP地址轉整數

/* 功能:將輸入的string型別的IP資訊轉換為string型別  * 輸入:string型別的IP資訊  * 輸出:DWORD結果,正常返回解析結果值,異常時,dwIP為0  * 返回:返回解析

C#程式設計精華總結

C#學習總結C#簡介:1、C#是一種最新的、面向物件的程式語言2、C#使得程式設計師可以在Microsoft開發的最新的.NET平臺上快速地編寫Windows應用程式3、而且Microsoft .NET提供了一系列的工具和服務應用在應用程式的開發中4、C#語言是是建立在Mic

C程式設計:求高次方數的尾數

例:編寫程式求出13的13次方的最後三位數。 首先分析題意,我們可以定義兩個變數用於儲存次方底數和指數,再用一個for迴圈對底數進行指數次的自乘,最後擷取最後三位數即可。然而這種方式卻行不通,因為計算

c++程式設計 求數列的和

最近心好累,行為識別模型明明訓練的好好的,收斂也正常,Avg loss也很小,就是測試效果不好(接近沒效果)!深度學習之路真是道阻且長啊,求求了~~ 偌大的世界,能給我安慰的只有漂亮姐姐了,哈哈哈哈。(還有c++,我愛你。) 題目描述 數列的第一項為n,以後各項為前