c语言课堂笔记,C语言课堂笔记.doc

253b171540df25e1b84436cbe50dfc72.gifC语言课堂笔记.doc

第三讲.语言的控制结构三.循环结构1.while循环先判断,再循环 while条件 语句系列;2.do-while循环先循环,再判断 格式 do 语句系列; while条件;例求1234.100 s数 求2468100 求10 例输入n个数,统计其中能被3整除的数的个数, 输入-1时,终止输入 cnt例输入n个数,统计其中正数的个数,当输入0时 终止输入例输入一行字符串,统计其中小写字母的个数3.用goto语句实现循环 格式 标号 ; ; ; goto标号;例 求1234100 求13579994.for循环 格式 for变量初值; 终值条件; 增量 语句系列; 如 fori1;i30;i forb300;b20;b-7例求 123.100 求 2468.100 10题型分子分母法例 求 1/22/33/44/5.99/100 分子循环 fori1;i99;i si/i1; 分母循环 fori2;i100;i si-1/i;例 求 81/33/55/77/9.97/99例有一数列.求该数列的前20项之和 1*2 2*3 3*4 4*5 5*6 3*4 4*5 5*6 6*7 7*8例 求 1234.10题型 sss s1 ss0 分析 fori1;i10;i s*i; sss; 例求 1121231234123n 假设n10编循环题 a.循环次数 b.循环规律例 求 555555555555555 112123123412345 1121123211234321题型循环中加条件例找出1-100能被3整除的偶数 找出1500能被5或7但不能同时被5和7 整除的数,每行输出6个数例输出 100-999的水仙花数 分析 fori100;i999;i a b c ifia*a*ab*b*bc*c*c 输出i 注如何取出千/百/十/个 永远是10 千数/100010 85638 8563/100010 百数/10010 85635 8563/10010 十数/1010 个数10例输出20005000的所有回文数,每行输出8个数 回文数 8888 6666 1221 3553 习题1.输出 100999中满足 百个被10除所得余数恰是十位的数 每行输出5个数 329例输入任意一个10的数,要求 6543543 233 981248124 37676提示 用取余 k1 96543 whilem10 3 40 500 6000 tm10*k m/10; k*10; 习题输入任意一个正整数,求它的逆序数 345543 11 1221 785115875.短路循环/跳出循环 continue break例将一个串输出5次例输出1-100能被5整除的数例求 1471013.is 当s不大于5000的最大i值题型素数2的正整数 flag原理反向 flag1; fori2;i数-1;i if数i0 flag0; break; else flag1; ifflag1 是素数; else 不是素数例输入任意一个正整数,判断是否为素数例输入任意一个正整数,判断是否为完数 6123 28124714 15135例求1-35-79-1113-151799题型异号类解1 1 5 9 13 17 s1 3 7 11 15 s2 ss1-s2例求 8-1/33/5-5/77/9-9/1197/99题型同步循环 fori1;i100;i fora1,b5; a100; a,b3 fori1,j3,k5; i10; i2,j3,k4例求1-35-79-111399 fora1,b3; a99; a4,b4 sa-b; s0 1-3 5-7 9-11 13-15例判断一个字符串是否为回文串 abcdcba flag原理 flag1; fora0,b6; ab; a,b ifkakb flag0; break; else flag1; ifflag1 是回文串6.多重循环 fora1;a100;a forb1;b100;b forc1;c100;c例百钱买百鸡 数量 1只公鸡 5元 a 1只母鸡 3元 b 3只小鸡 1元 c分析 fora0;a20;a forb0;b33;b forc0;c300;c if5*a3*bc/3100abc100 输出a,b,c 10/33 9/2例输出100999的水仙花数 1531*1*15*5*53*3*3例输出100-999的完全平方数 121 400 256 169 变例求100-999中的完全平方数且满足 任意两位数字相同的数 144 400 225 121 统计满足的个数并求和例输出10100的所有素数习题 输出1-1000的所有完数习题输入任意一个正整数,求它的逆序数 345543 11 1221 78511587 9563443659 9 5 6 3 4 95634/10000109 pow10,4 95634/1000105 pow10,3whilem10 3 40 500 6000 tm10*k m/10; k*10; 例输出满足条件的三位数及四位数 要求 sixsixsixninenine 如 94094094014101410 分析 13a2b 2 三位数的十位四位数的百位 四位数的千位四位数的十位 fora100;a999;a forb1000;b9999;b例求500800的所有素数和 要求第1个素数-第2个素数第3个素数-第4个素数 依此类推例输入两个数a,b 输出比a大的b个素数 第四讲.数组 char kwindows;一.一维数组1.定义 类型名 数组名下标; 如 int a5; float b7; char k100; 注下标必为正整型常量 int a-3; int b5.6; int a3; int ba;2.赋值 int a510,20,55,800,76; char k8windows; char k8windows 注1数组的下标从0计算 int k5; k59000; 2若赋了全值,则可省略下标 char kwindows; int b10,20,30 若没有赋全值,则自动补零 0 0.0 0 int a510,33; float b75,1.28,3.14 char k100windows char k100a,b,c,d,e; 3数组名本身就表示数组的首地址题型数列类例有一数列 0 1 1 2 3 5 8 13 21 34 55 89 求该数列的第15个数分析 kiki-2ki-1 固定前2,i2例有一数列 1 2 5 10 17 26 37 50 65 82. 0 1 2 3 求该数列的第15个数规律1 kiki-1规律2 kii*i1 无需固定 i0习题例有一数列 0 1 1 2 3 5 8 13 21 34 55 89 . 求数列中不大于1000的最大的那个数例找出给定一维数组中最大的数max起泡法 H H H H H H H max max max max int k734,128,-30,17,999,56,400例找出给定一维数组中的最大数max及最小数min例有一歌手的分数保存在一个一维数组中 float k109.7, 9.8, 10, 8.0, 9.5, 8.0, 10, 8.5, 9.9, 9.3 求该歌手的最后得分,并将结果保留2位小数分析 找最大及最小 把10个求和 fssum-max-min/8 k*1000; klongk5/10; k/100;题型 图形类双重循环 * i1 4空 1* * i2 3空 3* * i3 2空 5* * i4 1空 7* * i5 0空 9* fori0;i行;i 空格循环 *号循环 n i6 0 * i5 1 * *习题 * A * BBB * CCCCC * DDDDDDD * EEEEEEEEE 1 121 12321 1234321 123454321 i5 空格 1i i-1-1题型找数存储 mcnt找到的数例将给定一维数组中能被5整除的数存放至另一数组中int k712,17,500,-3,-15,24,75 cnt0 mcnt500 m0500 cnt1 mcnt-15 m1-15 cnt2 mcnt75 m275 cnt3例将给定一维数组中满足千个百十的数 存放至另一数组中int k72568,9632,5471,2356,1569,8742,3657例将给定一维数组中的素数存放至另一数组中 int k712,5,7,13,37,24,88题型排序类双重循环例将给定一维数组中的数升序排序 int k7128,34,-5,500,89,-12,71解1 fori0;i7;i forj0;j7;j ifkikj 升序 t交换解2 fori0;i7;i forji1;j7;j ifkikj升序 t交换注对奇数排序 对奇数位置的数排序 对下标为奇数的数排序 for for if条件 if t交换例有一歌手的分数保存在一个一维数组中 float k109.7, 9.8, 10, 8.0, 9.5, 8.0, 10, 8.5, 9.9, 9.3 求该歌手的最后得分, 分析 先排序 再累加 sum 18 fssum/8例找出给定一维数组中的次最大数cmaxint k10200,800,100,900,100,500, 900,800,300,100; 900 900 900 800 800 700 600 300 200 100 100二.二维数组1.定义 类型名 数组名下标1下标2; 如 int a34; float b45; char k580;2.赋值 a.分行赋值int a4 3,5,7,8, char k380abc, 2,6,9,4, desk, 6,7,2,9 app b.线性赋值int a63,5,7,8,2,6,9,4,6,7,2,9; 注 1数组下标从0计算 int a34; a34800; 2若赋了全值,则能省略一维下标,但不能省略 二维下标 3若没有赋全值,则自动补零 0 0.0 0 int a341,2,3; int a341,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 fori0;i行;i forj0;j列;j例输出一个3*4的矩阵例求给定的3*4矩阵所有元素之和例求给定的5*5矩阵中右上半角元素之和 右上半角 ifij 右下半角 ifij4 左下半角 ifij 左上半角 ifij4周边元素之和 ifi0i4j0j4非周边元素之和 ifi0i4j0j418 11 12两条对角线 if ijij4例将一个3*4矩阵行列互换 1 2 3 5 1 3 6 3 4 7 8 2 4 2 6 2 5 1 3 7 5 5 8 1 fori0;i3;i forj0;j4;j bjiaij;例杨晖三角以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 10 10 5 1 1 6 15 20 15 6 1分析 1每行的第0个为1 2kijki-1j-1ki-1j; 3输出左下半角习题 找出3*5矩阵中每行的最大值起泡法 列三.字符串数组 char kwindows; 1.字符串函数 必须用到include string.h strlen表示求字符串的长度不含0 awindows nstrlena; n7 注 fori0;istrlen串;i 最后一个元素的下标总长-1 strcat表示字符串连接函数 strcat串1,串2 awindows babcde strcata,b;awindowsabcde b不变 注应保证串1足够长 memset清零 memset串,0,长度; 如 char a100; memseta,0,100; fori0;i100;i ai0; strcpy/strncpy字符串复制函数 strcpy串1,串2永远拷到结束 awindows babcde strcpya,b;aabcde b不变 变例 strcpy串1,acde b不变 strncpy串1,串2,n awindows bappledesk strncpya,b,5;aapplews b不变 变例 strncpy串1, strncpya,aledeows 注为避免出现0错误,凡定义一个新串最好用 memset清零 strcmp字符串比较函数 strcmp串1,串2 不是比较长度,而是逐字符的比 较其ASCII值 正值 串1串2 z windows 0 两串相等 windzws windows 负值 串1串2 windowsa windowsb 注 若a,b是数 ifab ifab ifab ab 若a,b是串 ifab ifab ifab ab ifstrcmpa,b0 ifstrcmpa,b0 strcpya,b; itoa表示把数转成串 atoi表示把串转成数 itoa数,串,10 k atoi串 char a1234; int k; katoia;例输入任意一个正整数,输出它的逆序数 m 34566543 1881 strrev把串逆转 abcdeedcba 分析 itoam,k,10; strrevk; matoik 2.字符函数 必须用到include ctype.h isalpha判断是否为字母 ifkiakizkiAkiZ ifisalphaki islower/isupper判断是否为小写字母/大写字母 ifkiakiz ifislowerki例将给定字符串中的第一个字母绕至最后 windows indowsw解2 例将给定的字符串逆序存储 windowsswodniw swodniw题型删除类例删除给定字符串中所有的* windo*ws ifki* mcntki;例删除给定字符串前端的*例删除给定字符串后端的*例删除给定字符串头尾的* *indow* 1 5例删除给定字符串中间的* *window 3 8习题 输入一个数n,要求删除尾部的n个* n * 个数,则原串不动例将给定字符串中所有的大写字母改成它的下 一个字母,如果是Z,则改成A 小写及其它字符不动 aabbyyzzAABBYYZZ* aabbyyzzBBCCZZAA* 分析 ifkiAkiY ki1; else ifkiZ kiA;例将小写.上一个 如果是az,大写及其它字符不动变例 将给定字符串中所有的字母改成它的下一个字母 za ZA,其它字符不动例统计给定字符串中每个小写字母出现的次数 并分别存入 yy0-yy25中 aaaaaaabbbcc yy07 yy13 yy22 第五讲.函数一.概述 1.C程序的构成单位是函数,一个C程序有且必须只有 一个主函数main,且不管主函数位置如何,永远从 主函数开始执行 2.主函数可以调用其它函数,其它函数也可以 相互调用,但永远不能调用主函数例 求 15891320 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.无参函数 如 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.作为表达式调用如 asqrtb6 c.函数本身作为另一函数的形参函数的嵌套 如 ksqrtabsm 2调用方法 嵌套调用 递归调用 直接递归/间接递归例编写函数jc,功能为求某数的阶乘例编写函数 shulie,功能为求该数列的下一个数 0 1 1 2 3 5 8 13 21 34 55.四.变量的作用域 全局变量在函数体外定义,其作用域是整个文件 所有函数均可调用它 局部变量在函数体内定义,其作用域是整个函数 只有本函数才能调用它 注当全局变量与局部变量重名时,局部变量优先 全局变量被屏蔽起来局部变量 auto变量进入函数体就有效,退出就消失, 每进入一次函数体,就必须赋一次 初值,是一个临时存储单元内存 register变量与auto作用完全一致,它将 变量保存在CPU的寄存器中,因此 对register变量不能进行求地址的 运算,是永久存储单元 static变量在函数体内使用,但是可不必赋 初值,系统自动认为是0,其作用域可 以延伸以最后一次值为主 第六讲.指针 int a500;指针变量专门用来存放地址的变量,叫指针变量, 简称指针一.定义 类型名 *指针变量名; 如 int *a; float *b; char *k等注当定义好一个指针后,必须使它指向一个地址, 否则该指针毫无意义. int a500,*k k 二.指针运算 1取地址 k; kn; k-n; 注指针与指针只能相减,不能相加 2掌握 *k *k *k *k的区别 *k取出k所在单元的值,k再移动至下一单元 *k 同上 *k 取出k所在单元的值,并使该值加1 指针k没有移动 *k先让k移动至下一单元,并取出下一单元的值 3掌握数组名,指针变量的区别 地址常量 地址变量 int a,*k,s5; k s2.指针与二维数组 定义 类型名 *指针变量名下标;行指针 如 int *k4,a341,2,3,4, 5,6,7,8, 6,7,8,9;可以用 int *k3 int *k0,*k1,*k2; int *k3表示定义了一个二维指针,该指针 指向了一个n行3列的二维数组3.指针与函数指针作为函数的形参 如 swapint *m, int *n int t; t*m; *m*n; *nt; 例 int funint *m, int n *mn; n*m; 例编写函数sstrlen,功能为求字符串的长度 不得调用include string.h中的库函数 编写函数sstrcat,功能为实现字符串的连接 编写函数sstrcpy,功能为实现字符串的复制 习题 1.编写函数 fun,功能为 windowsindowsw indows例将给定的字符串中间加上* 如 windowsw*i*n*d*o*w*s例编写函数funchar *m,char *n

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值