C 语言学习笔记.doc_第1页
C 语言学习笔记.doc_第2页
C 语言学习笔记.doc_第3页
C 语言学习笔记.doc_第4页
C 语言学习笔记.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

*/ day 01 20130916*/c语言的结构 必须包含入int main()return 0;printf(“hello”);实质上是包含在标准头文件stdio.hinclude将文件插入到当前位置n 换行 预处理文件include xxx 插入到程序内容打“”且没有;系统提供的内容使用,使用自己定义的文件使用“”int printf(const char format,格式占位符号.)/可变长参数c语言结束标志是;支持一行多条指令,建议每行一条指令加注释 多行连接符号 反斜杠 为续行符号,代码长了换行使用C程序编译步驟1编译 gcc c hello.c 生成. o的目标文件2连接 gcc hello.o 生成一个可执行文件自定义可执行文件名称 gcc hello.c -o hello(新名字)数据表现形式二进制 10 八位1G1024M1M1024kb1k1024byte字节byte位 80000 0001 权重位表示负数 最高位表符号位0000 0001 原码 (1的二进制表示)1111 1110 反码1111 1111 补码 (反码加1)float 43.140 0000000 000000000 000000000 00000000最左边第一位是符号位八 位阶码剩下是尾数double 8C语言变量类型1char 字符类型 c4float 浮点型 f (.nf)n为指定输出位数 或 g(按需分配)8double 双精度 %g 尾数后面的0会去掉的4int 整型 d4long 8 long long2short (int) x 16进制o 8进制p 地址e 科学计数法* day02*变量所什么/变量的定义变量名不能重复赋值运算; 没有初始化的变量都是脏数据常量 (不可改变的变量)使用const修饰变量 该变量只读宏定义方式定义常量 define PI 3.14宏定义不会作类型检查,是直接替换,在预处理期间处理const修饰变量是只读变量,在编译是会做类型安全检查sizeof 计算变量所占内存大小sizeof(int ) 返回值为整型地址类型变量 指针变量取地址符号指针常量 指针的常量常量指针常量的指针const int b=13;const int c=13;int* a=&b;/a 是指向int类型b的指针const int a10;const int aNULL;a是指向整型常量的指针int const aNULL;必须定义初始化同时,以后不可修改scanf()输入函数scanf()后面的变量必须是指针地址注意格式,最好中间不要加其他字符符号如scanf(%d%d%d,&a,&b,&c);运算符号要开阔思路,灵活运用,如交换a b值:a=b-a或a=abb=b-ab=aba=a+ba=ab计算结果以 精度最高者为准long double doublefloatlong intunsigned intint数据溢出时会默认换成其优先级高的类型;如:int a=-1,b=10;但是ab!,这里a溢出里;+ - 对整型数据操作,注意 相同为0,不同为1右移 空位0补齐逻辑运算符号 !三目运算符号 ? : 判断为真则选第一个,否则第二个即: (ab)?a:b 如果ab为真则a,否则b溢出现象1 #include 2 int main() 3 4 int a=6; 5 unsigned int b=-2; 6 printf(%un,b); 7 printf(%sn,(ab)?ab:ab); 8 打印结果:4294967294ab*无符号的整型变量回绕到0,重新开始有符号的整型变量则会回绕到最小的负值浮点类型没有回绕,超出则会表示为inf (表示无穷大)1。首选使用三目运算比较三个整数大小找出最大的* 1 #include 2 int main() 3 4 int a,b,c; 5 printf(Please input three Num:n); 6 scanf(%d%d%d,&a,&b,&c); 7 printf(The max Num is:%dn,(ab?(ac)?a:c):(bc)?b:c); 8 2。* day03*if(条件) 条件判断语句(非0值即为真)需要执行的语句 满足条件就执行if()if()else ifelseelse if.练习题:比大小,经典* 15 max=a; 16 if(maxb) 17 max=b; 18 if(maxc) 19 max=c; 20 printf(The max Num is :%d n,max); 21 return 0;if语句 不提倡深层嵌套,若有很多嵌套就要改变一下思路啦!润年条件,能被4整除不能被100整除 或 能被400整除 *if(year%4=0)&(year%100!=0)|(year%400=0)for(语句1;语句2;语句3)语句1:初始化语句语句2:判断语句,即循环条件语句3:循环中断: break;只能跳出一个循环体,继续执行循环体外的语句;只能是在循环体和switch case中使用,在其他地方无效非法continue 用来略过循环体中剩余的语句,直接进入到下一次循环调整语句继续下一次循环*练习 1001000的素数 1 #include 2 int main() 3 4 int i,j; 5 int n=0; 6 for(i=100;i=1000;i+) 7 8 for(j=2;ji;j+) 9 10 if(i%j=0) 11 break; 12 13 if(i=j) 14 15 printf(%dn,i); 16 n+; 17 18 19 printf(共有%d个素数,n); 20 return 0; 21 *while(条件表达式) 循环体条件表达式为真,则执行循环体,否则不执行do循环体while(条件表达式) 先执行再判断,至少执行一次!for(;); for 的死循环*开关语句switch()case 1:break;case 2:。default:break;表达式必须有整型结果或者直接转换成整型,一般为整型或字符类型在写法上,根据具体情况可以不用break;练习:写一个简单的计算器,实现加减乘除作业:1。随便输入一个很大的整数,使用程序来计算这个数的位数includeint main()int a=0;printf(Input a Num: n);scanf(%d,&a);while()2。查找素数 使用while来查询(使用continue)3。给定一个百分制的分数,输出相应的等级90 A80-90 B70-80 C60-69 D 4。输出如下图像*5。打印等边 * 形* day04*getchar() 从键盘获得一个字符C语言允许用户自定义变量类型枚举:是一种自定义类型关键字:enum格式:enum 类型名值1,值2,.;默认初始化从0开始依次递增;即后一个值是前一个值加1,或后一个值减1;给类型名起别名:typedef enum color clr;typedef 声明一个指定类型的标识符把标识符改成自己喜欢的别名使用方式:typedef int i;只有缓冲区中的数据被读走的时候才能清除这个数据键盘键盘缓冲区输入缓冲区程序输出缓冲区屏幕数组:聚合变量,保存一组同类型数据1 维数组;练习定一个数组:整数,找到重复字符及其重复的次数 1 #include 2 int main() 3 int i,j; 4 long int Num=0;/注意不要超过范围 5 int num10=0;/代表字符出现次数 6 printf(Please input a Num: n); 7 scanf(%ld,&Num); 8 do 9 10 numNum%10+; 11 Num=Num/10; 12 while(Num!=0); 13 for(i=0;i1) 16 17 printf(%d-%dn,i,numi); 18 19 20 return 0; 21 二维数组:打印55的方阵,*号表示*a a2 *(a+2)对数组使用sizeof运算符,注意事项sizeof(数组)sizeof(数组元素)*元素个数可通过sizeof来计算数组大小数组的长度sizeof(数组)sizeof(数组元素)二维数组指针打印方式:int b22=1,2,3,4;printf(%dn,*(*(b+1)+1); 结构体:是用户定义的一种类型,一般不同类型数据学生属性:学号 int nu名字性别。struct studentint nu;char name15;int gender;float score;typedef struct student stu; 访问结构体变量都是用 取成员操作符“.” 来引用其元素也可以用指向结构体的指针来调用结构体成员(*p).name;/ p-name;/联合体:union 补齐规则:平台不同,规则不同linux 下:顺序执行,按照第一个对齐对齐,后面对应补齐,若后面是其倍数(若超过4则以4为准,前面补齐为4再加!连续出现与其公倍数补齐),直接加,不是则加到是其倍数,再求总和,(最后的总和是第一个的倍数)windows下:按照最大长度,其他不够补齐练习:1。二维数组代替扫雷格子1。1初始化雷的位置2。循环从键盘输入你要开启的位置,几行几列3。判断打开位置是否为炸弹隐式声明,一切未知的类型c语言都看成int 类型全局变量 在函数体外定义的变量 或者说是在文件里面定义的变量;全局变量默认初始值为0;局部变量 在函数体内定义的变量或者在循环体内定义的;默认初始值为脏数据;出了函数体即失效;现象 在一个函数里面不能同时出现两个同名 的的局部变量,即使类型不同也不行结论:局部变量会覆盖全局变量的值,头文件.h的定义ifndef _字母大写ABC_H_#define _字母大写ABC_H_ 内容;endif防止头文件被多次引用变量前面可加的关键字const 常量static 静态变量 如果说没有初始化 系统模认为0;只会被初始化一次 ,且记住该次的 值,下次计算以此为基础;特点:静态局部变量会一直保持这个值,直到整个程序结束/创建静态局部变量的语句只会被调用一次 只能分配一次空间函数register (寄存器)修饰变量寄存器变量register 只是一个请求,不一能成功,其个数是有限的,所以不一定会会被放到寄存器里面volatile 修饰变量不稳定变量特点:程序每次使用该变量就会重新读取外部变量 extern 调用外部变量时使用 extern int x;1.。局部变量 作用域和可见行只能是在声明的区域内使用2。静态局部变量 作用域为程序执行期间,可见行为声明他的语句块3。全局变量 作用域和可见性为程序执行期间4。静态全局变量 作用域和可见性为本文件里面5。外部变量 作用域和可见性军为程序执行期间6。 常量 作用域和可见性均为声明他的语句块内局部变量优先全局变量和静态变量如果没有初始化,则会被自动初始化0* day06*函数:返回值类型函数名(函数参数)相应的语句函数的参数可以是多个,也可以 没有参数 int add(void) 这里的void 表示参数可以是任何类型行参:实参:在传递时,只是拷贝了一份,给别人;return 0: 结束并退出程序函数返回之类型和return返回值类型一致如果函数没有返回值 类型必须是void C 语言返回值类型可以省略 ,担系统默认为int 函数的参数函数后面的参数 为行参,得用逗号隔开,实参,实际参数即在主函数里面传入的参数,在函数的操作实际是对行参的操作;在自定义函数里面,不要尝试返回一个局部变量的地址如果函数执行结束,就会释放函数里面所有变量的内容和内存练习:判断素数:用函数完成函数的默认值本质上是在C环境下实现的 使用个g 来进行编译函数默认值的设定方式 必须是从右向左来定义默认值(右边没有默认值左边就绝对不能有)使用默认值时,是从左向右写 (不能省略左边)C 当中的字符串字符串函数 string.h 字符串默认以0作结束标志char *strcpy(char *dest,const char *src);/拷贝字符串到另一个里面char *strcat(char *dest,const char *src)/连接两个字符串计算字符串长度strlen(const char *s);一 0 结束,遇到 0 结束,但长度不包括它sizeof 计算时包括这个0 , 所以需要 sizeof()1 拷贝字符串memcpy /man填充指定字符memset /man带参数的主函数:int main(int argc,char *argv)/键盘输入 printf(%d,argc); / 计数命令printf(%s,argv0);/ 打印输入的命令printf(%s,argv1);return 0;1。递归函数1首先确定递归结束条件22。汉诺塔 游戏柱子 a b c * day07*int atoi(const char *nptr);将字符串转换成整型 g+ 中需要include才可以long atol(const char *nptr);将字符串转换成长整型int sprintf(char *str, const char *format, .);将字符串按照一定格式写到str 练习:/*#include#includeint main(int argc,char *argv)char name10=0;memset(name,0,10);/ 给数组初始化int a100;memset(a,0,100);strcpy(name,argv1);printf(%sn,name);a0=atoi(argv1);printf(%s%dn,name,a);return 0;*int main()int src=123;char dest15;memset(dest,0,15);printf(%s,dest);sprintf(dest,%d,src);printf(%s,dest);return 0;*/#include#include#includestruct stuchar name10;int xuehao;int age; ;/typedef struct stu stu;int main(int argc,char *argv)struct stu a;a.xuehao = atoi(argv1);strcpy(,argv2);a.age = atoi(argv3);printf(xuehao:%d name:%s age:%dn,a.xuehao,,a.age);return 0;作业: 字符数组保存12345678 数组内部倒序排列在打印; 1 #include 2 #include 3 int main(int argc,char *argv) 4 5 char a010=0; 6 char a=1234567890; 7 char b10; 8 char b010=0; 9 int i,j,k,n; 10 memset(b,0,10); 11 strcpy(b,argv1); 12 printf(交换前:n%sn%sn字符串长度:%dn,a,b,strlen(b); 13 for(i=0;i10;i+) 14 15 a09-i=ai; 16 17 for(j=0;jstrlen(b);j+) 18 19 b0strlen(b)-1-j=bj; 20 21 for(k=0;k10;k+) 22 23 ak=a0k; 24 25 for(n=0;nchar* strchr(const char* s,char c);函数功能:在一个字符串中查找给定字符的第一个匹配位置,如果结果找到了,返回值就会返回返回值,没有找到则返回NULLstrcmp() -int strcmp(const char*s1,const char*s2);函数功能:对字符串进行比较,如果s1s2,返回值0,如果相等返回值是0,如果s1s2,返回值为-1(一般是1或-1或0)* day09*函数名:strcat 连接两个字符串stricmp 大小写不敏感方式比较两个字符串int stricmp(char* s1,char* s2);strncmp int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, size_t n);/比较字符串前n个字符strnset 将一个串中到所有字符都设定为指定字符char* strnset(char* str,char ch,size_t n);strpbrk 在字符串中查找字符串char *strpbrk(const char *s, const char *accept);strrchr 在字符串中查找指定字符最后一次出现的位置char* strrchr(const char* s,char c);strstr 在字符串中查找指定字符串第一次出现到位置将字符串转换成相应类型的数double strtod(const char *nptr, char *endptr); float strtof(const char *nptr, char *endptr); long double strtold(const char *nptr, char *endptr);long int strtol(const char *nptr, char *endptr, int base); long long int strtoll(const char *nptr, char *endptr, int base);strupr 功能是直接将字符串中到大小字母转换策划成大写字符bzero #include void bzero(void *s, size_t n);/用来初始化清零的 练习:输入一个字符串将小写都变成大写;/不用strypr 1 #include 2 #include 3 #include 4 int main(int argc,char* argv) 5 6 char a=abFcdEFadGGHJbhJkHhHhJjJjLlLlLl; 7 char b20; 8 char c=aAaAbBbBbBbB; 9 /memset(b,0,20); 10 bzero(b,20); 11 printf(b:%sn,b); 12 strcpy(b,argv1); 13 /strupr(c); 14 int i=0; 15 printf(%sn%sn%sn,a,b,c); 16 for(i=0;i=a&ai=z) 19 ai=ai-32; 20 21 for(i=0;i=a&bi=z) 24 bi=bi-32; 25 26 printf(%sn%sn%sn,a,b,c); 27 return 0; 28 I/O 控制scanf 输入printf 输出getchar()取一个字符 putchar()输出一个字符 putchar(a)或char a=A putchar(a)gets() 键入字符串 /读取一行数据,并丢弃换行符char *gets(char *s);puts() 输出字符串/他会自己换行int puts(const char *s);字符串的I/Osprintfint sprintf(char *str, const char *format, .);eg:char j=A;float k=8.8;int b20;sprintf(b,%d%c%f,i,j,k);puts(b);sscsnf /int sscanf(const char *str, const char *format, .);eg:char buf20;sscanf(123456,%s,buf);文件的I/o1.打开文件 fopenFILE *fopen(const char *path, const char *mode);返回值:返回一个文件指针如果成功则返回文件的地址 ,失败返回NULLr 以只读方式打开文件 该文件必须是存在的r+ 以可读可写的方式打开文件,文件必须是存在的w 打开只写文件,如果文件存在,把文件内容清空变成大小为0,如果文件不存在则创建文件w+ 打开文件可读可写,文件存在把内容清空,不存在就创建a 以追回的方式打开只写文件,文件不存在就创建,文件存在就把数据追回到文件结尾 a+ 以附加方式打开可读可写文件,文件存在则追加数据到结尾,不存在就创建文件fcloseint fclose(FILE *fp);/关闭文件/成功返回0,int fgetc(FILE *stream);从文件 里面读取一个字符char *fgets(char *s, int size, FILE *stream);从文件里面读取一个字符串fgetc/fput/向文件读写一个字符fgets 从文件读取一行,把换行符作为字符的一部分fputs 向文件输入一行数据不会加上换行符int fputs(const char *s, FILE *stream);/你要写到文件的字符串/文件指针int fputc(int c, FILE *stream);/写一个字符eg: 1 #include 2 #include 3 int main(int argc,char* argv) 4 5 FILE* fp=NULL; 6 char buf200; 7 memset(buf,0,200); 8 fp=fopen(argv1,argv2); 9 if(fp=NULL) 10 11 printf(file errorn); 12 return -1; 13 14 fgets(buf,200,fp); 15 puts(buf); 16 fclose(fp); 17 18 return 0; 19 /体会最短代码,精简代码 1 char* strcpy(char* dest,const char* src) 2 3 char* p=dest; 4 while(*p+=*src+); 5 return dest; 6 7 char* strcat(char* dest,const char* src) 8 9 char* p=dest; 10 while(*p!=0) 11 12 p+; 13 14 while(*p+=*src+); 15 return dest; 16 17 int main() 18 19 char a10; 20 strcpy(a,123456); 21 printf(a:%sn,a); 22 return 0 23 用 fputs()向文件里面写入一行字符 1 #include 2 #include 3 #include 4 int main() 5 6 FILE* fp=NULL; 7 char buf128; 8 memset(buf,0,128); 9 strcpy(buf,sadfghjkl); 10 fp=fopen(./123,w+); 11 if(fp=NULL) 12 13 printf(creat error); 14 return -1; 15 16 fputs(buf,fp);/向文件里面写入一行字符 17 18 fclose(fp); 19 return 0; 20 用 fputc()向文件里面写入一个字符 A 1 #include 2 #include 3 #include 4 int main() 5 6 FILE* fp=NULL; 7 char a=A; 8 fp=fopen(./12,w+); 9 if(fp=NULL) 10 11 printf(creat errorn); 12 return -1; 13 14 fputc(a,fp); 15 fclose(fp); 16 return 0; 17 * day10*文件操作函数fread /返回值:成功则返回读取数据的个数,否则返回0,或很短的数据size_t fwrite(void *ptr,/内存地址用来存储读取数据 size_t size, /元素大小/注意留一个用来存储0size_t nmemb,/元素个数FILE*stream);/文件fwrite/ size_t fread(const void *ptr, size_t size, size_t nmemb, FILE*stream);标准输出文件 stdout标准输入文件 stdin标准错误文件 stderrfprintf 将相关内容输出到文件fprintf(fp,%d,a);/将a的值按照第二个参数里面的格式 输出到文件之中;fscanf 从文件里面读取内容fscanf(fp,%d,&a);/从文件中按照第二个参数格式读取数据保存到变量a中fprintf(stdout,“123456:”);/将变量值输出到输出设备 stdout表输出设备fscanf(stdin,“%s%d%g”,name,&age,&score)/将文件内容输入到变量,stdin是输入设备fseekint fseek(FILE *stream,/文件指针 long offset, /移动多少int whence);/从那开始whenceSEEK_SET,/从文件开头SEEK_CUR,/当前位置SEEK_END,/文件末尾的位置fseek(fp,12,SEEKSET);/把文件指针从开头位置往后移动12字节练习:1.写入名字 ,学号2。第二次写入年龄,再写入性别 1 #include 2 #include 3 #include 4 int main(int argc,char* argv) 5 6 FILE* fp=NULL; 7 char buf200; 8 char buf1200; 9 memset(buf1,0,200); 10 memset(buf,0,200); 11 strcpy(buf,Frank,123456789); 12 strcpy(buf1,age:22,male); 13 fp=fopen(argv1,w+); 14 if(fp=NULL) 15 16 puts(Open file error !); 17 return -1; 18 19 fwrite(buf,strlen(buf)+1,1,fp); 20 fclose(fp); 21 fp=fopen(argv1,a+); 22 if(fp=NULL) 23 24 puts(Open file error !); 25 return -1; 26 27 fwrite(buf1,strlen(buf1)+1,1,fp); 28 fclose(fp); 29 return 0; 30 写一个程序创建一个文件,往文件里面写入3个学生信息的内容(结构体),再写一个程序读取文件里面信息然后保存到结构体里面,打印结构体 1 #include 2 #include 3 #include 4 struct student 5 char name15; 6 char gender5; 7 int age; 8 int Num; 9 float

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论