C语言入门小册子
本节包含一个示例程序,提供基本 C 语句的语法示例,后面是一些库函数的列表。这个列表非常简略,只提供了提醒。如果需要更多细节,请参考前面的章节。
/* sample.c: 一个愚蠢的程序,提供语法示例。 */
#include <stdio.h> /* 包含控制台 I/O 的头文件。 */
int f1( int p ); /* 函数原型。 */
long f2( void );
long g; /* 全局变量。 */
void main( int argc, char *argv[] )
{
float f; /* 声明变量。 */
int ctr;
extern long g;
printf( "Arguments:\n\n" );
for( ctr = 0; ctr < argc; ctr++ )
{
puts( argv[ctr] );
}
printf( "\nFunction 1:\n\n" );
ctr = 0;
while( ctr < 5 )
{
printf( "%d\n", f1( ctr++ ) );
}
printf( "\nFunction 2:\n\n" );
ctr = 0;
do
{
g = ctr++;
printf( "%d\n", f2() );
}
while( ctr < 5 );
exit( 0 );
}
int f1( int p )
{
return( ( p < 3 ) ? p : p p );
}
long f2( void )
{
extern long g;
return( g g );
}
控制台 I/O -- #include <stdio.h>
:
int printf( char *s, <varlist> ) > 0
// 将格式化字符串打印到标准输出。int scanf( char *s, *<varlist> ) != EOF
// 从标准输入读取格式化数据。int putchar( int ch )
// 打印一个字符到标准输出。int getchar() != EOF
// 从标准输入读取一个字符。int puts( char *s )
// 打印字符串到标准输出,并添加换行符。char *gets() != NULL
// 从标准输入读取一行(不包含换行符)。
PC 控制台例程 -- #include <conio.h>
:
int getch() != 0
// 从键盘获取一个字符(不需要回车)。int getche() != 0
// 从键盘获取一个字符并回显。int kbhit() != 0
// 检查是否按下了一个键。
格式化代码:
-
%h
// 短整型(仅scanf()
使用) -
%d
// 十进制整数 -
%ld
// 长整型十进制整数 -
%c
// 字符 -
%s
// 字符串 -
%e
// 指数浮点数 -
%f
// 十进制浮点数 -
%g
// 使用%e
或%f
,取其较短的形式(仅printf()
使用) -
%u
// 无符号十进制整数 -
%o
// 无符号八进制整数 -
%x
// 无符号十六进制整数 -
%10d
// 10个字符的字段宽度。 -
%-10d
// 左对齐字段。 -
%6.3f
// 6个字符的字段宽度,精确到三位小数。 -
'\0NN'
// 八进制字符码。 -
'\xNN'
// 十六进制字符码。 -
'\0'
// 空字符。
文件 I/O -- #include <stdio.h>
:
-
FILE *fopen( char *f, char *mode ) != NULL
// 创建或打开文件。 -
int fclose( FILE *f )
// 关闭文件。 -
rewind( FILE *f )
// 文件指针回到文件开始。 -
rename( char *old, char *new )
// 重命名文件。 -
remove( char *name )
// 删除文件。 -
fseek( FILE *f, long offset, int origin) == 0
// 设置文件指针。 -
fprintf( FILE *f, char *fmt, <varlist> ) > 0
// 格式化写入。 -
fscanf( FILE *f, char *fmt, &<varlist> ) != EOF
// 格式化读取。 -
fwrite( void *b, size_t s, size_t c, FILE *f ) > 0
// 非格式化写入。 -
fread( void *b, size_t s, size_t c, FILE *f ) > 0
// 非格式化读取。 -
putc( int c, FILE *f )
// 写一个字符。 -
int getc( FILE *f ) != EOF
// 读取一个字符。 -
fputs( char *s, FILE *f )
// 写字符串。 -
fgets( char *s, int max, FILE *f) != NULL
// 读取字符串。 -
sprintf( char *b, char *fmt, <varlist> )
// 打印到字符串。 -
sscanf( char *b, char *fmt, &<varlist> ) > 0
// 从字符串扫描。
文件模式:
r
// 打开文件用于读取。w
// 打开并清空文件(或创建文件)用于写入。a
// 追加模式 — 打开(或创建)文件用于写入到文件末尾。r+
// 打开文件用于读取和写入。w+
// 打开并清空文件(或创建文件)用于读取和写入。a+
// 打开文件用于读取和追加。
偏移量值:
SEEK_SET
// 文件开始位置。SEEK_CUR
// 当前文件位置。SEEK_END
// 文件末尾位置。
数学库 -- #include <math.h>
:
double sin( double x )
// x 的正弦(弧度)。double cos( double x )
// x 的余弦。double tan( double x )
// x 的正切。double asin( double x )
// x 的反正弦。double acos( double x )
// x 的反余弦。double atan( double x )
// x 的反正切。double sinh( double x )
// x 的双曲正弦。double cosh( double x )
// x 的双曲余弦。double tanh( double x )
// x 的双曲正切。double exp( double x )
// 指数函数 — e^x。double log( double x )
// x 的自然对数。double log10( double x )
// x 的十进制对数。double pow( double x, double y )
// 幂函数 — x^y。double sqrt( double x )
// x 的平方根。double ceil( double x )
// 向上取整(返回 double 类型)。double floor( double x )
// 向下取整(返回 double 类型)。double fabs( x )
// x 的绝对值。
标准工具库 -- #include <stdlib.h>
:
double atof( char *nvalstr ) != 0
// 将数字字符串转换为 double 类型。int atoi( char *nvalstr ) != 0
// 将数字字符串转换为 int 类型。long atol( char *nvlastr ) != 0
// 将数字字符串转换为 long 类型。int rand()
// 生成伪随机整数。srand( unsigned seed )
// 设置随机数生成器的种子。exit( int status )
// 退出程序。int system( char *syscmd ) == 0
// 执行系统命令。int abs( int n )
// int 类型的绝对值。long labs( long n )
// long 类型的绝对值。
时间与日期库 -- #include <time.h>
:
time_t time( time_t *timeptr )
// 当前时间(以 long int 形式表示)。char *ctime( time_t *timeptr )
// 当前时间和日期字符串。
字符串函数库 -- #include <string.h>
:
int strlen( char *s )
// 字符串长度。strcpy( char *dst, char *src )
// 复制字符串。- `strncpy(
char *dst, char *src, size_t n )` // 最多复制 n 个字符。
strcat( char *dst, char *s )
// 连接字符串。strncat( char *d, char *s, size_t n )
// 最多连接 n 个字符。strcmp( char *s1, char *s2 ) == 0
// 比较字符串。strncmp( char *s1, char *s2, size_t n ) == 0
// 比较 n 个字符。stricmp( char *s1, char *s2 ) == 0
// 比较字符串,不区分大小写。strnicmp( char *s1, char *s2, size_t n ) == 0
// 比较 n 个字符,不区分大小写。char *strchr( char *s, int ch ) != NULL
// 查找第一个字符。char *strrchr( char *s, int ch ) != NULL
// 查找最后一个字符。char *strstr( char *dst, char *src) != NULL
// 查找子字符串。char *strlwr( char *s )
// 转换为小写。char *strupr( char *s )
// 转换为大写。
字符类测试库 -- #include <ctype.h>
:
-
int isalnum( int c ) != 0
// 字母或数字。 -
int isalpha( int c ) != 0
// 字母。 -
int iscntrl( int c ) != 0
// 控制字符。 -
int isdigit( int c ) != 0
// 十进制数字。 -
int isgraph( int c ) != 0
// 可打印字符(不包括空格)。 -
int islower( int c ) != 0
// 小写字母。 -
int isprint( int c ) != 0
// 可打印字符(包括空格)。 -
int ispunct( int c ) != 0
// 打印字符,但不是空格或字母数字。 -
int isspace( int c ) != 0
// 空格,FF,LF,CR,HT,VT。 -
int isupper( int c ) != 0
// 大写字母。 -
int isxdigit( int c ) != 0
// 十六进制数字。 -
int tolower( int c )
// 转换为小写。 -
int toupper( int c )
// 转换为大写。
动态内存分配 -- #include <malloc.h>
:
buf = (<type> *)malloc( (size_t)sizeof( <type> ) * <array size>) != NULL
// 分配内存。free( <type> *buf )
// 释放内存。