C语言项目3循环语句

上传人:cel****303 文档编号:243785439 上传时间:2024-09-30 格式:PPT 页数:40 大小:575.50KB
返回 下载 相关 举报
C语言项目3循环语句_第1页
第1页 / 共40页
C语言项目3循环语句_第2页
第2页 / 共40页
C语言项目3循环语句_第3页
第3页 / 共40页
点击查看更多>>
资源描述
,*,Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,C语言项目3循环语句,分析:假设本小组一共有十个同学,显然不可能定义十个变量,x1,x2,x10,然后在程 序中表示成sum=x1+x2+x3+x10。,求一个小组的学生总成绩的步骤就是:,先输入第一个学生的成绩,然后将这个成绩加到总分中,,接下来,输入第二个学生的成绩,再将第二个学生的成绩参加到总分中,,不断重复,直到小组中最后一个同学的成绩输入并参加到总分为止。,重复执行就是循环。重复工作是计算机特别擅长的工作之一。,任务 1 求一个小组学生成绩的总分及平均分,一、任务提出,一个班进展了一次考试,现要输入第一小组学生的成绩,计算这一小组的总分与平均分,并按要求输出。,二、详细实现,#include stdio.h,main(),int score,i,sum=0;,float avg;,i=1;,printf( 请输入本小组10个学生的成绩:);,while(i=10),scanf(%d,sum=sum+score;,i=i+1;,avg=sum/10.0;,printf(本小组10个学生的总分为:%dn,sum);,printf(本小组10个学生的平均分为:%.2fn,avg);,while(i=10),scanf(“%d,sum=sum+score;,i=i+1;,三、相关知识,(一) 常见的三种循环语句,1. while循环,【语法】,(1)一般格式:,while(循环继续条件),循环体语句组;,(2)执行过程,1) 求解“循环继续条件,假设其值为非0,那么转 2);否那么转3)。,2) 执行循环体语句组,然后转1)。,3) 退出while循环。,i=1;,while(i=10),scanf(“%d,sum=sum+score;,i=i+1;,首先i的初值为1,显然1=10,满足循环条件,,即输入score,然后将score参加到sum中,,i=2;由于2=10,还是满足循环条件,,执行第二次循环体。即输入score,,然后将score参加到sum中,,i=3;,这样一直重复,,直到i=11,不再满足循环继续条件;从而跳出循环体。,所以这段程序的意思是输入10次score,,并将每一次输入的score参加到sum中。,任务情景中的程序及流程图,#include stdio.h,main(),int score,i,sum=0;,float avg;,i=1;,printf( 请输入本小组10个学生的成绩:);,while(i=10),scanf(%d,sum=sum+score;,i=i+1;,avg=sum/10.0;,printf(本小组10个学生的总分为:%dn,sum);,printf(本小组10个学生的平均分为:%.2fn,avg);,while的进一步练习,【例3-1】本学期期末考试进展了三门课程的测试。成绩单下来后,8个室友兄弟要一比上下,这就要得到每个人三门课程的总分和平均分,用C语言实现之。,分析:,(1)定义五个实型变量x,y,z,s和avg,,依次放每一名学生的三门课程成绩、,这三门课程的总成绩和平均分;,(2)每次取出一名学生的三门课程成绩,,依次给x,y,z,然后再一起放到s中,,就可以得到该同学的三门课的总分和平均分。,(3)以上步骤重复执行8次。,#include stdio.h,main(),int i;,float x,y,z,sum,avg;,i=1;,while(i=8),printf(请输入第%d个同学三门课的成绩,i);,scanf(%f%f%f,sum=x+y+z;,avg=sum/3;,printf(第%d个同学的总分为%.2f,平均分%.2fn,i,sum,avg);,i=i+1;,【例3-2】用while语句求sum=1+2+3+100。,分析:求sum=1+2+3+100,可以分解成:,sum=0;,sum=sum+1;,sum=sum+2;,sum=sum+i,sum=sum+100,所以,可以看成,sum=sum+i,重复了,100,次,而,i,恰好等于,1100,#include ,main(),int i,sum=0;,i=1;,while(i100。,#include ,main(),int i;,i=1;,while(i=100),if(i%3!=0)printf(“%3d,i);,i+;,程序如下,do while语句,(1)一般形式:,do,循环体语句组;,while(循环继续条件);,(2)执行过程,1) 执行do后面的循环体语句组;,2) 求解while后面的“循环继续条件,假设其值为非0,那么转1);否那么转3)。,3) 退出while循环。,循环变量赋初值,循环体语句组,while(循环继续条件);,求一个小组学生成绩的总分及平均分的程序可改写为:,#include stdio.h,main(),int score,i,sum=0;,float avg;,i=1;,printf( 请输入本小组10个学生的成绩:);,do,scanf(%d,sum=sum+score;,i=i+1;, while(i=10);,avg=sum/10.0;,printf(本小组10个学生的总分为:%dn,sum);,printf(本小组10个学生的平均分为:%.2fn,avg);,do while,总是先执行一次循环体,,然后再求循环继续条件,因此,无论循,环继续条件是否为“真,循环体至少执行,一次;,(2) do while循环与while循环非常相似;,(3)它们的主要区别是:,while循环先判断循环条件再执行循环,,循环体可能一次也不执行,,do while循环先执行循环体,,然后再求循环继续条件,,循环体至少执行一次。,例3-4将例3-1用do while语句来改进实现。,求8个室友兄弟每个人三门课程的总分和平均分,#include stdio.h,main(),int i;,float x,y,z,sum,avg;,i=1;,do,printf(请输入第%d个同学三门课的成绩,i);,scanf(%f%f%f,sum=x+y+z;,avg=sum/3;,printf(第%d个同学的总分为%.2f,平均分%.2fn,i,sum,avg);,i=i+1;, while(i=8);,例3-5将例3-2用do while语句来改进实现。,求sum=1+2+3+100。,#include ,main(),int i,sum=0;,i=1;,do,sum+=i;,i+;, while(i=100);,printf(“1+2+3+100的和为:%dn,sum);,例3-6将例3-3用do while语句来改进实现。,将1100之间不能被3整除的数输出。,#include ,main(),int i;,i=1;,do,if(i%3!=0)printf(“%3d,i);,i+; while(i=100);,for语句,(1)一般形式:,for(表达式1;表达式2;表达式3),循环体语句,(2)执行过程,1) 先执行“表达式1;,2) 然后判别“表达式2,当“表达式2的值为真时,那么转3);否那么转4)。,3) 执行循环体语句组,然后转2),4) 退出for循环。,(1) “表达式1为初始化表达式;,(2) “表达式2为条件表达式,是一个逻辑量,用于判断循环继续的条件是否成立,,其值为真时,循环继续,否那么循环中止;,(3) “表达式3为修正表达式,一般为赋值表达式,用于定义循环变量的增值。,求一个小组学生成绩的总分及平均分的程序可改写为:,#include stdio.h,main(),int score,i,sum=0;,float avg;,printf( 请输入本小组10个学生的成绩:);,for(i=1;i=10;i+),scanf(%d,sum=sum+score;,avg=sum/10.0;,printf(本小组10个学生的总分为:%dn,sum);,printf(本小组10个学生的平均分为:%.2fn,avg);,for的进一步练习,【例3-7】将例3-1用for语句来改进实现。(求八位室友每个人三门课的总分及平均分),#include stdio.h,main(),int i;,float x,y,z,sum,avg;,for(i=1;i=8;i+),printf(请输入第%d个同学三门课的成绩,i);,scanf(%f%f%f,sum=x+y+z;,avg=sum/3;,printf(第%d个同学的总分为%.2f,平均分%.2fn,i,sum,avg);,【例3-8】将例3-2用for语句来改进实现。,求sum=1+2+3+100。,#include ,main(),int i,sum=0;,for(i=1;i=100;i+),sum+=i; ,/*由于循环体只有一条语句,所以可将“sum+=i; 的花括号省略*/,printf(“1+2+3+100的和为:%dn,sum);,程序运行结果为:,“1+2+3+100的和为:5050,例3-9将例3-3用for语句来改进实现。,将1100之间不能被3整除的数输出。,#include ,main(),int i;,for(i=1;i=100;i+),if(i%3!=0)printf(“%3d,i);,/*由于循环体只有一条语句,所以可将“if(i%3!=0)printf(“%3d,i);的花括号省略*/,例3-10编程实现百钱买百鸡。,有一老大爷去集贸市场买鸡,他想用100元钱买100只鸡,而且要求所买的鸡有公鸡、母鸡、小鸡。公鸡2元一只,母鸡3元一只,小鸡0.5元一只。问老大爷要买多少只公鸡、母鸡、小鸡恰好花去100元钱,并且买到100只鸡?,分析,x+y+z=100,x+3y+0.5z=100,假设公鸡买x只,母鸡买y只,小鸡买z只,那么由题意可得:,1当z=2时,计算y与x的值,2当z=4时,计算y与x的值,3当z=8时,计算y与x的值,4一直计算到z=98时,计,算y与x的值显然,假设x,y的,值都大于零,那么输出x,y,z。,所以用for循环的程序 如左:,#include ,main(),int x,y,z;,for(z=2;z0 & y0),printf(“公鸡数为%d,母鸡数为,%d,小鸡数为%dn,x,y,z);, ,知识扩展,一for 语句的多种表示方法,for语句可省略“表达式1。,for语句可省略“表达式2。,for语句可省略“表达式3。,for语句可省略“表达式1和“表达式3。,“表达式1 和“表达式3可以是一个简单的表达式,也可以是逗号表达式。,for(i=1;i=10;i+),s=s+i;,i=1;,for(;i=10;i+),s=s+i;,“表达式1的作用是设置循环初始条件,“表达式1省略后,,应在for语句前面设置循环初始条件。但“表达式1后的分,号不能省略。,假设省略“表达式2,那么不判断循环条件,认为循环条件始终为真,,循环将无终止地进展下去。一般用条件语句退出循环。,“表达式3可省略,但程序必须在“循环体语句中设置循环变量,增值,来修改循环条件,以确保循环能正常完毕。如:,for(i=1;i=10;i+),s=s+i;,for(i=1;i=10;),s=s+i;,i+;,for(i=1;i=10;i+),s=s+i;,i=1;,for(;i=10;),s=s+i; i+;,如实现1+2+3+100的和的for语句可以写为:,for(sum=0,i=1;i=100;i+),sum=sum+i;,二break语句,1 break语句的一般形式,break;,2 break语句的作用,终止对switch语句或循环语句的执行跳出这两种语句,转移到其后的语句处执行。,在循环语句中,break语句常常和if语句一起使用,表示当条件满足时,立即,终止循环。注意break语句不是跳出if语句,而是跳出循环语句。,循环语句可以嵌套使用,break语句只能跳出终止其所在的循环,而不能,跳出多层循环。,说明,for(i=2;i=x-1;i+),if(x%i=0)break;,假设x能被ii=2,3,x-1整除,那么完毕循环。,【例3-11】输入二个正整数,求它们的最大公约数。,分析,1假设输入二个正整数,分别为a,b,它的最大公,约数为k,k的值应小于等,于a,b中的一个相对小数;,2然后进展a%k及b%k,的运算,假设它们的余数为,零,那么k就是最大公约数。,3假设a%k及b%k中至少,有一个的余数不为零,那么,k=k-1,然后再执行(2)。,#include ,main(),int a,b,k;,printf(请输入二个正整数);,scanf(%d%d,if(a=1),if(a%k=0 ,k-;,printf(最大公约数为:%dn,k);,程序的运行结果为:,请输入二个正整数5 6,最大公约数为1,判断素数,【例3-12】在数学课上,李教师要同学们对给定的任意正整数进展判断,,看是否为素数,这个数学问题,用C语言该如何解决?,分析:因为素数只能被1及,本身整除,所以判断一个大,于2的正整数x是否为素数,,就让x按顺序除以i=2、3、,、x-1,假设x能被它们中,的任一个除尽,就可跳出,循环。因为此数一定不是,素数。所以判断x是不是素,数,就可以用i的值来衡量,,假设i=x,那么x一定是素数,,否那么就不是素数。,#include ,main(),int i,x;,printf(请输入一个正整数);,scanf(%d,for(i=2;i=x-1;i+),if(x%i=0)break;,if(i=x)printf(%d是素数n,x);,else,printf(%d不是素数n,x);,【例3-13】程序功能:运行时输入10个数,然后分别输出其中的最大值、最小值。,分析:,1输入第一个数x,并假定第一,个数既是十个数中的最大值max,,也是十个数中的最小值min;,2然后输入下一个数x,将最大,值max及最小数min与x分别相比,,假设max小于x,那么max=x;假设min大,于x,那么min=x;,(3) 不断重复步骤2,直到第,10个数比完为止;类似10个壮士,打擂台,第一个壮士先上场,认,为自已是“老大,然后第二个壮,士再上场,与前面的“老大比武,,赢者才是真的“老大,一直到第,十个壮士比完为止。,#include ,void main(), float x,max,min; int i;,printf(请输入十个同学的成绩:) ;,for(i=1;imax) max=x;,if(xmin) min=x;,printf(最高分为%.1f,最低分为%.1fn,max,min);,在if语句中比较两个数相等是“=,符号,而不是数学中的“= 符号,,在C语言中“=是赋值号。,【例3-14】程序功能:运行时输入整数n,输出n各位数字之和。,例如:n=1234,那么输出10,n=-123,那么输出6。,分析:,假设n的值为2345,那么,1个位数的取法是:,2十位数的数字取法是:,3百位数的数字的取法:,4同理,要获得千位数的数字:,通过n%10就能获取个位数字“5,假设能将2345化为234,那么就能轻松地取到4,,所以执行n=2345/10,再执行n=n%10就行,执行234/10,即n=n/10,新的n的值将成为23,,然后再执行n%10就可获取数字“3;,同理,要获得千位数的数字,只要执行23/10,,即n=n/10,新的n的值将成为2,然后再执行,n%10就可获取“2;,总结以上各步骤,可以发现,对任意的一个数n,执行n%10,再执行n=n/10,,然后不断的重复,就可以一个一个获取个位数字、十位数字、百位数字,所以可以用循环去执行以上的步骤,但是循环几次呢?仔细分析不难发现,,经过假设干次的执行n=n/10,那么新的n的值肯定会成为0,所以可以得出结论:,循环条件是n!=0。,程序的流程图为:,int n,s=0;,提示,请输入一个数:,输入一个数n,n=|n|,n0,s=s+n%10; /将余数累加到s中,n=n/10;,输出,这个数的绝对值的各位数字的和,#include ,#include ,void main(), int n,s=0;,printf(请输入一个数:);,scanf(%d,n=fabs(n);,while(n!=0), s=s+n%10;,n=n/10;,printf(“这个数的绝对值的各位数字的和为:,%dn,s);,例3-15编程求: s=3+33+333+3333+33333+.+33333333,分析:可以将此题化为:,s=31+11+111+1111+11111+111111+1111111+11111111,所以只要求,出了s=1+11+111+1111+11111+111111+1111111+11111111,然后再执行,s=s*3,就能到达题目的要求。,而s=1+11+111+1111+11111+111111+1111111+11111111是一道累加题,,只要执行8次的s=s+t即可,只不过第一次循环中的t是1,第二次是11,第,三次是111,分析后项与前项的关系是:前项的10倍加1等于后项,即,t=10*t+1,t=0;,for(i=1;i=8;i+),t=10*t+1;,s=s+t;,#include ,void main(), int i,t=0;,long s=0;,for(i=1;i=8;i+),t=t*10+1;,s=s+t;,s=s*3;,printf(3+33+333+3333+33333+333333+,3333333+33333333=%ldn,s);,分析:,1首先认为最大值是当x=1时的函数值,即max=1*1-5*1+sin(1);,2然后计算出x=2时的f(x)与前面的max相比,假设maxf(x),那么max=f(x),3将x=3,4,.10不断重复步骤(2);,4输出max。,例3-16编程:对x=1,2,3,10,求f(x)=x*x-5*x+sin(x)的最大值,#include ,#include ,void main(), int x; float max;,max=1*1-5*1+sin(1);,for(x=2;x=10;x+),if(maxx*x-5*x+sin(x)max= x*x-5*x+sin(x);,printf(%fn,max);,例3-17编程找出100999之间所有的水仙花数,分析:,此题的编程思路是用枚举法:即对100999之间的每一个数,取出它的百位数a,十位数b,个位数c,假设a*a*a+b*b*b+c*c*c的值等于它自身,那么输出这个数。,显然a=i/100, b=(i-a*100)/10; c=i-a*100-b*10;,#include ,#include,void main(),int i,a,b,c;,for(i=100;i=999;i+),a=i/100;,b=(i-a*100)/10;,c=i-a*100-b*10;,if (i=a*a*a+b*b*b+c*c*c),printf(%d is a Armstrong number!n,i);,分析:,因为要计算前30项之和,可以用一个循环:,(1) 将a累加到s中,然后新的a变为sqrt(a);,(2) 重复屡次(1)即可;当前30项的和算完后,那么输出。,【例3-18】数列第一项为81,此后各项均为它前1项的正平方根,,统计该数列前30项之和。,#include ,#include ,void main(),float s=0,a=81,i;,for(i=1;i=30;i+),s=s+a;,a=sqrt(a);,printf(“%fn,s);,分析:,用一个循环,将每一项累加到一个变量中,因为它需要有效位数保存10位,所以要定义一个双精度型变量。,【例3-19】编写程序,完成以下功能:计算2的平方根、3的平方,根、10的平方根之和,要求计算结果具有小数点后10位有效,位数。,#include ,#include ,void main(), int i;,double s=0;,for(i=2;i=10;i+),s+=sqrt(i);,printf(%.10lfn,s);,程序的运行结果为:,【例3-20】韩信点兵:相传汉高祖刘邦问大将军韩信如今统御兵士多,少,韩信答,每3人一列余1人、5人一列余2人、7人一列余4人、13人,一列余6人、17人一列余2人、19人一列余10人。刘邦茫然而不知其,数。你呢?你是一位优秀的程序员,请你帮刘邦解决这一问题,韩信,至少统御了多少兵士。,分析:这道题的本质就是;“一个正,整数,被3除时余1,被5除时余2,,被7除时余4,被13除时余6,被17,除时余2,被19除时余10,求这个,数。所以,我们可以从最小自然,数出发,一个一个地累加,假设它,满足条件,那么退出循环。,#include ,void main(),long i;,for(i=1;i+),if(i%3=2&i%5=2&i%7=4,&i%13=6&i%17=2&,i%19=10),break;,printf(韩信统领的兵数有:%ldn,i);,程序运行结果为:,韩信统领的兵数有:131072,任务 2 求每个小组学生成绩的总分及平均分,一、问题情景,一个班进展了一次考试,现要输入全班四个小组的学生成绩,计算每一小组的总分与平均分,并按要求输出。,分析,在任务1中,所解决的问题是:一个小组学生成绩的总分及平均分。,假设如今一个班中有四个小组,现求每个小组的学生成绩的总分及,平均分。也就是将任务1重复进展四次,显然写四段程序是不科学,的,科学的方法是再嵌套一个循环。,详细实现:,#include stdio.h,main(),int score,i,sum;,float avg;,int j=1;,while(j=4),sum=0;,i=1;,printf( 请输入第%d小组学生成绩:,j);,while(i=10),scanf(%d,sum=sum+score;,i=i+1; /本小组学生数增加1,avg=sum/10.0;,printf(本小组10个学生的总分为:%dn,sum);,printf(本小组10个学生的平均分为:%.2fn,avg);,j+; /下一个小组,定义变量及赋初值score,i,sum,定义平均分float avg;,定义变量j并赋初值1 /j代表小组数,先从第一小组开始,j=4,赋初值i=1,sum=0 /每个小组刚开始总分为零,提示请输入本小组10个学生的成绩:,i的初值为1,i=10,输入成绩score,sum=sum+score; /将成绩累加到总分sum中,i+; /学生人数增加1,计算平均分,输出总分及平均分,j+;,程序运行结果,一个循环体内又包含另一个完好的循环体,称为循环的嵌套,与if的嵌套一样,,内嵌的循环中还可以嵌套循环,这就是多层循环。内层的优先级比外层的高,,只有内层的执行完才能执行外层的,循环嵌套的要领对各种语言都是一样的。,三种循环(while循环、dowhile循环、for循环)可以互相嵌套。,三、相关知识,(一) 常见的循环嵌套,1. while循环嵌套while循环,while( ),while( ),2. do while循环嵌套do while循环,do,do, while( );, while( );,3. for循环嵌套for循环,for( ; ; ),for( ; ; ),4. while循环嵌套do while循环,while( ),do, while( );,5. for循环嵌套while循环,for( ; ; ),while( ),6. do while循环嵌套for循环,do,for( ; ; ), while( );,本任务用do while循环嵌套do while循环的程序解决:,#include stdio.h,main(),int score,i,sum;,float avg;,int j=1;,do,sum=0; i=1;,printf( 请输入第%d小组学生成绩:,j);,do,scanf(%d,sum=sum+score;,i=i+1; /本小组学生数增加1, while(i=10);,avg=sum/10.0;,printf(本小组10个学生的总分为:%dn,sum);,printf(本小组10个学生的平均分为:%.2fn,avg);,j+; /下一个小组, while(j=4);,黄色的循环包含在玫瑰色的循环中,本任务用for循环嵌套for循环:,#include stdio.h,main(),int score,i,sum;,float avg;,int j=1;,for(;j=4;j+),sum=0;,printf( 请输入第%d小组学生成绩:,j);,for(i=1;i=10;i+),scanf(%d,sum=sum+score;,avg=sum/10.0;,printf(本小组10个学生的总分为:%dn,sum);,printf(本小组10个学生的平均分为:%.2fn,avg);,黄色的循环包含在玫瑰色的循环中,本任务while循环嵌套do while循环,#include stdio.h,main(),int score,i,sum;,float avg;,int j=1;,while(j=4),sum=0;,printf( 请输入第%d小组学生成绩:,j);,i=1;,do,scanf(%d,sum=sum+score;,i+;,while(i=10);,avg=sum/10.0;,printf(本小组10个学生的总分为:%dn,sum);,printf(本小组10个学生的平均分为:%.2fn,avg);,j+;,黄色的循环包含在玫瑰色的循环中,考虑:用for循环嵌套while循环、do while循环嵌套for循环编程解决任务2。,【例3-21】用双循环实现【例3-10】的百钱买百鸡。,分析:,假设公鸡买x只,母鸡买y只,,小鸡买z只,那么:,1y可以是1、2、333的,一个值。,2x可以是1、2、350的,一个值。,3然后由y及x,显然可解得,z=100-x-y。,4假设所花的钱刚好是100,,那么输出x,y,z。,程序如下:,#include ,main(),int x,y,z;,for(x=1;x=50;x+),for(y=1;y=33;y+),z=100-x-y;,if(2*x+3*y+0.5*z=100),printf(公鸡数为%d,母鸡数为%d,小鸡数为%dn,x,y,z);,【例3-22】显示如下的下三角九九乘法表。,1,2 4,3 6 9,4 8 12 16,5 10 15 20 25,6 12 18 24 30 36,7 14 21 28 35 42 49,8 16 24 32 40 48 56 64,9 18 27 36 45 54 63 72 81,分析:该乘法表要列出11,21,,22,31,32,33,99,的值,乘数的范围是19,针对每一,个乘数,被乘数的范围是1到它本身,,因此可以用两重循环解决问题。按乘,数组织外层循环,i表示从19;按被,乘数组织内层循环,j表示从1i,从,而确定每一行输出的内容。,#include ,main(),int i,j;,for(i=1;i=9;i+),for(j=1;j=i;j+),printf(%-5d,i*j);,printf(n);,【例3-23】显示如下所示的图形,*,*,*,*,*,分析:题目要求的三角形由5行组成,因此程序中循环构造,的循环次数应为5次,每一次输出一行。而“输出一行又进,一步分为三项工作。,(1) 输出假设干个空格;,(2) 输出假设干个星号;,(3) 回车换行,为新的一行的输出做准备。,如今的问题是,如何确定每一行应输出的空格数和字符*的数,目,以便分别通过循环来输出这两种字符。,行号,应输出的空格,应输出的“*”,1,5,1,2,4,3,3,3,5,4,2,7,5,1,9,i,6-i,2*i-1,#include ,main(),int i,j;,for(i=1;i=5;i+) /一共输出5行, for(j=1;j=6-i;j+),printf( ); /输出空格数,for(j=1;j=2*i-1;j+),printf(*); /输出*的数目,printf(n); /换行,【例3-24】a、b、c为区间1,100的整数,统计使等式 c/(a*a+b*b),=1成立的所有解的个数,假设a=1、b=3、c=10是1个解,那么a=3、,b=1、c=10 也是解,#include ,void main(), int n=0,a,b,c;,for(a=1;a=100;a+),for(b=1;b=100;b+),for(c=1;c=100;c+),if(a*a+b*b)=c) n+=1;,/ 注意:不要写成c/(a*a+b*b)=1,printf(%d,n);,程序的运行结果为:,69,【例3-25】有1、2、3、4个数字,能组成多少个互不一样且无重复数字的三位数?都是多少?,分析:百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。,参考程序,#include stdio.h,main(),int i,j,k,n=0;,printf(n);,for(i=1;i5;i+) /*以下为三重循环*/,for(j=1;j5;j+),for (k=1;k5;k+),if (i!=k&i!=j&j!=k) /*确保i、j、k三位互不一样*/,printf(%d,%d,%dn,i,j,k);n+;,printf(n=%dn,n);,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!