利用c语言编写机电两字,C语言复习PPTC习题.ppt

《C语言复习PPTC习题.ppt》由会员分享,可在线阅读,更多相关《C语言复习PPTC习题.ppt(31页珍藏版)》请在人人文库网上搜索。

1、1,若干个数中找最大最小 一个n位数逐位分解 设计菜单程序 数组各元素分类统计 两个数组对应元素比较大小 插入、逆序存放、排序 查找 二维数组操作,常规解题算法,2,一、若干个数中找最大最小 定义一个变量存放最大值,一个变量存放最小值,循环比较,找出最大最小值。,用简单变量处理 输入第一个数maxmin 循环i=2n 输入一个数a if(amax)max=a; if(amin)min=a; 输出max、min,用数组处理 定义数组a10 输入数组a的各个元素 max=min=a0 循环i=19 if(aimax)max=ai; if(aimin)min=ai; 输出max、min,3,例1:用。

2、数组求某班某门课平均成绩、最高、最低。 #define N 10 main( ) int aN, i, max, min; float sum=0; for(i=0; iN; i+) scanf(%d, ,4,max=min=a0; for(i=1; imax) max=ai; if(aimin) min=ai; printf(average=%8.2fn, sum/N); printf(max=%d,min=%dn, max, min); ,5,二、一个n位数k逐位分解 用循环完成分离工作,每次k%10就得到k的最低位的值,k/10就去掉k的最低位,如此循环,直到k=0为止。,6,用变量 m。

3、ain( ) long n, d; printf(“Enter a data:”); scanf(“%ld”, ,例2:输入一个最多8位的正整数,将各数按位颠倒输出。,用数组 main( ) long n, d8;int i,k=0; printf(“Enter a data:”); scanf(“%ld”, ,7,三、设计菜单程序 步骤如下: 1 显示菜单项目 2 等待用户输入选择信息 3 判断选择信息,进行分支处理 由于这类问题属于“根据一个变量的不同值进行多路分支”的问题,所以用switch语句比较合适。,8,例3:设计一个简单的菜单选择程序,根据选择可实现a与b的四则运算。 #incl。

4、ude “stdio.h” main( ) int a, b; char c1; printf(”1. Addn”); printf(”2. Subtractn”); printf(”3. Multiplyn”); printf(”4. Dividen”); printf(”Enter your choice:”); c1=getchar( );,9,c1=getchar( ); if (c1=1 ,10,四、数组各元素分类统计 字符数组:统计字母、数字字符的个数;A、E、I、O、U、 等出现的次数。 数值数组:统计大于某个数、能被某个数整除、正负数个。 定义数组(如 char str80;i。

5、nt numN;) 输入各元素的值 字符数组: 数值数组: 循环 stri!=0 循环 i=0 N-1 stri分类计数 numi符合计数条件? 符合则计数,11,例4:输入一行英文文本(最长80),分别统计文本中字母、数字、空格字符个数及所有字符个数。 #include stdio.h main( ) int i, l, n, s, all; char str80, t; l=n=s=all=0; gets(str); for(i=0; (t=stri)!=0; i+) if(t=A ,12,五、两个数组对应元素比较大小 定义两个数组s1、s2,构造循环,对s1i、s2i进行比较。 两个字符。

6、串比较: for(i=0;s1i=s2i;i+) if(s1i=0)break;),13,例5:按标准函数比较规则,自编程实现两字串比较。 #include stdio.h main() static char s110, s210; int i, r; clrscr( ); printf(tInput string 1:); gets(s1); printf(tInput string 2:); gets(s2); for(i=0; s1i=s2i; i+) /*下标变量比较*/ if(s1i=0) break; r=s1i-s2i; printf(ts1=%s,s2=%s,r=%dn, s。

7、1, s2, r); getch( ); ,14,六、插入、逆序存放、排序 插入 有序数组中插入一个数,保持数组有序 设数组为a,已有数据。 1 输入要插入的数,存入num; 2 将num与数组元素逐个比较(从a0开始,循环比较),找到插入位置; 3 将插入点后面的各元素逐个后移。,15,例6.1 已有一个排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。习题7.4 插入n: 13 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,方法1: 1)首先确定插入位置,可从头或尾顺序判断查找; 2)将插入点后的各元素依次后移一个位置;,从头:nai? i: 0,1,2,aj+。

