C 语言学习笔记 23页

  • 94.00 KB
  • 2022-08-11 发布

C 语言学习笔记

  • 23页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档由用户上传,淘文库整理发布,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,请立即联系网站客服。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细阅读内容确认后进行付费下载。
  4. 网站客服QQ:403074932
***********************************************/day0120130916***********************************************/c语言的结构必须包含入intmain(){return0;}printf(“hello”);实质上是包含在标准头文件stdio.h#include将文件插入到当前位置\n换行#预处理文件#include"xxx"插入到程序内容打“”且没有;系统提供的内容使用<>,使用自己定义的文件使用“”intprintf(constchar*format,//格式占位符号...)//可变长参数c语言结束标志是;支持一行多条指令,建议每行一条指令加注释///**/多行连接符号\反斜杠为续行符号,代码长了换行使用C程序编译步驟1编译gcc-chello.c生成.o的目标文件2连接gcchello.o生成一个可执行文件自定义可执行文件名称gcchello.c-ohello(新名字)数据表现形式二进制10八位1G=1024M1M=1024kb1k=1024byte字节byte位800000001权重位表示负数最高位表符号位00000001原码(1的二进制表示)11111110反码11111111补码(反码加1)float43.14\n0000000000000000000000000000000000最左边第一位是符号位八位阶码剩下是尾数double8C语言变量类型1char字符类型%c4float浮点型%f(%.nf)n为指定输出位数或%g(按需分配)8double双精度%g尾数后面的0会去掉的4int整型%d4long8longlong2short(int)%x16进制%o8进制%p地址%e科学计数法*************************************************day02*************************************************变量所什么/变量的定义变量名不能重复赋值运算;没有初始化的变量都是脏数据常量(不可改变的变量)使用const修饰变量该变量只读宏定义方式定义常量#definePI3.14宏定义不会作类型检查,是直接替换,在预处理期间处理const修饰变量是只读变量,在编译是会做类型安全检查sizeof计算变量所占内存大小sizeof(int)返回值为整型地址类型变量指针变量&取地址符号指针常量指针的常量常量指针常量的指针constintb=13;constintc=13;int*a=&b;//a是指向int类型b的指针constinta=10;constint*a=NULL;//a是指向整型常量的指针\nint*consta=NULL;//必须定义初始化同时,以后不可修改scanf()输入函数scanf()后面的变量必须是指针/地址注意格式,最好中间不要加其他字符符号如scanf("%d%d%d",&a,&b,&c);运算符号要开阔思路,灵活运用,如交换ab值:a=b-a或a=a^bb=b-ab=a^ba=a+ba=a^b计算结果以精度最高者为准longdouble>double>float>longint>unsignedint>int数据溢出时会默认换成其优先级高的类型;如:inta=-1,b=10;但是a>b!,这里a溢出里;++--对整型数据操作,注意^相同为0,不同为1<<左移>>右移空位0补齐逻辑运算符号&&||!三目运算符号?:判断为真则选第一个,否则第二个即:(a>b)?a:b如果a>b为真则a,否则b溢出现象1#include2intmain()3{4inta=6;5unsignedintb=-2;6printf("%u\n",b);7printf("%s\n",((a>b)?"a>b":"a2intmain()3{4inta,b,c;5printf("PleaseinputthreeNum:\n");\n6scanf("%d%d%d",&a,&b,&c);7printf("ThemaxNumis:%d\n",(a>b?((a>c)?a:c):((b>c)?b:c)));8}~2。*************************************************day03*************************************************if(条件)条件判断语句(非0值即为真){需要执行的语句}满足条件就执行if()if(){{}}elseifelse{}{elseif}{}........练习题:比大小,经典************************************************15max=a;16if(max2intmain()3{4inti,j;5intn=0;6for(i=100;i<=1000;i++)7{8for(j=2;jintmain(){inta=0;printf("InputaNum:\n");scanf("%d",&a);while()}2。查找素数使用while来查询(使用continue)3。给定一个百分制的分数,输出相应的等级90A80--90B70--80C60--69D4。输出如下图像*************************5。打印等边*形*********************************************day04*********************************************getchar()从键盘获得一个字符C语言允许用户自定义变量类型枚举:是一种自定义类型关键字:enum格式:enum类型名{值1,值2,..........};默认初始化从0开始依次递增;即后一个值是前一个值加1,或后一个值减1;给类型名起别名:typedefenumcolorclr;typedef声明一个指定类型的标识符\n把标识符改成自己喜欢的别名使用方式:typedefinti;只有缓冲区中的数据被读走的时候才能清除这个数据键盘》键盘缓冲区》输入缓冲区》程序》输出缓冲区》屏幕数组:聚合变量,保存一组同类型数据1维数组;练习定一个数组:整数,找到重复字符及其重复的次数1#include2intmain(){3inti,j;4longintNum=0;//注意不要超过范围5intnum[10]={0};//代表字符出现次数6printf("PleaseinputaNum:\n");7scanf("%ld",&Num);8do9{10num[Num%10]++;11Num=Num/10;12}while(Num!=0);13for(i=0;i<10;i++)14{15if(num[i]>1)16{17printf("%d--%d\n",i,num[i]);18}19}20return0;21}二维数组:打印5*5的方阵,*号表示*aa[2]*(a+2)对数组使用sizeof运算符,注意事项sizeof(数组)=sizeof(数组元素)*元素个数可通过sizeof来计算数组大小数组的长度=sizeof(数组)/sizeof(数组元素)\n二维数组指针打印方式:intb[2][2]={1,2,3,4};printf("%d\n",*(*(b+1)+1));结构体:是用户定义的一种类型,一般不同类型数据学生属性:学号intnu名字性别。。。。。。structstudent{intnu;charname[15];intgender;floatscore;}typedefstructstudentstu;访问结构体变量都是用取成员操作符“.”来引用其元素也可以用指向结构体的指针来调用结构体成员(*p).name;//p->name;//联合体:union补齐规则:平台不同,规则不同linux下:顺序执行,按照第一个对齐/对齐,后面对应补齐,若后面是其倍数(若超过4则以4为准,前面补齐为4再加!连续出现与其公倍数补齐),直接加,不是则加到是其倍数,再求总和,(最后的总和是第一个的倍数)windows下:按照最大长度,其他不够补齐练习:1。二维数组代替扫雷格子1。1初始化雷的位置2。循环从键盘输入你要开启的位置,几行几列3。判断打开位置是否为炸弹隐式声明,一切未知的类型c语言都看成int类型全局变量在函数体外定义的变量或者说是在文件里面定义的变量;全局变量默认初始值为0;局部变量在函数体内定义的变量或者在循环体内定义的;默认初始值为脏数据;出了函数体即失效;现象在一个函数里面不能同时出现两个同名的的局部变量,即使类型不同也不行结论:局部变量会覆盖全局变量的值,头文件.h的定义\n#ifndef_字母大写ABC_H_#define_字母大写ABC_H_内容;#endif防止头文件被多次引用变量前面可加的关键字const常量static静态变量如果说没有初始化系统模认为0;只会被初始化一次,且记住该次的值,下次计算以此为基础;特点:静态局部变量会一直保持这个值,直到整个程序结束//创建静态局部变量的语句只会被调用一次只能分配一次空间函数register(寄存器)修饰变量--寄存器变量register只是一个请求,不一能成功,其个数是有限的,所以不一定会会被放到寄存器里面volatile修饰变量---不稳定变量特点:程序每次使用该变量就会重新读取外部变量extern调用外部变量时使用externintx;1.。局部变量作用域和可见行只能是在声明的区域内使用2。静态局部变量作用域为程序执行期间,可见行为声明他的语句块3。全局变量作用域和可见性为程序执行期间4。静态全局变量作用域和可见性为本文件里面5。外部变量作用域和可见性军为程序执行期间6。常量作用域和可见性均为声明他的语句块内局部变量优先全局变量和静态变量如果没有初始化,则会被自动初始化0*************************************************day06*************************************************函数:返回值类型函数名(函数参数){相应的语句}函数的参数可以是多个,也可以没有参数intadd(void)这里的void表示参数可以是任何类型行参:实参:在传递时,只是拷贝了一份,给别人;return0:结束并退出程序\n函数返回之类型和return返回值类型一致如果函数没有返回值类型必须是voidC语言返回值类型可以省略,担系统默认为int函数的参数函数后面的参数为行参,得用逗号隔开,实参,实际参数即在主函数里面传入的参数,在函数的操作实际是对行参的操作;在自定义函数里面,不要尝试返回一个局部变量的地址如果函数执行结束,就会释放函数里面所有变量的内容和内存练习:判断素数:用函数完成函数的默认值本质上是在C++环境下实现的使用个g++来进行编译函数默认值的设定方式必须是从右向左来定义默认值(右边没有默认值左边就绝对不能有)使用默认值时,是从左向右写(不能省略左边)C当中的字符串字符串函数string.h字符串默认以'\0'作结束标志char*strcpy(char*dest,constchar*src);//拷贝字符串到另一个里面char*strcat(char*dest,constchar*src)//连接两个字符串计算字符串长度strlen(constchar*s);一\0结束,遇到\0结束,但长度不包括它sizeof计算时包括这个\0,所以需要sizeof()-1拷贝字符串memcpy//man填充指定字符memset//man带参数的主函数:intmain(intargc,char*argv[])//键盘输入{printf("%d",argc);//计数命令printf("%s",argv[0]);//打印输入的命令printf("%s",argv[1]);return0;}1。递归函数1首先确定递归结束条件2\n2。汉诺塔游戏柱子abc*************************************************day07************************************************intatoi(constchar*nptr);将字符串转换成整型//g++中需要#include才可以longatol(constchar*nptr);将字符串转换成长整型intsprintf(char*str,constchar*format,...);将字符串按照一定格式写到str练习:/*#include#includeintmain(intargc,char*argv[]){charname[10]={0};memset(name,'0',10);//给数组初始化inta[100];memset(a,0,100);strcpy(name,argv[1]);printf("%s\n",name);a[0]=atoi(argv[1]);printf("%s%d\n",name,a);return0;}*intmain(){intsrc=123;chardest[15];memset(dest,'0',15);printf("%s",dest);sprintf(dest,"%d",src);printf("%s",dest);return0;}*/#include#include#includestructstu{charname[10];intxuehao;intage;};//typedefstructstustu;\nintmain(intargc,char*argv[]){structstua;a.xuehao=atoi(argv[1]);strcpy(a.name,argv[2]);a.age=atoi(argv[3]);printf("xuehao:%dname:%sage:%d\n",a.xuehao,a.name,a.age);return0;}作业:字符数组保存‘12345678’数组内部倒序排列在打印;1#include2#include3intmain(intargc,char*argv[])4{5chara0[10]={0};6chara[]="1234567890";7charb[10];8charb0[10]={0};9inti,j,k,n;10memset(b,'0',10);11strcpy(b,argv[1]);12printf("交换前:\n%s\n%s\n字符串长度:%d\n",a,b,strlen(b));13for(i=0;i<10;i++)14{15a0[9-i]=a[i];16}17for(j=0;jchar*strchr(constchar*s,charc);函数功能:在一个字符串中查找给定字符的第一个匹配位置,如果结果找到了,返回值就会返回返回值,没有找到则返回NULLstrcmp()-->intstrcmp(constchar*s1,constchar*s2);函数功能:对字符串进行比较,如果s1>s2,返回值>0,如果相等返回值是0,如果s1voidbzero(void*s,size_tn);//用来初始化清零的练习:输入一个字符串将小写都变成大写;//不用strypr1#include2#include3#include4intmain(intargc,char*argv[])5{6chara[]="abFcdEFadGGHJbhJkHhHhJjJjLlLlLl";7charb[20];8charc[]="aAaAbBbBbBbB";9//memset(b,'\0',20);10bzero(b,20);11printf("b:%s\n",b);\n12strcpy(b,argv[1]);13//strupr(c);14inti=0;15printf("%s\n%s\n%s\n",a,b,c);16for(i=0;i='a'&&a[i]<='z')19a[i]=a[i]-32;20}21for(i=0;i='a'&&b[i]<='z')24b[i]=b[i]-32;25}26printf("%s\n%s\n%s\n",a,b,c);27return0;28}I/O控制scanf输入printf输出getchar()取一个字符putchar()输出一个字符putchar('a')或chara=’A‘putchar(a)gets()键入字符串//读取一行数据,并丢弃换行符char*gets(char*s);puts()输出字符串//他会自己换行intputs(constchar*s);字符串的I/Osprintfintsprintf(char*str,constchar*format,...);eg:charj='A';floatk=8.8;intb[20];sprintf(b,"%d%c%f",i,j,k);puts(b);sscsnf//intsscanf(constchar*str,constchar*format,...);eg:charbuf[20];sscanf("123456","%s",buf);文件的I/o1.打开文件fopenFILE*fopen(constchar*path,constchar*mode);返回值:返回一个文件指针如果成功则返回文件的地址,失败返回NULL\nr以只读方式打开文件该文件必须是存在的r+以可读可写的方式打开文件,文件必须是存在的w打开只写文件,如果文件存在,把文件内容清空变成大小为0,如果文件不存在则创建文件w+打开文件可读可写,文件存在把内容清空,不存在就创建a以追回的方式打开只写文件,文件不存在就创建,文件存在就把数据追回到文件结尾a+以附加方式打开可读可写文件,文件存在则追加数据到结尾,不存在就创建文件fcloseintfclose(FILE*fp);//关闭文件//成功返回0,intfgetc(FILE*stream);从文件里面读取一个字符char*fgets(char*s,intsize,FILE*stream);从文件里面读取一个字符串fgetc/fput/向文件读写一个字符fgets从文件读取一行,把换行符作为字符的一部分fputs向文件输入一行数据不会加上换行符intfputs(constchar*s,FILE*stream);//你要写到文件的字符串//文件指针intfputc(intc,FILE*stream);//写一个字符eg:1#include2#include3intmain(intargc,char*argv[])4{5FILE*fp=NULL;6charbuf[200];7memset(buf,'\0',200);8fp=fopen(argv[1],argv[2]);9if(fp==NULL)10{11printf("fileerror\n");12return-1;13}14fgets(buf,200,fp);15puts(buf);16fclose(fp);1718return0;19}//体会最短代码,精简代码1char*strcpy(char*dest,constchar*src)2{3char*p=dest;4while(*p++=*src++);5returndest;6}7char*strcat(char*dest,constchar*src)8{9char*p=dest;10while(*p!='\0')\n11{12p++;13}14while(*p++=*src++);15returndest;16}17intmain()18{19chara[10];20strcpy(a,"123456");21printf("a:%s\n",a);22return023}~用fputs()向文件里面写入一行字符1#include2#include3#include4intmain()5{6FILE*fp=NULL;7charbuf[128];8memset(buf,'\0',128);9strcpy(buf,"sadfghjkl");10fp=fopen("./123","w+");11if(fp==NULL)12{13printf("createrror");14return-1;15}16fputs(buf,fp);//向文件里面写入一行字符1718fclose(fp);19return0;20}用fputc()向文件里面写入一个字符A1#include2#include3#include4intmain()5{6FILE*fp=NULL;7chara='A';8fp=fopen("./12","w+");9if(fp==NULL)10{11printf("createrror\n");12return-1;13}14fputc(a,fp);15fclose(fp);16return0;\n17}****************************************************************************day10****************************************************************************文件操作函数fread//返回值:成功则返回读取数据的个数,否则返回0,或很短的数据size_tfwrite(void*ptr,//内存地址用来存储读取数据size_tsize,//元素大小//注意留一个用来存储‘\0’size_tnmemb,//元素个数FILE*stream);//文件fwrite//size_tfread(constvoid*ptr,size_tsize,size_tnmemb,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是输入设备fseekintfseek(FILE*stream,//文件指针longoffset,//移动多少intwhence);//从那开始whenceSEEK_SET,//从文件开头SEEK_CUR,//当前位置SEEK_END,//文件末尾的位置fseek(fp,12,SEEK——SET);//把文件指针从开头位置往后移动12字节练习:1.写入名字,学号2。第二次写入年龄,再写入性别1#include2#include3#include4intmain(intargc,char*argv[])5{6FILE*fp=NULL;7charbuf[200];8charbuf1[200];9memset(buf1,'\0',200);10memset(buf,'\0',200);11strcpy(buf,"Frank,123456789");12strcpy(buf1,"age:22,male");\n13fp=fopen(argv[1],"w+");14if(fp==NULL)15{16puts("Openfileerror!");17return-1;18}19fwrite(buf,strlen(buf)+1,1,fp);20fclose(fp);21fp=fopen(argv[1],"a+");22if(fp==NULL)23{24puts("Openfileerror!");25return-1;26}27fwrite(buf1,strlen(buf1)+1,1,fp);28fclose(fp);29return0;30}写一个程序创建一个文件,往文件里面写入3个学生信息的内容(结构体),再写一个程序读取文件里面信息然后保存到结构体里面,打印结构体1#include2#include3#include4structstudent{5charname[15];6chargender[5];7intage;8intNum;9floatscore;10};11typedefstructstudentstu;12intmain(intargc,char*argv[])13{14stua;15inti=0;16memset(&a,0,sizeof(a));//清空=17FILE*fp=NULL;18charbuf[20];19memset(buf,'\0',20);20fp=fopen(argv[1],"a+");21if(fp==NULL)22{23puts("Openerror");24return-1;25}26for(i=0;i<3;i++)27{28printf("Pleaseinputname:Num:age:score:gebder:\n");29scanf("%s%d%s%f%s",a.name,&a.Num,&a.age,&a.score,a.gender);30//strcpy(a.name,"name1");31fwrite(a.name,15,1,fp);32//a.Num=1;\n33sprintf(buf,"%d",a.Num);34fwrite(buf,strlen(buf),1,fp);35memset(buf,'\0',20);36//a.age=12;37sprintf(buf,"%d",a.age);38fwrite(buf,strlen(buf),1,fp);39memset(buf,'\0',20);40//a.score=88.8;41sprintf(buf,"%d",a.score);42fwrite(buf,strlen(buf),1,fp);43memset(buf,'\0',20);44//strcpy(a.gender,"male");45fwrite(a.gender,5,1,fp);46}47fclose(fp);48return0;49}写1#include2#include3#include4structpson{5charname[30];6chargender[20];7intage;8doublesalary;9};10typedefstructpsonps;11intmain()12{13psp1={"name1","male",12,4500};//结构体初始化方式!14psp2={"name2","female",14,1000};15psp3={"name3","male",18,3000};16pspsn[3]={p1,p2,p3};//结构体初始化方式!17FILE*fp=NULL;18fp=fopen("./11.c","w");19if(fp==NULL)20{21puts("creatfileerror!");22return-1;23}24fwrite(psn,sizeof(ps),3,fp);2526fclose(fp);27return0;28}~读1#include2#include3#include4structpson{\n5charname[30];6chargender[20];7intage;8doublesalary;9};10typedefstructpsonps;11intmain()12{13pspsn[3]={0};14FILE*fp=NULL;15fp=fopen("./11.c","r");16if(fp==NULL)17{18puts("creatfileerror!");19return-1;20}21fread(psn,sizeof(ps),3,fp);22fclose(fp);23inti=0;24for(i=0;i<3;i++)25{26printf("%s\n%s\n%d\n%g\n",psn[i].name,psn[i].gender,psn[i].age,psn[i].salary);27}28return0;29}读写!1#include2#include3#include4intmain()5{6inta[5]={1,2,3,4,5};7intb[5]={0};8FILE*fp=NULL;9fp=fopen("333.c","w");10if(fp==NULL)11{12puts("creatfileError!");13return-1;14}15fwrite(&a,sizeof(int),5,fp);//二进制类型存储16fclose(fp);1718fp=fopen("333.c","r");19fread(&b,4,5,fp);20inti=0;21for(i=0;i<5;i++)22{23printf("%d\n",b[i]);24}25fclose(fp);26return0;27}\n练习:在文件里面建立一个文件1.txt程序1.使用fopen打开文件用r+;往文件里面写一个数据(一个人的信息)程序2.同样使用fopen打开文件选项r+;往文件里面写一个人的数据要求不能覆盖程序1写的数据1#include2#include3#include4structstudent{5charname[15];6chargender[5];7intage;89};10typedefstructstudentstu;11intmain()12{13stus1={"Frank","male",22};1415FILE*fp=NULL;16fp=fopen("1.txt","r+");17if(fp==NULL)18{19puts("error");20return-1;21}22fwrite(&s1,sizeof(stu),1,fp);23fclose(fp);24return0;25}1#include2#include3#include4structstudent{5charname[15];6chargender[5];7intage;89};10typedefstructstudentstu;11intmain()12{13stus1={"niker","feme",242};1415FILE*fp=NULL;16fp=fopen("1.txt","r+");17if(fp==NULL)18{19puts("error");20return-1;\n21}22fseek(fp,sizeof(stu),SEEK_SET);23fwrite(&s1,sizeof(stu),1,fp);2425fclose(fp);26return0;27*************************************************CPrimerPlusNotes(中文第五版)20131015*************************************************page:17.18.19.32.63.75在许多的处理器/编译器中,浮点一般都是不可重入的?why?printf()经常有重入和性能上的问题?是怎莫回事??

相关文档