ACM实用C语言函数

来源:互联网 发布:高中理科辅导软件 编辑:程序博客网 时间:2024/04/30 16:07

函数名: abs功  能: 求整数的绝对值
用  法
: int abs(int i
);
程序例
:
#include <stdio.h
>
#include <math.h
>

int main(void
)
{
 
int number = -1234
;

 
printf("number: %d  absolute value: %d/n", number, abs(number
));
 
return 0
;
}
函数名: atof
功  能: 把字符串转换成浮点数
用  法
: double atof(const char *nptr);
程序例:
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
  
float f;
  
char *str = "12345.67";

  
f = atof(str);
  
printf("string = %s float = %f/n", str, f);
  
return 0;
}



函数名: atoi
功  能: 把字符串转换成长整型数
用  法
: int atoi(const char *nptr);
程序例:
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
  
int n;
  
char *str = "12345.67";

  
n = atoi(str);
  
printf("string = %s integer = %d/n", str, n);
  
return 0;
}



函数名: atol
功  能: 把字符串转换成长整型数
用  法
: long atol(const char *nptr);
程序例:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
  
long l;
  
char *str = "98765432";

  
l = atol(lstr);
  
printf("string = %s integer = %ld/n", str, l);
  
return(0);
}

函数名: bsearch
功  能: 二分法搜索
用  法
: void *bsearch(const void *key, const void *base, size_t *nelemsize_t width, int(*fcmp)(const void *, const *));
程序例:

#include <stdlib.h>
#include <stdio.h>

#define NELEMS(arr) (sizeof(arr) / sizeof(arr[0]))

int numarray[] = {123, 145, 512, 627, 800, 933};

int numeric (const int *p1, const int *p2)
{
  
return(*p1 - *p2);
}

int lookup(int key)
{
  
int *itemptr;

  
/* The cast of (int(*)(const void *,const void*))
      is needed to avoid a type mismatch error at
      compile time */
  
itemptr = bsearch (&key, numarray, NELEMS(numarray),
     
sizeof(int), (int(*)(const void *,const void *))numeric);
  
return (itemptr != NULL);
}

int main(void)
{
  
if (lookup(512))
     
printf("512 is in the table./n");
  
else
     
printf("512 isn't in the table./n");

  
return 0;
}
函数名: ceil
功  能: 向上舍入
用  法
: double ceil(double x);
程序例:

#include <math.h>
#include <stdio.h>

int main(void)
{
  
double number = 123.54;
  
double down, up;

  
down = floor(number);
  
up = ceil(number);

  
printf("original number     %5.2lf/n", number);
  
printf("number rounded down %5.2lf/n", down);
  
printf("number rounded up   %5.2lf/n", up);

  
return 0;
}


函数名: div功  能: 将两个整数相除, 返回商和余数
用  法
: div_t (int number, int denom);
程序例:

#include <stdlib.h>
#include <stdio.h>

div_t x;

int main(void)
{
  
x = div(10,3);
  
printf("10 div 3 = %d remainder %d/n", x.quot, x.rem);

  
return 0;
}
函数名: ecvt
功  能: 把一个浮点数转换为字符串
用  法
: char ecvt(double value, int ndigit, int *decpt, int *sign);
程序例:

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
  
char *string;
  
double value;
  
int dec, sign;
  
int ndig = 10;

  
clrscr();
  
value = 9.876;
  
string = ecvt(value, ndig, &dec, &sign);
  
printf("string = %s      dec = %d /
   sign = %d/n"
, string, dec, sign);

  
value = -123.45;
  
ndig= 15;
  
string = ecvt(value,ndig,&dec,&sign);
  
printf("string = %s dec = %d sign = %d/n",
  
string, dec, sign);


  
value = 0.6789e5; /* scientific
   notation */
  
ndig = 5;
  
string = ecvt(value,ndig,&dec,&sign);
  
printf("string = %s           dec = %d/
   sign = %d/n"
, string, dec, sign);

  
return 0;
}

函数名: exp功  能: 指数函数
用  法
: double exp(double x);
程序例:

#include <stdio.h>
#include <math.h>

int main(void)
{
  
double result;
  
double x = 4.0;

  
result = exp(x);
  
printf("'e' raised to the power /
   of %lf (e ^ %lf) = %lf/n"
,
  
x, x, result);

  
return 0;
}

