当前位置:文档之家› C语言语法参考大全

C语言语法参考大全

C语言语法参考大全(常用函数03)
--------------------------------------------------------------------------------

函数名: malloc
功 能: 内存分配函数
用 法: void *malloc(unsigned size);
程序例:

#include
#include
#include
#include

int main(void)
{
char *str;

/* allocate memory for string */
/* This will generate an error when compiling */
/* with C++, use the new operator instead. */
if ((str = malloc(10)) == NULL)
{
printf("Not enough memory to allocate buffer");
exit(1); /* terminate program if out of memory */
}

/* copy "Hello" into string */
strcpy(str, "Hello");

/* display string */
printf("String is %s", str);

/* free memory */
free(str);

return 0;
}


printf函数
其功能是向终端(或系统隐含指定的输出设备)输出若干个任意类型的数据。

(1) printf函数的一般形式为:

printf (格式控制字符串,变量1,变量2,…);

格式控制字符串与scanf中的相同。printf函数的第二个及以后的各个参数(若有的话)是变量的名字,而不是变量的地址,因此与scanf的相应参数有所不同。数组名可直接出现在printf的变量位置上,作为printf的参量,是合法的。

与scanf函数一样,printf中的格式说明也是针对不同类型的数据用不同的格式说明。

(2) printf函数中的格式说明:

① d格式说明。用来输出十进制整数,有下列几种用法:

? %d,按整数型数据的实际长度输出,如

printf("%d",123456);

输出:123456

? %md,m 为指定的输出字段的宽度,如果实际数据的位数小于m,则左端补以空格,若大于m,则按实际位数输出。例:

printf("%4d,%4d,%4d",a,b,c);

若a = 123,b = 12345,c = 578,则输出为:

?123,12345,?578

? %ld, 输出长整型数据。如:

long a = 135970;

printf("%ld",a);

输出:135970。如果用%d输出,就会发生错误,对long型数据,应当用%ld格式输出。对长整型数据也可以指定字段宽度,如将上面的printf函数中的"%ld"改为"%8ld",则输出为:

??135970



8列

一个int型数据既可以用%d也可用%ld格式输出。如:

int a = 123;

printf("%ld",123);

输出:123

②o格式符,以八进制数形式输出整数,由于是将内存单元中各位的值(0或1)按八进制的形式输出,因此输出的数据不带符号,即将符号位也作为八进制数的一部分一起输出。例如,-1在内存中的存放形式(以补码存放)为:1 1 11 11 11 11 1111 11,所以有:

int a =-1;

printf("%d,%o",a,a);

这段小程序的输出为:-1,177777。



可见,%o格式说明的输出是将内存中的0、1串按从右到左3位一组的八进制数输出的,不带负号。对于长八进制数可用“%lo”的格式输出。同样也可以指定输出的宽度,如:

printf("%9o",a)的输出数据为:???177777。

③x格式符,以十六进制数形式输出整数,与o格式类似,也可不输出负号。因此有:

int a =-1;

printf("%d,%o,%x",a,a,a);

的输出结果为: -1,177777,ffff

可见,%x格式说明的输出是将内存中的0、1串按从右到左4位一组的十六进制数输出的。也可以用“%lx”输出长整数,及用“%mx”,如“%12x”输出指定字段宽的整数。

④u格式符,用来输出无符号型(unsigned型)数据,以十进制形式输出。

一个无符号型(unsigned型)数据也可以用“%d”格式输出,一个有符号型(int型)数据也可以用“%u”格式输出。具体的输出值按相互赋值的规则处理。无符号型(unsigned型)数据也可以用“%o”或“%x”格式输出。

例2.10

main()

