新聞中心
在C語言中,取絕對值是一個常見的操作。在Linux系統(tǒng)下,C語言也可以輕松地實現取絕對值的操作。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:主機域名、虛擬空間、營銷軟件、網站建設、拱墅網站維護、網站推廣。
一、使用絕對值函數
C語言標準庫中提供了一個函數abs(),專用于取整數類型的絕對值。
使用該函數,需要包含頭文件stdlib.h。
下面是一個使用abs()函數實現取絕對值的例子:
“`c
#include
#include
int mn()
{
int a = -5;
printf(“a的絕對值為:%d\n”, abs(a));
return 0;
}
“`
運行結果為:
“`
a的絕對值為:5
“`
需要注意的是,abs()函數只能用于取整數類型的絕對值。如果要取浮點類型的絕對值,需要使用fabs()函數,并且需要包含頭文件math.h。
二、使用條件運算符
除了使用abs()函數外,還可以使用條件運算符實現取絕對值。
條件運算符有三個運算符:問號( ? )、冒號( : )和括號( ( ) ),語法形式為:
`exp1 ? exp2 : exp3`
該運算符的含義是,當exp1成立時執(zhí)行exp2,否則執(zhí)行exp3。
使用條件運算符可以將負數變?yōu)槠湎喾磾?,從而實現取絕對值的操作。
下面是一個使用條件運算符實現取絕對值的例子:
“`c
#include
int mn()
{
int a = -5;
int b = a >= 0 ? a : -a;
printf(“a的絕對值為:%d\n”, b);
return 0;
}
“`
運行結果為:
“`
a的絕對值為:5
“`
相關問題拓展閱讀:
- c語言絕對值用法,函數調用
- linux操作系統(tǒng)上c語言編程入門怎么解決
- c語言絕對值用法
c語言絕對值用法,函數調用
#include
int
main(void)
{
int
x,y;
scanf(“%d”,&x);
printf(“%d”,x*2+1);
getch();
return
0;
}
main函數里直接用還是要另外要建一個函數?什麼意思,main()試標準調用函
數。浮點類型,float(6為有效數字),double(10為有效數字),longdouble三種,在賦予變量為浮點數時使用。
絕對值:
整數用abs()函數
例如:
#include
#include
int
main()
{
int
a,b;
scanf(“%d”,&a);
b=abs(a);
printf(“%d”,b);
return
0;
}
輸入-10,輸出10。
有小數的(即浮點型)用fabs()函數
例如:
#include
#include
int
main()
{
double
a,b;
scanf(“%lf”,&a);
b=fabs(a);
printf(“%lf”,b);
return
0;
}
輸入-1.2,輸出1.2
linux操作系統(tǒng)上c語言編程入門怎么解決
Linux程序設計入門–進程介紹
Linux下進程的創(chuàng)建
前言:
這篇文章是用來介紹在Linux下和進程相關的各個概念.我們將會學到:
進程的概念
進程的身份
進程的創(chuàng)建
守護進程的創(chuàng)建
—-
1。進程的概念
Linux操作系統(tǒng)是面向多用戶的.在同一時間可以有許多用戶向操作系統(tǒng)發(fā)出各種命
令.那么操作系統(tǒng)是怎么實現多用戶的環(huán)境呢? 在現代的操作系統(tǒng)里面,都有程序和進程
的概念.那么什么是程序,什么是進程呢? 通俗的講程序是一個包含可以執(zhí)行代碼的文件
,是一個靜態(tài)的文件.而進程是一個開始執(zhí)行但是還毀模沒有結束的程序的實例.就是可執(zhí)行文
件的具體實現. 一個程序可能有許多進程,而每一個進程又可以有許多子進程.依次循環(huán)
下去,而產生子孫進程. 當程序被系統(tǒng)調用到內存以后,系統(tǒng)會給程序分配一定的資源(內
存,設備等等)然后進行一系列的復雜操作,使程序變成進程以供系統(tǒng)調用.在系統(tǒng)里面只
有進程沒有程序,為了區(qū)分各個不同的進程,系統(tǒng)給每一喊迅個進程分配了一個ID(就象我們的
身份證)以便識別. 為了充分的利用資源,系統(tǒng)還對進程區(qū)分了不同的狀態(tài).將進程分為新
建,運行,阻塞,就緒和完成五個狀態(tài). 新建表示進程正在被創(chuàng)建,運行是進程正在運行,阻
塞是進程正在等待某一個事件發(fā)生,就緒是表示系統(tǒng)正在等待CPU來執(zhí)行命令,而完成表示
進程已經結束了系統(tǒng)正在回收資源. 關于進程五個狀態(tài)的詳細解說我們可以看《操作系
統(tǒng)》上面有詳細的解說。
2。進程的標志
上面我們知道了進程都有一個ID,那么我們怎么得到進程的ID呢?系統(tǒng)調用getpid可
以得到進程的ID,而getppid可以得到父進程(創(chuàng)建調用該函數進程的進程)的ID.
#include
pid_t getpid(void);
pid_t getppid(void);
進程是為程序服務的,而程序是為了用戶服務的.系統(tǒng)為了找到進程的用戶名,還為進程和
用戶建立聯系.這個用戶稱為進程的所有者.相應的每一個用戶也有一個用戶ID.通過系統(tǒng)
調用getuid可以得到進程的所有者的ID.由于進程要纖滲緩用到一些資源,而Linux對系統(tǒng)資源是
進行保護的,為了獲取一定資源進程還有一個有效用戶ID.這個ID和系統(tǒng)的資源使用有關
,涉及到進程的權限. 通過系統(tǒng)調用geteuid我們可以得到進程的有效用戶ID. 和用戶ID
相對應進程還有一個組ID和有效組ID系統(tǒng)調用getgid和getegid可以分別得到組ID和有效
組ID
#include
#include
uid_t getuid(void);
uid_t geteuid(void);
gid_t getgid(void);
git_t getegid(void);
有時候我們還會對用戶的其他信息感興趣(登錄名等等),這個時候我們可以調用getpwui
d來得到.
struct passwd {
char *pw_name; /* 登錄名稱 */
char *pw_passwd; /* 登錄口令 */
uid_t pw_uid; /* 用戶ID */
gid_t pw_gid; /* 用戶組ID */
char *pw_gecos; /* 用戶的真名 */
char *pw_dir; /* 用戶的目錄 */
char *pw_shell; /* 用戶的SHELL */
};
#include
#include
struct passwd *getpwuid(uid_t uid);
下面我們學習一個實例來實踐一下上面我們所學習的幾個函數:
#include
#include
#include
#include
int main(int argc,char **argv)
{
pid_t my_pid,parent_pid;
uid_t my_uid,my_euid;
gid_t my_gid,my_egid;
struct passwd *my_info;
my_pid=getpid();
parent_pid=getppid();
my_uid=getuid();
my_euid=geteuid();
my_gid=getgid();
my_egid=getegid();
my_info=getpwuid(my_uid);
printf(“Process ID:%ld/n”,my_pid);
printf(“Parent ID:%ld/n”,parent_pid);
printf(“User ID:%ld/n”,my_uid);
printf(“Effective User ID:%ld/n”,my_euid);
printf(“Group ID:%ld/n”,my_gid);
printf(“Effective Group ID:%ld/n”,my_egid):
if(my_info)
{
printf(“My Login Name:%s/n” ,my_info->pw_name);
printf(“My Password :%s/n” ,my_info->pw_passwd);
printf(“My User ID :%ld/n”,my_info->pw_uid);
printf(“My Group ID :%ld/n”,my_info->pw_gid);
printf(“My Real Name:%s/n” ,my_info->pw_gecos);
printf(“My Home Dir :%s/n”, my_info->pw_dir);
printf(“My Work Shell:%s/n”, my_info->pw_shell);
}
}
3。進程的創(chuàng)建
創(chuàng)建一個進程的系統(tǒng)調用很簡單.我們只要調用fork函數就可以了.
#include
pid_t fork();
當一個進程調用了fork以后,系統(tǒng)會創(chuàng)建一個子進程.這個子進程和父進程不同的地方只
有他的進程ID和父進程ID,其他的都是一樣.就象符進程克隆(clone)自己一樣.當然創(chuàng)建
兩個一模一樣的進程是沒有意義的.為了區(qū)分父進程和子進程,我們必須跟蹤fork的返回
值. 當fork掉用失敗的時候(內存不足或者是用戶的更大進程數已到)fork返回-1,否則f
ork的返回值有重要的作用.對于父進程fork返回子進程的ID,而對于fork子進程返回0.我
們就是根據這個返回值來區(qū)分父子進程的. 父進程為什么要創(chuàng)建子進程呢?前面我們已經
說過了Linux是一個多用戶操作系統(tǒng),在同一時間會有許多的用戶在爭奪系統(tǒng)的資源.有時
進程為了早一點完成任務就創(chuàng)建子進程來爭奪資源. 一旦子進程被創(chuàng)建,父子進程一起從
fork處繼續(xù)執(zhí)行,相互競爭系統(tǒng)的資源.有時候我們希望子進程繼續(xù)執(zhí)行,而父進程阻塞直
到子進程完成任務.這個時候我們可以調用wait或者waitpid系統(tǒng)調用.
#include
#include
pid_t wait(int *stat_loc);
pid_t waitpid(pid_t pid,int *stat_loc,int options);
wait系統(tǒng)調用會使父進程阻塞直到一個子進程結束或者是父進程接受到了一個信號.如果
沒有父進程沒有子進程或者他的子進程已經結束了wait回立即返回.成功時(因一個子進
程結束)wait將返回子進程的ID,否則返回-1,并設置全局變量errno.stat_loc是子進程的
退出狀態(tài).子進程調用exit,_exit 或者是return來設置這個值. 為了得到這個值Linux定
義了幾個宏來測試這個返回值.
WIFEXITED:判斷子進程退出值是非0
WEXITSTATUS:判斷子進程的退出值(當子進程退出時非0).
WIFSIGNALED:子進程由于有沒有獲得的信號而退出.
WTERMSIG:子進程沒有獲得的信號號(在WIFSIGNALED為真時才有意義).
waitpid等待指定的子進程直到子進程返回.如果pid為正值則等待指定的進程(pid).如果
為0則等待任何一個組ID和調用者的組ID相同的進程.為-1時等同于wait調用.小于-1時等
待任何一個組ID等于pid絕對值的進程. stat_loc和wait的意義一樣. options可以決定
父進程的狀態(tài).可以取兩個值 WNOHANG:父進程立即返回當沒有子進程存在時. WUNTACHE
D:當子進程結束時waitpid返回,但是子進程的退出狀態(tài)不可得到.
父進程創(chuàng)建子進程后,子進程一般要執(zhí)行不同的程序.為了調用系統(tǒng)程序,我們可以使用系
統(tǒng)調用exec族調用.exec族調用有著5個函數.
#include
int execl(const char *path,const char *arg,…);
int execlp(const char *file,const char *arg,…);
int execle(const char *path,const char *arg,…);
int execv(const char *path,char *const argv);
int execvp(const char *file,char *const argv):
exec族調用可以執(zhí)行給定程序.關于exec族調用的詳細解說可以參考系統(tǒng)手冊(man exec
l). 下面我們來學習一個實例.注意編譯的時候要加 -lm以便連接數學函數庫.
#include
#include
#include
#include
#include
#include
void main(void)
{
pid_t child;
int status;
printf(“This will demostrate how to get child status/n”);
if((child=fork())==-1)
{
printf(“Fork Error :%s/n”,strerror(errno));
exit(1);
}
else if(child==0)
{
int i;
printf(“I am the child:%ld/n”,getpid());
for(i=0;i
#include
#include
#include
#include
#include
#include
/* Linux 的默任個人的郵箱地址是 /var/spool/mail/用戶的登錄名 */
#define MAIL “/var/spool/mail/hoyt”
/* 睡眠10秒鐘 */
#define SLEEP_TIME 10
main(void)
{
pid_t child;
if((child=fork())==-1)
{
printf(“Fork Error:%s/n”,strerror(errno));
exit(1);
}
else if(child>0)
while(1);
if(kill(getppid(),SIGTERM)==-1)
{
printf(“Kill Parent Error:%s/n”,strerror(errno));
exit(1);
}
{
int mailfd;
while(1)
{
if((mailfd=open(MAIL,O_RDON))!=-1)
{
fprintf(stderr,”%s”,”7″);
close(mailfd);
}
sleep(SLEEP_TIME);
}
}
}
你可以在默認的路徑下創(chuàng)建你的郵箱文件,然后測試一下這個程序.當然這個程序還有很
多地方要改善的.我們后面會對這個小程序改善的,再看我的改善之前你可以嘗試自己改
善一下.比如讓用戶指定郵相的路徑和睡眠時間等等.相信自己可以做到的.動手吧,勇敢
的探險者.
好了進程一節(jié)的內容我們就先學到這里了.進程是一個非常重要的概念,許多的程序都會
用子進程.創(chuàng)建一個子進程是每一個程序員的基本要求!
c語言絕對值用法
abs()求得是正數的絕對值。
fabs()求得是浮點數的絕對值。
fabs和abs都是表示取絕對值,不過參數頃慧不同,返回的類型也不同,返冊氏回類型和參數雀姿答也不同,fbas(double),abs(int)
chazhi=fabs(A-B)
確保A,B是dobule類型的浮點數
linux c 取絕對值的介紹就聊到這里吧,感謝你花時間閱讀本站內容,更多關于linux c 取絕對值,Linux C中如何取絕對值,c語言絕對值用法,函數調用,linux操作系統(tǒng)上c語言編程入門怎么解決,c語言絕對值用法的信息別忘了在本站進行查找喔。
成都服務器托管選創(chuàng)新互聯,先上架開通再付費。
創(chuàng)新互聯(www.cdcxhl.com)專業(yè)-網站建設,軟件開發(fā)老牌服務商!微信小程序開發(fā),APP開發(fā),網站制作,網站營銷推廣服務眾多企業(yè)。電話:028-86922220
標題名稱:Linux C中如何取絕對值 (linux c 取絕對值)
路徑分享:http://m.5511xx.com/article/ccodpsd.html


咨詢
建站咨詢