8、1=aj; j: 8,7,6i,32,24,17,15,45,13,16,main( ) int a10=7,9,10,12,15,17,24,32,45, i, j,num; printf(Insert number:); scanf(%d, ,17,从尾:nai? i: 8,7,6 假:ai+1=ai;,32,24,17,15,45,13,方法2: 插入n: 13 a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,18,main( ) int a10=7,9,10,12,15,17,24,32,45,i,num; printf(Insert number:); scanf(%d,。

9、 ,19,逆序存放 逆序存放就是将第一个元素与最后一个交换,第二个与倒数第二个交换,可设置两个变量i,j,分别记要交换的两个元素的下标,注意i从小增大,j从大减小,直到i=j,停止交换。,20,例6.2 将一个数组中的值按逆序重新存放。习题7.5 main() int a10,i,j,t; for(i=0;i10;i+) scanf(%d,21,排序 排序方法有多种,主要掌握选择法和起泡法。 选择法算法: (设要求从大到小排序) 若有定义:int aN; (N是符号常量) 1)对N个数排序,将数组元素重复N-1轮比较; 2)第一轮首先从数组中找出最大元素,将其与第一个元素交换;第二轮从剩余元素。

10、中找出数组次大元素,将其与第二个元素交换;不断重复,直至第N-1轮对最后两个元素比较。,22,起泡法算法: (设要求从大到小排序) 若有定义:int aN; (N是符号常量) 1)对N个数排序,也是将数组元素重复N-1轮比较; 2)每一轮都从a0开始,将相邻两个数比较,大的调到前面, 在第i趟比较中要进行n-i次两两比较(i-1个数已排好序)。第i轮到aN-2-i与aN-1-i比完时结束。此时,aN-1-i中是本轮中最小数。 3)重复上述过程,最后一轮是将a0与a1比较,大的调到a0,a0为最大数。到此,排序过程结束。,23,采用二重循环完成,外循环控制轮次,内循环控制每轮比较次数。 选择法:。

11、 for(i=0;iap) p=j; if(p!=i) t=ai; ai=ap; ap=t; 起泡法: for(i=0;iN-1;i+) /* 控制N-1轮比较*/ for(j=0;jN-i;j+) /* 控制每轮次数 */ if(ajaj+1) t=aj; aj=aj+1; aj+1=t; ,24,七、查找 顺序查找: 设要找的数存在num中,采用循环将num与数组元素逐个比较(从头到尾或从尾到头),相等则找到。 折半查找: 每次取区间中点与num比较,相等则找到,否则舍去一半区间,再取剩余区间的中点与num比较如此反复,直到区间起点下标大于终点下标。,25,例7. 有10个数存放在一个数组。

12、中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。习题7.9 步骤: 1)设三个变量l, m, h, 其中l,h存放查找范围第一和最后元素的下标,m存放查找范围中间元素下标 即m=(h+l)/2; 2)判断要查找的数num与am是否相等,相等已找到; 3)若numam, 则查找范围可缩小到后一半;查找前更新l=m+1, 计算新m; 再重复第二步; 4)若numam, 则查找范围可缩小到前一半;查找前更新h=m-1, 计算新m; 再重复第二步;,26,0,图示:若查找50 n a0 a1 a2 a3 a4 a5 a6 a7 a8 a9,9,(。

13、h+l)/2=4m:,nam 为真: m+1=5l:,l:,h:,5,9,h:,4,(h+l)/2=7m:,7,nam 为真: m+1=8l:,8,(h+l)/2=8m:,9,h,8,n=am 为真:找到,27,main( ) int a10=2,3,5,6,12,15,23,46,50,100, num; int l=0, m, h=9, mark=-1; /*make找到标志*/ printf(Enter check number:); scanf(%d, ,28,八、二维数组操作(以求和操作为例) 1. 二维数组各元素有行、列下标,循环时要注意取元素的顺序 设数组aMN M、N为符号常量。

14、,各列求和: 和存放在最后一行 列下标变化一次, 行下标变化M-1次 for(j=0;iN;i+) aM-1j=0; for(i=0;iM-1;i+) aM-1j+=aij; ,各行求和: 和存放在最后一列 行下标变化一次, 列下标变化N-1次 for(i=0;iM;i+) aiN-1=0; for(j=0;jN-1;j+) aiN-1+=aij; ,29,例9:对三人小组四门课程按人求平均成绩,再按课程求平均成绩。 main( ) int a45, i,j; for(i=0; i=2; i+) /*按行输入成绩*/ for(j=0; j=3; j+) scanf(%d, ,30,for(j=。

15、0; j=3; j+) /*求课程平均分*/ a3j=0; /*最后一行清零*/ for(i=0; i=2; i+) a3j=a3j+aij; a3j=a3j/3; for(i=0; i=2; i+) /*按行输出*/ printf(%d:, i+1); /*输出序号*/ for(j=0; j=4; j+) printf(%6d, aij); printf(n); for(j=0; j=3; j+) printf(%6d, a3j); printf(n); ,31,2. 下标变化的范围 设数组aMM M为符号常量 上三角元素求和: for(i=0;iM;i+) for(j=i;jM;j+) sum+=aij; 下三角元素求和: for(i=0;iM;i+) for(j=0;j=i;j+) sum+=aij; 主对角线元素求和: for(i=0;iM;i+) sum+=aii。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值