{unsigned int a = 65535;

int b =-2;

printf("a = %d,%o,%x,%u
",a,a,a,a);

 printf("b = %d,%o,%x,%u
",b,b,b,b);

}

运行结果为:

a =-1,177777,ffff,65535

b =-2,177776,fffe,65534

注意:上例中65535在内存中的表示(16位)为:11 11 11 11 11 11 11 11;

⑤ c格式说明。

? %c格式,用来输出一个字符。例:

char ch =a;

printf("%c",ch);

输出字符a。

一个整数,只要它的值在0~255之间,就可以用字符形式输出。在输出前,将该整数转换成相应的ASCII码字符。反之,一个字符数据也可以用整数形式输出。

例2.11

main()

{ char c1 = a;

int i = 97;

printf("%c,%d
",c1,c1);

printf("%c,%d
",i,i);

}

输出结果为:

a,97

a,97

? %mc格式用于指定输出字符宽度,如果有:

printf("%3c",c1);则输出:??a,即c变量输出占3列,前两列补空格。

⑥s格式说明。s格式用来输出一个字符串。有以下几种用法:

? %s,例如:

printf("%s","CHINA");输出:CHINA。

? %ms,输出的字符串占m列,如果字符串本身长度大于m,则突破m限制,将字符串全部输出。若串小于m,则左边补空格。例如:

printf("%7s","CHINA");输出:??CHINA

printf("%3s","CHINA");则突破输出宽度输出:CHINA

? %-ms,如果小于m列,则在m列范围内,字符串向左靠,右边补空格。例:

printf("%-7s","CHINA");输出:CHINA??

printf("%-3s","CHINA");突破输出宽度输出:CHINA??

? %m.ns,输出占m列,但只

取字符串中左边n个字符输出。这n个字符输出在m列的右侧,左补空格。例:

printf("%7.3s","CHINA");输出:????CHI。

? %-m.ns,其中m和n所表示的意义同④,但n个字符输出在m列范围内的左侧,右补空格。如果n>m,则m自动取n的值,以保证n个字符自动正常输出。例:

printf("%-2.3s","CHINA");输出:CHI

⑦f格式说明。f格式用来输出带小数点的单、双精度实数。有下列几种用法:

? %f不指定字段宽度,由系统自动输出相应常量或变量的全部整数部分及6位小数。应注意,单精度实数输出时,有效数字位数一般为7位。而双精度实数输出时,有效数字位数一般为十六位,有6位小数位。

例2.12

main()

{float x,y;

double u,v;

x = 111111.111;y = 222222.222;

u = 1111111111111.111111111;

v = 2222222222222.222222222;

printf("%f
",x+y);

printf("%f
",u+v);

}

运行结果为:

333333.328125

3333333333333.333010

可以看出,输出结果中前一个只有前7位数字是有效数字,而后一个则前16位数字是有效数字。其他位均无意义。

? %m.nf 指定输出的数值共占m位,其中有n位小数。若数值长度小于m,则左端补空格。若数值长度大于m,则按实际数值输出,小数位保留n位。

例:printf("%7.3f",23.456);

输出:’23.456

printf("%7.3",1123.456);

输出:1123.456

? %-m.nf与%m.nf基本相同,只是使输出数值向左端靠,右端补空格。例:

printf("%-10.3f",1111.1111);

输出:1111.111??

⑧e格式符。以指数形式输出实数。可用以下形式:

? %e不指定输出数据所占的宽度和数字部分小数位数,由系统自动指定给出6位小数,指定部分占5列(如e+003),其中:“e”占一位,指数的符号占一位,指数占三位。数值按标准化指数形式输出(即小数点前必须有且仅有一位非零数字)。例如:

printf("%e",1234.56);

输出: 1.234560e+003。也就是说,用%e格式输出的实数共占13列字符宽度。



8列 5列

? %m.ne和%-m.ne,其中n指尾数部分的小数位数。m为整个数值输出所至少占有的宽度。当未指定n时,自动使n = 6,整个数据占13列输出,可能会突破m的限制,而按实际长度输出。

例:printf("% 12.4e",1234.56);

输出:1.2346e+003(四舍五入)

⑨g格式说明。用来输出实数,它根据实数大小,自动选f格式或e格式(选择占宽度较小的一种输出),且不输出无意义的零。例如,若a = 123.456,则

printf("%f%e % g",a,a,a);

输出如下:

123.456000 1.234560e+002 123.456

用%f格式输出占10列。用%e格

式输出占13列,用%g格式时,自动从上面两种格式中选择较短者(今为%f格式为短),故占10列,且按%f格式用小数点形式输出,最后三个小数位“0”为无意义的0,不输出。%g格式用的较少。



puts 函数
函数名: puts
功 能: 送一字符串到流中
用 法: int puts(char *string);
程序例:

#include
int main(void)
{
char string[] = "This is an example output string";
puts(string);
return 0;
}


函数名: rectangle
功 能: 画一个矩形
用 法: void far rectangle(int left, int top, int right, int bottom);
程序例:

#include
#include
#include
#include

int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int left, top, right, bottom;

/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");

/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}

left = getmaxx() / 2 - 50;
top = getmaxy() / 2 - 50;
right = getmaxx() / 2 + 50;
bottom = getmaxy() / 2 + 50;

/* draw a rectangle */
rectangle(left,top,right,bottom);

/* clean up */
getch();
closegraph();
return 0;
}
函数名: rewind
功 能: 将文件指针重新指向一个流的开头
用 法: int rewind(FILE *stream);
程序例:

#include
#include

int main(void)
{
FILE *fp;
char *fname = "TXXXXXX", *newname, first;

newname = mktemp(fname);
fp = fopen(newname,"w+");
fprintf(fp,"abcdefghijklmnopqrstuvwxyz");
rewind(fp);
fscanf(fp,"%c",&first);
printf("The first character is: %c",first);
fclose(fp);
remove(newname);

return 0;
}



scanf函数
(1) scanf函数的一般形式:

scanf(格式控制字符串,地址1,地址2,…);

格式控制字符串是由双撇号括起来的字符串,它主要由两种类型的字符组成:

① 格式说明符由“%”和格式字符组成,如%c,%d,%s,%f等。其作用是将输入的数据转换为指定的格式,赋给scanf的二个参量(是地址1)所指定的内存单元(可能一次使用多个)中。格式说明以“%”字符为标志。

② 普通字符,是需要用户在输入时原样输入的字符。例如:

scanf("%d%d",&a,&b);

scanf("%f,%f",&x,&y);

都是合法的格式输入语句。但在键入数据时略有区别,请看下例:

main()

{ int a, b, c, d;

scanf("%d %d",&a,&b);

scanf("%d,%d",&c,&d);

printf("%d,%d,%d,%d
",a,b,c,d);


printf("%d %d %d %d",a,b,c,d);

}

运行时,按以下方式输入a,b,c,d的值:

3 4↙ 5,6↙

输出: 3,4,5,6

3 4 5 6

&a,&b,&c,&d中的&是取地址运算符,&a指a的地址。但要注意,上面的两个输入格式在输入时有所不同。“%d %d”表示按十进制整数形式输入两个数据。输入数据时,两个数据之间以一个或多个空格间隔,也可以用回车键,跳格键tab。下面的输入均合法:

? 3 4

? 3 ↙

4

? 3(按tab健)

4↙

但两个数据间不能用逗号等其他的字符。

而“%d,%d”亦表示按十进制输入两个数据。要求在输入数据时,两个数据间一定以一个逗号“,”作为间隔符,因此,上例中c和d的值的输入应按下列形式输入:

5,6

(2) scanf中可用的格式说明:

对应不同类型数据的输入,scanf的格式控制字符串中可以使用不同的格式字符构成不同的格式说明。常用的格式说明如下:

格式字符串 功能

%d 用来输入十进制整数,相应参数应为整数指针。

%o 用来输入八进制整数(前导零可有可无),相应参数应为整数指针。

%x 用来输入十六进制整数(前导零可有可无)。

%c 用来输入单个字符。

%s 用来输入字符串,将字符串送入一个字符数组中,在输入时以非

空白字符开始,以第一个空白字符结束。字符串以串结束标志

为其最后一个字符。

%f 用来输入一个浮点实数,可以用小数形式或指数形式输入。

%e 与%f的作用相同,e与f可以替换使用。

scanf附加的格式说明字符:

字符 说明

l 用于输入长整型数据,(可用%ld,%lo,%lx)以及双精度型数

据(如%lf或%le)。

h 用于输入短整型数据(可用%hd,%ho,%hx)。

域宽(为整数) 指定输入数据所占宽度(列数)。

* 表示本输入项在读入后不赋给任何相应的变量。

① 当指定输入数据所占列数后,系统将自动按它截取所需数据。如:

scanf("%3d %3d %3d",&a,&b,&c);

输入123456789↙,系统将自动地把123赋给a,456赋给b,789赋给c。

scanf("%3c",ch);

则可输入3个字符,但ch必须是字符数组或字符指针。

② %后的“*”附加说明符,用来跳过它相应的数据。例如:

scanf("%2d %*3d %2d",&a,&b

);

如果输入如下信息:

12 345 67↙

将12赋给a,67赋给b,第二个数据“345”被跳过,不赋给任何变量。在利用现存的数据时,有时不需要其中某些数据,可用此法“跳过”它们。

③ 输入数据时,精度可以规定,如:

scanf("%.2f",&a);

当输入1234.567时,a的值将为1234.57,自动取输入数据的小数点后两位数字。

(3) 使用scanf函数时应注意的问题:

① scanf函数中的第二个及以后各个参量是变量地址,而不是变量名。例如,设a 、 b 分别为整型变量和浮点型变量,则

scanf("%d %f",&a,&b);

是合法的。而

scanf("%d %f",a,b);

是非法的。

只有在字符数组的情况下例外,因为字符数组名实际是数组的第一个字符的地址。例如,若name[20]为一个字符数组,则

scanf("% s",name);

合法。而

scanf("% s",&name);

为非法。name为数组时,不需在其前面加“&”。

② 在用“%c”格式输入字符时,空格字符和“转义字符”都将作为有效的字符输入。例如:

scanf("%c%c%c",&c1,&c2,&c3);

如果输入a?b?c↙,则字符a送给c1,字符?送给c2,字符b送给c3。因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔,因此?作为下一个字符送给c2。同时应注意,上述语句中的格式控制字符串"%c%c%c"中,格式说明符之间无逗号分割。如果有空格,用形式为"%c %c %c"的格式控制字符串作替换,按上述输入格式,那么a、b、c这三个字符将分别赋给变量c1、c2、c3。

③ 在输入数据时,遇到下列情况时,输入数据认为结束:

? 遇空格或按“回车”或“跳格”(TAB)键;

? 遇宽度结束,如“%3d”,只取3列;

? 遇非法输入,如

scanf("%d%c%f",&a,&b,&c);

若输入

123a123o.26↙

ˉ ˉ ˉ

a b c

第一个数据对应%d格式输入123之后遇字母a,因此认为数值123后已没有数字了,第一个数据到此结束,把123送给变量a,字符a送给变量b,由于%c只要求输入一个字符,因此,a后面不需要空格,后面的数值应送给变量c。如果由于疏忽而把本来应为1230.26错打成123o.26,由于123后面出现了英文字母“o”,就认为此数据结束,则将会把123送给c,后面的数据将不被接受。

④当使用多个scanf()函数连续给多个字符变量赋值时,例如:

main()

{

char c1,c2;

scanf(“%c”,&c1);

scanf(“%c”,&c2);

printf(“c1 is %c,c2 is %c”,c1,c2);

}

运行该程序,输入一个字符A后回车(要完成scanf()函数输入必须回车),在执行

scanf(“%c”,&c1)时,给变量c1赋值A,但回车符仍

留在缓冲区内;执行输入语句

scanf(“%c”,&c2)时,变量c2将接收一个回车符而使输入结束。输入结果中c2没有赋值。如果输入AB后回车,那么输出结果为:c1 is A,c2 is B



函数名: setbkcolor
功 能: 用调色板设置当前背景颜色
用 法: void far setbkcolor(int color);
程序例:

#include
#include
#include
#include

int main(void)
{
/* select a driver and mode that supports */
/* multiple background colors. */
int gdriver = EGA, gmode = EGAHI, errorcode;
int bkcol, maxcolor, x, y;
char msg[80];

/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");

/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}

/* maximum color index supported */
maxcolor = getmaxcolor();

/* for centering text messages */
settextjustify(CENTER_TEXT, CENTER_TEXT);
x = getmaxx() / 2;
y = getmaxy() / 2;

/* loop through the available colors */
for (bkcol=0; bkcol<=maxcolor; bkcol++)
{
/* clear the screen */
cleardevice();

/* select a new background color */
setbkcolor(bkcol);

/* output a messsage */
if (bkcol == WHITE)
setcolor(EGA_BLUE);
sprintf(msg, "Background color: %d", bkcol);
outtextxy(x, y, msg);
getch();
}

/* clean up */
closegraph();
return 0;
}


函数名: setcolor
功 能: 设置当前画线颜色
用 法: void far setcolor(int color);
程序例:

#include
#include
#include
#include

int main(void)
{
/* select a driver and mode that supports */
/* multiple drawing colors. */
int gdriver = EGA, gmode = EGAHI, errorcode;
int color, maxcolor, x, y;
char msg[80];

/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "");

/* read result of initialization */
errorcode = graphresult();
if (errorcode != grOk) /* an error occurred */
{
printf("Graphics error: %s", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1); /* terminate with an error code */
}

/* maximum color index supported */
maxcolor = getmaxcolor();

/* for centering text messages */
settextjustify(CENTER_TEXT, CENTER_TEXT);
x = getmaxx() / 2;
y = getmaxy() / 2;

/* loop through the available colors */
for (color=1; color<=maxcolor; color++)
{
/* clear the screen */
cleardevice();

/* select a new background color */
setcolor(color);

/* output a

messsage */
sprintf(msg, "Color: %d", color);
outtextxy(x, y, msg);
getch();
}

/* clean up */
closegraph();
return 0;
}
sqrt 函数函数名: sqrt 功 能: 计算平方根 用 法: double sqrt(double x); 程序例: #include #include int main(void) { double x = 4.0, result; result = sqrt(x); printf("The square root of %lf is %lf", x, result); return 0; } strcat 函数函数名: strcat 功 能: 字符串拼接函数 用 法: char *strcat(char *destin, char *source); 程序例: #include #include int main(void) { char destination[25]; char *blank = " ", *c = "C++", *Borland = "Borland"; strcpy(destination, Borland); strcat(destination, blank); strcat(destination, c); printf("%s", destination); return 0; } strcmp 函数函数名: strcmp 功 能: 串比较 用 法: int strcmp(char *str1, char *str2); 程序例: #include #include 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"); else printf("buffer 2 is less than buffer 1"); ptr = strcmp(buf2, buf3); if (ptr > 0) printf("buffer 2 is greater than buffer 3"); else printf("buffer 2 is less than buffer 3"); return 0; } strcpy 函数函数名: strcpy 功 能: 串拷贝 用 法: char *strcpy(char *str1, char *str2); 程序例: #include #include int main(void) { char string[10]; char *str1 = "abcdefghi"; strcpy(string, str1); printf("%s", string); return 0; } 函数名:strlen功 能:计算一个字符串的长度用法:int strlen(const char *s)程序例: #include "stdio.h"#include "string.h"void main(){ int intLen; char str[]="how are you!"; intLen=strlen(str); printf("The length of the string is: %d",intLen);}




相关主题
文本预览
相关文档 最新文档