當前位置:首頁 » 編程語言 » c語言如何讓輸出的整數佔6位
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言如何讓輸出的整數佔6位

發布時間: 2022-07-22 02:27:30

A. c語言如何控制輸出數字的有效位數

只有浮點型數據,包括float和double有有效位數的說法。
可以用格式化輸出函數printf輸出數字,同時通過格式化字元串來控制數字有效位數。
printf在輸出浮點數時,默認為6位小數,比如定義float f = 1;
調用printf("%f",a);時會輸出1.000000。
格式化字元串可以設置成%a.bf的形式,其中:
1 a為輸出的數字占據的總寬度(位數),包括整數部分,小數部分和小數點。當實際寬度大於設定寬度時,以實際寬度為准。
2 b為小數位數,也就是輸出數字的有效位數。
比如調用printf("5.2f",a);就可以輸出
1.00
從而達到控制有效位數的效果。

B. C語言中n=128765咋輸出成n= 128765主要是咋輸出6位整數!

定義一個數組,用求余法將每個數字存入Num[6]里,然後for循環輸出即可。

C. c#能不能像C語言那樣控制輸出數字所佔的位數

int a = 12345678;
//格式為sring輸出
Label1.Text = string.Format("asdfadsf{0}adsfasdf",a);
Label2.Text = "asdfadsf"+a.ToString()+"adsfasdf";
Label1.Text = string.Format("asdfadsf{0:C}adsfasdf",a);//asdfadsf¥1,234.00adsfasdf
Label2.Text = "asdfadsf"+a.ToString("C")+"adsfasdf";//asdfadsf¥1,234.00adsfasdf
double b = 1234.12543;
int a = 12345678;

//格式為特殊的string樣式輸出
Label1.Text = string.Format("asdfadsf{0:C}adsfasdf",b);//asdfadsf¥1,234.13adsfasdf
Label2.Text = "asdfadsf"+b.ToString("C")+"adsfasdf";//asdfadsf¥1,234.13adsfasdf
Label1.Text = string.Format("{0:C3}",b);//¥1,234.125
Label2.Text = b.ToString("C3");//¥1,234.125
Label1.Text = string.Format("{0:d}",a);//十進制--12345678
Label2.Text = b.ToString("d");//十進制--相同的類型,轉換報錯
Label1.Text = string.Format("{0:e}",a);//指數--1.234568e+007
Label2.Text = b.ToString("e");//指數--1.234125e+003
Label1.Text = string.Format("{0:f}",a);//定點數--12345678.00
Label2.Text = b.ToString("f");//定點數--1234.13
Label1.Text = string.Format("{0:n}",a);//數值--12,345,678.00
Label2.Text = b.ToString("n");//數值--1,234.13
Label1.Text = string.Format("{0:x}",a);//十六進制--bc614e
Label2.Text = b.ToString("x");//16--帶有小數不能轉換,出錯
Label1.Text = string.Format("{0:g}",a);//通用為最緊湊--12345678
Label2.Text = b.ToString("g");//通用為最緊湊--1234.12543
Label1.Text = string.Format("{0:r}",a);//轉來轉去不損失精度--整數不允許用,報錯
Label2.Text = b.ToString("r");//轉來轉去不損失精度--1234.12543

double b = 4321.12543;
int a = 1234;
自定義模式輸出:

//"0"描述:佔位符,如果可能,填充位
Label1.Text = string.Format("{0:000000}",a);// 001234
Label2.Text = string.Format("{0:000000}",b);// 004321

//"#"描述:佔位符,如果可能,填充位
Label1.Text = string.Format("{0:#######}",a);// 1234
Label2.Text = string.Format("{0:#######}",b);// 4321
Label1.Text = string.Format("{0:#0####}",a);// 01234
Label2.Text = string.Format("{0:0#0000}",b);// 004321

//"."描述:小數點
Label1.Text = string.Format("{0:000.000}",a);//1234.000
Label2.Text = string.Format("{0:000.000}",b);//4321.125
double b = 87654321.12543;
int a = 12345678;

