1、c 语言典型问题处理方法小结一、循环问题(1) 、数论问题1、求素数for(i=2;i1,如果它仅有平凡约数 1 和 a,则我们称 a 为素数(或质数) 。整数 1 被称为基数,它既不是质数也不是合数。整数 0 和所有负整数既不是素数,也不是合数。 2、求最大公约数和最小公倍数a、if(ab)t=a;a=b;b=t;for(i=a;i=1;i-)if(a%i=0printf(“largest common divisor:%dn“,i);printf(“least common multiple:%dn“,(a*b)/is);b、辗转相除法求解a1=a;b1=b;while(a%b!=0)t=
2、a%b;a=b;b=t;printf(“largest common divisor:%dnleast common multiple:%d“,b,a1*b1/b);3、求完数一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6 的因子为 1、2、3,而 6123,因此 6 是“完数”。第一个 if 判断是否能被 2,3,4直到本身整除。第二个 if 判断是否只能被本身整除。for(a=1;a=a)break;if(s=a)printf(“%dt“,a);4、分解质因数将一个整数写成几个质因数的连乘积,如: 输入 36,则程序输出36=2*2*3*3 。解一、main()int a,
3、z,i;clrscr();scanf(“%d“,loop: for(z=2;z=2;i-)if(fm%i=0fm/=i;z=fz/fm;fzx=fz%fm;if(fzx=0)printf(“%d%d/%d-%d%d/%d=%dn“,z1,fz1,fm1,z2,fz2,fm2,z);else if(z=0)printf(“%d%d/%d-%d%d/%d=%d/%dn“,z1,fz1,fm1,z2,fz2,fm2,fzx,fm);elseprintf(“%d%d/%d-%d%d/%d=%d%d/%dn“,z1,fz1,fm1,z2,fz2,fm2,z,fzx,fm);(2)近似问题1、书 P122
4、 习题 4-6#include “math.h“main()float x,j=1,k,s,so;int n;scanf(“%f“,s=x;so=x+1;for(n=1;fabs(s-so)1e-6;n+)for(k=1;k1e-6)x=(x1+x2)/2;f=x*x*x+4*x*x-10;if(f0)x2=x;elsex1=x;printf(“%fn“,x);(3)枚举法(4)数列问题二、数组问题(1)排序问题1、从小到大排序main()int a10,i,j,t;for(i=0;iaj+1)t=aj+1;aj+1=aj;aj=t;for(i=0;i=i;j-)if(ajaj-1)可以用/*
5、if(f*f10;j-) aj=aj-1;a0=t;for(k=0;k=0;i-) 蓝色部分可以简写为绿色部分cout=aelsestri=stri-0;t=strlen(str);for(i=0;stri!=0;i+)s+=strt-i-1*pow(n,i);printf(“%d“,s);编写程序,将一个十进制正整数转换成十六进制数。注意:如何使用一个两维数组贮存多个字符串注意:1、scanf(“%d%s“,i+)3、stri=stri-A+10;4、pow 函数5、任何进制转为十进制的方法注意类比#include main()char a20;int x,i=0,j;clrscr();sc
6、anf(“%d“,while(x)if(x%16=10j-)printf(“%c“,aj);printf(“n“);7、输入一个字符串,将其中的缩写形式展开,并输出展开后的该字符串。所谓展开缩写形式就是将其中由大小写字母或数字构成的形如“a-f“、“U-Z“、“3-8“ 的形式展开成为 “abcdef“ 、“UVWXYZ“ 、“345678“,若出现“f-a“、“A-7“、 “9-5“等形式则不予理睬。例如: 输入:qwe246e-hA-d$-%4-7A-Dz-xp-R4-0输出:qwr246efghA-d$-%4567ABCDz-xp-R4-0main()char a81;int i,c,s,k,t;gets(a);for(i=0;ai!=0;i+)if(ai=-) if(ai-1=Ak-)ak+c-2=ak;注意:1、必须在结尾处加上结束标记,才能实现puts 语句。2、加上结束标记后 for(i=0;ai!=0;i+)语句才能实现。3、逻辑&与逻辑 |的优先级。4、s=strlen(a) 摆放的位置。