版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.顺序结构举例:(该类题目,通常输入一些要素,通过使用一个或几个数学公式求解,通过赋值表达式得到结果,并输出。包括求三角形面积,相关物体体积,求温度,解二元一次方程组、一元二次方程等)1-1.求温度转换 华氏-摄氏温度转换公式:c=5/9(f-32)#include main()float c,f; scanf(%f,&f); c=5.0/9*(f-32); /-注意如果写成5/9则结果为零,同种类型变量进行运算结果还是该类型。 printf(c is : %f, c );1-2.分解一个三位数的每位数字:a=x/100;b=x/10%10;c=x%10;1-3. 判断输出结果:printf
2、(nn%7.3f,%-7.2f;%12.3f,%-12.2f,122.8899,122.8899,122.8899,122.8899);结果为: 122.890,122.89_;_122.890,122.89_2.选择结构算法举例:(该类题目往往根据输入进行条件判断,得到相应的值或者执行相应的操作,包括:分段函数求值,求最值,判断大小并交换,求分数等级(switch-case,if-else if.),判断闰年,判断一个5位数是否回文数如12321就是回文数,判断一个数字是几位数等)2-1.分段函数求值:若x=10,y=10;若10x50,y=5关键:float x,y;.if (x10 &
3、x=b & a=c & a=d) max=a;.2-3.判断一个数是几位数if (x=1000) n=4;else if(x=100 & x=10 & x=1 & x=9) n=1;.2-4.输入一个年份判断是否是闰年。(闰年是满足下面二者之一:1。能被4整除,但不能被100整除;2。能被400整除。)#include main()int year;scanf(%d,&year);if(year%4=0 & year%100!=0 | year%400=0) printf(yes);else printf(no);另:最牛算法:#include main()int a;scanf(%d,&a)
4、;printf(a%(a%100?4:400)?NO:YES); /建议看看赞叹一下即可,不必学习。3。循环结构算法举例:循环结构应用于重复进行多次相同(相近似)的动作。while,do。while,for三种结构两层循环结构的使用称为循环嵌套,注意:外层循环变量变化一次,内层循环变量遍历一圈。包括:求最大公约数最小公倍数、求素数、鸡兔同笼、搬砖、百钱百鸡、1+(1+2)+(1+2+3)+(1+2+3+4)+(1+2+3+m) 数列求和,求数列前n项、阶乘、打印图形、水仙花数、完数。 3-1.求1000以内内同时被3,5,7整除的所有数关键:。i=1;while(i=1000)if (i%(3
5、*5*7)=0) printf ( %d,i ); i=i+1; 3-2.用do.while求n!算法。.s=1;i=1; /注意循环变量初始化的位置dos=s*i; i=i+1;while(i=n);3-3。求数列前n项。f1=1,f2=1,f3=1 fn=3fn-1+2fn-2+fn-3-建议此类题以后可以用数组解决。思路 类似前面讲过的f1=1,f2=1,fn=fn-1+fn-2.如求该数列前30项则.int f1,f2,f3,i;f1=f2=f3=1;for(i=1;i=10;i+)printf(n%d,%d,%d,f1,f2,f3); f1=3*f3+2*f2+f1; /-此处的f1
6、实际上是新的f4 f2=3*f1+2*f3+f2; /-此处的f2实际上是新的f5 f3=3*f2+2*f1+f3; /-此处的f3实际上是新的f6.*求1!+2!+3!+.m!方法一:-(n+1)!=n!*(n+1)s=0;t=1;for(n=1;n=m;n+) t=t*n ; /1! 2! 3! s=s+t ;方法二:s=0;for(n=1;n=m;n+) t=1; for(i=1;i=20 1!+2!+3!+。n! 若 20n=10 1*2+2*3+3*4+.+n*(n+1) 若 1n10 1的n次方+2的n-1次方。+n的1次方 #include .s=0; m=1;if(n20) f
7、or(i=1;in & n=10) for(i=1;in & n1) for(i=1;i=n;i+) s=s+pow(i,n-i+1); /-pow(x,y)-x的y次方 pow(2,n-1) pow(n,1).3-5,求 s=a+aa+aaa+aaaa+a.a(n个a),a,n由键盘输入!。 如输入a=3 n=5 则 s=3+33+333+3333+33333 . k=a;s=a; for(i=1;i=n-1;i+) a=a*10+k; /-a的变化趋势 :3 33 333 3333 s=s+a; .3-6, 求1000以内所有完数,所谓完数是指它等于它的所有因子之和比如6是完数因为6=1+
8、2+3 . for(i=1;i=1000;i+) s=0; /-存放每一个i的所有因子之和 for(j=1;j=i/2;j+) if(i%j=0) s=s+j; if(s=i) printf(%d is wanshun ,s); 3-7,求1001000的所有水仙花数,所谓水仙花数是指其各位数字的立方和等于该书本身如371是水仙花数 3*3*3+7*7*7+1*1*1=371. for(x=100;x=999;x+) a=x/100; b=x/10%10; c=x%10; if(a*a*a+b*b*b+c*c*c=x) printf(%d is shuixianhuan,x); 3-8, 输入
9、一个整数x,将其分解质因数 比如输入12 则显示 12=2*2*3 (此题不要求掌握,能看懂即可)#include void main() int x,i; scanf(%d,&x); i=2; printf(n%d=,x); while(i=x) if(x%i=0) printf(%d*,i); x=x/i; else i+; printf(b ); /通过退格删除最后一个多余的*号3-9, 输入两个整数x,y,求最大公约数和最小公倍数。. 1,for(i=1;i=1;i-) if(x%i=0 & y%i=0) max=i; break; /-max里是x,y的最大公约数辗转相除法:.r=m
10、%n;while(r!=0) m=n; n=r; r=m%n;printf(zui da gong yue shu :%d,n); /n为最大公约数3-10,输入人民币钱数x(x,整数),求其可能的所有组合,最小单位为1元。 如输入 x=5元 则其所有可能组合为: 15张1元 23张1元,1张2元 32张2元,1张1元 41张5元 /-该题参考比对鸡兔同笼问题,搬砖问题,百钱百鸡问题,都是同样的解法for(i=0;i=x;i+) for(j=0;j=x/2;j+) for(k=0;k=x/5;k+) for(a=0;a=x/10;a+) for(b=0;b=x/20;b+) for(c=0;c
11、=x/50;c+) for(d=0;d=x/100;d+) if(i+2*j+5*k+10*a+20*b+50*c+100*d=x) printf(%d,%d,%d,%d,%d,%d,%d,i,j,k,a,b,c,d);鸡兔同笼问题: x+y=h 2x+4y=f搬砖问题 x+y+z=36 5x+2y+z/3=36 3-11 求解方程组 x+2y+3z=100 3x-y-z =130 for(x=0;x=100;x+) /三重循环嵌套 for(y=0;y=50;y+) for(z=0;z=33;z+) if(x+2*y+3*z=100 & 3*x-y-z=130) printf(%d%d%d,x
12、,y,z) ; *或者采用如下方式也可* for(x=0;x=100;x+) /两重循环嵌套 for(y=0;y=50;y+) z=3*x-y-130; if(x+2*y+3*z=100 ) printf(%d%d%d,x,y,z) ; 3-12 对于1000以内所有满足条件的x,求表达式的值 1。若x能同时被3,5,7整除则求 1+2+3+。+x的值 2。若x是水仙花数,则求 1*1*2*1*2*3*。*1*2*3*.(x/100) . for(x=100;x=999;x+) /-注意循环嵌套的位置 if(x%(3*5*7)=0) s=0; for(i=1;i=x;i+) s=s+i; pr
13、intf(.) a=x/100; b=x/10%10; c=x%10; if(a*a*a+b*b*b+c*c*c=x) s=1;k=1; for(i=1;i=x/100;i+) k=k*i; s=s*k; printf. 3-13 打印图形问题:思路:两重循环,外层循环控制打印多少行,内层循环分三部分:1。前导空格 2。图形,如每行星号个数 3。回车换行如:字母塔#include main()int i,j; for(i=0;i=25;i+) for (j=0;j=25-i;j+) printf( ); for (j=0;j=0;j-) printf(%c,A+j); printf(n); #
14、include main()int i,j,n; scanf(%d,&n); for(i=0;in;i+) for (j=0;jn-i;j+) printf( ); for (j=1;j=2*i-1;j+) printf(%c,*); printf(n); 数组包括:排序、查找、字符串长度、字符串大小写转换、比较字符串大小、字符串连接、字符串拷贝、数列前n项、 统计字符串中单词个数、求数组元素最值、二维数组输入、输出、转置、数字(字符串)逆序输出。 数组中统计奇数偶数,二维数组对角线元素,行列元素的相关处理。4-1排序(选择法、起泡法)起泡法:/起泡法排序算法将一个数字序列存放字数组中,相邻的
15、两个数进行比较,若前一个数大则交换,.一趟下来最大数必然在最后,然后对于剩下元素反复执行上面操作#include main() int a10,i,j,x; for(i=0;i=9;i+) scanf(%d,&ai); for(i=0;i=8;i+) for(j=0;jaj+1)x=aj;aj=aj+1;aj+1=x; printf(n); for(i=0;i=9;i+) printf(%5d,ai); 。函数起泡法/函数起泡法排序算法#include main() void qipao(int a); int a10,i; for(i=0;i=9;i+) scanf(%d,&ai); qip
16、ao(a); printf(n); for(i=0;i=9;i+) printf(%5d,ai); void qipao(int a )int i,j,x; for(i=0;i=8;i+) for(j=0;jaj+1) x=aj;aj=aj+1;aj+1=x;。选择排序算法将一个数字序列存放字数组中,假设“剩下的序列中第一个元素”为最小值,将其与数组中其它元素进行比较,找到最小值,将该最小值与“剩下的序列中第一个元素”进行交换,-最小元素放到剩下序列的第一个位置,反复做这个操作。剩下序列 假设最小值 实际最小值a01 2. m存放下标9 0 8 4 -1 9 -1 -1 0 8 4 9 0 8
17、 4 9 0 0 8 4 9 8 4 8 9 8 8 9-1 0 4 8 9#include main() int a10,i,j,m,x; for(i=0;i=9;i+) scanf(%d,&ai); for(i=0;i=8;i+) m=i; for(j=i+1;jaj) m=j; x=am;am=ai;ai=x; printf(n); for(i=0;i=9;i+) printf(%5d,ai); /函数选择法排序算法#include main() void xuanze(int a); int a10,i,j; for(i=0;i=9;i+) scanf(%d,&ai); xuanze(
18、a); printf(n); for(i=0;i=9;i+) printf(%5d,ai); void xuanze(int a)int i,j,x,m; for(i=0;i=8;i+) m=i; for(j=i+1;jaj) m=j; x=am;am=ai;ai=x; 4-2查找顺序查找:数字序列放到数组中,不要求数组元素(序列本身)有序查找x是否在数列中:.for(i=0;i=4 用数组的方法求数列前n项(n由键盘输入)及前n项和。 #include main() int f100,n,i,s; scanf(%d,&n); f1=1,f2=2,f3=3;s=f1+f2+f3; for(i=
19、4;i=n;i+) fi=fi-1+3*fi-2+fi-3; s=s+fi; printf(%5d,fi); printf(%5d,s); 4-4输入6个互不相同的正整数,问由这些值作为边长能组成多少个互不相同的三角形?设每个数在组成三角形时只能使用一次,即不能出现2,2,3这样的三角形。#include main()int a6,i,j,k; for(i=0;i=5;i+) scanf(%d,&ai); for(i=0;i=5;i+) /-3重循环遍历所有取值 for(j=i+1;j=5;j+) for(k=j+1;kak & ai+akaj & aj+akai) printf(%d,%d,
20、%d ,ai,aj,ak);4-5输入A10,1。求数组中所有值为偶数的元素之和。 2。求数组中所有下标为奇数的元素的乘积。 3。将数组中所有值为3的倍数的数组元素值清零。#include main()int a10,i,s=0,k=1; for(i=0;i=9;i+) scanf(%d,&ai); if(ai%2=0) s+=ai; if(i%2=1) k=k*ai; for(i=0;i=9;i+) printf(%4d,ai); printf(n%3d,%3dnn,s,k); for(i=0;i=9;i+) if(ai%3=0) ai=0; for(i=0;i=9;i+) printf(%
21、4d,ai);4-6 杨辉三角形#include main()int a2020,i,j; for(i=0;i=9;i+) ai0=1; aii=1; for(i=2;i=9;i+) for(j=1;j=i-1;j+) aij=ai-1j-1+ai-1j; for(i=0;i=9;i+) for(j=0;j=i;j+) printf(%5d,aij); printf(n); 4-7二维数组应用综合举例 *重点看,每条注释/下表示要实现的功能描述/本题目为二维数组的各种运算综合#include main()int a33,i,j,k=0,m,n,s=0,max,c=0,f3,s1=0,b9; /
22、 对比給一维数组赋值:for(i=0;i=9;i+) scanf(%d,&ai); / 给数组元素键盘赋值 for(i=0;i=2;i+) for(j=0;j=2;j+) scanf(%d,&aij); /实现二维数组输出为方阵的方法 for(i=0;i=2;i+) for(j=0;j=2;j+) printf(%4d,aij); printf(n); /注意此换行语句的位置-一定要在外层循环内部,内层选环外部 /转置矩阵的输出 printf(n); for(i=0;i=2;i+) for(j=0;j=2;j+) printf(%4d,aji); printf(n); max=a21;m=2,
23、n=1; /随便假设数组中某个元素为最大值 /遍历二维数组,挨个比较求最大值 for(i=0;i=2;i+) for(j=0;j=2;j+) s=s+aij; /顺便求出所有数组元素的和 if(maxaij) max=aij; m=i,n=j; /m,n存放最大元素下标 /求对角线元素之和 for(i=0;i=2;i+) c=c+aii+ai2-i; / aii为主对角线元素,ai2-i为辅对角线元素 c=c-a11; printf(n最大值%3d,下标%d,%d,max,m,n); printf(n数组和%3d,对角线和%3d,s,c); /输出所有列下标大于行下标的数组元素 for(i=0
24、;i=2;i+) for(j=0;ji) printf(n行下标: %d,列下标: %d,数组元素值: %d,i,j,aij);/数组f里元素均初始化为0 for(i=0;i=2;i+) fi=0; /求每列元素的和,并将其放入数组f中 for(i=0;i=2;i+) for(j=0;j=2;j+) fi=fi+aji; printf(列下标为 %d的元素和为: %3d,i,fi); /求所有能被2,3,5整除的数组元素的平方和 for(i=0;i=2;i+) for(j=0;j=2;j+) if(aij%(2*3*5)=0) s1=s1+aij*aij; printf(能被2,3,5整除的数
25、组元素的平方和:%5dn,s1);/将二维数组赋值给一维数组,并输出 n=0; for(i=0;i=2;i+) for(j=0;j=2;j+) bn=aij; printf(%5d,bn); n+; 4-8/下面程序将对字符串的一些应用给与举例*重点看#include #include main()char a100,b30,c4100; int i,j,k; /编程序实现gets函数功能如下: puts(请输入字符串a:n); i=0; while(ai=getchar()!=n) i+; ai=0; puts(输入的字符串是:n); printf(%s,a); /编程序实现strlen函数
26、的功能: i=0; while(ai!=0) i+; printf(%s,输入的字符串长度是:n); printf(%dn,i); /编程序实现strcat函数的功能: i=j=0; puts(请输入字符串b:n); gets(b); while(ai!=0) i+; while(bj!=0)ai=bj; i+; j+; ai=0; puts(连接后字符串为:n); puts(a); /编程序实现strcmp函数功能: i=0;k=0; puts(n请重新输入两个字符串:n); gets(a);gets(b); while(ai!=0 | bi!=0)if(aibi) k=1;break; i
27、f(aibi) k=-1;break; i+; if(k=0) printf(两个字符串相等); else if(k=1) printf(%s 大于 %sn,a,b); else printf(%s 大于 %sn,b,a);4-9将字符串倒置,下面的代码有什么问题?main()char str14=abcedfghijklmn;char a14;int i;for(i=0;i14;i+)ai=str13-i;printf(%s,a);系统运行将会报error C2117: abcedfghijklmn : array bounds overflow错误。为何报此错误呢?注意字符串的长度并非是双
28、引号内的字符个数(此题中为14个)而是字符个数加一,此题为15个,这是因为系统自动要在字符串的末尾添加字符0造成的。而题目中存放字符串的字符数组str 和a 定义长度为14,不够存放,所以报错误为下标越界!可以改为#include main()char str15=abcedfghijklmn;char a15;int i;for(i=0;i14;i+) ai=str13-i;ai=0;printf(%s,a);关于二维数组的行列,需要注意的一点就是:求类似“行最大”或者“列最大”这样的结果时,需要进行行最大:遍历该行,即确定行下标后,列下标取所有可能。列最大:遍历该列,即确定列下标后,行下标
29、取所有可能。for(i=0;iN;i+) xi=ai0; /-注意,此时针对下标为i的每行进行处理,请比较下面另一段代码 for(j=1;jM;j+) if(xiaij) xi =aij; /-这句话的意思是遍历i行所有元素,求出该行最大值,放入xi中。 for(j=0;jM;j+) xj=a0j; /-注意,此时针对下标为j的每列进行处理,请比较上面另一段代码 for(i=1;iN;i+) if(xjaij) xj =aij; /-这句话的意思是遍历j列所有元素,求出该列最大值,放入xj中。 5。函数函数的分类:1,系统函数(库函数) 通过#include 包含相应的头文件,并填写相关的参数
30、实现调用,是系统提供给大家直接使用的。 如求x的y次方,即 #include .程序中有 z=pow(x,y);2,用户自定义函数 类型 函数名(形参表列) -若形参不存在,表示该函数为无参函数 即: 类型 函数名() 函数体; return 返回值; -若无return语句,表明该函数不需要返回值, 此时一般函数类型为void ,即 void 函数名(形参表列) 函数的调用函数定义好之后应该能够使用,这个使用函数的过程称为函数调用。方法有三:1,函数语句调用 如: s(x,y);2, 表达式调用 如: z=s(x,y)+1;3, 函数作为其他函数的参数调用 如: printf(%d,s(x,
31、y);函数的使用注意:若被调用函数在调用函数前面,则调用函数中不需要对被调用函数进行声明,否则需要声明如:#include int max(int a,int b)if (ab) return a; else return b;/由于max定义在前,main里无需声明main()int a,b,z; scanf(%d%d,&a,&b); z=max(a,b); printf(max is %d ,z);反之:#include main()int max(int a,int b);/-函数声明,由于max定义在后,main里需声明!或 int max(int,int); int a,b,z; s
32、canf(%d%d,&a,&b); z=max(a,b); printf(max is %d ,z);int max(int a,int b)if (ab) return a; else return b;5-1编函数实现求a,b,c的最大值,平均值,和#include int s1(int x, int y,int z)int k; k=x+y+z; return k;float s2(int a, int b,int c)float k; k=(a+b+c)/3.0; return (k);int s3(int a, int b)int k; if (ab) k=a; else k=b;
33、return k; /由于s1,s2,s3的定义都在调用它们的函数(此处为main()前,因此main()内无需声明。main()int a,b,c,sum,max; float aver; scanf(%d%d%d,&a,&b,&c); sum=s1(a,b,c); aver=s2(a,b,c); max=s3(s3(a,b),c); printf(sum=%d,aver=%f,max=%d,sum,aver,max);5-2编写函数实现打印 * * *#include void pr() printf( *n); printf( *n *n); main() pr(); /函数语句调用,该
34、函数无返回值,无参数传递5-3编写函数实现打印 * n行每行n个星号,n由键盘输入,此时,n值为4 * *#include void pr(int n)int i,j; for(i=1;i=i;j-) printf( ); /输出每行前导空格 for(j=1;j=n;j+) /输出为平行四边形,若改为 for(j=1;j=2*i-1;j+) 输出为正三角形 printf(*); /输出每行n个星号 printf(n); main()int n; scanf(%d,&n); pr(n); /函数语句调用,该函数无返回值,实参为n5-4编写函数实现一元二次方程求解。#include #includ
35、e main()void fangcheng(int a,int b, int c); int a,b,c; scanf(%d%d%d,&a,&b,&c); fangcheng(a,b,c);void fangcheng(int a,int b, int c)float x1,x2; if (b*b-4*a*c=0)if (b*b-4*a*c0) x1=(-b+sqrt(b*b-4*a*c)/(2.0*a); x2=(-b-sqrt(b*b-4*a*c)/(2.0*a); else x1=x2=(-b)/(2.0*a); printf(x1=%5f,x2=%5f,x1,x2); else pr
36、intf(方程无解);5-5编程序实现函数strupr(str)函数的功能:该函数实现小写字母转换为大写字母。*重点看#include main()char a100; void change(char str); gets(a); change(a); puts(a);void change(char str)int i=0;while(stri!=0) if(stri=a & stri=z) stri=stri-32; i+;5-6编程序实现函数strcat(str1,str2)函数的功能:该函数实现将两个字符串(分别存放于str1,str2中)连接。*重点看#include void scat(char a,char b)int i,j; i=j=0; while(ai!=0) /-定位字符串a的结尾 i+; while(bj!=0) /-实现字符串连接 ai=bj; i+; j+; ai=0; /连接产生的新字符串末尾添加字符串结束标识main()char a100,b30; puts(请输入字符串a,b:n); gets(a); gets(b); scat(a,b); /函数名做为参数 puts(连接后字符串为:n); puts(a);5-7编写函数实现:输入一维数组求数组中元素
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 住院基地激励奖惩制度
- 集体经济带头人奖惩制度
- 保健室奖惩制度细则
- 小朋友趣味奖惩制度大全
- 物业管理保洁员奖惩制度
- 文具店员工奖惩制度范本
- 村干部双禁期间奖惩制度
- 基层土管员奖惩制度汇编
- 中学生家庭奖惩制度
- 申通快递员工奖惩制度
- 对口升学考试全真模拟试卷计算机专业(第2版)答案解析
- 纪检监察教案课件
- 2021年陕西省部分高等职业院校自招生考试语文试卷(语文乙卷)A
- 《Java程序设计案例教程》第03章 Java程序的控制结构
- 消化科专科护理技术操作并发症预防和处理规范
- 公安与司法大类《刑事法律》2026年版广西高等职业教育考试(新职教高考)《刑事法律》模拟试卷(第2套)
- 《自动化行业分析》课件
- GB/T 23150-2024热水器用管状加热器
- 苏科版九年级数学上学期期中考点大串讲专题03圆【考题猜想压轴25题4种题型】(原卷版+解析)
- 肉兔规模化养殖技术规程DB41-T 1408-2017
- 2024年新沪教牛津版三年级上册英语全册教学课件
评论
0/150
提交评论