導航:首頁 > 程序命令 > 程序員分母

程序員分母

發布時間:2023-08-12 02:05:27

『壹』 c語言中小數怎麼表示

兩種表示方式:

1、定點表示:必須有小數點。

例如:0.123, .123, 123.0。

2、指數表示:e或E之前必須有數字,指數必須為整數。

例如:12.3e3 ,123E2, 1.23e4。

注意:浮點數常量默認為double類型,如果浮點數常量表示float類型,在末尾添加小寫的f或者大寫的F,表示此常量為單精度浮點常量。

定點小數是純小數,約定的小數點位置在符號位之後、有效數值部分最高位之前。若數據x的形式為x=x0.x1x2…xn(其中x0為符號位,x1~xn是數值的有效部分,也稱為尾數,x1為最高有效位),則在計算機中的表示形式為:

一般說來,如果最末位xn= 1,前面各位都為0,則數的絕對值最小,即|x|min= 2^(-n)。如果各位均為1,則數的絕對值最大,即|x|max=1-2^(-n)。所以定點小數的表示範圍是:2^(-n)≤|x|≤1 -2^(-n)。

(1)程序員分母擴展閱讀

由於「編碼總位數為8」的限制,真值-128無法用原碼、反碼來表示,似乎不能用上述規則來求解補碼,但實際上是可行的——只要不管它的最高位即可,操作辦法如下:

將128化為二進制為:1 0000000,最高位為1,可以只對捨去最高位後剩餘的7位進行處理即可,首先取反得:1111111,加1得:1 0000000,最高位有進位需丟棄,即得:0000000,加上符號位就得補碼:1 0000000。

又如,當編碼總位數為4時,真值X=+0.101的原碼、反碼、補碼均為:0 101。

真值X=-0.101的原碼、反碼、補碼依次為:1 101、1 010、1 011。

同理,特例,-1的補碼為:1 000。

在定點小數中,小數點隱含在第一位編碼和第二位編碼之間

定點小數,是指小數點准確固定在數據某個位置上的小數,從實用角度看,都把小數點固定在最高數據位的左邊,小數點前邊再設一位符號位。按此規則,任何一個小數都可以被寫成 :N = NS . N-1N-2… N-M。

『貳』 請問一下在c++中,字元串比較時如==,!=,<,>,>=這些關系運算符到底比較的是字元串的啥長度,還是ASSIC

是依次比較字元串中字元的ASSIC碼

2.3.3 字元串常量
字元串常量是用一對雙引號括起來的字元序列。例如:
"This is a character string."
與單引號在字元常量中的作用相同,雙引號在這里也僅是作為定界符,它本身不是字元串常量的內容。若在字元串常遲茄知量中需要出現雙引號則必須使用轉義序列。例如:
"I say: \"Here need a desk.\""
所表示的字元串為
I say: "Here need a desk."
在C++語言中,字元串的存儲方式比較特殊。一個字元串常量並不是一系列字元常量的簡單排列,系統會在每一個字元串常量的尾部加上一個字元常量'\0',表示「該字元串常量到此結束」。字元常量'\0'是一個值為0的ASCII字元,在ASCII碼表中,稱它為NULL。
例如,字元串常量"C++ language"共有12個字元,但它要佔據13位元組的存儲單元,如圖 2 1所示。因此,一個字元串常量所佔的存儲單元總是比它的字元個數多一個位元組。

43 2b 2b 20 6c 61 6e 67 75 61 67 65 \0
圖 2 1 字元串常量的存儲形式
應當指出的是,在字元串常量中使用轉義序列時,要注意防止出現二義性。例如:
cout<<"\x7Error!";
其原意是先使計算機的喇叭響一聲,然後顯示「Error!」6個字元。但實際執行的結果是在屏幕上顯示:
~error!
且無喇叭響聲。
這是由碼消於編譯器將7和E連在一起,將它們解釋成'\x7E',而十六進制的7E正好是字元'~'的ASCII碼值,於是就會出現以上的現象。這時,就是把\x7改寫成\x07也不能改變這種現象,這是由於C++將轉義序列看作是一個整型數據,轉義序列甚至可以由4位十六進制數組成。
此列可以採用以下方法來解決:
cout<< "\x7 Error! ";
即用一個空格將轉義序列字元與其它字元分隔開來,明確地將它們分為兩個詞法單元。或者乾脆將它們分成兩個常量輸出:
cout<< '\x7' << "Error! ";