函数名: fabs
功  能: 返回浮点数的绝对值
用  法
: double fabs(double x);
程序例:

#include <stdio.h>
#include <math.h>

int main(void)
{
  
float  number = -1234.0;

  
printf("number: %f  absolute value: %f/n",
  
number, fabs(number));
  
return 0;
}

函数名: fcvt
功  能: 把一个浮点数转换为字符串
用  法
: char *fcvt(double value, int ndigit, int *decpt, int *sign);
程序例:

#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

int main(void)
{
  
char *string;
  
double value;
  
int dec, sign;
  
int ndig = 10;

  
clrscr();
  
value = 9.876;
  
string = ecvt(value, ndig, &dec, &sign);
  
printf("string = %s      dec = %d /
          sign = %d/n"
, string, dec, sign);

  
value = -123.45;
  
ndig= 15;
  
string = ecvt(value,ndig,&dec,&sign);
  
printf("string = %s dec = %d sign = %d/n",
         
string, dec, sign);


  
value = 0.6789e5; /* scientific
                        notation */
  
ndig = 5;
  
string = ecvt(value,ndig,&dec,&sign);
  
printf("string = %s           dec = %d/
          sign = %d/n"
, string, dec, sign);

  
return 0;
}

函数名: floor
功  能: 向下舍入
用  法
: double floor(double x);
程序例:

#include <stdio.h>
#include <math.h>

int main(void)
{
  
double number = 123.54;
  
double down, up;

  
down = floor(number);
  
up = ceil(number);

  
printf("original number     %10.2lf/n",
         
number);
  
printf("number rounded down %10.2lf/n",
         
down);
  
printf("number rounded up   %10.2lf/n",
         
up);

  
return 0;
}

函数名: fmod
功  能: 计算xy的模, x/y的余数
用  法
: double fmod(double x, double y);
程序例:

#include <stdio.h>
#include <math.h>

int main(void)
{
  
double x = 5.0, y = 2.0;
  
double result;

  
result = fmod(x,y);
  
printf("The remainder of (%lf / %lf) is /
          %lf/n"
, x, y, result);
  
return 0;
}
函数名: gcvt
功  能: 把浮点数转换成字符串
用  法
: char *gcvt(double value, int ndigit, char *buf);
程序例:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
  
char str[25];
  
double num;
  
int sig = 5; /* significant digits */

   /* a regular number */
  
num = 9.876;
  
gcvt(num, sig, str);
  
printf("string = %s/n", str);

  
/* a negative number */
  
num = -123.4567;
  
gcvt(num, sig, str);
  
printf("string = %s/n", str);

  
/* scientific notation */
  
num = 0.678e5;
  
gcvt(num, sig, str);
  
printf("string = %s/n", str);

  
return(0);
}
函数名: itoa
功  能: 把一整数转换为字符串
用  法
: char *itoa(int value, char *string, int radix);
程序例:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
  
int number = 12345;
  
char string[25];

  
itoa(number, string, 10);
  
printf("integer = %d string = %s/n", number, string);
  
return 0;
}

函数名: labs
功  能: 取长整型绝对值
用  法
: long labs(long n);
程序例:

#include <stdio.h>
#include <math.h>

int main(void)
{
  
long result;
  
long x = -12345678L;

  
result= labs(x);
  
printf("number: %ld abs value: %ld/n",
     
x, result);

  
return 0;
}




函数名: ldexp
功  能: 计算value*2的幂
用  法
: double ldexp(double value, int exp);
程序例:

#include <stdio.h>
#include <math.h>

int main(void)
{
  
double value;
  
double x = 2;

  
/* ldexp raises 2 by a power of 3
      then multiplies the result by 2   */
  
value = ldexp(x,3);
  
printf("The ldexp value is: %lf/n",
     
value);

  
return 0;
}



函数名: ldiv
功  能: 两个长整型数相除, 返回商和余数
用  法
: ldiv_t ldiv(long lnumer, long ldenom);
程序例:

/* ldiv example */

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
  
ldiv_t lx;

  
lx = ldiv(100000L, 30000L);
  
printf("100000 div 30000 = %ld remainder %ld/n", lx.quot, lx.rem);
  
