C语言课堂笔记.docx

上传人:b****5 文档编号:7646535 上传时间:2023-01-25 格式:DOCX 页数:27 大小:26.31KB
下载 相关 举报
C语言课堂笔记.docx_第1页
第1页 / 共27页
C语言课堂笔记.docx_第2页
第2页 / 共27页
C语言课堂笔记.docx_第3页
第3页 / 共27页
C语言课堂笔记.docx_第4页
第4页 / 共27页
C语言课堂笔记.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

C语言课堂笔记.docx

《C语言课堂笔记.docx》由会员分享,可在线阅读,更多相关《C语言课堂笔记.docx(27页珍藏版)》请在冰豆网上搜索。

C语言课堂笔记.docx

C语言课堂笔记

第三讲.语言的控制结构

三.循环结构

1.while循环====>先判断,再循环

while(条件)

{语句系列;}

2.do-while循环====>先循环,再判断

格式:

do

{语句系列;}while(条件);

例:

求1+2+3+4+.....100=?

s+=数

求2+4+6+8+....100=?

求10!

=?

例:

输入n个数,统计其中能被3整除的数的个数,

输入-1时,终止输入

cnt++

例:

输入n个数,统计其中正数的个数,当输入0时

终止输入

例:

输入一行字符串,统计其中小写字母的个数

3.用goto语句实现循环

格式:

标号:

----------;

----------;

----------;

goto标号;

例:

求1+2+3+4+........100=?

求1+3+5+7+9+......99=?

4.for循环

格式:

for(变量=初值;终值(条件);增量)

{语句系列;}

如:

for(i=1;i<=30;i++)

for(b=300;b>=20;b-=7)

例:

求1+2+3+.......100=?

求2+4+6+8+.....100=?

10!

=?

题型:

分子分母法

例:

求1/2+2/3+3/4+4/5+.......99/100=?

分子循环:

for(i=1;i<=99;i++)

s+=i/(i+1);

分母循环

for(i=2;i<=100;i++)

s+=(i-1)/i;

例:

求8+1/3+3/5+5/7+7/9+.......97/99=?

例:

有一数列.....求该数列的前20项之和

1*22*33*44*55*6

3*44*55*66*77*8

例:

求1!

+2!

+3!

+4!

+.....10!

=?

题型:

s----sss=1ss=0

分析:

for(i=1;i<=10;i++)

{s*=i;

ss+=s;

}

例:

求1+(1+2)+(1+2+3)+(1+2+3+4)+....+(1+2+3+..n)=?

假设n=10

编循环题:

a.循环次数

b.循环规律

例:

求5+55+555+5555+55555=?

1+12+123+1234+12345=?

1+121+12321+1234321=?

题型:

循环中加条件

例:

找出1---100能被3整除的偶数

找出1----500能被5或7但不能同时被5和7

整除的数,每行输出6个数

例:

输出100-----999的水仙花数

分析:

for(i=100;i<=999;i++)

{a=

b=

c=

if(i==a*a*a+b*b*b+c*c*c)

输出i

}

注:

如何取出千/百/十/个?

永远是%10

千=数/1000%108563====>88563/1000%10

百=数/100%108563====>58563/100%10

十=数/10%10

个=数%10

例:

输出2000----5000的所有回文数,每行输出8个数

回文数:

8888666612213553

习题:

1.输出100------999中满足

百+个被10除所得余数恰是十位的数

每行输出5个数

329

例:

输入任意一个>=10的数,要求

6543====>54323===>398124===>8124

376====>76

提示:

用取余k=196543

while(m>10)

{3+40+500+6000

t+=m%10*k

m/=10;

k*=10;

}

习题:

输入任意一个正整数,求它的逆序数

345===>5431==>112===>21

7851===>1587

5.短路循环/跳出循环

continuebreak

例:

将一个串输出5次

例:

输出1---100能被5整除的数

例:

求1+4+7+10+13+.....i=s

当s不大于5000的最大i值

题型:

素数(>=2的正整数)

flag原理:

====>反向

flag=1;

for(i=2;i<=数-1;i++)

if(数%i==0){flag=0;break;}

elseflag=1;

if(flag==1)是素数;

else不是素数

例:

输入任意一个正整数,判断是否为素数

例:

输入任意一个正整数,判断是否为完数

6=1+2+3

28=1+2+4+7+14

15=1+3+5

例:

求1-3+5-7+9-11+13-15+17....99=?

题型:

异号类

解1:

1591317=====>s1

371115=====>s2

s=s1-s2

例:

求8-1/3+3/5-5/7+7/9-9/11+......97/99=?

题型:

同步循环

for(i=1;i<=100;i++)

for(a=1,b=5;a<=100;a++,b+=3)

for(i=1,j=3,k=5;i<=10;i+=2,j+=3,k+=4)

例:

求1-3+5-7+9-11+13........99=?

for(a=1,b=3;a<=99;a+=4,b+=4)

s+=a-b;

s=0+1-3+5-7+9-11+13-15

例:

判断一个字符串是否为回文串?

"abcdcba"

flag原理:

flag=1;

for(a=0,b=6;a

if(k[a]!

=k[b]){flag=0;break;}

elseflag=1;

if(flag==1)是回文串

6.多重循环:

for(a=1;a<=100;a++)

for(b=1;b<=100;b++)

for(c=1;c<=100;c++)

例:

百钱买百鸡:

数量

1只公鸡:

5元a

1只母鸡:

3元b

3只小鸡:

1元c

分析:

for(a=0;a<=20;a++)

for(b=0;b<=33;b++)

for(c=0;c<=300;c++)

if(5*a+3*b+c/3==100&&a+b+c==100)

输出a,b,c

10/3=39/2

例:

输出100----999的水仙花数

153=1*1*1+5*5*5+3*3*3

例:

输出100-----999的完全平方数

121400256169

变例:

求100---999中的完全平方数且满足

任意两位数字相同的数144400225121

统计满足的个数并求和

例:

输出10----100的所有素数

习题:

输出1-----1000的所有完数

习题:

输入任意一个正整数,求它的逆序数

345===>5431==>112===>21

7851===>158795634====>43659

95634

95634/10000%10===>9

pow(10,4)

95634/1000%10===>5

pow(10,3

while(m>10)

{3+40+500+6000

t+=m%10*k

m/=10;

k*=10;

}

例:

输出满足条件的三位数及四位数

要求six+six+six=nine+nine

如:

940+940+940=1410+1410

分析:

1)3a=2b

2)三位数的十位=四位数的百位

四位数的千位=四位数的十位

for(a=100;a<=999;a++)

for(b=1000;b<=9999;b++)

例:

求500----800的所有素数和

要求:

第1个素数-第2个素数+第3个素数-第4个素数

依此类推

例:

输入两个数a,b输出比a大的b个素数

第四讲.数组

chark[]="windows";

一.一维数组

1.定义:

类型名数组名[下标];

如:

inta[5];floatb[7];chark[100];

注:

下标必为正整型常量

inta[-3];intb[5.6];

inta=3;intb[a];

2.赋值:

inta[5]={10,20,55,800,76};

chark[8]="windows";chark[8]={"windows"}

注:

1)数组的下标从0计算

intk[5];k[5]=9000;

2)若赋了全值,则可省略下标

chark[]="windows";intb[]={10,20,30}

若没有赋全值,则自动补零00.0'\0'

inta[5]={10,33};

floatb[7]={5,1.28,3.14}

chark[100]="windows"

chark[100]={'a','b','c','d','e'};

3)数组名本身就表示数组的首地址

题型:

数列类

例:

有一数列01123581321345589......

求该数列的第15个数

分析:

k[i]=k[i-2]+k[i-1](固定前2,i=2)

例:

有一数列12510172637506582.....

0123

求该数列的第15个数

规律1:

k[i]=k[i-1]+?

规律2:

k[i]=i*i+1(无需固定i=0)

习题:

例:

有一数列01123581321345589.....

求数列中不大于1000的最大的那个数

例:

找出给定一维数组中最大的数max(起泡法)

HHHHHHH

max

max

max

max

intk[7]={34,128,-30,17,999,56,400}

例:

找出给定一维数组中的最大数max及最小数min

例:

有一歌手的分数保存在一个一维数组中

floatk[10]={9.7,9.8,10,8.0,9.5,8.0,

10,8.5,9.9,9.3}

求该歌手的最后得分,并将结果保留2位小数

分析:

找最大及最小

把10个求和

fs=(sum-max-min)/8

k*=1000;

k=(long)((k+5)/10);

k/=100;

题型:

图形类(双重循环)

*i=14空1*

***i=23空3*

*****i=32空5*

*******i=41空7*

*********i=50空9*

for(i=0;i<行;i++)

{空格循环

*号循环

\n

}

******i=60

*****i=51

****

***

**

*

习题:

*****A

*****BBB

*****CCCCC

*****DDDDDDD

*****EEEEEEEEE

1

121

12321

1234321

