C语言笔记-郭永锋老师_第1页
C语言笔记-郭永锋老师_第2页
C语言笔记-郭永锋老师_第3页
C语言笔记-郭永锋老师_第4页
C语言笔记-郭永锋老师_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

1、第1章 程序结构1. C语言框架#include /standard inpuit output header,标准输入输出头文件。因为后面用到了输出输出,而输入输出是在stdio.h这个头文件中定义。用到时才包含,比如没包含math.hint main()/int表示函数返回值的类型,main是主函数,每个C语言程序中有且只能有一个main函数,是程序的入口。后面的小括号是函数的标志,括号可以有参数,也可以没有。/一对大括号表示函数体,函数体就是函数功能的具体实现部分。int a,b,sum; /变量的定义,相当于申请存储空间printf(请输入两个整数:n); /printf(双引号中原样

2、输出的内容,除格式控制符和转义字符外,需要输出的参数)scanf(%d%d,&a,&b);/scanf(格式控制列表,地址列表)sum=a+b;printf(%d+%d=%dn,a,b,sum); /%格式控制需要后面参数的值进行替换return 0;/return 表示函数的返回值,注意返回值的类型和函数前定义的类型要保持一致。/格式控制符:%d整型数据的输入输出,%f单精度浮点数据的输入输出,%lf双精度,%s字符串,%c单个字符/转义字符:n回车换行,t表示横向跳格/scanf(a=%d,b=%d,&a,&b);双引号中内容原样输入,除格式控制符外。不建议使用第2章 数据类型1. 数据类

3、型int, float, double, char在定义变量时指定变量的数据类型,系统会按照指定的类型分配存储空间。可以通过sizeof求出数据类型所占空间的大小。sizeof()函数,括号中是变量求出变量所占存储空间大小,是类型求出类型所占空间大小。C语言中所有的小数如没有特别指明均按double类型处理。如:2.1就是double类型,2.1f就是float类型。后缀f/F只能加在小数后面。可以写成.2f或.2,相当于0.2f或0.22. 标识符标识符只能由数字、字母和下划线组成,而且数字不能作为开头。尽量做到见名知义。_例:abc, h873合法 8hk不合法不能使用系统的关键字作为标识

4、符。如:int,float,sizeof等,在编辑器中输入时会变蓝色。不建议使用如:printf,scanf。3. 变量变量是值在程序执行过程中能改变的量,标识符前加类型就是定义该种类型的变量。变量必须先定义,后使用。变量在使用之前要确保变量有一个确定的值(变量在没有赋值时是随机值)。C语言中是区分大小写的。int a,b,c; /表示定义了三个整型变量,和int a; int b; int c;等价如果同时定义相同数据类型的多个变量,可以用逗号隔开。如果定义不同类型的多个变量,则需要分开定义,用分号隔开。4. 常量值不能改变的量。如:123,a, “abc”。常量不能出现在赋值号(=)的左侧

5、。#define N 4注意:常量通常使用大写字母定义,变量一般使用小写字母定义。5. 运算符+ - * / %/ 除号(双目运算符),如果两侧数据都是整型数,刚表示整除,如果有一侧为小数,则表示数学的除法。如:5/2 = 2 5/2.0 = 2.5%求余,只能用于整数的计算。如:5%2 = 1考点:整数位的分离,如找出所有四位数中,个位加百位等于十位加千位的数。(找出三位数中所有的水仙花数)#include int main()int a,b,c,d;for(int i=1000;i10000;i+)a=i%10; /a个位b=i/10%10; /b十位c=i/100%10; /c百位d=i

6、/1000; /d千位if(a+c = b+d)printf(%d ,i);printf(n);return 0;/求三位数中的水仙花数#include int main()int a,b,c,d;for(int i=100;i1000;i+)a=i%10; /a个位b=i/10%10; /b十位c=i/100%10; /c百位if(a*a*a + b*b*b + c*c*c = i)printf(%d ,i);printf(n);return 0;+自增,-自减+在前表示先加后使用,在后表示先使用后加,如:int a=3,b; b=a+; /b=3 int a=3,b; a+;b=a; /b