return 0;
}




函数名: lfind
功  能: 执行线性搜索
用  法
: void *lfind(void *key, void *base, int *nelem, int width,
     
int (*fcmp)());
程序例:

#include <stdio.h>
#include <stdlib.h>

int compare(int *x, int *y)
{
  
return( *x - *y );
}

int main(void)
{
  
int array[5] = {35, 87, 46, 99, 12};
  
size_t nelem = 5;
  
int key;
  
int *result;

  
key = 99;
  
result = lfind(&key, array, &nelem,
       
sizeof(int), (int(*)(const void *,const void *))compare);
  
if (result)
     
printf("Number %d found/n",key);
  
else
     
printf("Number %d not found/n",key);

  
return 0;
}

函数名: log功  能: 对数函数ln(x)
用  法: double log(double x);
程序例:

#include <math.h>
#include <stdio.h>

int main(void)
{
  
double result;
  
double x = 8.6872;

  
result = log(x);
  
printf("The natural log of %lf is %lf/n", x, result);

  
return 0;
}



函数名: log10
功  能: 对数函数log
用  法: double log10(double x);
程序例:

#include <math.h>
#include <stdio.h>

int main(void)
{
  
double result;
  
double x = 800.6872;

  
result = log10(x);
  
printf("The common log of %lf is %lf/n", x, result);

  
return 0;
}
函数名: lsearch
功  能: 线性搜索用 法: void *lsearch(const void *key, void *base, size_t *nelem,
      
size_t width, int (*fcmp)(const void *, const void *));
程序例:

#include <stdio.h>
#include <stdlib.h>

int compare(int *x, int *y)
{
  
return( *x - *y );
}

int main(void)
{
  
int array[5] = {35, 87, 46, 99, 12};
  
size_t nelem = 5;
  
int key;
  
int *result;

  
key = 99;
  
result = lfind(&key, array, &nelem,
              
sizeof(int), (int(*)(const void *,const void *))compare);
  
if (result)
     
printf("Number %d found/n",key);
  
else
     
printf("Number %d not found/n",key);

  
return 0;
}

函数名: memcpy
功  能: 从源source中拷贝n个字节到目标destin中
用  法: void *memcpy(void *destin, void *source, unsigned n);
程序例:

#include <stdio.h>
#include <string.h>
int main(void)
{
   char src[] = "******************************";
   char dest[] = "abcdefghijlkmnopqrstuvwxyz0123456709";
   char *ptr;
   printf("destination before memcpy: %s/n", dest);
   ptr = memcpy(dest, src, strlen(src));
   if (ptr)
      printf("destination after memcpy:  %s/n", dest);
   else
      printf("memcpy failed/n");
   return 0;
}
函数名
: memset
功  能: 设置s中的所有字节为ch, s数组的大小由n给定
用  法
: void *memset(void *s, char ch, unsigned n);
程序例:

#include <string.h>
#include <stdio.h>
#include <mem.h>

int main(void)
{
  
char buffer[] = "Hello world/n";

  
printf("Buffer before memset: %s/n", buffer);
  
memset(buffer, '*', strlen(buffer) - 1);
  
printf("Buffer after memset:  %s/n", buffer);
  
return 0;
}
函数名: pow功  能: 指数函数(xy次方)
用  法: double pow(double x, double y);
程序例:

#include <math.h>
#include <stdio.h>

int main(void)
{
  
double x = 2.0, y = 3.0;

  
printf("%lf raised to %lf is %lf/n", x, y, pow(x, y));
  
return 0;
}


函数名: pow10
功  能: 指数函数(10p次方)
用  法: double pow10(int p);
程序例:

#include <math.h>
#include <stdio.h>

int main(void)
{
  
double p = 3.0;

  
printf("Ten raised to %lf is %lf/n", p, pow10(p));
  
return 0;
}

函数名: qsort功  能: 使用快速排序例程进行排序用  法: void qsort(void *base, int nelem, int width, int (*fcmp)());程序例:#include <stdio.h>#include <stdlib.h>#include <string.h>int sort_function( const void *a, const void *b);char list[5][4] = { "cat", "car", "cab", "cap", "can" };int main(void){   int  x;   qsort((void *)list, 5, sizeof(list[0]), sort_function);   for (x = 0; x < 5; x++)      printf("%s/n", list[x]);   return 0;}int sort_function( const void *a, const void *b){   return( strcmp(a,b) );}

