Download presentation
Presentation is loading. Please wait.
1
ACM程序员大赛讲座 _____C语言程序设计要点 讲授人:王敬华
2
一、数据类型 1、int /short 2、char 3、unsigned int/short 4、unsigned char
5、float/double/long double
3
二、运算符 1、按位运算 &、|、^、~、<<、>> 2、算术运算 ++、--、*、/、% 3、条件运算
&&、||、! 4、转义符 \ddd (8进制)、\xhh (16进制)
4
三、格式化输入/输出 1、printf(“格式控制字符”,表达式1,….,表达式n) %x、%X------无符号16进制整型
%d、%i 有符号10进制整型 %x、%X------无符号16进制整型 %o 无符号8进制整型 %u 无符号10进制整型 %c 字符型 %s 字符串 %f 浮点型(10进制小数形式) %e、%E------浮点型(指数形式)
5
三、格式化输入/输出 2、输出有符号整数 %[-][+][width][.precision]d -:表示左对齐,缺省时是右对齐;
+:输出正数时,在数前加上+号; width:对于无符号整数,表示输出整数的最小域宽(即占屏幕的多少格),若实际宽度超过了width,则按实际宽度输出; .precision:针对无符号整数,表示至少要输出precision位,如果整数的位数大于precision,则按实际位数输出,否则在左边的空位上补0。
6
三、格式化输入/输出 运行结果: a=123 a= 123 a= 0123 a= +123 L=34567 main() {
int a=123; long L=34567; printf("a=%d\n",a); printf("a=%6d\n",a); printf("a=%6.4d\n",a); printf("a=%-6d\n",a); printf("a=%+6d\n",a); printf("L=%ld",L); } 运行结果: a=123 a= a= a= L=34567
7
三、格式化输入/输出 3、输出无符号整数 %[-][#][width][.precision][l] u|o|x|X
#:表示以8进制形式输出数据(%o)时,在数字前输出0;当以16进制形式输出数据(%x或%X)时,在数字前输出0x或0X;
8
三、格式化输入/输出 运行结果: a=65535:a=-1 u=77777 u=7fff:u=7FFF u=077777:u=0X7FFF
main() { int a=-1; unsigned u=32767; unsigned long L=65535<<2; printf("a=%u:a=%d\n",a,a); printf("u=%o\n",u); printf("u=%x:u=%X\n",u,u); printf("u=%#o:u=%#X\n",u,u); printf("L=%lx\n",L); printf("L=%#.8lX\n",L); } 运行结果: a=65535:a=-1 u=77777 u=7fff:u=7FFF u=077777:u=0X7FFF L=3fffc L=0X03FFFC
9
三、格式化输入/输出 4、实数的输出 %[-][+][#][width][.precision][l][L]f|e|E|g|G
l:输出double型数据(缺省时也是输出double型数据); L:输出long double型数据; #:必须输出小数点;
10
三、格式化输入/输出 main() { double f=2.5e5; printf(" \n"); printf("f=%15f\n",f); printf("f=%-15.0f\n",f); printf("f=%#15.0f\n",f); printf("f=%+15.4f\n",f); printf("f=%15.4e\n",f); } 运行结果: f= f=250000 f= f= f= e+05
11
三、格式化输入/输出 5、字符和字符串的输出 %[-][width]c %[-][width][.precision]s
.precision:表示只输出字符串的前precision个字符;
12
三、格式化输入/输出 运行结果: Ch=A Ch= A ABCD ABC main() { char ch='A';
printf("ch=%c\n",ch); printf("ch=%3c\n",ch); printf("ch=%-3c\n",ch); printf("%s\n","ABCD"); printf("%6s\n","ABCD"); printf("%6.3s\n","ABCD"); } 运行结果: Ch=A Ch= A ABCD ABC
13
三、格式化输入/输出 6、scanf(“格式控制字符串”,变量1地址,…,变量n地址) 例:scanf(“%d”,&a);
格式控制字符的一般形式: %[*][width] [l]Type width:是无符号整数,表示输入数据所占的宽度; * : 表示输入的数据不会赋值给相应的变量; l : 表示输入长整型数据(%ld,%lu,%lx,%lo)和double型数据(%lf,%le);
14
三、格式化输入/输出 scanf函数规定,当输入一项数据时,遇到以下情况scanf认为该数据输入结束: 1)遇到空格、回车、Tab键;
2)指定的宽度结束; 如:scanf(“%3d”,&a);输入1234,a的值将是123; 3)遇非法输入; 如:scanf(“%d”,&a);如果用户输入12a3,a的值将是12; 4)当用%c输入字符型数据时,可显示字符、空格、回车以及其它转义字符都是有效输入; 如:scanf(“%c%c%c”,&a,&b,&c);
15
三、格式化输入/输出 Scanf(“%c%c”,&c1,&c2); aA Scanf(“%d,%d”,&x,&y); 12,-23
Scanf(“%s%s”,&x,&y); aa AA
16
四、文件操作 1、文件的打开与关闭 FILE *fopen(char *filename,char *mode);
int fclose(FILE *fp); int feof(FILE *fp); mode:由两类字符组成,一类字符表示打开文件的类型,t---文本文件,b---二进制文件;另一类字符是操作类型,r---读,w---写,a---追加,+---可读可写;
17
四、文件操作 2、文件的读写 int fscanf(FILE *fp,char *format,v1,…,vn);
int fprintf(FILE *fp,char *format,e1,…en); int fgetc(FILE *fp); int fputc(int c,FILE *fp); char *fgets(char *s,int n,FILE *fp); 从fp中读n-1个字符===>s,最后补‘\0’ int *fputs(char *s,FILE *fp); 正确,返回写入文件的实际字符数;错误,则返回EOF(-1);
18
四、文件操作 size---写入文件的每个数据所占用的字节数,通常用sizeof(…)形式; 正确,返回n值,错误,返回NULL(0)
unsigned fwrite(void *ptr,unsigned size,unsigned n,FILE *fp); size---写入文件的每个数据所占用的字节数,通常用sizeof(…)形式; 正确,返回n值,错误,返回NULL(0) unsigned fread(void *ptr,unsigned size,unsigned n,FILE *fp);
19
四、文件操作 3、文件的定位 void rewind(FILE *fp); 将文件指针置于fp所指向的文件头;
int fseek (FILE *fp,long offset,int from); offset:从from开始的偏移字节数,+--(->) - ---(<-) 0—不动 from: SEEK_SET(0)、SEEK_CUR(1)、SEEK_END(2) long ftell(FILE *fp); 返回当前位置指针的值,如出错,ftell返回-1;
20
五、指针 1、一级指针 int *p; char *pstr; 2、数组指针(指向二维数组的指针)
int a[2][3] = {{1,2,3},{4,5,6}}; int (*p) [3]; p = a; a[i][j] 等价于p[i][j] 3、指针数组 int a[3]; int *p[3]; p[0] = &a[0]; p[1] = &a[1]; p[2] = &a[2];
21
五、指针 4、二级指针 int a; int *p; int **pp; p = &a; pp = &p; 5、指针与动态分配
void *malloc(unsigned int size); char *pstr; pstr = (char *) malloc(10 * sizeof(char)); if (pstr ==NULL) {分配不成功} free(pstr);
22
五、指针 6、指针作为函数的返回值 int *getdata(int num) { int *getdata(int num) {
int *p; int k; p = (int *)malloc(num*sizeof(int)); if (p != NULL) for (k=0; k<num; k++) scanf(“%d”,&p[k]); return p; } int *getdata(int num) { static int a[100]; int k; if (num > 100) return NULL; for (k=0;k<num;k++) scanf(“%d”,&a[k]); return a; }
23
五、指针 7、指针函数 int *getdata(int num); 8、函数指针 int (*pf) (int a);
例:int getmax(int x,int y) { return(x>y?x:y); } void main() { int (*pf) (int,int); int a; pf = getmax; a = (*pf) (3,2); printf(“a=%d”,a); }
24
六、常用函数 1、int getch(void); 2、int getche(void);
3、sizeof(expression)/sizeof(type); 4、break/continue; 5、memset(void *s,int c,size_t n) 6、void *malloc(size_t size); 7、void free(void *block); 8、strcpy(char *dest,const char *src); 带‘\0’
25
六、常用函数 9、strncpy(char *dest,const char *src,size_t maxlen); 不带‘\0’
10、memcpy(void *dest,cont void *src,size_t n); 不带‘\0’ 11、movmem(void *src,void *dest,unsigned length); 带‘\0’ 12、strcat(char *dest,const char *src); 带‘\0’ 13、strncat(char *dest,const char *src,size_t maxlen); 带‘\0’ 14、char *strchr(const char *s,int c); 找到返回其指针,否则null 15、int strcmp(const char *s1,const char *s2); 16、int strncmp(const char *s1,const char *s2,size_t maxlen);
26
六、常用函数 17、char *strstr(const char *s1,const char *s2)
18、strset(char *s,int ch); 19、char *strupr(char *str); 20、double atof(const char *nptr); 21 、int atoi(const char *nptr); 22、long atol(const char *nptr); 23、char *itoa(int value,char *string,int radix); 24、int random(int num); 24、sprintf(char *buffer,const char *format,……);
27
六、常用函数 例如:将整数123 “000123” char buffer[7]; int a = 123;
sprintf(buffer,”%6.6d”,a); 25、int isalpha(int x); 26、int islower(int x); 27、int isupper(int x); 28、int isdigit(int x); 29、int tolower(int x); 30、int toupper(int x);
Similar presentations