5.3 字元數組與字元串
字元是計算機程序經常處理的數據。字元在計算機中以ASCII碼的形式存放,每個字元佔一個位元組。對於一個語言系統,字元串是指若干有效字元的序列。字元串常量是由雙引號相括的字元序列表示。例如,
"CHINA" "Student" "x+y=100" "\a\n" " " ""
都是合法的字元串。以空格組成的字元串不是空串,空格也是字元。
5.3.1 字元串存儲
通常可用字元數組存放字元串。例如,
char str[10];
表示str是一個字元型數組,可以存放10個字元。可以把串"CHINA"賦值給str:
str[0] = 'C'; str[1] = 'H'; str[2] = 'I'; str[3] = 'N'; str[4] = 'A';
為了表示一個字元串的結束位置,可以用'\0'作為標志:
str[5] = '\0';
程序處理納耐中,檢測到'\0',就認為一個字元串結束了。
'\0'是指ASCII碼值為0的字元,它不是一個普通的可顯示字元,而是代表一個空操作的標記。'\0'可以用賦值方式賦給字元數組的元素。只有一個'\0'的字元數組雖然沒有可顯示字元,但仍然佔有一個存儲單元。
聲明一個字元數組時,有不同的初始化方式。
① 逐個字元對數組元素進行賦初始值:
char str1[10] = {'S', 't', 'u', 'd', 'e', 'n', 't' };
這種方式的初始化不會添加結束符'\0'。
② 用串常量初始化:
char str2[10] = {"Student"};
char str3[] = {"Student"};
或者省略{}:
char str3[] = "Student";
C對串常量自動添加結束標志'\0',所以str2[7] = '\0'。str3由串常量定義串的長度,str3有8個元素。
5.3.2 字元串處理函數
C++提供的字元串處理函數在string.h的頭文件中聲明。下面介紹一些常用的字元串處理的函數的原型、功能和使用方法。
1、字元串長度函數strlen( )
函數原型:int strlen(const char *s);
功能:返回字元指針s所指的字元串長度。這里,暫時將const char *s理解為const char s[](下同)。只計算有效字元個數,空字元不包括在內。
【例5- 3】測試字元串長度。
#include <iostream.h>
#include <string.h>

void main()
{
char str1[] = "How do you do !";
char *str2 = "Fine.";
cout<<"The string1 length is: "<<strlen(str1)<<endl;
cout<<"The string2 length is: "<<strlen(str2)<<endl;
cout<<"The string3 length is: "<<strlen("C++ program")<<endl;
}
運行結果為:
The string1 length is: 15
The string1 length is: 5
The string1 length is: 11
2、字元串賦值函數strcpy( )
函數原型:char * strcpy(char *s1, const char *s2);
功能:將s2所指的字元串復制到s1所指的字元數組中,函數返回值是s1串的地址。使用函數時應注意,定義串長strlen(s1)≥strlen(s2)。
【例5- 4】復制字元串。
#include <iostream.h>
#include <string.h>

void main()
{
char str1[]="Happy birthday to you";
char str2[25];

cout<<"The string in array str1 is: "<<str1
<<"\nThe string in array str2 is: "<<strcpy(str2,str1)
<<'\n';
}
運行結果為:
The string in array str1 is: Happy birthday to you
The string in array str2 is: Happy birthday to you
3、字元串連接函數strcat( )
函數原型:char * strcat(char *s1, const char *s2);
功能:把s2所指的字元串添加到s1所指的字元串之後。函數返回s1串的地址。為了s1所指的空間能容納s2串的所有字元,應該有s1定義長度≥strlen(s1)+strlen(s2)+1。
【例5- 5】字元串連接。
#include <iostream.h>
#include <string.h>

void main()
{
char s1[ 20 ] = "Happy ";
char s2[] = "New Year ";
char s3[ 40 ] = "";

cout << "s1 =" << s1 << "\ns2 =" << s2;
cout << "\nstrcat(s1, s2) = "<< strcat( s1, s2 );
cout << "\nstrcat(s3, s1) = "<< strcat( s3, s1 ) << endl;
}
程序運行結果如下:
s1 =Happy
s2 =New Year
strcat(s1,s2) = Happy New Year
strcat(s3,s1) = Happy New Year
4、字元串比較函數strcmp( )
函數原型:int strcmp(const char *s1, const char *s2);
int strncmp(const char *s1, const char *s2, int n);
功能:以字典順序方式比較兩個字元串是否相等。如果兩個串相等,函數返回值為0;如果s1串大於s2串,返回值大於0;如果s1串小於s2串,返回值小於0。函數strcmp用於對兩個串的完全比較;函數strncmp用於比較兩個串的前n個字元。
【例5- 6】字元串比較。
#include <iostream.h>
#include <string.h>
#include <iomanip.h>

