計(jì)算機(jī)內(nèi)存中的數(shù)據(jù)可以通過變量,常量來表示和存儲(chǔ),那末這些數(shù)據(jù)如何運(yùn)算?
C語言中提供了大量(34種)的運(yùn)算符可以用來完成數(shù)據(jù)的算術(shù),賦值,邏輯,關(guān)系,條件判斷和自增自減運(yùn)算和基于2進(jìn)制的位運(yùn)算,同時(shí)提供了跨平臺(tái)的用于數(shù)據(jù)格式化輸入輸出的函數(shù)printf()和scanf(),而實(shí)際上計(jì)算機(jī)需要去完成的任務(wù)正是讀取輸入的數(shù)據(jù),根據(jù)業(yè)務(wù)邏輯進(jìn)行計(jì)算以后將結(jié)果輸出。
在學(xué)習(xí)為了完成數(shù)據(jù)的復(fù)雜計(jì)算而生的那些運(yùn)算符之前,需要先明白幾個(gè)概念:
操作數(shù):參與計(jì)算的數(shù)據(jù),可以是之前學(xué)過的整數(shù),浮點(diǎn)數(shù)和字符和以后學(xué)的。
運(yùn)算符:也就是履行某項(xiàng)計(jì)算的符號(hào),例如+ - * / % >等等
表達(dá)式:操作數(shù)和運(yùn)算符的組合,例如 x+y;
而運(yùn)算符通常是有優(yōu)先級(jí)和結(jié)合性的特性:
優(yōu)先級(jí):以算術(shù)運(yùn)算符為例子,通常是先乘除后加減,可使用()提高優(yōu)先級(jí)
結(jié)合性:繼續(xù)以算術(shù)運(yùn)算符為例子,當(dāng)優(yōu)先級(jí)相同時(shí)(表達(dá)式中只有同級(jí)別的運(yùn)算符),通常是從左到右開始履行的。
但是實(shí)際生產(chǎn)和生活中通常都是各種運(yùn)算和后面學(xué)習(xí)的流程控制語句聯(lián)合嵌套使用的,是現(xiàn)實(shí)生活中的業(yè)務(wù)復(fù)雜度決定的。
算術(shù)運(yùn)算符主要是用來完成數(shù)學(xué)運(yùn)算的,C語言支持?jǐn)?shù)學(xué)上的加減乘除4則混合運(yùn)算,同時(shí)還有取模運(yùn)算(%),也就是求被除數(shù)/除數(shù)=商數(shù)…余數(shù),需要指出的是只有整數(shù)才能求模。
下面程序案例演示了算術(shù)運(yùn)算符使用進(jìn)程中需要注意的事項(xiàng):
1 整數(shù)和整數(shù)運(yùn)算,結(jié)果是整數(shù),特別是在使用除法時(shí)需要注意會(huì)舍去小數(shù)部份
2 當(dāng)有多種數(shù)據(jù)類型(int double char)參與運(yùn)算時(shí),運(yùn)算結(jié)果的數(shù)據(jù)類型是參與運(yùn)算的最大的數(shù)據(jù)類型,這樣保持?jǐn)?shù)據(jù)運(yùn)算的準(zhǔn)確性。
#include <stdio.h>
/*
算術(shù)運(yùn)算符 + - * -
@author Tony 18601767221@163.com
@since 20160526 10:13
*/
void alg_operator() {
printf("%d\n", 1 + 3);
printf("%d\n", -3); //加減運(yùn)算符有時(shí)候會(huì)被當(dāng)作正負(fù)數(shù)
printf("%d\n", 5 / 2.0);//運(yùn)算的結(jié)果是2.5 但是printf在打印輸出時(shí)不會(huì)做強(qiáng)迫類型轉(zhuǎn)換,因此這里解析毛病,結(jié)果為0
printf("%d\n", (int)(3.5 * 2));// 當(dāng)參與運(yùn)算的類型不1致時(shí),如果想要指定類型的結(jié)果,可以通過強(qiáng)迫類型轉(zhuǎn)換來實(shí)現(xiàn)
printf("3/2=%d", 3 / 2); //兩個(gè)整數(shù)相除 小數(shù)部份被舍去
}
求模運(yùn)算的結(jié)果與被除數(shù)相同,如果被除數(shù)是正數(shù),那末取余的結(jié)果也是正數(shù),反之同樣成立。
/*
算術(shù)運(yùn)算符 求模的結(jié)果和被除數(shù)相干
@author Tony 18601767221@163.com
@since 20160526 10:13
*/
void modulo_operator() {
//整數(shù)能做求模運(yùn)算,浮點(diǎn)數(shù)不能
//int result = 5.0 % 3; 編譯毛病
//求模運(yùn)算的結(jié)果與被除數(shù)相同
int result = 5 % 3; //1...2 結(jié)果就是2
printf("5模3=%d\n", result);
result = -5 % 3;// ⑴...⑵ 結(jié)果就是⑵
printf("⑸模3=%d\n", result);
result = 5 % -3;// ⑴...2 結(jié)果就是2
printf("5模⑶=%d\n", result);
result = -5 % -3;// 1...⑵ 結(jié)果就是⑵
printf("⑸ 模⑶=%d\n", result);
}
取模運(yùn)算符可使用乘除法實(shí)現(xiàn):
/*
使用乘除法實(shí)現(xiàn)取模運(yùn)算
@author Tony 18601767221@163.com
@since 20160528 20:28
*/
void delivery() {
int result = 5 % 3;
printf("取模運(yùn)算結(jié)果>>>result=%d\n",result);
result = 5 - (5 / 3) * 3; //先取整相乘再相減
printf("乘除法運(yùn)算結(jié)果>>>result=%d\n", result);
}
取模運(yùn)算符的使用處景:整數(shù)反轉(zhuǎn),例如12345反轉(zhuǎn)成54321
/*
使用求模運(yùn)算符實(shí)現(xiàn)整數(shù)反轉(zhuǎn)
@author Tony 18601767221@163.com
@since 20160526 10:36
*/
void modulo_reversal_sample() {
int num = 0;
printf("請(qǐng)輸入1個(gè)反轉(zhuǎn)的5位整數(shù)\n");
scanf("%d", &num); //讀取鍵盤上輸入的整數(shù)
int unit = num % 10;
int decade = num / 10 % 10;
int hundred = num / 100 % 100 % 10;
int thousand = num / 1000 % 10;
int tenThousand = num / 10000;
int reseveal = tenThousand + thousand * 10 + hundred * 100 + decade * 1000 + unit * 10000;
printf("反轉(zhuǎn)之前的數(shù)字%d\n反轉(zhuǎn)以后的數(shù)字%d\n", num, reseveal);
}
在學(xué)習(xí)變量時(shí)屢次使用到賦值運(yùn)算符”=”,需要區(qū)分的是C語言中的相等性判斷是使用”==”兩個(gè)等號(hào)來實(shí)現(xiàn)的。
賦值運(yùn)算符的作用就是將右側(cè)的表達(dá)式或常量值賦值給左側(cè)的變量,賦值之前會(huì)進(jìn)行類型轉(zhuǎn)換(將右側(cè)的值轉(zhuǎn)換成左側(cè)的變量類型)。
/*
賦值運(yùn)算符
@author Tony 18601767221@163.com
@since 20160526 10:36
*/
void assignment_operator() {
// C語言中的=表示賦值運(yùn)算符
int value = 12; //將12賦值給變量value
printf("value=%d\n", value);
//賦值運(yùn)算符會(huì)自動(dòng)將右側(cè)的表達(dá)式計(jì)算的結(jié)果或是常量自動(dòng)轉(zhuǎn)換成左側(cè)的變量類型
double db = 12 + 12;
printf("db=%.2f\n", db);
int one, two, three;
one = two = three = value; //當(dāng)同時(shí)有多個(gè)賦值運(yùn)算時(shí),從右往左履行賦值運(yùn)算
//算數(shù)運(yùn)算符優(yōu)先級(jí)高于賦值運(yùn)算符優(yōu)先級(jí)
//復(fù)雜賦值運(yùn)算符
int num = 10;
num +=-2;
num -= 4;
num *= 6;
num /= 8;
num %= 10;
//
//賦值運(yùn)算符是從右向左開始履行
int result = 5;
result += result -= result *= result /= result;
// result+=result-=result*=result=result/result
printf("result=%d\n",result);
}
復(fù)雜運(yùn)算符的使用處景:1⑴00之間的整數(shù)累加求和
/*
//復(fù)雜賦值運(yùn)算符的利用場(chǎng)景, 1⑴00之間的整數(shù)累加求和
@author Tony 18601767221@163.com
@since 20160518 09:34
*/
void assignement_sample() {
int i = 1;
int sum = 0;
while (i <=100) {
sum += i;//作用同等于sum =sum +i;
i += 1;
}
printf("1到100之間的整數(shù)和為%d\n", sum);
}
復(fù)雜賦值運(yùn)算符的使用處景:計(jì)算1⑴00之間的偶數(shù)和
/*
偶數(shù)求和
@author Tony 18601767221@163.com
@since 20160518 09:36
*/
void even_sum() {
int i = 0;
int sum = 0;
while (i<=100) {
sum += i;
i += 2;
}
printf("1到100之間的偶數(shù)和為%d\n", sum);
}
自增自減運(yùn)算符主要的用處是讓變量自增1或自減1,不能作用于常量或表達(dá)式。自增(++)可之前置或后置,前置變量表示先自增1,再援用,而后置1表示先援用,后自增1。
當(dāng)自增自減運(yùn)算符和算術(shù)運(yùn)算符履行混合運(yùn)算時(shí),自增自減運(yùn)算符高于算術(shù)運(yùn)算的優(yōu)先級(jí)。
#include <stdio.h>
/*
自增自減運(yùn)算符
@author Tony 18601767221@163.com
@since 20160526 11:24
*/
void auto_increment() {
//只有變量能夠自增,常量與表達(dá)式不可以自增?。?!
int num = 10;
num++; //讓num自增1 自增運(yùn)算符++可以放到整數(shù)變量num前面或后面,如果是單唯一行語句,效果是1樣的
printf("num=%d\n", num);
printf("前置++和后置++運(yùn)算的區(qū)分\n");
printf("后置++運(yùn)算\n");
int age = 28;
printf("age=%d\n", age++);//先援用打印
printf("age=%d\n", age);//再自增
printf("前置++運(yùn)算\n");
int year = 2016;
printf("age=%d\n", ++year);//先自增
printf("age=%d\n", year);//再援用打印
//自增運(yùn)算符優(yōu)先級(jí)高于算數(shù)運(yùn)算符優(yōu)先級(jí)
int val = 10;
printf("val=%d\n", ++val + 3);//val先自增1 再加3
val = 3;
printf("val=%d\n", -val++);//val先自增加1再變成負(fù)3
int number = 10;
int data = 5;
printf("%d", ++number*data);// 55
int one = 5;
int two = 10;
int sum = one++ + two;
printf("sum =%d\n",sum);
sum = ++one + two;
printf("sum =%d\n", sum);
}
自增運(yùn)算符經(jīng)常使用在循環(huán)中改變循環(huán)變量的值
#include <stdlib.h>
/*
自增自減的典型使用處景
@author Tony 18601767221@163.com
@since 20160528 08:59
*/
void auto_increment_sample() {
//
int count = 0;
while (count++<5) {
system("start notepad"); //異步調(diào)用記事本
}
while (count-->0) {
system("calc");
}
}
使用自增運(yùn)算符實(shí)現(xiàn)基于命令行的變色龍
#include <Windows.h>
#include <stdlib.h>
#include <stdio.h>
/*
實(shí)現(xiàn)命令行窗口的變色龍
@author Tony 18601767221@163.com
@since 20160528 09:00
*/
void changeColor() {
char command[32]; //聲明字符數(shù)組保存輸入的命令
int i = 0;
while (i<0xf) {
sprintf(command, "color %x%x", i, 15 - i);// 使用sprintf函數(shù)實(shí)現(xiàn)給字符串賦值
system(command);
Sleep(1000); //1秒鐘改變1次窗口的色彩
i++;
}
}
使用自減運(yùn)算符實(shí)現(xiàn)基于命令行的標(biāo)題時(shí)間變更 倒計(jì)時(shí)的秒表
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
/*
使用自增自減實(shí)現(xiàn)秒表的倒計(jì)時(shí)
@author Tony 18601767221@163.com
@since 20160528 09:16
*/
void timer() {
int second = 0;
printf("請(qǐng)輸入你要開始倒計(jì)時(shí)的秒鐘數(shù)字\n");
scanf("%d",&second);
char command[32]; //聲明1個(gè)字符數(shù)組保存履行的倒計(jì)時(shí)(以命令行窗口的標(biāo)題時(shí)間變化)
while (second-->0) {
sprintf(command,"title %d",second);
system(command);
Sleep(1000); //利用Windows的Sleep函數(shù)實(shí)現(xiàn)暫停1秒鐘
}
}
邏輯運(yùn)算符用于計(jì)算常量,變量或表達(dá)式的邏輯值,做多個(gè)條件判斷。主要有3個(gè)邏輯運(yùn)算符:
邏輯與(&&):當(dāng)多個(gè)表達(dá)式計(jì)算結(jié)果為非0時(shí),邏輯與的計(jì)算結(jié)果為1,否則如果有1個(gè)表達(dá)式結(jié)果為0(邏輯與的計(jì)算結(jié)果為0),那末邏輯與將不會(huì)再履行剩余的表達(dá)式,此時(shí)短路產(chǎn)生!(邏輯與可以形象的理解成白富美找男朋友,要又高又富又帥,多個(gè)條件都要滿足)
邏輯或(||):當(dāng)多個(gè)表達(dá)式計(jì)算結(jié)果中有1個(gè)為非0時(shí),邏輯或的計(jì)算結(jié)果為1,此時(shí)邏輯或?qū)⒉辉俾男惺S嗟谋磉_(dá)式,短路產(chǎn)生,否則如果所有表達(dá)式結(jié)果都為0,結(jié)果為0。(邏輯或可以形象的理解為IT男找女朋友,只要窈窕淑女1個(gè)條件便可)
邏輯非(!):對(duì)表達(dá)式運(yùn)算的結(jié)果取反,即如果表達(dá)式運(yùn)算結(jié)果為0,邏輯非就是非0,反之同樣成立。
使用關(guān)系和邏輯運(yùn)算符實(shí)現(xiàn)大小寫字母的相互轉(zhuǎn)換
/*
使用關(guān)系運(yùn)算符結(jié)合邏輯運(yùn)算符實(shí)現(xiàn)大小寫字母轉(zhuǎn)換
@author Tony 18601767221@163.com
@since 20160530 20:59
*/
void releation_sample() {
printf("請(qǐng)輸入1個(gè)字母\n");
char input = getchar(); //獲得輸入的字母
input >= 'a'&&input <= 'z' ? putchar(input -= 0x20) : input >= 'A'&&input <= 'Z' ? putchar(input += 0x20) : putchar(input);
printf("\n");
}
C語言的關(guān)系運(yùn)算符和數(shù)學(xué)上的大于(>),小于(<),大于等于(>=),小于等于(<=)和不等于(!=)相對(duì)應(yīng),只是用在C語言的表達(dá)式中產(chǎn)生的結(jié)果是0(假)或1(真)。
/*
關(guān)系運(yùn)算符的運(yùn)算結(jié)果
@author Tony 18601767221@163.com
@since 20160529 08:40
*/
void releation_operator() {
int x = 10;
int y = 20;
printf("%d\n",x>y); //表達(dá)式不成立 結(jié)果為0
printf("%d\n",x<y);//表達(dá)式成立結(jié)果為1
}
邏輯運(yùn)算符使用的那些坑…
/*
邏輯運(yùn)算
@author Tony 18601767221@163.com
@since 20160528 12:56
*/
void logic_operator() {
//&& 多個(gè)表達(dá)式運(yùn)算結(jié)果為非0 邏輯與為1,否則為0
int age = 28;
printf("邏輯與短路特性:%d\n",3>5&&++age); //當(dāng)明確計(jì)算結(jié)果時(shí)(邏輯與有1個(gè)計(jì)算結(jié)果為0)不再履行剩余的表達(dá)式(這里的++age不會(huì)再履行)
printf("age=%d\n",age);//因此age變量的值和聲明初始化的結(jié)果1樣
//|| 多個(gè)表達(dá)式運(yùn)算結(jié)果中有1個(gè)為非0 邏輯或?yàn)?,否則(都是0的結(jié)果)為0
printf("邏輯或短路特性:%d\n",3<5||++age);//這里也不會(huì)履行++age,這個(gè)就是邏輯或的短路特性
printf("age=%d\n", age);//因此age變量的值和聲明初始化的結(jié)果1樣
//! 對(duì)表達(dá)式運(yùn)算的結(jié)果取反,1變成0 0變成1
printf("3<5取反的運(yùn)算結(jié)果為:%d\n",!3<5); //對(duì)結(jié)果取反
}
使用關(guān)系和邏輯運(yùn)算符實(shí)現(xiàn)商場(chǎng)的購物打折程序
/*
商品打折系統(tǒng)
@author Tony 18601767221@163.com
@since 20160530 21:11
*/
void discount() {
double unitPrice = 128.8;//商品單價(jià)
int number = 10;//購買數(shù)量
double totalPrice = unitPrice*number; //計(jì)算總價(jià)
double nineDiscountPrice = totalPrice*0.9; //9折
double eightDiscountPrice = totalPrice*0.8;//8折
//不同的商品價(jià)格實(shí)現(xiàn)不同的折扣
totalPrice >= 1000 ? totalPrice=nineDiscountPrice: totalPrice >= 1500 ? totalPrice=eightDiscountPrice : nineDiscountPrice;
printf("終究商品的交易價(jià)格為%.2f\n",totalPrice);
}
3元運(yùn)算符的1般情勢(shì)是表達(dá)式1?表達(dá)式2:表達(dá)式3,當(dāng)表達(dá)式1的結(jié)果為非0時(shí),履行表達(dá)式2,否則就履行表達(dá)式3。3目運(yùn)算符可以實(shí)現(xiàn)if/else語句的功能。
#include <stdio.h>
#include <stdlib.h>
/*
3目運(yùn)算符使用案例
@author Tony 18601767221@163.com
@since 20160526 13:24
*/
void ternary_operator() {
0 ? system("calc") : system("tasklist"),system("explorer"); //這里會(huì)履行調(diào)用notepad
-1 ? system("system tasklist"),system("ipconfig"):system("calc");//履行tasklist和calc
int num = rand(); //獲得1個(gè)隨機(jī)值
printf("產(chǎn)生的隨機(jī)值為%d\n",num);
num > 80 ? printf("你贏了") : printf("你輸了");
int one = 100;
int two = 200;
int max = one > two ? one : two;
printf("兩個(gè)整數(shù)中的最大值為%d\n", max);
}
結(jié)合關(guān)系運(yùn)算符和以時(shí)間為隨機(jī)數(shù)的種子數(shù)實(shí)現(xiàn)賭博機(jī)
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //引入時(shí)間頭文件
#include <Windows.h>
/*
賭博機(jī)的原理
@author Tony 18601767221@163.com
@since 20160529 08:15
*/
void winning_rate(){
time_t ts; //聲明1個(gè)時(shí)間類型的變量
int num=0;
srand((unsigned int)(time)(&ts)); //定義隨機(jī)數(shù)種子,每次產(chǎn)生的隨機(jī)數(shù)都不1樣
num = rand() % 100;//產(chǎn)生0⑴00之間的整數(shù)
num > 80 ? printf("你贏了"),system("echo 取得80W元大獎(jiǎng)") : printf("你輸了"),system("echo 沒有中獎(jiǎng)");
}
使用3目運(yùn)算符實(shí)現(xiàn)求4個(gè)整數(shù)中的最大值
#include <stdio.h>
/*
獲得最大值
@author Tony 18601767221@163.com
@since 20160529 08:20
*/
void get_max_value(){
int max =0;
int one = 66;
int two = 77;
int three = 88;
int four = 99;
max = one > two ? one : two;
max = max > three ? max : three;
max = max > four ? max : four;
printf("4個(gè)整數(shù)中最大的值為%d\n", max);
}
從第1個(gè)C語言程序中,就使用了跨平臺(tái)的庫函數(shù)printf實(shí)現(xiàn)將1段文字輸出到控制臺(tái),而實(shí)際上,printf()不但可以將數(shù)據(jù)依照指定的格式輸出到控制臺(tái),還可以是網(wǎng)頁或是指定的文件中。
使用printf函數(shù)將數(shù)據(jù)依照指定的格式輸出到網(wǎng)頁的使用案例,目前我們公司的IT系統(tǒng)還有用C語言寫的堡壘機(jī)程序(cgi)。
/*
使用printf輸出數(shù)據(jù)到網(wǎng)頁
@author Tony 18601767221@163.com
@since 20160530 09:04
*/
void printf_html() {
printf("Content-type:text/html \n\n");//聲明HTML語言
printf("Hello World In HTML");//將生成的exe程序改成cgi就能夠部署在Web服務(wù)器例如Apache中運(yùn)行了
}
printf()函數(shù)的強(qiáng)大的地方在于格式化顯示整數(shù),浮點(diǎn)數(shù),字符和字符串。我們可使用這個(gè)函數(shù)來調(diào)試程序或獲得方法的返回值等等。
printf只會(huì)依照傳遞的參數(shù)類型解析數(shù)據(jù),不會(huì)進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,傳入的參數(shù)類型和個(gè)數(shù)和輸出的類型和個(gè)數(shù)保持1致,不然程序運(yùn)行時(shí)會(huì)出異常
使用printf打印字符串,整數(shù)和字符的案例
#include <stdio.h>
/*
使用printf格式化輸出數(shù)據(jù)
@author Tony 18601767221@163.com
@since 20160530 09:14
*/
void printf_sample() {
printf("Hello World \n");//輸出字符串常量,默許是輸出到控制臺(tái)
//printf顯示不同數(shù)據(jù)類型的數(shù)據(jù)
printf("我的名字叫%s,我的年齡是%d我的榮幸字符是%c\n","Tony",28,'C');
}
printf在打印輸出整數(shù)時(shí),不但可以依照3種不同的進(jìn)制類型(8進(jìn)制,10進(jìn)制和106進(jìn)制),同時(shí)還可以依照有符號(hào)和無符號(hào)兩種方式打印整數(shù)。
和控制輸出字符的寬度等等:
#include <stdio.h>
/*
輸出指定格式的整數(shù)數(shù)據(jù)
如果要在網(wǎng)頁下顯示數(shù)據(jù),還需要匹配不同的格式
@author Tony 18601767221@163.com
@since 20160530 09:20
*/
void printf_format_int() {
const int num = 10;
printf("%d",num);//默許的格式是有多寬 填充多寬
printf("%d\t%ld",num,num);//32位以上的系統(tǒng)%d和%ld是等效的 inth和long是等效的
printf("%10d\n",num);//寬度為10,數(shù)據(jù)顯示默許是右側(cè)對(duì)齊
printf("%010d\n",num);//寬度為10,如果不足則用0來補(bǔ)充
printf("%⑴0d\n",num);//寬度為10,默許是依照右側(cè)對(duì)齊, "-"表示左側(cè)對(duì)齊
printf("%3d\n",12345); //m整數(shù),大于實(shí)際寬度,填充0或空格,否則無效
}
/*
輸出指定格式的整數(shù)(有沒有符號(hào)類型和3種進(jìn)制類型的)數(shù)據(jù)
如果要在網(wǎng)頁下顯示數(shù)據(jù),還需要匹配不同的格式
@author Tony 18601767221@163.com
@since 20160530 10:11
*/
void printf_format_int_data_type() {
const int num = 10;
printf("%d\n", num);//有符號(hào)10進(jìn)制
printf("%i\n",num);
printf("%u\n",num); //無符號(hào)10進(jìn)制
printf("%o\n",num);//無符號(hào)8進(jìn)制
printf("%x\n",num); //無符號(hào)106進(jìn)制
}
/*
@author Tony 18601767221@163.com
@since 20160530 21:53
*/
void printf_format_int_unsinged() {
unsigned short int uvalue = 65535;
short int num = 123;
printf("uvalue =%hu\tnum=%hd",uvalue,num);
}
printf在打印輸出浮點(diǎn)數(shù)時(shí),整數(shù)全部輸出,默許保持小數(shù)點(diǎn)后6位,可以依照小數(shù)和指數(shù)(天文數(shù)字使用指數(shù)存儲(chǔ)節(jié)儉內(nèi)存)計(jì)數(shù)法兩種方式,同時(shí)可以控制輸出的小數(shù)位數(shù)和寬度:
#include <stdio.h>
/*
輸出指定格式的浮點(diǎn)數(shù)數(shù)據(jù)
@author Tony 18601767221@163.com
@since 20160530 10:06
*/
void printf_format_double() {
const double num = 3.14159265359;
printf("num=%.2f\n", num);//小數(shù)點(diǎn)后保存兩位
printf("num=%030.10f\n",num);//寬度為30,不足用0補(bǔ)齊
//指數(shù)表示
double depth = 1234567000000.0;
printf("depth=%e\n",depth);//指數(shù)表示
double value = 1.23456789;// %g 自動(dòng)選擇寬度少的顯示數(shù)據(jù) %f.%e
printf("value=%f\tvalue=%e\tvalue=%g",value,value,value);
}
printf在輸出字符時(shí)通過%c格式符來輸出,同時(shí)提供了putchar()函數(shù)來輸出1個(gè)字符:
#include <stdio.h>
/*
格式化輸出字符
@author Tony 186017672212163.com
@since 20160530 10:15
*/
void printf_char() {
char ch = 'A';
printf("ch=%c\n",ch);
putchar(ch);
}
printf在輸出字符串時(shí),可以通過sprintf函數(shù)實(shí)現(xiàn)將字符串依照指定的格式拼接:
/*
輸出指定格式的字符串?dāng)?shù)據(jù)
@author Tony 18601767221@163.com
@since 20160530 10:08
*/
void printf_format_string() {
char str[100] = "calc"; //輸出字符串
printf("%s\n",str);
}
/*
使用sprintf函數(shù)實(shí)現(xiàn)字符串拼接
@author Tony 18601767221@163.com
@since 20160530 10:32
*/
void sprintf_string_append() {
char command[100] = { 0 };
sprintf(command, "color %c%c", '4', 'f');//將整數(shù) 實(shí)數(shù)和字符串整合到1個(gè)字符串
printf("整合的結(jié)果為%s\n", command);
system(command);
system("pause");
char com[10] = "task";
char mand[10] = "listerror";
//command = com + mand; C語言沒有Java語言中的字符串以加號(hào)的方式拼接
/*
%s%s表示字符串拼接
%.4s 從左側(cè)截取4位,只能從左側(cè)截取(從某1地址從左向右開始截取)
-左側(cè)對(duì)齊
*/
sprintf(command,"%s%.4s",com,mand);//
printf("%s\n",command);
system(command);
system("pause");
}
使用sprintf函數(shù)結(jié)合字符串指針實(shí)現(xiàn)身份證的誕生日期信息獲得
/*
通過sprintf截取身份證的出身年月日
@author Tony 18601767221@163.com
@since 20160601 14:29
*/
void sprintf_id() {
char id[19] = "421023198902345678"; //字符串是以\0結(jié)尾 因此要多出1個(gè)字符長度
printf("身份證號(hào)為%s",id);
char bornDate[9] = {0}; //初始化1個(gè)字符串保存誕生日期
sprintf(bornDate,"%-.8s",id+6);//地址向后移動(dòng)6位
printf("出身年月日為%s\n",bornDate);
}
printf()經(jīng)常使用輸出數(shù)據(jù)類型的格式總結(jié):
格式符 | 輸出效果 |
---|---|
%d | 有符號(hào)10進(jìn)制整數(shù) |
%lld | 有符號(hào)10進(jìn)制整數(shù)(long long) |
%#o | 無符號(hào)8進(jìn)制整數(shù)(#表明進(jìn)制) |
%#x | 無符號(hào)106進(jìn)制整數(shù)(#表明進(jìn)制) |
%u | 無符號(hào)10進(jìn)制整數(shù) |
%llu | 無符號(hào)10進(jìn)制整數(shù)(long long)用于存儲(chǔ)身份證號(hào) |
%c | 字符 |
%s | 字符串 |
%p | 指針地址 |
%f | 浮點(diǎn)數(shù) |
%a | 106進(jìn)制浮點(diǎn)數(shù) |
%e | 指數(shù)情勢(shì)的浮點(diǎn)數(shù) |
%g | f和e相比寬度更小的浮點(diǎn)數(shù) |
歡迎掃描下方的2維碼,關(guān)注微信公眾服務(wù)號(hào)-藝無止境,分享IT技術(shù)干貨。