1、+4!+.10! s-ss s=1 ss=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
2、*c) 输出i 注:如何取出千/百/十/个? 永远是%10 千=数/1000%10 8563=8 8563/1000%10 百=数/100%10 8563=5 8563/100%10 十=数/10%10 个=数%10输出2000-5000的所有回文数,每行输出8个数 回文数: 8888 6666 1221 3553 习题:1.输出 100-999中满足 百+个被10除所得余数恰是十位的数 每行输出5个数 329输入任意一个=10的数,要求 6543=543 23=3 98124=8124 376=76提示: 用取余 k=1 96543 while(m10) 3 +40 +500 +6000 t
3、+=m%10*k m/=10; k*=10;输入任意一个正整数,求它的逆序数 345=543 1=1 12=21 7851=15875.短路循环/跳出循环 continue break将一个串输出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; else flag=1; if(flag=1) 是素数; else 不是素数输入任意一个正整数,判断是否为素数输入任意一个正整数,判断是否为完数 6=1+2+3 28=1+2+4+7+1
4、4 15=1+3+5求1-3+5-7+9-11+13-15+17.99=?异号类解1: 1 5 9 13 17 =s1 3 7 11 15 =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;
5、b; a+,b-) if(ka!=kb) flag=0; if(flag=1) 是回文串6.多重循环: for(a=1;aa+) for(b=1;bb+) for(c=1;c43659 9 5 6 3 4 95634/10000%10=9 pow(10,4) 95634/1000%10=5 pow(10,3while(m输出满足条件的三位数及四位数 要求 six+six+six=nine+nine 940+940+940=1410+1410 1)3a=2b 2) 三位数的十位=四位数的百位 四位数的千位=四位数的十位 for(a=100; for(b=1000;=9999;求500-800的所
6、有素数和 要求:第1个素数-第2个素数+第3个素数-第4个素数 依此类推输入两个数a,b 输出比a大的b个素数 第四讲.数组 char k=windows;一.一维数组1.定义: 类型名 数组名下标; int a5; float b7; char k100;下标必为正整型常量 int a-3; int b5.6; int a=3; int ba;2.赋值: int a5=10,20,55,800,76; char k8= char k8=1)数组的下标从0计算 int k5; k5=9000; 2)若赋了全值,则可省略下标 int b=10,20,30 若没有赋全值,则自动补零 0 0.0 0
7、 int a5=10,33; float b7=5,1.28,3.14 char k100= char k100=a,bcde; 3)数组名本身就表示数组的首地址数列类有一数列 0 1 1 2 3 5 8 13 21 34 55 89 . 求该数列的第15个数 ki=ki-2+ki-1 (固定前2,i=2)有一数列 1 2 5 10 17 26 37 50 65 82. 0 1 2 3规律1: ki=ki-1+?规律2: ki=i*i+1 (无需固定 i=0)有一数列 0 1 1 2 3 5 8 13 21 34 55 89 . 求数列中不大于1000的最大的那个数找出给定一维数组中最大的数m
8、ax(起泡法) H H H H H H H max int k7=34,128,-30,17,999,56,400找出给定一维数组中的最大数max及最小数min有一歌手的分数保存在一个一维数组中 float k10=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=1 4空 1* * i=2 3空 3* * i=3 2空 5* * i=4 1空
9、7* * i=5 0空 9* for(i=0;行; 空格循环 *号循环 n * i=6 0 * i=5 1 * * * * * A * BBB * CCCCC * DDDDDDD * EEEEEEEEE 1 121 12321 1234321 123454321 i=5 空格 1-i i-1-1找数存储 mcnt+=找到的数将给定一维数组中能被5整除的数存放至另一数组中int k7=12,17,500,-3,-15,24,75 cnt=0 mcnt+=500 m0=500 cnt=1 mcnt+=-15 m1=-15 cnt=2 mcnt+=75 m2=75 cnt=3将给定一维数组中满足千+
10、个=百+十的数 存放至另一数组中int k7=2568,9632,5471,2356,1569,8742,3657将给定一维数组中的素数存放至另一数组中 int k7=12,5,7,13,37,24,88排序类(双重循环)将给定一维数组中的数升序排序 int k7=128,34,-5,500,89,-12,717; for(j=0;jj+) if(ki升序 t交换解2: for(j=i+1; if(kikj)=注:对奇数排序 对奇数位置的数排序 对下标为奇数的数排序 for if(条件) if 求该歌手的最后得分, 先排序 再累加 sum: 1-8 fs=sum/8找出给定一维数组中的次最大数
11、cmaxint k10=200,800,100,900,100,500, 900,800,300,100; 900 900 900 800 800 700 600 300 200 100 100二.二维数组 类型名 数组名下标1下标2; int a34; float b45; char k580; a.分行赋值:int a4= 3,5,7,8, char k380=abc, 2,6,9,4, desk 6,7,2,9 app b.线性赋值:int a6=3,5,7,8,2,6,9,4,6,7,2,9; 1)数组下标从0计算 a34=800; 2)若赋了全值,则能省略一维下标,但不能省略 二维下
12、标 3)若没有赋全值,则自动补零 0 0.0 int a34=1,2,3; int a34=1,2,3; 1 2 3 0 1 0 0 0 0 0 0 0 2 0 0 0 0 0 0 0 3 0 0 0列;输出一个3*4的矩阵求给定的3*4矩阵所有元素之和求给定的5*5矩阵中右上半角元素之和 右上半角: if(i=4) 左下半角: if(i 左上半角: if(i+j 2 4 2 6 2 5 1 3 7 5 5 8 13;4; bji=aij;杨晖三角(以7*7为例) 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 2 1 0 0 0 0 1 3 3 1 1 4 6 4 1 1 5 1
13、0 10 5 1 1 6 15 20 15 6 1 1)每行的第0个为1 2)kij=ki-1j-1+ki-1j; 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
14、,长度); 如 char a100; memset(a,0,100);100; ai= strcpy()/strncpy():字符串复制函数 strcpy(串1,串2):永远拷到结束 strcpy(a,b);= strcpy(串1,&串2?) strcpy(a,&b2);cde strncpy(串1,串2,n):appledesk strncpy(a,b,5);applews strncpy(串1,&,n); strncpy(a,&b3,4);ledeows为避免出现错误,凡定义一个新串最好用 memset()清零 strcmp():字符串比较函数 strcmp(串1,串2): 不是比较长度,
15、而是逐字符的比 较其ASCII值 正值: 串1串2 z 0: 两串相等 windzws 负值: 串1b) if(a=b) if(a if(strcmp(a,b)0) if(strcmp(a,b)=0) itoa():表示把数转成串 atoi():表示把串转成数 itoa(数,串,10) k= atoi(串) char a=1234 int k; k=atoi(a);输入任意一个正整数,输出它的逆序数 m 3456=6543 18=81 strrev():把串逆转 =edcba itoa(m,k,10); strrev(k); m=atoi(k) 2.字符函数:ctype.h isalpha()
16、:判断是否为字母=kiAZ if(isalpha(ki) islower()/isupper():判断是否为小写字母/大写字母 if(!islower(ki)将给定字符串中的第一个字母绕至最后indowsw将给定的字符串逆序存储swodniw删除类删除给定字符串中所有的*win*do*ws!* if(ki! mcnt+=ki;删除给定字符串前端的删除给定字符串后端的删除给定字符串头尾的 *indow* 1 5删除给定字符串中间的 *window* 3 8 输入一个数n,要求删除尾部的n个* n * 个数,则原串不动将给定字符串中所有的大写字母改成它的下 一个字母,如果是,则改成 小写及其它字符
17、不动aabbyyzzAABBYYZZ!*aabbyyzzBBCCZZAA!Y ki+=1; else if(ki= ki=将.小写.上一个 如果是=,大写及其它字符不动变例: 将给定字符串中所有的字母改成它的下一个字母 ,其它字符不动统计给定字符串中每个小写字母出现的次数 并分别存入 yy0-yy25中aaaaaaabbbcc yy0=7 yy1=3 yy2=2 第五讲.函数一.概述 1.C程序的构成单位是函数,一个C程序有且必须只有 一个主函数main,且不管主函数位置如何,永远从 主函数开始执行 2.主函数可以调用其它函数,其它函数也可以 相互调用,但永远不能调用主函数+5!+8!+9!+
18、13!+20! 3.分类: 1)库函数: #include _.hmath.h 数学函数 sqrt() abs() pow()stdio.h 输入输出函数 puts() printf() scanf() 字符串函数 strlen() strcat() strcpy() 字符函数 islower() i 2)空函数: void 函数名() 3)用户自定义函数二.用户自定义函数: 1.无参函数 void zdy( ) 函数体; 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