7、=4int a=3,b; b=+a; /b=4 int a=3,b; +a; b=a; /b=4总结:如果+或单独构成一条语句,在前和在后没有区别。如果出现在赋值号右侧时:+在前表示先加后使用,在后表示先使用后加。6. 数据类型转换隐式转换:系统自动完成,由低类型向高类型自动转换。低和高指的是占用存储空间的大小。在转换时不会出现警告,反之,由高类型向低类型自动转换时会出现警告。例:float a=.1; /出现警告,原因:.1(0.1)是double类型,由double(高)到float(低)转换double b=a; /不会出现警告,原因:由float(低)到double(高)转换强制转换:

8、在需要转换的数据前加:(需要转换到的数据类型)例:float a=(float).1; /把double的0.1强制转换为float注意:强制转换只转换数据的值,而不会改变值本身的类型。赋值运算符(=)把等号右侧的值赋给左侧,左侧只能是变量,右侧比较灵活,可以是常量、变量或表达式,但是要求等号两侧值的类型一致。如:int a=2.5+4; /a=?注意:所有运算符在进行计算时,都需要进行隐式的自动转换或显示的强制类型转换,把两侧的数据类型统一。如:2.5+4,加号会首先将两侧的值转换为double运算符优先级:不建议记,如果需要指定优先级时,可以加小括号。7. 语句表达式是用运算符连接起来的式

9、子。如:a+b,单个字符或变量都是表达式。语句是C语言执行的基本单位。分号是语句的标志,表达式末尾加上分号就构成了语句。如:a+b;8. 复合赋值运算符+=,-=,/=等int a=3,b=2; b += a; 等价于:b=b+a;a+; = a+=1; = a=a+1;9. 格式控制(非重点)%-m.nf或%-m.nlf,-表示对齐方式,m表示数据总的宽度,n表示小数的位数。如果数据的实际宽度大于指定的m,则按实际长度输出。m可以省略,意思是不指定数据的宽度。%-md,-表示对齐方式,m表示宽度,如果数据宽度达不到指定的宽度m,则在前面或后面加空格。如果数据的实际宽度大于指定的m,则按实际长

10、度输出。例:计算圆的面积,结果保留两位小数。#include #include /表示系统的头文件,表示用户自定义的头文件#define PI 3.1415926 /宏定义,#预处理标志,在编译程序时,程序中所有出现PI的地方均被替换成3.1415926int main()double r,area;printf(请输入圆的半径:n);scanf(%lf,&r); /lf表示:long float/area=PI*r*r;area=PI*pow(r,2); /pow(x,y)是数学函数乘方,表示x的y次方printf(半径为%.2lf圆的面积是:%.2lfn,r,area);return 0;

11、10. 字符、字符串字符用单引号引起来,单引号中只能有一个字符(除一些比较特殊的转义字符外)。字符串是由一个或多个字符组成,用双引号引起来,以0结束。char a=a; /定义一个字符变量a,并赋值为a。等价于:char a; a=a;char a=”a”; /定义一个字符数组a与”a”不同点:a表示一个字符,占用一个字节的存储空间;”a”表示一个字符串,占用两个字节的存储空间,一个是字符a本身,另外一个是字符串的结束标志0。存储方式:字符在存储时存储的是ASCII,所以可以和整型数据进行混合运算。a在存储时并不存储字符a,而是存的a的ASCII 97补充:在定义时赋值称作:定义并初始化。需要

12、记住的ASCII值:大A(65)或小a(97),字符0(48)例:输入一个字符,小写则转换为大写,大写则转换为小写,非字母字符按原样输出。#include int main()char ch;printf(请输入一个字符:n);scanf(%c,&ch);if(ch=a & ch=z) /等价于 a= ch =A & ch=Z)ch+=32;else; /空语句,表示什么也不做printf(%cn,ch);return 0;11. 逗号int a=1,b=2,c=3;优先级较低。取最后一个表达式的值作为整个逗号表达式的值(在有赋值或条件判断时)。if(a=1,b=2,c=3)12. 唯一的三目

13、运算符(条件表达式,问号表达式?:)一般形式:表达式1?表达式2:表达式3;首先判断表达式1(条件判断)的值,如果为真取表达式2的值,否则取表达式3的值。例:#include int main()int a,b,c;printf(请输入两个整数:n);scanf(%d%d,&a,&b);/*if(ab)c=a;elsec=b;*/c=ab?a:b;printf(两个数中较大的为:%dn,c);return 0;第3章 程序控制结构1. 程序执行流程顺序结构、分支结构和循环结构顺序结构按照程序员书写代码的顺序执行,如果遇到分支或循环就按流程执行。2. 分支语句if(条件) /可以是单个变量或常量

14、,也可以是表达式语句; /当if条件成立时执行else if(条件) /else if不能单独出现(前面必须有if语句),也可以没有,也可以出现多个语句;else /else可以没有,如果出现else,则前面必须有与之配对的if,else与它前面没有配对且最近、同一层次上的一个if配对语句;如果不加大括号,则只和离if语句最近的一条语句相关,加过大括号,大括号中所有语句都和if相当。ifelse ifelse它们之前是互斥的,只能执行其中的一条。例:单语句和复合语句#include int main() /当a大于b时交换a和bint a,b,t;printf(请输入两个整数:n);scanf

15、(%d%d,&a,&b);printf(交换前,a=%d,b=%dn,a,b);if(ab)t=a;a=b;b=t;printf(交换后,a=%d,b=%dn,a,b);return 0; 加过大括号的if 不加大括号的if单语句、复合语句:单语句就是一条语句,一个分号。复合语句是加过大括号的一条或多条语句,在逻辑上相当于一条。逻辑值的真和假:非0为真,0为假。如:if(0) 假 if(0) 真 if(!0) 真,!是逻辑非,把真的变成假,把假的变成真 if(!1) 假switch语句(开关语句)一般形式如下:switch(表达式)case 常量表达式1: 语句1; break;case 常量

16、表达式2: 语句2; break;case 常量表达式n: 语句n; break;default:语句n+1;break; /default可以出现在switch中的任何位置,也可以没有。当所有的case匹配均失败的情况下才执行default注意:case后面的常量表达式的值不能相同,要和switch中的表达式值的类型一致。如果case后面都有break,各条语句顺序无关,反之则相关。最后一条语句有无break均可。一般建议在每个case和default后都加上break。当与case后面的表达式匹配成功时,顺序向下执行(不再与case条件比较),直到遇到break或右括号结束。例:采用if语

17、句实现成绩划分等级#include int main() /当a大于b时交换a和bfloat score;printf(请输入你的考试成绩:n);scanf(%f,&score);if(score100)printf(输入的考试成绩非法!n);elseif(score=90)printf(优秀n);else if(score=80 & score=80)printf(良好n);else if(score=70 & score=60 & score70)printf(及格n);else /60分以下,等价于:else if(score60),后面不要else也可以printf(不及格n);ret

18、urn 0;例:采用switch实现成绩等级的划分#include int main() /当a大于b时交换a和bfloat score;printf(请输入你的考试成绩:n);scanf(%f,&score);if(score100)printf(输入的考试成绩非法!n);elseswitch(int)score/10) /强制把score转换为int,当作整数的整除处理case 10:/printf(优秀n);break; /前面注释部分可有可无case 9:printf(优秀n);break;case 8:printf(良好n);break;case 7:printf(中等n);brea

19、k;case 6:printf(及格n);break;default:printf(不及格n); /最后一条语句,不管是default或是case,要不要break都一样return 0;3. 循环语句while(表达式) /当条件表达式成立时,执行循环体语句;do语句;while(表达式); /先执行一次循环体,之后进行条件的判断,成立继续执行,直至条件不成立结束。while条件后有一分号。对比:while循环又叫当型循环,当条件成立时执行(首先进行条件判断);dowhile叫直到型循环,先进行一次条件判断,直到条件不成立时结束。如果初始条件成立,两者完全一样,如果初始条件不成立,while

20、一次不执行,dowhile执行一次。例:求1+2+。+100的和#include int main()int i=1,sum=0;while(i=100)sum+=i;i+; /修改循环控制变量,让循环趋于终止printf(1+2+.+100=%dn,sum);return 0;#include int main()int i=1,sum=0;dosum+=i;i+; /修改循环控制变量,让循环趋于终止while(i=100);printf(1+2+.+100=%dn,sum);return 0;for语句一般形式:for(表达式1; 表达式2; 表达式3)循环体;注意:for中有且只能有两个

21、分号,三个表达式可以省略任意一个。执行流程:1. 先执行表达式1(一般是给循环控制变量赋初值,只执行一次);2. 进行条件表达式2的判断,如果成立执行循环体,不成立则退出循环;3计算表达式3(循环控制变量的修改,让循环趋于终止),然后跳转到第2步。例:#include int main()int i,sum=0;for(i=1;i=100;i+)sum+=i;printf(1+2+.+100=%dn,sum);return 0;与while等价转换:表达式1; /循环控制变量赋初值while(表达式2)循环体;表达式3;总结:当循环次数已知的情况下,用for;当循环次数未知的情况下用while

22、。循环容易出错在循环控制变量的初始值和终止值,避免出现死循环。如果循环的条件是死循环,则必须要保证在循环体内部有退出的条件。4. break和continuebreak:只能用在switch开关语句和循环中。用在循环中时,跳出(结束)所在层循环。#include int main()int i,sum=0;i=1;for(;)sum+=i;if(sum10000)break;i+;/*i=1;while(sum10000)sum+=i;i+;*/printf(1+2+.+%d=%dn,i,sum);return 0;continue:只能用在循环中,结束本次循环,进行下一次条件判断。例:#in

23、clude int main()int i,sum=0;for(i=0;i100;i+)if(i%2 = 0)continue; /如果执行到continue,后面的语句不再执行sum+=i;printf(sum=%dn,sum);return 0;循环嵌套:外层循环执行一次,里层循环执行一轮。尽可能减少循环执行的轮数。例:百马百担,有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?分析:设大马x个,中马y个,小马z个,满足x+y+z=100,另外一个条件:3*x+2*y+z/2=100,注意z/2整除。用其中两个未知数表达出另一个未知数:z=100-x-

24、y,循环由三层转为二层#include int main()int x,y,z,count=0; /count记录循环执行的次数for(x=0;x=33;x+) /从100优化至33for(y=0;y=50;y+) /从100优化至50for(z=0;z=100;z+)count+;if(x+y+z = 100 & 3*x+2*y+z/2.0 = 100)printf(大马:%d 中马:%d 小马:%dn,x,y,z);printf(循环执行次数:%dn,count);return 0;循环层数的优化:#include int main()int x,y,z,count=0; /count记录

25、循环执行的次数for(x=0;x=33;x+)for(y=0;y=50;y+)count+;z=100-x-y;if(3*x+2*y+z/2.0 = 100)printf(大马:%d 中马:%d 小马:%dn,x,y,z);printf(循环执行次数:%dn,count);return 0;例:乘法口诀#include int main()int i,j;for(i=1;i=9;i+) /如果有行列,一般外层控制行,里层控制列for(j=1;j=i;j+) /控制列,行列相关,j和i存在关系,第i行上有i列printf(%d*%d=%-2d ,i,j,i*j);printf(n); /每一行输

26、出完后,输出一个换行return 0;例:求数列1+(1+2)+(1+2+3) +(1+2+n)前20项的和分析:遇到数列一般先找出通项,an=1+2+n(求an需要一个循环),整个式子可以理解为求a1+a2+an的和(又需要一个循环)#include int main()int i,j,sum=0,n=0;for(i=1;i=20;i+) /*n=0;for(j=1;j=i;j+) n+=j; /n=1+2+.isum+=n; /n相当于aiprintf(%d ,n); /额外的输出,输出每一项ai=1+2+.+i的值*/n+=i; /n=1+2+.i,每次在原来第i-1项和的基础之上增加s

27、um+=n;printf(1+(1+2)+(1+2+3) +(1+2+20)=%dn,sum); /每一行输出完后,输出一个换行return 0;例:求1-1/2+1/3-1/4+1/n,输入n,求前n项的和分析:1. 正负号变换;2. 整除变有小数的除法#include int main()int i,n,flag=1; /flag用于变换正负号double sum=0;printf(请输入加的项数:n);scanf(%d,&n);for(i=1;i=n;i+)sum+=flag*1.0/i; /(double)1flag=-flag;printf(1-1/2+1/3-1/4+1/%d=%l

28、fn,n,sum);return 0;补充:getchar(), putchar(), gets(), puts()getchar和putchar是专门用于字符输入输出的函数。用法如下:char ch; ch=getchar(); /给ch赋值 putchar(ch); /输出ch的值,自动在后面加一换行等价于:scanf(“%c”,&ch);/给ch赋值 printf(“%cn”,ch); /输出ch的值例:输入一系列字符,将其中的大写转换为小写,其它不变,直到遇到#号退出。#include int main()char ch;while(1) /1是常量,永远为真,while的条件是死循环

29、,要保证循环体中有退出的条件ch=getchar();if(ch = #)break; /在循环体内部退出的条件if(ch=A & ch=Z)ch+=32;putchar(ch);return 0;例:特殊字符以及进制转换输出#include int main()printf(50%n); /输出50%printf(an); /输出aprintf(nn); /输出nprintf(%on,10); /将十进制的10按八进制输出12printf(%on,010); /将八进制的010按八进制输出12,在整数前加0表示该数是八进制printf(%x%Xn,10,10); /将十进制的10按十六进制输

30、出aprintf(%x %Xn,0x1f,0x10); /将十六进制的0x10按十六进制输出,在整数前加0x表示16进制printf(%d %o %Xn,12,12,12);printf(%d %o %Xn,012,012,012);printf(%d %o %Xn,0x12,0x12,0x12);return 0;例:求当第n项的绝对值小于0.0001时PI的值,PI=1-1/3+1/5+#include #include int main()double n,sum=0,t; /n表示结束的条件int flag=1,i=1;printf(请输入所加项的终止条件:n);scanf(%lf,&

31、n);/*while(1)t=flag*1.0/i;if(t0) /当前项是负数if(-tn)break;else /当前项是正数if(tn)sum+=t;flag=-flag;t=flag*1.0/i;i+=2;printf(PI=%.4lfn,sum*4);return 0;第4章 数组1. 数组的基本概念能够存放多个相同数据类型的特殊变量,下标从0开始,存储空间连续,数组名是首地址,而且是地址常量。2. 数组的定义和初始化一般形式:数据类型 数组名正整数常量表达式;int a10; /定义了一个数组a,可以存放10个整型数据,可以使用的数据范围:a0 - a9赋值:1. 在定义时直接初始

32、化int a10=1,2,3,4,5,6,7,8,9,10; /定义时给数组每一个元素赋初值,值之间用逗号隔开int a=1,2,3,4,5,6,7,8,9,10; /全部元素都赋值时可以省略数组的大小int a10=1,2,3,4,5; /给部分数组元素赋值,如果数组只定义没有初始化,则数组元素均为随机值,如果给部分元素赋了初值,刚剩下的元素系统自动赋值为0注意:数组只有在定义时能整体赋值,定义后只能逐个赋值。如:int a10; a10= 1,2,3,4,5,6,7,8,9,10; / 错误的,定义后不能整体赋值2. 先定义后赋值int a10;for(int i=0;i10;i+)sca

33、nf(“%d”,&ai); /是下标运算符例:输入10个整数,按照从小到大的顺序排列。测试数据:5 9 2 0 4 7 1 6 3 8思想:每次相邻两个数进行比较,大的下沉(冒泡法)第1轮比较结果:5 2 0 4 7 1 6 3 8 9 此轮比较找到最大值9第2轮比较结果:2 0 4 5 1 6 3 7 8 9 此轮比较找到次大值8。第9轮比较结果:0 1 2 3 4 5 6 7 8 9#include #include int main()int a10,i,j;puts(请输入10个整数:);for(i=0;i10;i+)scanf(%d,&ai);printf(排序之前:);for(i=

34、0;i10;i+)printf(%d ,ai);printf(n);/下面代码实现排序for(i=0;i9;i+) /外层循环控制排序的轮数for(j=0;jaj+1) /如果出现下标加减的情况,确保下标不越界int t=aj;aj=aj+1;aj+1=t;for(int k=0;k10;k+)/增加额外输出,看中间结果printf(%d ,ak);printf(n);/printf(排序之后:); for(i=0;i10;i+)printf(%d ,ai);printf(n);return 0;思想:第i轮就拿第i个数和后面的一一比较,大于则交换。测试数据:5 9 2 0 4 7 1 6 3

35、 8第0轮比较结果:0 9 5 2 4 7 1 6 3 8 此轮比较在下标0找到最小值0第1轮比较结果:0 1 9 5 4 7 2 6 3 8 此轮比较在下标1找到次小值1。第8轮比较结果:0 1 2 3 4 5 6 7 8 9#include #include int main()int a10,i,j;puts(请输入10个整数:);for(i=0;i10;i+)scanf(%d,&ai);printf(排序之前:);for(i=0;i10;i+)printf(%d ,ai);printf(n);/下面代码实现排序for(i=0;i9;i+)for(j=i+1;jaj) /如果出现下标加减

36、的情况,确保下标不越界int t=ai;ai=aj;aj=t;/printf(排序之后:); for(i=0;i10;i+)printf(%d ,ai);printf(n);return 0;思想:第i轮假设第i个下标对应的数最小,记录其下标,在与后面的数据比较过程中,若发现有比假设下标还小的数,则替换原来下标,当本轮全部比较完后,进行一次交换#include #include int main()int a10,i,j;puts(请输入10个整数:);for(i=0;i10;i+)scanf(%d,&ai);printf(排序之前:);for(i=0;i10;i+)printf(%d ,ai

37、);printf(n);/下面代码实现排序for(i=0;i9;i+)int index=i; /针对于第i轮,假设第i个下标对应的数最小,如果在比较过程中发现比index下标对应的数还小时,替换下标indexfor(j=i+1;jaj) /如果出现下标加减的情况,确保下标不越界index=j; /记录下标if(index != i) /当假设的最小值发生变化时交换int t=ai;ai=aindex;aindex=t;/printf(排序之后:); for(i=0;i10;i+)printf(%d ,ai);printf(n);return 0;3. 字符数组char str10=H,e,l

38、,l,o; /给部分赋值,则后面自动赋值为空(ASCII为0,0),如果都不初始化,则内容为随机(输出:烫)char str10=”Hello”; /系统会在末尾自动添加0字符数组名同样也是首地址,可以对数组整体赋值,不局限于在定义。char str=H,e,l,l,o; /占5个字节char str=Hello; /占6个字节printf(%dn,sizeof(str); /sizeof求类型或变量占用多少个字节强调:在对字符串整体输入时,是向指定的首地址空间中存放内容,直到按下回车结束,中间不检查是否越界,但一定不要越界,越界可能引发其他一些异常。整体输出时,也不检查是否越界,遇到0结束,

39、如果是printf,遇到空格提前结束。在对字符单个输入%c时,回车也被当做正常的字符处理,存储的是其ASCII 10.例:字符串的输入输出#include int main()char str10=H,e,l,l,o;printf(%sn,str);for(int i=0;i10;i+)printf(%c,stri);printf(n);gets(str); /给str整体赋值puts(str); /,最后输出一个换行,可以输出空格scanf(%s,str); /因为str本身已经是地址,不能再加取地址符&printf(%sn,str); /整体输出str的内容,遇到0输出结束,如果字符串中有

40、空格,提前结束输出for(i=0;i10;i+)scanf(%c,&stri); /对数组元素逐个输入,必须输入十次(10个字符)for(i=0;i10;i+)printf(%c,stri); /对数组元素逐个输出,即使遇到0也不会提前结束return 0;4. 字符串处理函数a. strlen(str); 求字符串str的长度b. strcpy(str1,str2); 把str2中的内容拷贝至str1,需要注意str1的长度要大于或等于str2的长度,确保不越界c. strcmp(str1,str2); 比较str1和str2的大小,逐个从下标为0开始比较相应位置的字符大小,发现不相等的字符

41、退出,如果str1中的字符大于str2中的字符,返回一个大于0的数,如果小于str2中的字符,返回一个小于0的数,如果比较到最后完全相等,则返回0. 需要说明是比较字符的ASCII如:str1=”Hello”; str2=”Hello C.”; strcmp(str1,str2)小于0str1=”hello”; str2=”Hello”; strcmp(str1,str2)大于0d. strcat(str1,str2); 把str2中的内容拷贝到str1后,要求str1的长度大于原有str1中内容长度加str2中内容长度例:输入一个字符串,长度不超过81,分别统计其中数字字符、字母字符和其他字

42、符的个数。#include #include /字符串拷贝函数strcpy,求字符串长度函数strlen,字符串比较函数strcmpint main()char str81;int digit=0,charater=0,other=0,i=0;printf(请输入一个字符串,长度不超过80n);gets(str); /遇到回车结束/*int len1=strlen(str); /求出实际输入了多少个字符,不包括0/int len2=sizeof(str); /求字符数组str占用空间大小,为定义时的81/printf(len1=%d,len2=%dn,len1,len2);for(int i=

43、0;i=a&stri=A&stri=0 & stri=a&stri=A&stri=0 & stri=9) /数字字符digit+;elseother+;i+;printf(字母字符:%d个,数字字符:%d个,其他字符:%d个n,charater,digit,other);return 0;例:输入一个字符串,长度不超过81,再输入一个字符,删除字符串中所有该字符,如果不存在,提示“Not Found.”。分析:从0下标开始,逐个比较查找该字符,找到后,从该字符所在位置开始,把后面的其他字符前移一位,覆盖该字符。如:Not Found. 删除其中的o,在找到第一个o时,后面前移,字符串的长度减1

44、,点的位置存放结束标志0,再接着查找其他的o,删除方法类似。#include #include /字符串拷贝函数strcpy,求字符串长度函数strlen,字符串比较函数strcmpint main()char str81,ch;printf(请输入一个字符串,长度不超过80n);gets(str); /遇到回车结束puts(请输入你要删除的字符:);/scanf(%c,&ch);ch=getchar();int len=strlen(str),i,j,count=0;for(i=0;ilen;i+)if(stri = ch) /查找要删除的字符for(j=i;jlen-1;j+)strj=s

45、trj+1; /后面字符逐个前移strj=0;len-;count+;if(count = 0)puts(Not Found.);puts(str);return 0;5. 二维数组数据类型 数组名正整型常量正整型常量;int a33=1,2,3,4,5,6,7,8,9; /整体赋值,在VC编译器中,二维数组是按行存储。int a33=1,2,3,4,5,6; /整体赋值int a33=1,2,3,4,5,6,7,8,9; /按行赋值int a33=1,2,4,; /按行赋值for(int i=0;i3;i+) /控制行for(int j=0;j3;j+) /控制列scanf(“%d”,&aij);补充:针对于a33数组,每一行都有首地址,每一行的首地址分别为:a0, a1, a2 等价于:&a00, & a10, &a20例:定义二维数组a55并为其赋值,求其对角线元素的和。分析:怎么判断对角线?主(左上到右下):行列下标相等副对角线(右上到左下):行列下标的和等于5-1=4上三角:行下标大于等于列下标下三角:行下标小于等于列下标注意:对角线交叉时的值不能重复加

温馨提示

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

评论

0/150

提交评论