//","描述:數字分組,也用於增倍器
Label1.Text = string.Format("{0:0,00}",a);// 12,345,678
Label2.Text = string.Format("{0:0,00}",b);// 87,654,32
Label1.Text = string.Format("{0:0,}",a);// 12346
Label2.Text = string.Format("{0:0,}",b);// 87654
Label1.Text = string.Format("{0:0,,}",a);// 12
Label2.Text = string.Format("{0:0,,}",b);// 88
Label1.Text = string.Format("{0:0,,,}",a);// 0
Label2.Text = string.Format("{0:0,,,}",b);// 0

//"%"描述:格式為百分數
Label1.Text = string.Format("{0:0%}",a);// 1234567800%
Label2.Text = string.Format("{0:#%}",b);// 876543%
Label1.Text = string.Format("{0:0.00%}",a);// 1234567800.00%
Label2.Text = string.Format("{0:#.00%}",b);// 8765432112.54%

//"abc"描述:顯示單引號內的文本
Label1.Text = string.Format("{0:'文本'0}",a);// 文本12345678
Label2.Text = string.Format("{0:文本0}",b);// 文本87654321

//"""描述:後跟1要列印字的字元,也用於轉移符"n等
Label1.Text = string.Format("""你好!""");// "你好!"
Label2.Text = string.Format("[url=file://""c""books""new""we.asp]""c""books""new""we.asp");//"c"books"new"we.asp

//"@"描述:後跟要列印字的字元,
Label1.Text = string.Format(@"""你好!"""); // "你好!"要列印"則需要輸入兩對才可以
Label2.Text = string.Format(@""c"books"new"we.asp");//"c"books"new"we.asp

Label1.Text = String.Format("{0:yyyy年-mm月-dd日",DateTime.Now);

日期轉化一

為了達到不同的顯示效果有時,我們需要對時間進行轉化,默認格式為:2007-01-03 14:33:34 ,要轉化為其他格式,要用到DateTime.ToString的方法(String, IFormatProvider),如下所示:

using System;
using System.Globalization;
String format="D";
DateTime date=DataTime,Now;
Response.Write(date.ToString(format, DateTimeFormatInfo.InvariantInfo));

結果輸出
Thursday, June 16, 2005

參數format格式詳細用法:

格式字元 關聯屬性/說明
d ShortDatePattern
D LongDatePattern
f 完整日期和時間(長日期和短時間)
F FullDateTimePattern(長日期和長時間)
g 常規(短日期和短時間)
G 常規(短日期和長時間)
m、M MonthDayPattern
r、R RFC1123Pattern
s 使用當地時間的 SortableDateTimePattern(基於 ISO 8601)
t ShortTimePattern
T LongTimePattern
u 用於顯示通用時間的格式
U 使用通用時間的完整日期和時間(長日期和長時間)
y、Y YearMonthPattern

下表列出了可被合並以構造自定義模式的模式。這些模式是區分大小寫的;例如,識別「MM」,但不識別「mm」。如果自定義模式包含空白字元或用單引號括起來的字元,則輸出字元串頁也將包含這些字元。未定義為格式模式的一部分或未定義為格式字元的字元按其原義復制。