函数名: sqrt
功  能: 计算平方根
用  法
: double sqrt(double x);
程序例:

#include <math.h>
#include <stdio.h>

int main(void)
{
   
double x = 4.0, result;

   
result = sqrt(x);
   
printf("The square root of %lf is %lf/n", x, result);
   
return 0;
}
函数名: sscanf
功  能: 执行从字符串中的格式化输入
用  法
: int sscanf(char *string, char *format[,argument,...]);
程序例:

#include <stdio.h>
#include <conio.h>

int main(void)
{
  
char label[20];
  
char name[20];
  
int entries = 0;
  
int loop, age;
  
double salary;

  
struct Entry_struct
   {
     
char  name[20];
     
int   age;
     
float salary;
   }
entry[20];

/* Input a label as a string of characters restricting to 20 characters */
  
printf("/n/nPlease enter a label for the chart: ");
  
scanf("%20s", label);
  
fflush(stdin);  /* flush the input stream in case of bad input */

/* Input number of entries as an integer */
  
printf("How many entries will there be? (less than 20) ");
  
scanf("%d", &entries);
  
fflush(stdin);   /* flush the input stream in case of bad input */

/* input a name restricting input to only letters upper or lower case */
  
for (loop=0;loop<entries;++loop)
   {
     
printf("Entry %d/n", loop);
     
printf("  Name   : ");
     
scanf("%[A-Za-z]", entry[loop].name);
     
fflush(stdin);  /* flush the input stream in case of bad input */

/* input an age as an integer */
     
printf("  Age    : ");
     
scanf("%d", &entry[loop].age);
     
fflush(stdin);  /* flush the input stream in case of bad input */

/* input a salary as a float */
     
printf("  Salary : ");
     
scanf("%f", &entry[loop].salary);
     
fflush(stdin); /* flush the input stream in case of bad input */
  
}

/* Input a name, age and salary as a string, integer, and double */
  
printf("/nPlease enter your name, age and salary/n");
  
scanf("%20s %d %lf", name, &age, &salary);


/* Print out the data that was input */
  
printf("/n/nTable %s/n",label);
  
printf("Compiled by %s  age %d  $%15.2lf/n", name, age, salary);
  
printf("-----------------------------------------------------/n");
  
for (loop=0;loop<entries;++loop)
     
printf("%4d | %-20s | %5d | %15.2lf/n",
        
loop + 1,
 
entry[loop].name,
 
entry[loop].age,
 
entry[loop].salary);
  
printf("-----------------------------------------------------/n");
  
return 0;
}
函数名: stpcpy
功  能: 拷贝一个字符串到另一个
用  法
: char *stpcpy(char *destin, char *source);
程序例:

#include <stdio.h>
#include <string.h>

int main(void)
{
  
char string[10];
  
char *str1 = "abcdefghi";

  
stpcpy(string, str1);
  
printf("%s/n", string);
  
return 0;
}




函数名: strcat
功  能: 字符串拼接函数
用  法
: char *strcat(char *destin, char *source);
程序例:

#include <string.h>
#include <stdio.h>

int main(void)
{
  
char destination[25];
  
char *blank = " ", *c = "C++", *Borland = "Borland";

  
strcpy(destination, Borland);
  
strcat(destination, blank);
  
strcat(destination, c);

  
printf("%s/n", destination);
  
return 0;
}




函数名: strchr
功  能: 在一个串中查找给定字符的第一个匹配之处/
用  法
: char *strchr(char *str, char c);
程序例:

#include <string.h>
#include <stdio.h>

int main(void)
{
   
char string[15];
   
char *ptr, c = 'r';

   
strcpy(string, "This is a string");
   
ptr = strchr(string, c);
   
if (ptr)
      
printf("The character %c is at position: %d/n", c, ptr-string);
   
else
      
printf("The character was not found/n");
   
return 0;
}




函数名: strcmp
功  能: 串比较
用  法
: int strcmp(char *str1, char *str2);
程序例:

#include <string.h>
#include <stdio.h>