123454321i=5空格1--ii-1---1

题型:

找数存储m[cnt++]=找到的数

例:

将给定一维数组中能被5整除的数存放至另一数组中

intk[7]={12,17,500,-3,-15,24,75}

cnt=0m[cnt++]=500m[0]=500cnt=1

m[cnt++]=-15m[1]=-15cnt=2

m[cnt++]=75m[2]=75cnt=3

例:

将给定一维数组中满足千+个=百+十的数

存放至另一数组中

intk[7]={2568,9632,5471,2356,1569,8742,3657}

例:

将给定一维数组中的素数存放至另一数组中

intk[7]={12,5,7,13,37,24,88}

题型:

排序类(双重循环)

例:

将给定一维数组中的数升序排序

intk[7]={128,34,-5,500,89,-12,71}

解1:

for(i=0;i<7;i++)

for(j=0;j<7;j++)

if(k[i]升序

t交换

解2:

for(i=0;i<7;i++)

for(j=i+1;j<7;j++)

if(k[i]>k[j])=========>升序

t交换

注:

对奇数排序

对奇数位置的数排序

对下标为奇数的数排序

for

for

if(条件)

if<

t交换

例:

有一歌手的分数保存在一个一维数组中

floatk[10]={9.7,9.8,10,8.0,9.5,8.0,

10,8.5,9.9,9.3}

求该歌手的最后得分,

分析:

先排序

再累加sum:

1----8

fs=sum/8

例:

找出给定一维数组中的次最大数cmax

intk[10]={200,800,100,900,100,500,

900,800,300,100};

900900900800800700600300200100100

二.二维数组

1.定义:

类型名数组名[下标1][下标2];

如:

inta[3][4];floatb[4][5];

chark[5][80];

2.赋值:

a.分行赋值:

inta[][4]={{3,5,7,8},chark[3][80]={"abc",

{2,6,9,4},"desk",

{6,7,2,9}}"app"}

b.线性赋值:

inta[][6]={3,5,7,8,2,6,9,4,6,7,2,9};

注:

1)数组下标从0计算

inta[3][4];a[3][4]=800;

2)若赋了全值,则能省略一维下标,但不能省略

二维下标

3)若没有赋全值,则自动补零00.0'\0'

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

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

12301000

00002000

00003000

for(i=0;i<行;i++)

for(j=0;j<列;j++)

例:

输出一个3*4的矩阵

例:

求给定的3*4矩阵所有元素之和

例:

求给定的5*5矩阵中右上半角元素之和

右上半角:

if(i<=j)

右下半角:

if(i+j>=4)

左下半角:

if(i>=j)

左上半角:

if(i+j<=4)

周边元素之和:

if(i==0||i==4||j==0||j==4)

非周边元素之和:

if(i!

=0&&i!

=4&&j!

=0&&j!

=4)

181112

两条对角线:

if(i==j||i+j==4)

例:

将一个3*4矩阵行列互换

1235136

3478====>242

6251375

581

for(i=0;i<3;i++)

for(j=0;j<4;j++)

b[j][i]=a[i][j];

例:

杨晖三角(以7*7为例)

1000000

1100000

1210000

1331

14641

15101051

1615201561

分析:

1)每行的第0个为1

2)k[i][j]=k[i-1][j-1]+k[i-1][j];

3)输出左下半角

习题:

找出3*5矩阵中每行的最大值(起泡法)

三.字符串数组

chark[]="windows";

1.字符串函数:

必须用到#include"string.h"

strlen():

表示求字符串的长度(不含'\0')

a:

"windows"

n=strlen(a);====>n=7注:

for(i=0;i

最后一个元素的下标=总长-1

strcat():

表示字符串连接函数

strcat(串1,串2):

a:

"windows"b:

"abcde"

strcat(a,b);====>a:

"windowsabcde"b:

不变

注:

应保证串1足够长

memset():

清零

memset(串,0,长度);

如chara[100];memset(a,0,100);

for(i=0;i<100;i++)

a[i]='\0';

strcpy()/strncpy():

字符串复制函数

strcpy(串1,串2):

永远拷到结束

a:

"windows"b:

"abcde"

strcpy(a,b);=====>a:

"abcde"b:

不变

变例:

strcpy(串1,&串2[?

])

strcpy(a,&b[2]);====>a:

"cde"b:

不变

strncpy(串1,串2,n):

a:

"windows"b:

"appledesk"

strncpy(a,b,5);=====>a:

"applews"b:

不变

变例:

strncpy(串1,&串2[?

],n);

strncpy(a,&b[3],4);====>a:

"ledeows"

注:

为避免出现'\0'错误,凡定义一个新串最好用

memset()清零

strcmp():

字符串比较函数

strcmp(串1,串2):

不是比较长度,而是逐字符的比较其ASCII值

正值:

串1>串2"z""windows"

0:

两串相等"windzws""windows"

负值:

串1<串2"windowsa""windowsb"

注:

若a,b是数if(a>b)if(a==b)if(a

若a,b是串if(a>b)if(a==b)if(a

if(strcmp(a,b)>0)if(strcmp(a,b)==0)

strcpy(a,b);

itoa():

表示把数转成串atoi():

表示把串转成数

itoa(数,串,10)k=atoi(串)

chara[]="1234";intk;

k=atoi(a);

例:

输入任意一个正整数,输出它的逆序数

m3456===>654318==81

strrev():

把串逆转"abcde"===>"edcba"

分析:

itoa(m,k,10);strrev(k);m=atoi(k)

2.字符函数:

必须用到#include"ctype.h"

isalpha():

判断是否为字母

if(k[i]>='a'&&k[i]<='z'||k[i]>='A'&&k[i]<='Z')

if(isalpha(k[i]))

islower()/isupper():

判断是否为小写字母/大写字母

if(k[i]>='a'&&k[i]<='z')

if(!

islower(k[i]))

例:

将给定字符串中的第一个字母绕至最后

"windows"====>

"indowsw"

解2:

例:

将给定的字符串逆序存储

"windows"====>"swodniw"

"swodniw"

题型:

删除类

例:

删除给定字符串中所有的'*'

"****win**do***ws!

!

!

******"

if(k[i]!

='*')

m[cnt++]=k[i];

例:

删除给定字符串前端的'*'

例:

删除给定字符串后端的'*'

例:

删除给定字符串头尾的'*'

*indow*

15

例:

删除给定字符串中间的'*'

***window**

38

习题:

输入一个数n,要求删除尾部的n个*

n>*个数,则原串不动

例:

将给定字符串中所有的大写字母改成它的下

一个字母,如果是'Z',则改成'A'

小写及其它字符不动

"aabbyyzzAABBYYZZ!

!

!

***"

"aabbyyzzBBCCZZAA!

!

!

***"

分析:

if(k[i]>='A'&&k[i]<='Y')

k[i]+=1;

elseif(k[i]=='Z')

k[i]='A';

例:

将................小写.........上一个

如果是'a'======>'z',大写及其它字符不动

变例:

将给定字符串中所有的字母改成它的下一个字母

'z'====>'a''Z'======>'A',其它字符不动

例:

统计给定字符串中每个小写字母出现的次数

并分别存入yy[0]-----yy[25]中

"aaaaaaabbbcc"

yy[0]=7yy[1]=3yy[2]=2

第五讲.函数

一.概述

1.C程序的构成单位是函数,一个C程序有且必须只有

一个主函数main,且不管主函数位置如何,永远从

主函数开始执行

2.主函数可以调用其它函数,其它函数也可以

相互调用,但永远不能调用主函数

例:

求1!

+5!

+8!

+9!

+13!

+20!

=?

3.分类:

1)库函数:

#include"_____.h"

#include"math.h"数学函数

sqrt()abs()pow()

#include"stdio.h"输入输出函数

puts()printf()scanf()

#include"string.h"字符串函数

strlen()strcat()strcpy()

#include"ctype.h"字符函数

islower()i

2)空函数:

void函数名()

{}

3)用户自定义函数

二.用户自定义函数:

1.无参函数

如:

voidzdy()

{函数体;}

2.有参函数:

格式:

类型名函数名(参数列表)

{函数体;}

如:

编写函数pfh(),功能为求两数的平方和

注:

关于函数的返回值

a.若函数名前是void,则函数体内一定没有

return语句

b.若函数名前是int/float/char/double等

则函数体内一定有return语句

c.若函数名前什么都没有,则函数体内可能有

return,也可能没有return语句(具体看

题目要求)

三.函数的参数与调用

1.函数的参数

a.形参必须一一定义

b.若形参是普通变量,则是单向传递

实变形变,但形变实不变

例:

编写函数swap(),功能为实现两元素的互换

若形参是数组或指针,则是双向传递

实变形变,形变实也变

2.函数的调用

1)调用方式:

a.作为语句调用:

printf("........");

b.作为表达式调用:

如a=sqrt(b)+6

c.函数

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

当前位置:首页 > 求职职场 > 职业规划

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

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