格式模式 說明
d 月中的某一天。一位數的日期沒有前導零。
dd 月中的某一天。一位數的日期有一個前導零。
ddd 周中某天的縮寫名稱,在 AbbreviatedDayNames 中定義。
dddd 周中某天的完整名稱,在 DayNames 中定義。
M 月份數字。一位數的月份沒有前導零。
MM 月份數字。一位數的月份有一個前導零。
MMM 月份的縮寫名稱,在 AbbreviatedMonthNames 中定義。
MMMM 月份的完整名稱,在 MonthNames 中定義。
y 不包含紀元的年份。如果不包含紀元的年份小於 10,則顯示不具有前導零的年份。
yy 不包含紀元的年份。如果不包含紀元的年份小於 10,則顯示具有前導零的年份。
yyyy 包括紀元的四位數的年份。
gg 時期或紀元。如果要設置格式的日期不具有關聯的時期或紀元字元串,則忽略該模式。
h 12 小時制的小時。一位數的小時數沒有前導零。
hh 12 小時制的小時。一位數的小時數有前導零。
H 24 小時制的小時。一位數的小時數沒有前導零。
HH 24 小時制的小時。一位數的小時數有前導零。
m 分鍾。一位數的分鍾數沒有前導零。
mm 分鍾。一位數的分鍾數有一個前導零。
s 秒。一位數的秒數沒有前導零。
ss 秒。一位數的秒數有一個前導零。
f 秒的小數精度為一位。其餘數字被截斷。
ff 秒的小數精度為兩位。其餘數字被截斷。
fff 秒的小數精度為三位。其餘數字被截斷。
ffff 秒的小數精度為四位。其餘數字被截斷。
fffff 秒的小數精度為五位。其餘數字被截斷。
ffffff 秒的小數精度為六位。其餘數字被截斷。
fffffff 秒的小數精度為七位。其餘數字被截斷。
t 在 AMDesignator 或 PMDesignator 中定義的 AM/PM 指示項的第一個字元(如果存在)。
tt 在 AMDesignator 或 PMDesignator 中定義的 AM/PM 指示項(如果存在)。
z 時區偏移量(「+」或「-」後面僅跟小時)。一位數的小時數沒有前導零。例如,太平洋標准時間是「-8」。
zz 時區偏移量(「+」或「-」後面僅跟小時)。一位數的小時數有前導零。例如,太平洋標准時間是「-08」。
zzz 完整時區偏移量(「+」或「-」後面跟有小時和分鍾)。一位數的小時數和分鍾數有前導零。例如,太平洋標准時間是「-08:00」。
: 在 TimeSeparator 中定義的默認時間分隔符。
/ 在 DateSeparator 中定義的默認日期分隔符。
% c 其中 c 是格式模式(如果單獨使用)。如果格式模式與原義字元或其他格式模式合並,則可以省略「%」字元。
" c 其中 c 是任意字元。照原義顯示字元。若要顯示反斜杠字元,請使用「""」。

只有上面第二個表中列出的格式模式才能用於創建自定義模式;在第一個表中列出的標准格式字元不能用於創建自定義模式。自定義模式的長度至少為兩個字元;例如,

DateTime.ToString( "d") 返回 DateTime 值;「d」是標准短日期模式。
DateTime.ToString( "%d") 返回月中的某天;「%d」是自定義模式。
DateTime.ToString( "d ") 返回後面跟有一個空白字元的月中的某天;「d」是自定義模式。

比較方便的是,上面的參數可以隨意組合,並且不會出錯,多試試,肯定會找到你要的時間格式
如要得到2005年06月 這樣格式的時間
可以這樣寫:
date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)

D. 用C語言輸出所有6位數的迴文數

咨詢記錄 · 回答於2021-10-19

E. C語言怎麼保留六位有效數字

IEEE浮點表示
IEEE浮點標准用

.png

的形式近似表示一個數。並且將浮點數的位表示劃分為三個欄位:

符號(sign)s決定這個數是負數(s=1)還是正數(s=0)。可以用一個單獨的符號s直接編碼符號s。

尾數(signficand)M是一個二進制小數,它的范圍是1~2-ξ或者是0~1-ξ。
n位小數欄位.png編碼尾數M。

階碼(exponent)E的作用是對浮點數加權,這個權重是2的E次冪(可能是負數)。k位的階碼欄位 .png編碼階碼E。

在單精度浮點格式(c語言的float)中,s,exp和frac欄位分別為1位,8位和23位,而雙精度浮點格式(c語言中的double)中,s,exp和frac欄位分別為1位,11位和52位。
一個浮點數的常見比特位表示如下:

單精度

雙精度

而根據exp的值,被編碼的值可以分為三大類不同的情況。下面進行一一解釋。

情況1:規格化的值
即最普遍的情況,當exp,即階碼域既不為全0,也不為全1的情況。在這種情況下,階碼欄位解釋為以偏置(biased)形式表示有符號整數,即E=exp-Bias,exp是無符號數(1~254)。Bias是一個等於.png的偏置值,對於單精度來說,k=23,Bias=127,因此E的范圍是-126~+127。

frac被描述為小數值,且0≤frac<1,其二進製表示為0.frac。尾數定義為 M=1+frac ,則M=1.frac。那麼就有1≤M<2,由於總是能夠調整階碼E,使得M在范圍1≤M<2,所以不需要顯示的表示它,這樣還能獲得一個額外的精度位。也就是說,在計算機內部保存M時,默認這個數的第一位總是1,因此可以被捨去,只保存後面的frac部分,等到讀取的時候,再把第一位的1加上去。