int main(void)
{
   
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
   
int ptr;

   
ptr = strcmp(buf2, buf1);
   
if (ptr > 0)
      
printf("buffer 2 is greater than buffer 1/n");
   
else
      
printf("buffer 2 is less than buffer 1/n");

   
ptr = strcmp(buf2, buf3);
   
if (ptr > 0)
      
printf("buffer 2 is greater than buffer 3/n");
   
else
      
printf("buffer 2 is less than buffer 3/n");

   
return 0;
}
函数名: strcpy
功  能: 串拷贝用 法: char *strcpy(char *str1, char *str2);
程序例:

#include <stdio.h>
#include <string.h>

int main(void)
{
   
char string[10];
   
char *str1 = "abcdefghi";

   
strcpy(string, str1);
   
printf("%s/n", string);
   
return 0;
}

函数名: strrev
功  能: 串倒转用 法: char *strrev(char *str);
程序例:

#include <string.h>
#include <stdio.h>

int main(void)
{
  
char *forward = "string";

  
printf("Before strrev(): %s/n", forward);
  
strrev(forward);
  
printf("After strrev():  %s/n", forward);
  
return 0;
}
函数名: strset
功  能: 将一个串中的所有字符都设为指定字符
用  法
: char *strset(char *str, char c);
程序例:

#include <stdio.h>
#include <string.h>

int main(void)
{
  
char string[10] = "123456789";
  
char symbol = 'c';

  
printf("Before strset(): %s/n", string);
  
strset(string, symbol);
  
printf("After strset():  %s/n", string);
  
return 0;
}

函数名: strstr
功  能: 在串中查找指定字符串的第一次出现
用  法
: char *strstr(char *str1, char *str2);
程序例:

#include <stdio.h>
#include <string.h>

int main(void)
{
  
char *str1 = "Borland International", *str2 = "nation", *ptr;

  
ptr = strstr(str1, str2);
  
printf("The substring is: %s/n", ptr);
  
return 0;
}



函数名: strtod
功  能: 将字符串转换为double型值
用  法
: double strtod(char *str, char **endptr);
程序例:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
  
char input[80], *endptr;
  
double value;

  
printf("Enter a floating point number:");
  
gets(input);
  
value = strtod(input, &endptr);
  
printf("The string is %s the number is %lf/n", input, value);
  
return 0;
}
函数名: strtol
功  能: 将串转换为长整数
用  法
: long strtol(char *str, char **endptr, int base);
程序例:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
  
char *string = "87654321", *endptr;
  
long lnumber;

  
/* strtol converts string to long integer  */
  
lnumber = strtol(string, &endptr, 10);
  
printf("string = %s  long = %ld/n", string, lnumber);

  
return 0;
}


函数名: strupr
功  能: 将串中的小写字母转换为大写字母
用  法
: char *strupr(char *str);
程序例:

#include <stdio.h>
#include <string.h>

int main(void)
{
  
char *string = "abcdefghijklmnopqrstuvwxyz", *ptr;

  
/* converts string to upper case characters */ ptr = strupr(string);
  
printf("%s/n", ptr);
  
return 0;
}




函数名: swab
功  能: 交换字节
用  法
: void swab (char *from, char *to, int nbytes);
程序例:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

char source[15] = "rFna koBlrna d";
char target[15];

int main(void)
{
  
swab(source, target, strlen(source));
  
printf("This is target: %s/n", target);
  
return 0;
}

函数名: tolower
功  能: 把字符转换成小写字母
用  法
: int tolower(int c);
程序例:

#include <string.h>
#include <stdio.h>
#include <ctype.h>

int main(void)
{
  
int length, i;
  
char *string = "THIS IS A STRING";

  
length = strlen(string);
  
for (i=0; i<length; i++)
   {
      
string[i] = tolower(string[i]);
   }
  
printf("%s/n",string);

  
return 0;
}



函数名: toupper
功  能: 把字符转换成大写字母
用  法
: int toupper(int c);
程序例:

#include <string.h>
#include <stdio.h>
#include <ctype.h>

int main(void)
{
  
int length, i;
  
char *string = "this is a string";

  
length = strlen(string);
  
for (i=0; i<length; i++)
   {
     
string[i] = toupper(string[i]);
   }

  
printf("%s/n",string);

  
return 0;
}