void main()
{
char s1[] = "Happy New Year";
char s2[] = "Happy New Year";
char s3[] = "Happy Holidays";

cout << "s1 = " << s1 << "\ns2 = "<< s2
<< "\ns3 = "<< s3 << "\n\nstrcmp(s1, s2) ="
<< setw( 2 ) << strcmp( s1, s2 )
<< "\nstrcmp(s1, s3) = "<< setw( 2 )
<< strcmp( s1, s3 ) << "\nstrcmp(s3, s1) ="
<< setw( 2 ) << strcmp( s3, s1 );

cout << "\n\nstrncmp(s1, s3, 6) = "<< setw( 2 )
<< strncmp( s1, s3, 6) << "\nstrncmp(sl, s3, 7) ="
<< setw( 2 ) << strncmp( s1, s3, 7 )
<< "\nstrncmp(s3, s1, 7) ="
<< setw( 2 ) << strncmp( s3, s1, 7 ) << endl;
}
程序運行結果如下:
s1 = Happy New Year
s2 = Happy New Year
s3 = Happy Holidays

strcmp(s1, s2) = 0
strcmp(s1, s3) = 1
strcmp(s3, s1) = -1

strncmp(s1, s3, 6) = 0
strncmp(s1, s3, 7) = 1
strncmp(s3, s1, 7) = -1
5、輸入串
用cin流輸入字元串時,C++把鍵盤操作的空格或回車都視為結束,因此無法輸入帶空格的字元串。C語言的函數gets接受鍵盤輸入的空格,以回車作為結束。
函數puts輸出字元串。函數gets和puts在stdio.h文件聲明。
【例5- 7】輸入帶空格的字元串。
#include <iostream.h>
#include <stdio.h>

void main()
{
char str[10];
gets(str);
puts(str);
}

2.5 基本運算符
運算是對數據的加工過程,描述各種不同運算的符號叫做運算符,而參與運算的數據叫做操作數。表 2 6列出了C++語言運算符的功能、優先順序和結合性。

表 2 6 C++語言常用運算符的功能、優先順序和結合性
優先順序 運算符 功能 結合性
1 () 改變優先順序 左→右
:: 作用域運算
[] 數組下標
. -> 成員運算
.* ->* 成員指針選擇
2 ++ -- 自增,自減 右→左
& 取地址
* 取內容
! 邏輯反
~ 按位反
+ - 取正,取負
() 強制類型
sizeof 求存儲位元組
new delete 動態分配,釋放內存
3 * / % 乘,除,求余 左→右
4 + - 加,減
5 << >> 左移位,右移位
6 <= >= 小於等於,大於等於
7 = = != 等於,不等於 左→右
8 & 按位與
9 ^ 按位異或
10 | 按位或
11 && 邏輯與
12 || 邏輯或
13 ? : 條件運算 右→左
14 = += -= *= /= %= &= ^= 賦值,復合賦值
15 , 逗號運算 左→右

運算符的優先順序與我們日常數學中意義相同,它決定了一個表達式的運算順序。運算符的結合性則決定了該運算符對其操作數的運算順序:如果一個運算符對其操作數自左向右的執行規定的運算,則稱該運算是右結合的;反之則稱其為左結合的。
按運算符所要求操作數的個數,運算符可以分為單目運算符、雙目運算符和三目運算符。單目運算符要求有一個操作數,雙目運算符要求有兩個操作數,而三目運算符則要求有三個操作數。
按運算符的運算性質,運算符又可以分為算術運算符、關系運算符、邏輯運算符、位運算符和其它運算符。本節介紹C++語言中的算術運算符、關系運算符、邏輯運算符、位運算符和sizeof運算符,其餘的運算符將在後續章節中逐步介紹。
1、 算術運算符
C++語言中的算術運算符包括單目算術運算符
-(負號)
和雙目算術運算符:
+(加) -(減) *(乘) /(除) %(模)
雙目運算符%其作用是取被除數除以除數後的余數,符號和被除數的符號相同。
【例2- 1】測試雙目運算符%。
#include <iostream.h>