情況2:非規格化的值
當exp,即階碼域為全0時,所表示的數便為非規格化的值,該情況下的階碼值E=1-Bias(注:為從非格式化值轉換到格式化值提供了一種方法)。尾數M=frac

非規格化的數有兩個作用。

表示數值0。格式化數中,我們總使得M≥1,因此就無法表示0。而階碼全0時,且尾數也全0時,就可以表示0了。

表示接近0.0的數。它所表示的值分布地接近於0.0,該屬性成為逐漸溢出。

情況3:特殊值
有兩種

階碼全為1,小數域全為0。它得到值為 +∞(s=0)或-∞(s=1),它在計算機中可以表示溢出的結果,例如兩個非常大的數相乘。

階碼全為1,小數域不全為0。它得到值為NaN(Note a Number)。它在計算機中可以表示非法的數,例如計算根號-1時的值。
有了前面了基礎,我們就可以來計算浮點數的數值范圍了。以單精度(float)為例,我們知道它的指數范圍(即E)為-126~+127,而M的范圍為1≤M<2,實際上,對於單精度,1≤M≤2-2^(-23)(注:23為frac欄位所佔的比特位)。那麼我們就可以得到單精度的最大值為:

.png

同理,我們可以得到單精度的最小值為:

.png

我們僅僅以單精度為例,用同樣的方法可以計算其他精度的浮點數數值范圍,在此不再贅述。

浮點數的有效位
有效位也可以理解為我們常說的精度。浮點數的精度是由尾數的位數來決定的。
對於單精度(float),它的尾數為23位,而2^23=8388608,共7位,也就是說最多能有7位有效數字,但至少能保證6位,因此其有效位為6~7位。當然我們可以通過下面的內容進一步理解。以下計算結果保留10位小數。

...png

觀察a和b的結果可以發現,0.0000001和0.0000002之間的其他數是沒有辦法通過單精度浮點數來精確表示的,也就是說,只有到小數點後面7位的值才是精確的,同理,觀察b和c的結果,0.0000002到0.0000004之間的其他數也是不能通過單精度浮點數精確表示的,更不幸地是,這之間的數,甚至只能精確到第6位。

這也就有了單精度浮點數的有效位為6~7位的結論。根據相似的方法,我們同樣可以得到雙精度浮點數的有效位為15~16位的結論,這里不再贅述。

浮點數在內存中的存儲
了解了這么多,我們來看一下一個小數究竟是如何在內存中存儲的。以float f = 8.5f為例。其二進製表示為.png,可見指數實際值為3,則根據E=exp-Bias,可知exp=E+Bias=3+127=130,根據M=1+frac,可知,frac=M-1=0.0001(二進制)而.png

F. c語言三位數按 "佔6個字元寬度" 格式輸出怎麼輸出

printf(「%6d」,i);
如果要用0填補那麼在6前加一個0

G. c語言 怎麼將輸入的數字限制在六位啊

按照你的要求,修改了一下:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
structcustomer
{
charname[50];
charaddress[100];
charphone[20];
charPIN[10];
};
voidnew_customer()
{
structcustomera;
structcustomer*p=&a;
FILE*fp1;
charfilename[20]={0};
inti;
memset(&a,0,sizeof(structcustomer));
printf("pleaseenterfilename ");
gets(filename);
if((fp1=fopen(filename,"w"))==NULL)
{
printf("cannotopenfile ");
exit(0);
}
printf("pleaseinputyourname: ");
gets(p->address);
printf("pleaseinputyouraddress: ");
gets(p->address);
printf(": ");
gets(p->phone);
printf("pleaseinputyourPIN: ");
scanf("%6s",p->PIN);
for(i=0;i<6;i++)
{
if(p->PIN[i]<'0'||p->PIN[i]>9)
{
printf("YourPINisincorrect. ");
fclose(fp1);
return;
}
}
fwrite(p->address,1,strlen(p->address),fp1);
fwrite("",1,1,fp1);
fwrite(p->phone,1,strlen(p->phone),fp1);
fwrite("",1,1,fp1);
fwrite(p->PIN,1,strlen(p->PIN),fp1);
fclose(fp1);
}
intmain(void)
{
new_customer();
return0;
}

測試截圖:

提示字元太多,就不寫注釋了。