C语言课堂笔记Word文档格式.docx
《C语言课堂笔记Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言课堂笔记Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
+4!
+.....10!
s----sss=1ss=0
分析:
=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;
=999;
{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;
=数-1;
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(a=1,b=5;
a<
a++,b+=3)
for(i=1,j=3,k=5;
i<
i+=2,j+=3,k+=4)
求1-3+5-7+9-11+13........99=?
for(a=1,b=3;
a+=4,b+=4)
s+=a-b;
s=0+1-3+5-7+9-11+13-15
判断一个字符串是否为回文串?
"
abcdcba"
flag原理:
for(a=0,b=6;
b;
a++,b--)
if(k[a]!
=k[b]){flag=0;
if(flag==1)是回文串
6.多重循环:
for(a=1;
a<
a++)
for(b=1;
b<
b++)
for(c=1;
c<
c++)
百钱买百鸡:
数量
1只公鸡:
5元a
1只母鸡:
3元b
3只小鸡:
1元c
分析:
for(a=0;
for(b=0;
=33;
for(c=0;
=300;
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的所有完数
158795634====>
43659
95634
95634/10000%10===>
9
pow(10,4)
95634/1000%10===>
5
pow(10,3
while(m>
输出满足条件的三位数及四位数
要求six+six+six=nine+nine
940+940+940=1410+1410
1)3a=2b
2)三位数的十位=四位数的百位
四位数的千位=四位数的十位
for(a=100;
for(b=1000;
=9999;
求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]="
chark[8]={"
1)数组的下标从0计算
intk[5];
k[5]=9000;
2)若赋了全值,则可省略下标
intb[]={10,20,30}
若没有赋全值,则自动补零00.0'
\0'
inta[5]={10,33};
floatb[7]={5,1.28,3.14}
chark[100]="
chark[100]={'
a'
'
b'
c'
d'
e'
};
3)数组名本身就表示数组的首地址
数列类
有一数列01123581321345589......
求该数列的第15个数
k[i]=k[i-2]+k[i-1](固定前2,i=2)
有一数列12510172637506582.....
0123
规律1:
k[i]=k[i-1]+?
规律2:
k[i]=i*i+1(无需固定i=0)
有一数列01123581321345589.....
求数列中不大于1000的最大的那个数
找出给定一维数组中最大的数max(起泡法)
HHHHHHH
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;
行;
{空格循环
*号循环
\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}
7;
for(j=0;
j<
j++)
if(k[i]<
k[j])========>
升序
t交换
解2:
for(j=i+1;
if(k[i]>
k[j])=========>
注:
对奇数排序
对奇数位置的数排序
对下标为奇数的数排序
for
if(条件)
if<
求该歌手的最后得分,
先排序
再累加sum:
1----8
fs=sum/8
找出给定一维数组中的次最大数cmax
intk[10]={200,800,100,900,100,500,
900,800,300,100};
900900900800800700600300200100100
二.二维数组
类型名数组名[下标1][下标2];
inta[3][4];
floatb[4][5];
chark[5][80];
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计算
a[3][4]=800;
2)若赋了全值,则能省略一维下标,但不能省略
二维下标
3)若没有赋全值,则自动补零00.0'
inta[3][4]={1,2,3};
inta[3][4]={{1},{2},{3}};
12301000
00002000
00003000
列;
输出一个3*4的矩阵
求给定的3*4矩阵所有元素之和
求给定的5*5矩阵中右上半角元素之和
右上半角:
if(i<
=j)
右下半角:
if(i+j>
=4)
左下半角:
if(i>
左上半角:
if(i+j<
周边元素之和:
if(i==0||i==4||j==0||j==4)
非周边元素之和:
if(i!
=0&
i!
=4&
j!
181112
两条对角线:
if(i==j||i+j==4)
将一个3*4矩阵行列互换
1235136
3478====>
242
6251375
581
3;
4;
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矩阵中每行的最大值(起泡法)
列
三.字符串数组
1.字符串函数:
必须用到#include"
string.h"
strlen():
表示求字符串的长度(不含'
)
a:
"
n=strlen(a);
====>
n=7注:
strlen(串);
最后一个元素的下标=总长-1
strcat():
表示字符串连接函数
strcat(串1,串2):
b:
abcde"
strcat(a,b);
a:
windowsabcde"
不变
应保证串1足够长
memset():
清零
memset(串,0,长度);
如chara[100];
memset(a,0,100);
100;
a[i]='
strcpy()/strncpy():
字符串复制函数
strcpy(串1,串2):
永远拷到结束
strcpy(a,b);
=====>
strcpy(串1,&
串2[?
])
strcpy(a,&
b[2]);
cde"
strncpy(串1,串2,n):
appledesk"
strncpy(a,b,5);
applews"
strncpy(串1,&
],n);
strncpy(a,&
b[3],4);
ledeows"
为避免出现'
错误,凡定义一个新串最好用
memset()清零
strcmp():
字符串比较函数
strcmp(串1,串2):
不是比较长度,而是逐字符的比较其ASCII值
正值:
串1>
串2"
z"
0:
两串相等"
windzws"
负值:
串1<
windowsa"
windowsb"
若a,b是数if(a>
b)if(a==b)if(a<
b)a=b
若a,b是串if(a>
if(strcmp(a,b)>
0)if(strcmp(a,b)==0)
itoa():
表示把数转成串atoi():
表示把串转成数
itoa(数,串,10)k=atoi(串)
chara[]="
1234"
intk;
k=atoi(a);
输入任意一个正整数,输出它的逆序数
m3456===>
654318==81
strrev():
把串逆转"
===>
edcba"
itoa(m,k,10);
strrev(k);
m=atoi(k)
2.字符函数:
ctype.h"
isalpha():
判断是否为字母
='
k[i]<
z'
||k[i]>
A'
Z'
if(isalpha(k[i]))
islower()/isupper():
判断是否为小写字母/大写字母
if(!
islower(k[i]))
将给定字符串中的第一个字母绕至最后
indowsw"
将给定的字符串逆序存储
swodniw"
删除类
删除给定字符串中所有的'
*'
****win**do***ws!
!
******"
if(k[i]!
m[cnt++]=k[i];
删除给定字符串前端的'
删除给定字符串后端的'
删除给定字符串头尾的'
*indow*
15
删除给定字符串中间的'
***window**
38
输入一个数n,要求删除尾部的n个*
n>
*个数,则原串不动
将给定字符串中所有的大写字母改成它的下
一个字母,如果是'
则改成'
小写及其它字符不动
aabbyyzzAABBYYZZ!
***"
aabbyyzzBBCCZZAA!
Y'
k[i]+=1;
elseif(k[i]=='
k[i]='
将................小写.........上一个
如果是'
======>
'
大写及其它字符不动
变例:
将给定字符串中所有的字母改成它的下一个字母
'
其它字符不动
统计给定字符串中每个小写字母出现的次数
并分别存入yy[0]-----yy[25]中
aaaaaaabbbcc"
yy[0]=7yy[1]=3yy[2]=2
第五讲.函数
一.概述
1.C程序的构成单位是函数,一个C程序有且必须只有
一个主函数main,且不管主函数位置如何,永远从
主函数开始执行
2.主函数可以调用其它函数,其它函数也可以
相互调用,但永远不能调用主函数
+5!
+8!
+9!
+13!
+20!
3.分类:
1)库函数:
#include"
_____.h"
math.h"
数学函数
sqrt()abs()pow()
stdio.h"
输入输出函数
puts()printf()scanf()
字符串函数
strlen()strcat()strcpy()
字符函数
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.函数