void main()
{
cout<<"8%5="<<8%5<<endl;
cout<<"8%(-5)="<<8%(-5)<<endl;
cout<<"(-8)%5="<<(-8)%5<<endl;
cout<<"(-8)%(-5)"<<(-8)%(-5)<<endl;
}
運行結果為:
8%5=3
8%(-5)=3
(-8)%5=-3
-8)%(-5)=-3
運算符「%」要求它的兩個操作數必須都是整型或字元型數據,而其它算術運算符則可以是任何基本數據類型。需要指出的是,若運算符「/」的兩個操作數均為整型數據時,進行的是整除,運算結果即商也是一個整型值,小數部分被自然舍棄了,比如,8/5的結果為1,而5/8的結果為0。
進行算術運算時,很可能溢出結果。發生溢出是由於一個變數被賦予一個超出其數據類型表示範圍的數值。只要分母不為0也不會引起除0運行故障,數值溢出是不會引起編譯錯誤的,但會使運行結果發生偏差。
例如,在16位機器上進行下面的操作:
int weight = 42896;
在16位機器中將不能得到值42896,而是-22640。因為在16位機器中有符號整數的表示範圍是-32768~32767,所以它只能得到42896的補碼-22640(42896-65536)。
一個整型變數,用任何一個超過表示範圍的整數初始化,得到的值為用該整數范圍作模運算後的值。例如:
int weight = 142896;
則當weight是2位元組整型數時,得到值為11824。因為142896 = 2*65536+11824。而142896- 3*65536= -53712,該數不在有符號整型數表示範圍內。

2、 關系運算符
C++語言中的關系運算符都是二元運算符,它們一共有6個:
<(小於) <=(不小於) >(大於) >=(不大於) ==(等於) !=(不等於)
6個關系運算符中除大於和小於外的4個運算符的寫法,它們都是雙字元符號,鍵入這樣的符號時,兩個字元間不得有任何分隔符。另外注意等於關系運算符,它由兩個等號組成,與賦值運算符形式不同。
關系運算符是用來對兩個操作數進行關系比較的。由於信息在計算機中均是以二進制數的形式存儲的,因此,關系比較實質上就是比較兩個操作數的大小。當兩個操作數滿足關系運算符所要求的比較關系時,其結果為1,相當於邏輯真;否則為0,相當於邏輯假。
關系運算的結果可以用在算術運算中,例如:
i<=(3<5)+8;
則i的值為9。
由於算術運算符的優先順序高於關系運算符,所以,上例中若去掉圓括弧,編譯器將解釋為
i=3<(5+8);
這是,i的值為1。
3、 邏輯運算符
C++語言中的邏輯運算符包括單目邏輯運算符
!(邏輯非)
和雙目邏輯運算符:
&&(邏輯與) ||(邏輯或)
邏輯運算符是用來表示兩個操作數的邏輯關系的。運算結果用1和0分別表示邏輯真和邏輯假,運算結果也可以作為一個整型數值用於算術運算中。
(1)邏輯非 當操作數的值為0時,對該操作數邏輯非運算的結果為真;否則為假。例如,設整型變數i和j的值分別為0和-30,則!i和!j的運算結果分別為1和0。
(2)邏輯與 只要兩個操作數中有一個操作數的值為0,則對它們邏輯與運算的結果就為假。例如,設i和j仍為上述值,則i&&j的運算結果為0。
(3)邏輯或 只要兩個操作數中有一個操作數的值不為0,則對它們邏輯或運算的結果就為真。例如,設i和j仍為上述值,則i||j的運算結果為1。
邏輯運算符的操作數可以是任何基本數據類型的數據。
4、 位運算符
C++語言中的位運算符包括單目運算符
~(位求反)
和雙目運算符:
&(位與) |(位或) ^(位異或) <<(左移) >>(右移)
位運算符是對其操作數按其二進制形式逐位的進行邏輯運算或移位操作的。
例如:
unsigned char a=135, b= 43;
變數a和b的二進製表示分別為1000 0111和0010 1011。
按位求反 運算符「~」將其操作數逐位取其反碼,即將原來為1的位變為0,原來為0的位變為1。例如,按位求反~a的結果為0111 1000,即十進制120。
按位與 運算符「&」將其兩個操作數對應位逐一的進行邏輯與運算。兩個一位二進制數邏輯與運算的規則為,兩個數中只要有一個為0,則邏輯與的結果就為0。例如,按位與運算a&b的結果為0000 0011,即十進制的3。
a 1000 0111
b 0010 1011
a&b 0000 0011
按位或 運算符「|」將其兩個操作數作對應位逐一進行邏輯或運算。兩個一位二進制數邏輯或運算的規則為,兩個數中只要有一個為1,則其邏輯或的結果就為1。例如,按位或運算a|b的結果為1010 1111,即十進制的175。
a 1000 0111
b 0010 1011
a|b 1010 1111
按位異或 運算符「^」將其兩個操作數作對應位逐一的進行邏輯異或運算。兩個一位二進制數邏輯異或運算的規則為,兩個數只要不同,則其邏輯異或的結果就為1,否則就為0。例如,位運算a^b的結果為1010 1100,即十進制的172。
a 1000 0111
b 0010 1011
a^b 1010 1100
按位左移 運算符「<<」將其左操作數向左移動其右操作數所指定的位數,移出的位補0。由於移位運算符的右操作數表示的是欲移動的位數,所以,它必須是一個整型表達式。例如,移位運算b<<1的結果為0101 0110,即十進制的86;而位移運算b<<2的結果為1010 1100,即十進制的172。可以看出:將一個數左移一位,相當將該數乘以2;左移兩位,相當將該數乘以4。一般說來,將一個數左移n位,就相當將該數乘以2n。所以,在程序中,常用左移位來進行快速的乘法運算。
用移位方法進行乘法運算時,同樣要注意溢出問題。若被移位的是一個有符號數,移位後可能使該數的符號發生變化,這一點對右移運算同樣適用。
按位右移 運算符「>>」將其左操作數向右移動其右操作數所指定的位數,移出的位補0。例如,位移運算a<<2的結果為0010 0001,即十進制的33。與左移操作相對應:將一個數右移n位,相當於將該數除以2n,其小數部分將被忽略。這與整型和字元型數據的除法運算完全一致,所以在程序中常用右移來進行快速的除法運算。
根據位運算符的操作性質可見,位運算符的操作數的數據類型必須是整型或字元型,不得是實型數據。
5、 sizeof
sizeof運算符是一個單目運算符,它是用來計算其操作數在內存中所佔的位元組數的,其運算結果是一個無符號整型值。sizeof運算符的用法具有以下的一般格式:
sizeof(表達式)
其中表達式通常是一個變數或是一個數據類型。C++語言提供sizeof運算符是為了提高程序的移植性。因為在不同的機器上或C++語言的不同實現中,以及不同的操作系統中,同一數據類型所佔的內存大小不盡相同。利用該運算符,可以使得程序員在涉及到內存計算時,不必考慮機器的具體型號和語言的具體實現以及所使用的操作系統。

