《清华大学C语言教学课件(共16个PPT)第4个复习进程.ppt》由会员分享,可在线阅读,更多相关《清华大学C语言教学课件(共16个PPT)第4个复习进程.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、清华大学C语言教学课件(共16个PPT)第4个我们先看例子:用键盘输入我们先看例子:用键盘输入10只羊的重量存放到一个只羊的重量存放到一个名为名为sheep的数组中的数组中#include#include void main()void main()/主函数主函数主函数主函数 float sheep10float sheep10;/数组,有数组,有数组,有数组,有10101010个浮点类型元素,个浮点类型元素,个浮点类型元素,个浮点类型元素,/用于存用于存用于存用于存10101010只羊每一只的重量只羊每一只的重量只羊每一只的重量只羊每一只的重量float max;float max;/浮点类
2、型变量,存放最肥羊的重量浮点类型变量,存放最肥羊的重量浮点类型变量,存放最肥羊的重量浮点类型变量,存放最肥羊的重量int i,k;int i,k;/整型变量,整型变量,整型变量,整型变量,i i i i用于计数循环,用于计数循环,用于计数循环,用于计数循环,k k k k用于记录最肥羊的号用于记录最肥羊的号用于记录最肥羊的号用于记录最肥羊的号max=0.0;max=0.0;/赋初值赋初值赋初值赋初值0 0 0 0for(i=0;i10;i=i+1)for(i=0;i10;i=i+1)/计数循环计数循环计数循环计数循环 /循环,开始循环,开始循环,开始循环,开始printf(“printf(“请
3、输入羊的重量请输入羊的重量请输入羊的重量请输入羊的重量sheep%d=”,i);sheep%d=”,i);/提示用提示用提示用提示用scanf(“%f”,&(sheepi);scanf(“%f”,&(sheepi);/输入第输入第输入第输入第i i i i只羊的重量只羊的重量只羊的重量只羊的重量if(max sheepi)if(max sheepi)max=sheepi;max=sheepi;/让第让第让第让第i i i i只羊为当前最肥羊只羊为当前最肥羊只羊为当前最肥羊只羊为当前最肥羊k=i;k=i;/纪录第纪录第纪录第纪录第i i i i只羊只羊只羊只羊 /循环结束循环结束循环结束循环结束
4、printf(“max=%fn”,max);printf(“max=%fn”,max);/输出最肥羊的重量输出最肥羊的重量输出最肥羊的重量输出最肥羊的重量printf(“number=%dn”,k);printf(“number=%dn”,k);/输出最肥羊的编号输出最肥羊的编号输出最肥羊的编号输出最肥羊的编号 2程序框图程序框图3三、数组三、数组数组的定义数组的定义类型说明符类型说明符类型说明符类型说明符数组名数组名数组名数组名 常量表达式常量表达式常量表达式常量表达式 例:例:例:例:float sheep10;float sheep10;float sheep10;float sheep
5、10;int a20011000;int a20011000;int a20011000;int a20011000;说明说明1.1.1.1.数组名的第一个字符应为英文字母;数组名的第一个字符应为英文字母;数组名的第一个字符应为英文字母;数组名的第一个字符应为英文字母;2.2.2.2.用方括号将常量表达式括起;用方括号将常量表达式括起;用方括号将常量表达式括起;用方括号将常量表达式括起;3.3.3.3.常量表达式定义了数组元素的个数;常量表达式定义了数组元素的个数;常量表达式定义了数组元素的个数;常量表达式定义了数组元素的个数;4三、数组三、数组4.4.4.4.数组下标从数组下标从数组下标从数
6、组下标从0 0 0 0开始。如果定义开始。如果定义开始。如果定义开始。如果定义5 5 5 5个元素,是从第个元素,是从第个元素,是从第个元素,是从第0 0 0 0个元个元个元个元素至第素至第素至第素至第4 4 4 4个元素;个元素;个元素;个元素;例如例如例如例如int a5 int a5 int a5 int a5 定义了定义了定义了定义了5 5 5 5个数组元素如下:个数组元素如下:个数组元素如下:个数组元素如下:a0,a1,a2,a3,a4a0,a1,a2,a3,a4a0,a1,a2,a3,a4a0,a1,a2,a3,a4这是这是这是这是5 5 5 5个带下标的变量,这个带下标的变量,这
7、个带下标的变量,这个带下标的变量,这5 5 5 5个变量的类型是相同的个变量的类型是相同的个变量的类型是相同的个变量的类型是相同的5.5.5.5.常量表达式中不允许包含变量;常量表达式中不允许包含变量;常量表达式中不允许包含变量;常量表达式中不允许包含变量;例如例如例如例如int n;int n;int n;int n;n=5;n=5;n=5;n=5;int an;int an;int an;int an;不合法不合法!5三、数组三、数组数组初始化数组初始化是定义数组完成赋初值的任务是定义数组完成赋初值的任务是定义数组完成赋初值的任务是定义数组完成赋初值的任务例如例如例如例如int a5=3,
8、5,4,1,2;int a5=3,5,4,1,2;int a5=3,5,4,1,2;int a5=3,5,4,1,2;a0=3;a1=5;a2=4;a0=3;a1=5;a2=4;a0=3;a1=5;a2=4;a0=3;a1=5;a2=4;a3=1;a4=2;a3=1;a4=2;a3=1;a4=2;a3=1;a4=2;61.1.1.1.#include include void main()void main()int a4;int a4;/声明项声明项声明项声明项printf(“a0=%d;a1=%d;a2=%d;printf(“a0=%d;a1=%d;a2=%d;a3=%dn”,a0,a1,
9、a2,a3);a3=%dn”,a0,a1,a2,a3);2.2.2.2.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为int a4=0,1,2,3;int a4=0,1,2,3;请自己上机做请自己上机做6个实验个实验73.3.3.3.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为int a4=3,8;int a4=3,8;4.4.4.4.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为int a4=2,4,6,8,10;int a4=2,4,6,8,10;5.5.5.5.
10、其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为int a4=2,4,6,d;int a4=2,4,6,d;6.6.6.6.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为int n=4;int n=4;int an=0,1,2,3;int an=0,1,2,3;8讨论问题:使用筛法求讨论问题:使用筛法求100100以内的所有素数以内的所有素数三、数组三、数组思路思路1.1.1.1.想象将想象将想象将想象将100100100100个数看作沙子和小石头子,让小石头子权个数看作沙子和小石头子,让小石头子权个数看作沙子和
11、小石头子,让小石头子权个数看作沙子和小石头子,让小石头子权称素数;让沙子当作非素数。弄一个筛子,只要将沙称素数;让沙子当作非素数。弄一个筛子,只要将沙称素数;让沙子当作非素数。弄一个筛子,只要将沙称素数;让沙子当作非素数。弄一个筛子,只要将沙子筛走,剩下的就是素数了。子筛走,剩下的就是素数了。子筛走,剩下的就是素数了。子筛走,剩下的就是素数了。2.2.2.2.非素数一定是非素数一定是非素数一定是非素数一定是2 2 2 2、3 3 3 3、4 4 4 4 的倍数。的倍数。的倍数。的倍数。3.3.3.3.使用数组,让下标就是使用数组,让下标就是使用数组,让下标就是使用数组,让下标就是1001001
12、00100以内的数,让数组元素的以内的数,让数组元素的以内的数,让数组元素的以内的数,让数组元素的值作为筛去与否的标志。比如筛去以后让元素值为值作为筛去与否的标志。比如筛去以后让元素值为值作为筛去与否的标志。比如筛去以后让元素值为值作为筛去与否的标志。比如筛去以后让元素值为1 1 1 1。9方法的依据:方法的依据:1 1 1 1至至至至100100100100这些自然数可以分为三类:这些自然数可以分为三类:这些自然数可以分为三类:这些自然数可以分为三类:单位数:仅有一个数单位数:仅有一个数单位数:仅有一个数单位数:仅有一个数1 1 1 1。素数:素数:素数:素数:是这样一个数,它大于是这样一个
13、数,它大于是这样一个数,它大于是这样一个数,它大于1 1 1 1,且只有,且只有,且只有,且只有1 1 1 1和它自身这样两和它自身这样两和它自身这样两和它自身这样两个正因数。个正因数。个正因数。个正因数。合数:合数:合数:合数:除了除了除了除了1 1 1 1和自身以外,还有其他正因数。和自身以外,还有其他正因数。和自身以外,还有其他正因数。和自身以外,还有其他正因数。1 1 1 1不是素数,除不是素数,除不是素数,除不是素数,除1 1 1 1以外的自然数,当然只有素数与合数。以外的自然数,当然只有素数与合数。以外的自然数,当然只有素数与合数。以外的自然数,当然只有素数与合数。筛法实际上是筛去
14、合数,留下素数。筛法实际上是筛去合数,留下素数。筛法实际上是筛去合数,留下素数。筛法实际上是筛去合数,留下素数。为了提高筛选法效率,注意到:为了提高筛选法效率,注意到:为了提高筛选法效率,注意到:为了提高筛选法效率,注意到:令令令令n n为合数(这里是为合数(这里是为合数(这里是为合数(这里是100100100100),),),),c c为为为为n n的最小正因数,则据的最小正因数,则据的最小正因数,则据的最小正因数,则据初等数论初等数论初等数论初等数论只要找到只要找到只要找到只要找到c c就可以确认就可以确认就可以确认就可以确认n n为合数,将其筛去。为合数,将其筛去。为合数,将其筛去。为合
15、数,将其筛去。10程序框图如下:程序框图如下:11上述框图很清晰地描述了筛法的思路:上述框图很清晰地描述了筛法的思路:1.1.1.1.第一块是一个计数型的循环语句,功能是将第一块是一个计数型的循环语句,功能是将第一块是一个计数型的循环语句,功能是将第一块是一个计数型的循环语句,功能是将primeprime数数数数组清零。组清零。组清零。组清零。primec=0;primec=0;c=2,3,100c=2,3,1002.2.2.2.第二块是正因数第二块是正因数第二块是正因数第二块是正因数d d初始化为初始化为初始化为初始化为 d=2d=2。3.3.3.3.第三块是循环筛数。这里用了一个第三块是循
16、环筛数。这里用了一个第三块是循环筛数。这里用了一个第三块是循环筛数。这里用了一个 do whiledo while 语句,语句,语句,语句,属于一种直到型循环,其一般形式为:属于一种直到型循环,其一般形式为:属于一种直到型循环,其一般形式为:属于一种直到型循环,其一般形式为:dodo 循环体语句块循环体语句块循环体语句块循环体语句块 while(while(表达式表达式表达式表达式)12直到型循环框图如下:直到型循环框图如下:直到表达式为假直到表达式为假时才退出循环时才退出循环13三、数组三、数组例例.求求的近似值的近似值 用变量用变量用变量用变量pipipipi表示表示表示表示的值。的值。的
17、值。的值。令令令令表示括号中的每个项表示括号中的每个项表示括号中的每个项表示括号中的每个项当最后一项的绝对值小于等于当最后一项的绝对值小于等于当最后一项的绝对值小于等于当最后一项的绝对值小于等于 时,忽略掉以后的项时,忽略掉以后的项时,忽略掉以后的项时,忽略掉以后的项14#include#include#include#include void main()void main()/主函数主函数主函数主函数 int sum;int sum;/整型变量,总项数整型变量,总项数整型变量,总项数整型变量,总项数float pi,a,b,c;float pi,a,b,c;/浮点变量,浮点变量,浮点变量,
18、浮点变量,a a a a为分母,为分母,为分母,为分母,b b b b为分子为分子为分子为分子,c c c c为为为为b b b b除以除以除以除以a a a api=0;sum=0;pi=0;sum=0;/初始化初始化初始化初始化a=1.0;b=1.0;c=1.0;a=1.0;b=1.0;c=1.0;/初始化初始化初始化初始化do do/直到型循环直到型循环直到型循环直到型循环 /循环体,开始循环体,开始循环体,开始循环体,开始pi=pi+cpi=pi+c;/累加每一项累加每一项累加每一项累加每一项sum=sum+1;sum=sum+1;a=a+2.0;a=a+2.0;/计算每一项的分母计算
19、每一项的分母计算每一项的分母计算每一项的分母b=-b;b=-b;/分子变正负号分子变正负号分子变正负号分子变正负号c=b/a;c=b/a;/计算每一项计算每一项计算每一项计算每一项/循环体结束循环体结束循环体结束循环体结束while(fabs(c)1e-6);while(fabs(c)1e-6);/当当当当c c c c的绝对值大于的绝对值大于的绝对值大于的绝对值大于10101010的的的的-6-6-6-6次方时,继续次方时,继续次方时,继续次方时,继续/执行循环体,否则退出执行循环体,否则退出执行循环体,否则退出执行循环体,否则退出pi=4*pi;pi=4*pi;/得到最终结果得到最终结果得
20、到最终结果得到最终结果printf(“pi=%fn”,pi);printf(“pi=%fn”,pi);/输出输出输出输出pipipipi值值值值printf(“sum=%dn”,sum);printf(“sum=%dn”,sum);/输出总项数输出总项数输出总项数输出总项数 参考程序如下:参考程序如下:15运行结果运行结果 pi=3.141594pi=3.141594,sum=500001 sum=500001提问提问:这种循环当表达式的值这种循环当表达式的值永远为真永远为真时,时,会如何?会如何?答:会构成答:会构成死循环死循环,即无休止地执行循环体,即无休止地执行循环体请实验:请实验:1.
21、1.1.1.将将将将b b b b定义为定义为定义为定义为intintintint型看看执行结果并分析为什么型看看执行结果并分析为什么型看看执行结果并分析为什么型看看执行结果并分析为什么2.2.2.2.将将将将1 1 1 1e-6e-6e-6e-6变为变为变为变为1 1 1 1e-7e-7e-7e-7或或或或1 1 1 1e-4e-4e-4e-4看看结果看看结果看看结果看看结果16下面还要介绍另一种循环下面还要介绍另一种循环“当循环当循环”一般形式:一般形式:while(while(表达式表达式表达式表达式)语句块;语句块;语句块;语句块;(循环体循环体循环体循环体)17分析:假定有分析:假定
22、有x,y且且xy,设最小公倍数为设最小公倍数为z1.z 一定会一定会=x2.z=kx,k=1,2,3.z 一定会被一定会被 y 整除整除用两个最简单的数试一下就可以找到算法用两个最简单的数试一下就可以找到算法.比如比如 x=5,y=3.举例:求两个整数的最小公倍数举例:求两个整数的最小公倍数18第一步第一步 z=x,z%y!=0 不能整除不能整除 =5,5%3!=0第二步第二步 z=z+x不能整除不能整除 =10,10%3!=0第三步第三步 z=z+x =15,15%3=0 能整除能整除找到了找到了 z,15就是就是5和和3的最小公倍数的最小公倍数19#include#include#incl
23、ude#include void main()void main()/主函数主函数主函数主函数 int x,y,z,w;int x,y,z,w;/整型变量整型变量整型变量整型变量scanf(“%d%d”,&x,&y);scanf(“%d%d”,&x,&y);/键盘输入两整数键盘输入两整数键盘输入两整数键盘输入两整数 x,yx,yx,yx,yif(x y)if(x=ai+1ai=ai+1ai=ai+1ai=ai+1,位置不动;位置不动;位置不动;位置不动;如果如果如果如果 ai ai+1ai ai+1ai ai+1ai ai+1,位置交换,即位置交换,即位置交换,即位置交换,即p=ai;ai=a
24、i+1;ai+1=p;p=ai;ai=ai+1;ai+1=p;p=ai;ai=ai+1;ai+1=p;p=ai;ai=ai+1;ai+1=p;步骤步骤步骤步骤3 3 3 3结束后结束后结束后结束后 an-j+1an-j+1an-j+1an-j+1中的数为最小的数中的数为最小的数中的数为最小的数中的数为最小的数步骤步骤步骤步骤4 4 4 4:让让让让j=j+1j=j+1j=j+1j=j+1;只要只要只要只要j!=nj!=nj!=nj!=n就返回步骤就返回步骤就返回步骤就返回步骤3 3 3 3,将将将将an-j+1an-j+1an-j+1an-j+1的值排好。当的值排好。当的值排好。当的值排好。当
25、j=nj=nj=nj=n时执行步骤时执行步骤时执行步骤时执行步骤5 5 5 5步骤步骤步骤步骤5 5 5 5:输出排序结果输出排序结果输出排序结果输出排序结果冒泡排序算法设计:冒泡排序算法设计:27#include#include void main()void main()/主函数主函数主函数主函数 int i,j,p,a7;int i,j,p,a7;/整型变量整型变量整型变量整型变量for(i=1;i=6;i=i+1)for(i=1;i=6;i=i+1)/键入键入键入键入6 6 6 6个数,放入个数,放入个数,放入个数,放入a a a a数组中数组中数组中数组中 printf(“print
26、f(“请输入待排序的数请输入待排序的数请输入待排序的数请输入待排序的数a%d=”,i);a%d=”,i);/提示提示提示提示scanf(“%d”,&ai);scanf(“%d”,&ai);/用键盘输入整数赋给用键盘输入整数赋给用键盘输入整数赋给用键盘输入整数赋给aiaiaiai|for(j=1;j=5;j=j+1)for(j=1;j=5;j=j+1)/冒泡排序,外层循环冒泡排序,外层循环冒泡排序,外层循环冒泡排序,外层循环for(i=1;i=6-j;i=i+1)for(i=1;i=6-j;i=i+1)/内层循环内层循环内层循环内层循环/循环体,开始循环体,开始循环体,开始循环体,开始if(ai
27、 ai+1)if(ai ai+1)/如果如果如果如果 ai ai+1ai ai+1 p=aip=ai;/让让让让 ai ai 与与与与 ai+1 ai+1 交换交换交换交换ai=ai+1;ai=ai+1;ai+1=p;ai+1=p;/循环体结束循环体结束循环体结束循环体结束for(i=1;i=6;i=i+1)for(i=1;i=6;i=i+1)/输出排序结果输出排序结果输出排序结果输出排序结果printf(“%dn”,ai);printf(“%dn”,ai);/格式输出格式输出格式输出格式输出 aiaiaiai 参考程序如下:参考程序如下:28结结 束束29此课件下载可自行编辑修改,仅供参考!此课件下载可自行编辑修改,仅供参考!感谢您的支持,我们努力做得更好!谢谢感谢您的支持,我们努力做得更好!谢谢