经典C算法收藏
发布时间:2020-12-13 21:12:42 所属栏目:PHP教程 来源:网络整理
导读:经典的100个c算法 算法 题目:古典问题:有1对兔子,从诞生后第3个月起每月都生 1对兔子,小兔 子长到第3个月后每月又生1对兔子,假设兔子都不死,问每 个月的兔子总数 为多少? ______________________________________________________ 程序分析:兔子的规
经典的100个c算法 算法 题目:古典问题:有1对兔子,从诞生后第3个月起每月都生 1对兔子,小兔 子长到第3个月后每月又生1对兔子,假设兔子都不死,问每 个月的兔子总数 为多少? ______________________________________________________ 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... ______________________________________________________ 程序源代码:
main()
{
long f1,f2;
int i;
f1=f2=1;
for(i=1;i<=20;i++) { printf("ld ld",f1,f2); if(i%2==0) printf("n");/*控制输出,每行4个*/ f1=f1+f2;/*前两个月加起来赋值给第3个月*/ f2=f1+f2;/*前两个月加起来赋值给第3个月*/ } }
上题还可用1维数组处理,you try!
题目:判断101⑵00之间有多少个素数,并输出所有素数。 ______________________________________________________ 程序分析:判断素数的方法:用1个数分别去除2到sqrt(这个数 ),如果能被整 除,则表明此数不是素数,反之是素数。 ______________________________________________________ 程序源代码:
#include "math.h"
main()
{
int m,i,k,h=0,leap=1;
printf("n");
for(m=101;m<=200;m++) { k=sqrt(m+1); for(i=2;i<=k;i++) if(m%i==0) {leap=0;break;} if(leap) {printf("%⑷d",m);h++; if(h==0) printf("n"); } leap=1; } printf("nThe total is %d",h); }
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指1个 3位数,其各位 数字立方和等于该数本身。例如:153是1个“水仙花数”,因 为153=1的3次方 +5的3次方+3的3次方。 ______________________________________________________ 程序分析:利用for循环控制100⑼99个数,每一个数分解出个位, 10位,百位。 ______________________________________________________ 程序源代码:
main()
{
int i,j,n;
printf("'water flower'number is:");
for(n=100;n<1000;n++) { i=n/100;/*分解出百位*/ j=n/10;/*分解出10位*/ k=n;/*分解出个位*/ if(i*100+j*10+k==i*i*i+j*j*j+k*k*k) { printf("%⑸d",n); } } printf("n"); }
题目:将1个正整数分解质因数。例如:输入90,打印出 90=2*3*3*5。 ______________________________________________________ 程序分析:对n进行分解质因数,应先找到1个最小的质数k,然 后按下述步骤完 成: (1)如果这个质数恰等于n,则说明分解质因数的进程已结束, 打印出便可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的 商,作为新的正 整数你n,重复履行第1步。 (3)如果n不能被k整除,则用k+1作为k的值,重复履行第1步。 ______________________________________________________ 程序源代码:
/* zheng int is divided yinshu*/
main()
{
int n,i;
printf("nplease input a number:n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++) { while(n!=i) { if(n%i==0) { printf("%d*",i); n=n/i; } else break; } } printf("%d",n); }
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同 学用A表示,60 ⑻9分之间的用B表示,60分以下的用C表示。 ______________________________________________________ 程序分析:(a>b)?a:b这是条件运算符的基本例子。 _____________________________________________________ 程序源代码:
main()
{
int score;
char grade;
printf("please input a scoren");
scanf("%d",&score);
grade=score>=90?'A'score>=60?'B':'C');
printf("%d belongs to %c",score,grade);
}
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 ______________________________________________________ 程序分析:利用辗除法。 ______________________________________________________ 程序源代码:
main()
{
int a,b,num1,num2,temp;
printf("please input two numbers:n");
scanf("%d,%d",&num1,&num2);
if(num1 { temp=num1;
num1=num2;
num2=temp;
}
a=num1;b=num2;
while(b!=0)/*利用辗除法,直到b为0为止*/
{
temp=a%b;
a=b;
b=temp;
}
printf("gongyueshu:%dn",a);
printf("gongbeishu:%dn",num1*num2/a);
}
题目:输入1行字符,分别统计出其中英文字母、空格、数字和 其它字符的个数 。 ______________________________________________________ 程序分析:利用while语句,条件为输入的字符不为'n'. ______________________________________________________ 程序源代码:
#include "stdio.h"
main()
{char c;
int letters=0,space=0,digit=0,others=0;
printf("please input some charactersn");
while((c=getchar())!='n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c==' ') space++; else if(c>='0'&&c<='9') digit++; else others++; } printf("all in all:char=%d space=%d digit=%d others=% dn",letters,space,digit,others); }
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是1个数字。例 如 2+22+222+2222+22222(此时共有5个数相加),几个数相加有键 盘控制。 ______________________________________________________ 程序分析:关键是计算出每项的值。 ___________________________________________________ 程序源代码:
main()
{
int a,n,count=1;
long int sn=0,tn=0;
printf("please input a and nn");
scanf("%d,&a,&n);
printf("a=%d,n=%dn",a,n);
while(count<=n) { tn=tn+a; sn=sn+tn; a=a*10; ++count; } printf("a+aa+...=%ldn",sn); }
题目:1个数如果恰好等于它的因子之和,这个数就称为“完数 ”。例如6=1+2 +3.编程找出1000之内的所有完数。 ______________________________________________________ 程序源代码:
main()
{
static int k[10];
int i,s;
for(j=2;j<1000;j++) { n=⑴; s=j; for(i=1;i { if((j%i)==0) { n++; s=s-i; k[n]=i; } } if(s==0) { printf("%d is a wanshu",j); for(i=0;i printf("%d,",k); printf("%dn",k[n]); } } }
题目:1球从100米高度自由落下,每次落地后反跳回原高度的 1半;再落下, 求它在第10次落地时,共经过量少米?第10次反弹多高? ______________________________________________________ 程序源代码:
main()
{
float sn=100.0,hn=sn/2;
int n;
for(n=2;n<=10;n++) { sn=sn+2*hn;/*第n次落地时共经过的米数*/ hn=hn/2; /*第n次反跳高度*/ } printf("the total of road is %fn",sn); printf("the tenth is %f metern",hn); }
题目:1只猴子摘了N个桃子第1天吃了1半又多吃了1个,第2 天又吃了余下的 1半又多吃了1个,到第10天的时候发现还有1个. ______________________________________________________ 程序源代码:
/* 猴子吃桃问题 */
main()
{
int i,s,n=1;
for(i=1;i<10;i++) { s=(n+1)*2 n=s; } printf("第1天共摘了%d个桃n",s); }
迭代法求方程根 ______________________________________________________
/* 迭代法求1个数的平方根 */
#define Epsilon 1.0E⑹ /*控制解的精度*/
#include
/* 上题的另外一种算法 */
#define Epsilon 1.0E⑹ /*控制解的精度*/
#include
用牛顿迭代法 求方程 2*x*x*x⑷*x*x+3*x⑹ 的根
/* 牛顿迭代法 */
#define Epsilon 1.0E⑹ /*控制解的精度*/
#include
用2分法求上题
/* 2分法 */
#define Epsilon 1.0E⑸ /*控制解的精度*/
#include
题目:打印出以下图案(菱形) * *** ****** ******** ****** *** * ______________________________________________________ 程序分析:先把图形分成两部份来看待,前4行1个规律,后3 行1个规律,利 用两重for循环,第1层控制行,第2层控制列。 ______________________________________________________ 程序源代码:
main()
{
int i,k;
for(i=0;i<=3;i++) { for(j=0;j<=2-i;j++) printf(" "); for(k=0;k<=2*i;k++) printf("*"); printf("n"); } for(i=0;i<=2;i++) { for(j=0;j<=i;j++) printf(" "); for(k=0;k<=4⑵*i;k++) printf("*"); printf("n"); } }
题目:1个5位数,判断它是否是回文数。即12321是回文数,个 位与万位相同, 10位与千位相同。 ______________________________________________________ 程序分析:同29例 ______________________________________________________ 程序源代码:
main( )
{
long ge,shi,qian,wan,x;
scanf("%ld",&x);
wan=x/10000;
qian=x000/1000;
shi=x0/10;
ge=x;
if (ge==wan&&shi==qian)/*个位等于万位并且10位等于千位*/
printf("this number is a huiwenn");
else
printf("this number is not a huiwenn");
}
题目:请输入星期几的第1个字母来判断1下是星期几,如果第 1个字母1样, 则继续判断第2个字母。 ______________________________________________________ 程序分析:用情况语句比较好,如果第1个字母1样,则判断用 情况语句或if语 句判断第2个字母。 ______________________________________________________ 程序源代码:
#include
题目:Press any key to change color,do you want to try it. Please hurry up! ______________________________________________________ 程序源代码:
#include
题目:学习gotoxy()与clrscr()函数 ______________________________________________________ 程序源代码:
#include
题目:练习函数调用 ______________________________________________________ 程序源代码:
#include
题目:文本色彩设置 ______________________________________________________ 程序源代码:
#include
题目:求100以内的素数 ______________________________________________________ 程序源代码:
#include 题目:对10个数进行排序 ______________________________________________________ 程序分析:可以利用选择法,即从后9个比较进程中,选择1个 最小的与第1个 元素交换,下次类推,即用第2个元素与后8个进行比较,并进 行交换。 程序源代码:
#define N 10
main()
{int i,min,tem,a[N];
/*input data*/
printf("please input ten num:n");
for(i=0;i
题目:求1个3*3矩阵对角线元素之和 ______________________________________________________ 程序分析:利用两重for循环控制输入2维数组,再将a累加后输 出。 ______________________________________________________ 程序源代码:
main()
{
float a[3][3],sum=0;
int i,j;
printf("please input rectangle element:n");
for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%f",&a[j]); for(i=0;i<3;i++) sum=sum+a; printf("duijiaoxian he is %6.2f",sum); }
题目:有1个已排好序的数组。现输入1个数,要求按原来的 规律将它插入数 组中。 ______________________________________________________ 程序分析:首先判断此数是不是大于最后1个数,然后再斟酌插入 中间的数的情况 ,插入后此元素以后的数,顺次后移1个位置。 ______________________________________________________ 程序源代码:
main()
{
int a[11]={1,4,6,9,16,19,28,40,100};
int temp1,temp2,number,end,j;
printf("original array is:n");
for(i=0;i<10;i++) printf("%5d",a); printf("n"); printf("insert a new number:"); scanf("%d",&number); end=a[9]; if(number>end)
a[10]=number;
else
{for(i=0;i<10;i++) { if(a>number)
{temp1=a;
a=number;
for(j=i+1;j<11;j++) {temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } for(i=0;i<11;i++) printf("%6d",a); }
题目:将1个数组逆序输出。 ______________________________________________________ 程序分析:用第1个与最后1个交换。 ______________________________________________________ 程序源代码:
#define N 5
main()
{ int a[N]={9,1},temp;
printf("n original array:n");
for(i=0;i
题目:学习static定义静态变量的用法 ______________________________________________________ 程序源代码:
#include "stdio.h"
varfunc()
{
int var=0;
static int static_var=0;
printf("40:var equal %d n",var);
printf("40:static var equal %d n",static_var);
printf("n");
var++;
static_var++;
}
void main()
{int i;
for(i=0;i<3;i++) varfunc(); }
#include "stdio.h"
main()
{
int i,num;
num=2;
for(i=0;i<3;i++) { printf("40: The num equal %d n",num); num++; { static int num=1; printf("40:The internal block num equal %dn",num); num++; } } }
题目:学习使用auto定义变量的用法 ______________________________________________________ 程序源代码:
#include "stdio.h"
main()
{int i,num;
num=2;
for (i=0;i<3;i++) { printf("40: The num equal %d n",num); num++; { auto int num=1; printf("40: The internal block num equal %d n",num); num++; } } }
题目:学习使用external的用法。 ______________________________________________________ 程序源代码:
#include "stdio.h"
int a,c;
void add()
{ int a;
a=3;
c=a+b;
}
void main()
{ a=b=4;
add();
printf("The value of c is equal to %dn",c);
}
题目:学习使用register定义变量的方法。 ______________________________________________________ 程序源代码:
void main()
{
register int i;
int tmp=0;
for(i=1;i<=100;i++) tmp+=i; printf("The sum is %dn",tmp); }
题目:宏#define命令练习(1) ______________________________________________________ 程序源代码:
#include "stdio.h"
#define TRUE 1
#define FALSE 0
#define SQ(x) (x)*(x)
void main()
{
int num;
int again=1;
printf("40: Program will stop if input value less
than 50.n");
while(again)
{
printf("40lease input number==>");
scanf("%d",&num);
printf("40:The square for this number is %d n",SQ
(num));
if(num>=50)
again=TRUE;
else
again=FALSE;
}
}
题目:宏#define命令练习(2) ______________________________________________________ 程序源代码:
#include "stdio.h"
#define exchange(a,b)
{ /*宏定义中允许包括两道衣裳命令的情形,此时必须在最右
边加上""*/
int t;
t=a;
a=b;
b=t;
}
void main(void)
{
int x=10;
int y=20;
printf("x=%d; y=%dn",x,y);
exchange(x,y);
printf("x=%d; y=%dn",y);
}
题目:宏#define命令练习(3) ______________________________________________________ 程序源代码:
#define LAG >
#define SMA < #define EQ == #include "stdio.h" void main() { int i=10; int j=20; if(i LAG j) printf("40: %d larger than %d n",j); else if(i EQ j) printf("40: %d equal to %d n",j); else if(i SMA j) printf("40:%d smaller than %d n",j); else printf("40: No such value.n"); }
题目:#if #ifdef和#ifndef的综合利用。 ______________________________________________________ 程序源代码:
#include "stdio.h"
#define MAX
#define MAXIMUM(x,y) (x>y)?x:y
#define MINIMUM(x,y) (x>y)?y:x
void main()
{ int a=10,b=20;
#ifdef MAX
printf("40: The larger one is %dn",MAXIMUM(a,b));
#else
printf("40: The lower one is %dn",MINIMUM(a,b));
#endif
#ifndef MIN
printf("40: The lower one is %dn",b));
#else
printf("40: The larger one is %dn",b));
#endif
#undef MAX
#ifdef MAX
printf("40: The larger one is %dn",b));
#endif
#define MIN
#ifndef MIN
printf("40: The lower one is %dn",b));
#endif
}
题目:#include 的利用练习 ______________________________________________________ 程序源代码:
test.h 文件以下:
#define LAG >
#define SMA < #define EQ == #include "test.h" /*1个新文件50.c,包括test.h*/ #include "stdio.h" void main() { int i=10; int j=20; if(i LAG j) printf("40: %d larger than %d n",j); else printf("40: No such value.n"); }
题目:学习使用按位与 & 。 ______________________________________________________ 程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1 ______________________________________________________ 程序源代码:
#include "stdio.h"
main()
{
int a,b;
a=077;
b=a&3;
printf("40: The a & b(decimal) is %d n",b);
b&=7;
printf("40: The a & b(decimal) is %d n",b);
}
题目:学习使用按位或 | 。 ______________________________________________________ 程序分析:0|0=0; 0|1=1; 1|0=1; 1|1=1 ______________________________________________________ 程序源代码:
#include "stdio.h"
main()
{
int a,b;
a=077;
b=a|3;
printf("40: The a & b(decimal) is %d n",b);
b|=7;
printf("40: The a & b(decimal) is %d n",b);
}
题目:学习使用按位异或 ^ 。 ______________________________________________________ 程序分析:0^0=0; 0^1=1; 1^0=1; 1^1=0 ______________________________________________________ 程序源代码:
#include "stdio.h"
main()
{
int a,b;
a=077;
b=a^3;
printf("40: The a & b(decimal) is %d n",b);
b^=7;
printf("40: The a & b(decimal) is %d n",b);
}
题目:取1个整数a从右端开始的4~7位。 ______________________________________________________ 程序分析:可以这样斟酌: (1)先使a右移4位。 (2)设置1个低4位全为1,其余全为0的数。可用~(~0<<4) (3)将上面2者进行&运算。 ______________________________________________________ 程序源代码:
main()
{
unsigned a,c,d;
scanf("%o",&a);
b=a>>4;
c=~(~0<<4); d=b&c; printf("%on%on",d); }
题目:学习使用按位取反~。 ______________________________________________________ 程序分析:~0=1; ~1=0; ______________________________________________________ 程序源代码:
#include "stdio.h"
main()
{
int a,b;
a=234;
b=~a;
printf("40: The a's 1 complement(decimal) is %d
n",b);
a=~a;
printf("40: The a's 1 complement(hexidecimal) is %x
n",a);
}
题目:画图,学用circle画圆形。 ______________________________________________________ 程序源代码:
/*circle*/
#include "graphics.h"
main()
{
int driver,mode,i;
float j=1,k=1;
driver=VGA;mode=VGAHI;
initgraph(&driver,&mode,"");
setbkcolor(YELLOW);
for(i=0;i<=25;i++) { setcolor(8); circle(310,250,k); k=k+j; j=j+0.3; } }
题目:画图,学用line画直线。 ______________________________________________________ 程序源代码:
#include "graphics.h"
main()
{
int driver,i;
float x0,y0,y1,x1;
float j=12,k;
driver=VGA;mode=VGAHI;
initgraph(&driver,"");
setbkcolor(GREEN);
x0=263;y0=263;y1=275;x1=275;
for(i=0;i<=18;i++) { setcolor(5); line(x0,y1); x0=x0⑸; y0=y0⑸; x1=x1+5; y1=y1+5; j=j+10; } x0=263;y1=275;y0=263; for(i=0;i<=20;i++) { setcolor(5); line(x0,y1); x0=x0+5; y0=y0+5; y1=y1⑸; } }
题目:画图,学用rectangle画方形。 ______________________________________________________ 程序分析:利用for循环控制100⑼99个数,每一个数分解出个位, 10位,百位。 ______________________________________________________ 程序源代码:
#include "graphics.h"
main()
{
int x0,x1,driver,i;
driver=VGA;mode=VGAHI;
initgraph(&driver,"");
setbkcolor(YELLOW);
x0=263;y0=263;y1=275;x1=275;
for(i=0;i<=18;i++) { setcolor(1); rectangle(x0,y1); x0=x0⑸; y0=y0⑸; x1=x1+5; y1=y1+5; } settextstyle(DEFAULT_FONT,HORIZ_DIR,2); outtextxy(150,"How beautiful it is!"); line(130,60,480,60); setcolor(2); circle(269,269,137); }
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |