c总结学习.docx

上传人:b****8 文档编号:10325777 上传时间:2023-02-10 格式:DOCX 页数:20 大小:25.63KB
下载 相关 举报
c总结学习.docx_第1页
第1页 / 共20页
c总结学习.docx_第2页
第2页 / 共20页
c总结学习.docx_第3页
第3页 / 共20页
c总结学习.docx_第4页
第4页 / 共20页
c总结学习.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

c总结学习.docx

《c总结学习.docx》由会员分享,可在线阅读,更多相关《c总结学习.docx(20页珍藏版)》请在冰豆网上搜索。

c总结学习.docx

c总结学习

一、C示例讲解

1、将100~200之间的素数打印出来

1N-S图2.16P7程序P10(6)(C程序设计题解….)

2求素数N逻辑方法是:

先定义i且i<=sqrN;N/i,只有不能整除时循环,直到i=sqrN时,如仍不能整除见分则N是素数

2、求两个数m和n的最大公约数

①N-S图2.17P8程序P10(7)(C程序设计题解….)

②求公约数的方法(m>n):

m/n付给r,即r<=m/n,然后再付值:

m=nn=r

3r=m/nm=nn=r循环下去

判断润年实例及N-S图

1N-S图分析见P11(C程序设计题解….)例见课本P100

总结:

N-S图是逻辑分析程序的走路,然后才可写出程序,试用VB来分析上三例的设计

C程序实例可见书本(C程序设计题解与上机指导第二版)

二、特殊字符的表现见课本P48

例main()

{

Printf(“_ab_c\t_de\rf\tg\n”);_表示空格屏上结果:

fab-c---gdeh------jik

Printf(“h\ti\b\bj__k”);打印结果:

f-------gdeh------j-k

}

说明:

1、出-ab-c,遇到t后到第九列输出-de,后遇到r返回到第一列输出f,遇到t即在本例九列输出g,具体在课本P49例3.5;2、单引号里表示字符,双引号表示字符串;3、运算的优先级见课本P375;例题见(C程序设计题解与上机指导第二版)P15例3.9及P17

三、小知识点

①于++i与i++

如:

dimi=8,j=10;=++i,n=j++;printf(“%d,%d”,m,n);例见(C程序设计题解P15例3.10

说明:

++i:

i的值先变成9,然后将9付给m即m=9,i=9;j++先将j的值付给n即n=10,然后

j的值再加1,即j=11

2整型变量(单精度占两个字节,16位)输出以%d,定义是int形式;实型(浮点占4个字符,32位)输出%f,定义float表示;字符(占1个字节,8位)输出%c,定义char表示(各见课本P43,P45,字符串以%s输出,以str形式输入

3小数,正负的取整,取模的运算:

如int(-1.7),int(1.7),3.7%2,1.3%2等,在c中多数情况下(c的课本P55)取整取向零靠近;VB中取模取整的表示符是:

/\及其运算方法?

四、C语言的运结构

1、顺序结构示例讲解

Main()

{

Inta,b,c;

Longintu,n;

Floatx,y,z;

Charc1,c2;

A=3,b=4,c=5;

X=1.2,y=2.4,c=3.6;

U=5127,n=12876;

C1=’a’,c2=’b’;

Printf(“\n”);

Printf(“a=%2d,b=%2d,c=%2d\n”,a,b,c);黑体表示输出的列

Printf(“x=%8.6f,y=%8.6f,z=%9.6f\n”,x,y,z);黑体表示输出列及小数位数

Printf(“x+y=%5.2f,y+w=%5.2f,z+x=%5.2f\n”,x+y,y+z,z+x);

Printf(“u=%61d,n=%91d\n”,u,n);

Printf(“c1=%cor%d(ASCII)\n”,c1,c2);

}

字符数据的输出

①%m.ns;输出占m列,但只取字符串中左端n个字符,这n个字符输出在m列的右侧,左补空格;%-m.ns,其中mn含义同上,n个字符输出,在m列范围的左侧,右侧补空格,如果n>m,则m自动取n值,保证n个实际字符正常输出

②%m.nf,指定输出的数据共占m列,其中有n位小数,如果数值长度小于m,则左端补空格

%-m.nf,指定输出的数据共占m列,其中有n位小数,如果数值长度小于m,则右端补空格

格式的输入与输出

Scanf(“格式控制,地址列表”),printf(“格式控制,输出列表”)

说明:

①格式控制由%和格式字符组成,如%d,%f;地址列表由&+字符名组成;scanf(“%d”,&a)

②输出列表是需要输出的一些数据,如%d;输出列表由字符名组成;printf(“%d”,a)

Putcher只能输出字符,而且只能是一个字符,而printf可以输出多个数据,且为任意类型

4输入数据不能规定长精度,如可scanf(“%7.2f”,&a);想使a值为12345.67是不合法的,只有输出才可规定精度如printf(“%7.2f”,a);输入时要与输出时格式相对应:

scanf(“%d:

%d”,&a,&b),在銉盘上输入12:

13

VB里的输入与输出格式要求,各运算符的表示与计算,各种数据的表示,如:

字符,实数等

2、选择结构程序设计

内嵌套①if(…)②if…③switch()

If(…)elseif…case1:

Else…elseif…case2:

Else…elseif…case3:

…注:

C中没有endif

①②格式的应用实例

例1有3个整数abc由键盘输入,输出其最大的数的方法,画出N-S图(见设计解题P25)

Main()

{

Inta,b,c;

Printf(“请输入三个整数”);

Scanf(“%d,%d,%d”&a,&b,&c);

If(a

If(b

Printf(“max=%d\n”,c);只有一个“;”号,表示这所有的是一句,if内嵌套

Else

Printf(“max=%d\n”,c);另一句

Elseif(a

Printf(“max=%d\n”c);另一句

Else

Printf(“max=%d\n”,a);另一句

}

例2、x(x<1)

y=2x-1(1<=x<10)

3x-11(x>=10)

Main()

{

Intx,y;

Scanf(“%d”,&x);

If(x<1)

{

y=x;

printf(“x=%3d,y=x=%d\n”,x,y);“x=”,“y=x=”是输出字符,这是一句

}

Elseif(x<11)

{

Y=2*x-1;

Printf(“x=%3d,y=2x-1=%d\n”,x,y);

}另一句因为每个条件句有两条语句所以

Else要用{},同条件句一起作为一句语句

{

Y=3*x-11;

Printf(“x=%3d,y=3*x-11=%d\n”,x,y);

}另一句

}

#如果if与else的数目不一样,为实现程序设计的企图,可以加花括号来确定配对关系

如if()

{if()语句1}这时的else与第一个if配对,如果没有花括号,则与第二个

Else语句2if配对

3switch语句的应用

main()

{

Intc,s;

Floatp,w,d,f;

Scanf(“%f,%f,%d”,&p,&w,&s);

If(s>=300)

C=12;

Elseifc=s/250;

Switch(c)c是switch的表达式

{

Case0:

d=0;break;0,1等是switch的常量表达式

Case1:

d=2;break;

…………..

Case12:

d=15;break;switch的表达式要与case后面的常量表达式的数据

}类型及值是一样的

F=p*w*s*(1-d/100.0);

Printf(“weight=%15.4f”,f);

}#找出VB的选择结构框架及示例

3、循环结构

一、循环的控制goto语句

1、goto语句及goto语句构成的循环

goto语句为无条件转向语句,格式为goto语句标号;语句标号由字母、数字和下划线组成,其第一个字符必须为字母或下划线;如goto123(错),gotolabel_1(对)

2、作用:

与if语句一起构成循环

例:

求1+2+3+-----+100的和

Main()

{

IntI,sum=0;

I=1;

Loop:

if(i<=100)

{

Sum=sum+I;

I++;

Gotoloop;

}

Printf(“%d’,sum);

}

二、循环的控制while语句

结构(表达式)语句

当表达式为非0时,执行while语句中的内嵌套语句,表达式只能为关系表达式、逻辑表

达式,当表达式为常量表达式时,就进入死循环

例:

求1+2+3+-----+100的和

Main()main()

{{intsum=0,I;

IntI,sum=0;scanf(“%d”,&i);

I=1;while(i<=10)

While(i<=100){sum=sum+i

{

Sum=sum+I;i++}

I++;

}printf(“sum=%d”,sum);

Printf(“%d”,sum);}

}

三、循环的控制do--while语句

格式do/循环语句/while(表达式)

特点:

先执行一次指定的循环语句,然后判断是否符合要求去执行循环

例:

求1+2+3+-----+100的和

Main()main()

{{intsum=0,I;scanf(“%d”,&i);

IntI,sum=0;do{sum=sum+I;i++;}

I=1;while(i<=10);printf(“sum=%d”,sum);

Do

{}

Sum=sum+I;while与do---while循环的比较:

一般情况下,当处理同一问题时,

I++;并循环体部分是一样的,则结果相同,但如while后面的表达式

}一开始为假(0值)时,两种循环的结果是不同的,如上右边两

While(i<=100);例中输入1则两结果都是sum=55;如输入11,则while循环结果

Printf(“%d”,sum);是sum=0,而do---while循环结果是sum=11

}

四、for循环语句

①表达式形式:

for(表达式1;表达式2;表达式3;)它的执行过程:

a、先求解表达式1;b、求解表达式2,若其值为真,则执行for语句指定的内嵌套语句,然后执行下面的语句,若为假,则结束循环语句;c、求解表达式3,求解完后再回头(循环)去执行求解表达式2….

例剖析相当i=1;

For(i=1;i<=100;i++)while(i<=100)

Sum=sum+I;{sum=sum+I;i++;}

一般情况下,for语句可以改写成while语句;即:

表达式1;while(表达式2){语句;表达式3}

②for循环的表达式1、3可省,具体省略后的形式变化见课本P111-112

五、循环的嵌套

While()dofor(;;;)

{……{……{for(;;;)

While()do

{{……{

……}执行语句;

}while();}

}while();}

}执行语句;………

几种循环的比较见课本P114

Break语句和continue语句

Break语句用来从循环体中跳出循环体提前结束循环,接着执行下面的语句,但它不能用于循环语句和switch语句之外的任何其它语句

Continue语句用来结束本次循环,不是终止整个循环体

Continue的应用例子

Main()

{

Intn;

For(n=100;n<=200;n++)

{

If(n%3==0)当n能被3整除时执行continue语句,结束本次循环(即跳过

Continue;printf函数语句)只有当n不能被3整除时才能执行printf

Printf(“%d”,n);函数

}

}

For内嵌套实例

打印出以下图案

*main()

***{intI,j,k;

*****for(i=0;i<=3;i++)i控制输出行(上面的4行)

*******{for(j=0;j<=2-I;j++)此for{}号可省,因与前for没有;号,是同一句

*****printf(“”);输出*号前面的空格

***for(k=0;k<=2*I;k++)输出*号

*printf(“*”);输出完一行*号后换行

printf(“\n”);}

for(i=0;i<=2;i++)输出下面的3行*号

{for(j=0;j<=I;j++)此for{}号可省,因与前for没有;号,是同一句

Printf(““);输出*号前面的空格

For(k=0;k<=4-2*I;k++)

Printf(“*”);输出*号

Printf(“\n”);输出完一行*号后换行“

}

}

##for(.…)for(.…)效果等同情况:

因为第二个for没有并行语句,

for(.…){for(.…)因为第三个for都属于第二个for循环的执行

for(.…)for(.…)}语句,如果第二for有平行语句就不同了

例:

main()结果为:

*如去掉第二个for后

{intI,j,k;***的{};结果为:

For(i=0;i<=3;i++)*****

{for(j=0;j<=2-I;j++)****************

Printf(“”);

For(k=;k<=2*I;k++)可见两种情况结果不同,原因在于第二个

Printf(“*”);for后第二for有平行语句Printf(“”)

Printf(“\n”);}第三个for不属于第二个for循环的执行

}

例:

main()

{intI,j,k;结果:

去掉第二个for的{}结果是:

For(i=0;j<=3;i++)*

{for(k=0;k<=2*I;k++)***

Printf(“*”);*********************

Printf(“\n”);}*******

}

例:

main()

{inta,b;程序运行结果:

For(a=1;a<=3;a++)1*1=11*2=21*3=31*4=4

{for(b=1;b<=4;b++)2*1=22*2=42*3=62*4=8

Printf(%d*%d=%d,a,b,a*b);3*1=33*2=63*3=93*4=12

Printf(“\n”);}去掉第二个for运行结果是

}1*1=11*2=21*3=31*4=42*3=62*4=83*1=31*2=63*3=93*4=12

例:

main()main()

{Inta,b;{Inta,b;

For(a=1;a<=3;a++)For(a=1;a<=3;a++)

{for(b=1;b<=4;b++)for(b=1;b<=4;b++)

Printf(%d*%d=%d,a,b,a*b);}Printf(%d*%d=%d,a,b,a*b);

}}

运行结果一样是:

1*1=11*2=21*3=31*4=42*3=62*4=83*1=31*2=63*3=93*4=12

3、一维数组元素

一、小知识点

1数组里的元素下标是从零开始的,常量表达式中可以包含常量和符号常量,不能是变量

2可以只给一部分元素付值,如:

int[10]={1,2,3,4,5},而这只是给数组前五个元素付值

3如果想使一个数组中的全部元素付值为0,可以写:

int[10]={0,0,0,0,0,0,0,0,0,0}或写成a[10]={0}

4在对全部数组元素付初值时可以不指定数组长度如:

a[]={1,2,3,4,5},在定义数组后,如:

a[10]={1,2,3,4,5,6,7,8,9},从键盘上获取元素时可用scanf(“%d”,&a[i]),但不能写成scanf(“%d”,&a)或scanf(“%d”,&a[])或scanf(“%d”,a)

4、二维数组元素

①格式:

类型说明符数组名[常量表达式][常量表达式]

如:

float[3][4],float[5][10]定义a为3*4(3行4列),b为5*10(5行10列)的数组

A[0][0],A[0][1],A[0][2],A[0][3]

A[3][4]=A[1][0],A[1][1],A[1][2],A[1][3]

A[2][0],A[2][1],A[2][2],A[2][3]

②二维数组的付值:

I、分行付值:

inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}

等同于int[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}1,0,0,0其值是对

II、可以对部分付值:

int[3][4]={{1},{5},{9}}等同于a[3][4]=5,0,0,0各行中的

9,0,0,0第一个元素

Inta[3][4]={{1},{5,6}},对第三行不付值,Inta[3][4]={{1},{},{5,6}}第二行不付值

III、对数组全部付值时可以省略行数的下标如:

a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}效果等同于a[][4]={1,2,3,4,5,6,7,8,9,10,11,12}

IV、可以只对部分元素付值,而省略第一维的长度(行的下标),但应分行付值,如:

Inta[][4]={{0,0,3},{},{0,10},}效果等同第一行0,0,3,0第二行0,0,0,0第四行0,10,0,0

二维数组应应用用举例:

12314

将a=456的行与列互换成b=25

36

程序:

main()

{inta[2][3]={{1,2,3},{4,5,6}};

Intb[3][2],ij;

Printf(“arraya:

\n”);

For(i=0;i<=1;i++)

{for(j=0;j<=2;j++)

{printf(“%5d”,a[i][j]);

B[j][i]=a[i][j]];}a[i][j]中的i与倒数第二行b[i][j]中的i不一定一样

Printf(“\n”);}式因为i是变量,其值是可变的,故i在程序中是不

Printf(“arrayb:

\n”);确定的

For(i=0;i<=2;i++)

{for(j=0;j<=1;j++)

Printf(“%5d”,b[i][j]);

Printf(“\n”);}

}

N-S图fori<=1前程序的N-S图fori<=2后段程序的N-S图

Forj<=2fori<=1

输出a[i][j]输出b[i][j]

并a[j][i]=a[i][j]

5、字符数组

1字符数组的定义:

基本与前面的整型数组定义相同,不同之处:

如果初值个数小于数组长度,只将这些字符付给数组中的前面那些元素,其余的元素定义为空字符。

2字符数组引用实例

输出一个钻石图形

程序:

main()

{chardiamond[][5]={{“’’,’’,’*’”},{“’’,’*’,’’,’*’”}{“’*’,’’,’’,’’,’*’”},{“’’,’*’,’’,’*’”,},{“’’,’’,’*’”}}

IntI,j;输出结果*

For(i=0;i<5;i++)**

{for(j=0;j<5;j++)**

Printf(“%c”,diamond[i][j]);**

Printf(“\n”);}*

}

##上程序第二个for是嵌套于第一个for里的;①如果一个字符串第10个字符为’\0’,则此字符串的有效长度为9,也就是说在遇到字符’\0’时,表示字符串结束,由它前面的字符组成字符串;②系统对字符串常量也会自动加一个’\0’作为结束符,所以会比实际多一个字符;③所以有了结束标志’\0’后,字符数组的长度就显得不那么重要了,只要数组长度大于字符串的实际长度就可④所以字符数组表示字符串时,可以如此定义:

char[]={“china”};⑤它的输出与数组不同,要:

printf(“%c”,a[i]),因为它输出的是字符数组名,不是数组元素,字符串的输出printf(“%s”,a);⑥字符数组的输入:

scanf(“%s”a),或scanf(“%c”a)它不用scanf(“%s”%a[i]),原因是scanf函数中的输入项是字符数组名,它应该在先前就已被定义,如:

scanf(“%d”,&str)是错误的,因scanf函数中的输入项是字符数组名时不用再加地址标识符&,因为在C语言中数组名代表该数组的起始地址

如:

C2000此数组若其名是C,占6个字节,程序中如果只写数组名C,

H2001,它就代表起始地址为2000,然后它会按第一个地址逐个输

I2002入或输出。

N2003

A2004

\02005字符串处理函数祥情见课本P135-138

6、函数

一、小知识点

1函数说明:

一个C程序---包含多个源程序;一个源程序----包含多个函数;(也可说一个程序包含多个函数)

2C程序的执行从main函数开始,即主函数,调用其它函数后,流程返回到main函数,在main函数中结束整个程序的运行,注意main函数是系统定义的

3函数间平等,可互相调用,但不能调用主函数(C中main函数)

二、函数种类

1从使用者角度看可分两种:

标准函数即库函数与用户自己定义的函数

2函数的形式看:

无参函数与有参函数

三、无参函数定义的一般形式无参函数

类型标识符函数名()例main()printfstar()

{{printfstar();{printf(“********”);}

声明部分printf_message();print_message()

语句printfstar();{printf(“howdoyou\ndo!

”);

}}}

说明:

无参函数一般不需要返回值,因此可以不写类型标识符

四、有参函数定义的一般形式例有参函数

类型标识符函数名(形式参数列表)main()max(intx,inty)

{{inta,b,c;{intz;

声明部分;scanf(“%d,%d”,&a,&b);z=x>y?

x:

y;

语句;c=max(a,b);a,b是实参return(z)

}printf(“maxis%d”,c);}}

#类型特别说明

1上例中没有函数定义,即intmax(intx,inty)前的int,原因在于C语言规定凡不加类型说明的函数,一律自动按整型处理

2定义函数时对函数值说明的类型一般应该和return语句中的表达

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 育儿知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1