習題筆記 錢能 第3章節

mrlixuec發表於2019-02-24

目錄

EX0301  //整數的二進位制位碼和F數的位碼求法不一樣,F數要先轉換,把F數的地址轉為int型的地址

EX0302//  sizeof 返回位元組數  vector.size()返回裝的數  vector.capacity()返回總的大小數

EX0303 // 遍歷器遍歷和普通遍歷vector     vector的賦值  計算均方差的快速方法         整型變數的優化 

EX0304   //cin遇到enter space tab 終止,getline+istringstream適合一行未知的

EX0305  // 這個完全不知道怎麼寫,string可以類似陣列一樣使用

EX0306    遍歷陣列的五種方法  指標可以寫成陣列,陣列也可理解為指標,str也可以為陣列 

EX0307   指標和引用的區別


 

EX0301  //整數的二進位制位碼和F數的位碼求法不一樣,F數要先轉換,把F數的地址轉為int型的地址

#include<iostream>
using namespace std;
int main()
{
    float f=-1234567.0f;
    int* pa =(int*)&f;
    for(int i=31;i>=0;i--)
    { 

   cout<<(*pa>>i&1)<<(i==31||i==23 ? "-":"");
    
    }
    cout<<endl;
    for(int i=31;i>=0;i--)
    {    

cout<<(*pa>>i&1)<<(i==31||i==23 ? "-":"");

    }

    system("pause");
}

EX0302//  sizeof 返回位元組數  vector.size()返回裝的數  vector.capacity()返回總的大小數


#include<iostream>
using namespace std;
int main()
{
int a;
long int b;
char c;
float d;
int x;
cout<<"int :"<<sizeof(a)<<" byte"<<sizeof(a)*8<<" bits"<<endl;//對sizeof有正確的認識,其返回值是什麼~開始時企圖通過指標進行求解,暫無法得到
cout<<"int :"<<&b<<"byte"<<&a<<"bits"<<endl;
cout<<"int :"<<&c<<"byte"<<&a<<"bits"<<endl;
cout<<"int :"<<&d<<"byte"<<&a<<"bits"<<endl;
system("pause");

}

EX0303 // 遍歷器遍歷和普通遍歷vector     vector的賦值  計算均方差的快速方法         整型變數的優化 

#include<iostream>
#include<vector>
#include<cmath>
using namespace std;

int main()
{

    const int vector_size=10;
    int arr1[]={6,3,7,2,9,1,4,8,11,5};
    vector<int> arr2(arr1,arr1+vector_size);              //1.這一步的賦值,注意是(a.b) 共計b-a個數  2.用陣列和用向量給向量賦值不同,陣列是沒有 arr1.begin() 這種東西的
    float aim_num,ave,temp=0;
     vector<int>::iterator it;                                           //遍歷器的初次使用
    for(it = arr2.begin();it!=arr2.end();it++)                       //遍歷器實現遍歷,中斷條件為什麼是這樣我不懂,就像上一個紅字一樣
        temp=temp+(*it);     
           cout<<"和為 "<<temp<<endl;      // 取到累積和
    ave=temp /vector_size;
    temp=0;
    for(it=arr2.begin();it!=arr2.end();++it)
        temp=temp+pow(((*it)-ave),2);    ;       //取到累計平方和
         aim_num=pow(temp/vector_size,0.5);                //這裡 的pow如果冪寫成1/2,取得是0次,故結果為1    
         cout<<aim_num<<endl;
         system("pause");
}

EX0304   //cin遇到enter space tab 終止,getline+istringstream適合一行未知的

/*=========================================
EX0304
=============================================*/

#include<iostream>
#include<string>
#include<fstream>
#include<algorithm>
using namespace std;

int main()
{
    int num_25=0;
    ifstream tin("abc.txt");
    string str;

    while(getline(tin,str))
    {
        if(str.find(". 25")!=-1)  
        { 
        num_25+=1;if(str.find('*')!=-1)  num_25+=1;

        }
    }
    cout<<"day is "<<num_25<<endl;
    system("pause");

}//使用了檔案的輸入輸出流以及sring的函式,輸入輸出及getline的使用不熟練   abc。txt檔案的儲存位置放錯耽誤了很多時間

 

EX0305  // 這個完全不知道怎麼寫,string可以類似陣列一樣使用

 

/*============================================
EX0305 加密哈哈哈哈 interesting
================================================*/

#include<iostream>
#include<string>
using namespace std;
const char key[]="4962873";
string encode(string str)

{
string result(str);
for(int i=0;i<str.length();i++)
    {
        result[i]=result[i]+(key[i%7]);
        if (result[i]>'z') result[i]-=91;

     }
  return result;
}
int main()
{char ch;
    string str,temp;
const int max_size=100;    
cout<<"輸入:"<<endl;
getline(cin,str);
   temp=encode(str);
   cout<<temp<<endl;

 system("pause");                       //  1.string型可以像陣列一樣操作 2.encode函式七位編碼的變換

}

 

EX0306    遍歷陣列的五種方法  指標可以寫成陣列,陣列也可理解為指標,str也可以為陣列 

/*===============================================
EX0306
=========================================*/
#include<iostream>
using namespace std;

int main()
{
    int sum[5]={0};
    int iArray[]={1,4,2,7,13,32,21,48,16,30};
    int size =sizeof(iArray)/sizeof(*iArray);
    int *iPtr=iArray;
    for(int n=0;n<size;++n)
        sum[3]+=iPtr[n];          //累加和
    for(int n=0;n<size;++n)
        sum[2]+=*(iPtr+n);               //累加和
    for(int n=0;n<size;++n)
        sum[1]+=*iPtr++;                       //累加和
    for(int n=0;n<size;++n)
        sum[0]+=iArray[n];                 //累加和 
    for(int n=0;n<size;++n)
        sum[4]+=*(iArray+n);              //
    for(int i=0;i<5;++i)
        cout<<sum[i]<<endl;
    system("pause");


}


EX0307   指標和引用的區別

#include<iostream>
using namespace std;

void MYswap(int *a,int *b);

int main()
{
    int a=16,b=48;
    cout<<"a: "<<a<<",b: "<<b<<endl;
    MYswap(&a,&b);
    cout<<"after being swapped :  \n";

    cout<<"a: "<<a<<",b: "<<b<<endl;

}
void MYswap(int *a,int *b)
{
int temp=*a;
*a=*b;*b=temp;

}

相關文章