『叄』 本題要求編寫程序,計算序列 2/1+3/2+5/3+8/5+... 的前N項之和。

首先需要明確,常常看到int取值范圍為-32768~32767,實際上int的取值范圍依賴於計算機系統,在16位機器中,int佔16位,取值范圍為前面所說的-32768~32767(-2^16~2^16-1)。

而在32位和64位機器中,int佔32位,取值范圍為-2147483648~2147483647(-2^32~2^32-1)。

本題中當N為44時,分子的取值將達到2971215073,超出int取值范圍(2147483647),出現異常,導致計算結果出錯,也就是PTA中判斷的較大N出錯。

N<44時一切正常,當N=44時,分子值因為超出int取值范圍出現錯誤。因此本題中,fm,fz,t應為double類型。

(3)程序員分母擴展閱讀:

在計算機系統中,一條機器指令規定了計算機系統的一個特定動作。一個系列的計算機在硬體設計製造時就用了若干指令規定了該系列計算機能夠進行的基本操作,這些指令一起構成了該系列計算機的指令系統。

在計算機應用的初期,程序員使用機器的指令系統來編寫計算機應用程序,這種程序稱為機器語言程序。

使用機器語言編寫的程序,由於每條指令都對應計算機一個特定的基本動作,所以程序佔用內存少、執行效率高。缺點也很明顯,如:編程工作量大,容易出錯;依賴具體的計算機體系,因而程序的通用性、移植性都很差。

閱讀全文

與程序員分母相關的資料

熱點內容
廣聯達正版加密鎖可以補辦嗎 瀏覽:942
java程序員一天多少行代碼 瀏覽:946
喪屍危機java 瀏覽:123
華為手機怎麼去除app標記未讀信息 瀏覽:854
java監控文件夾 瀏覽:805
群控伺服器主機怎麼轉變普通電腦 瀏覽:705
手機怎麼調整app大小 瀏覽:453
加密門禁卡揭秘 瀏覽:137
詞釋pdf 瀏覽:991
安卓手機上如何停止自動續費 瀏覽:880
加密編碼摘要 瀏覽:785
疫情命令黨 瀏覽:496
java轉sql 瀏覽:705
android獲取apn 瀏覽:74
phpfpm進程池 瀏覽:795
解壓掏耳朵音頻 瀏覽:676
爬香山解壓 瀏覽:954
演算法導論回溯 瀏覽:345
開盤指標源碼查詢 瀏覽:529
有道雲保存伺服器出錯 瀏覽:641