《经典c语言编程.docx》由会员分享,可在线阅读,更多相关《经典c语言编程.docx(93页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【程序16题目:输入两个正整数m和n,求其最大公约数和最小公倍数。1 .程序分析:利用辗除法。2 .程序源代码:main()(int a,b,numl,num2,temp;printf(please input two numbers:n);scanf(%d,%d,&numl,&num2);if(numl temp=numl;numl=num2;num2=temp;a=numl;b=num2;while(b!=0)/*利用辗除法,直到b为0为止*/(temp=a%b;a=b;b=temp;)printf(gongyueshu:%dn,a);printf(gongbeishu:%dn,numl*
2、num2/a);【程序19题目:一个数如果恰好等于它的因子之和,这个数就称为“完数二例如6=1+2+3.编程找出1000以内的所有完数。1 .程序分析:请参照程序(-上页程序14.2 .程序源代码:main()(static int k10;int ij,n,s;for(j=2;j1000;j+)(n=-l;s=j;for(i=l;i if(j%i)=0)n+;s=s-i;kn=i;if(s=O)(printf(%d is a wanshuJ);for(i=0;i printf(%d,k。);printf(%dn,kn);【程序20题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半
3、;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?1 .程序分析:见下面注释2 .程序源代码:main()(float sn=100.0,hn=sn/2;int n;for(n=2;n0)仅l=(x2+l)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/x2=xl;day-;)printf(the total is %dn,xl);【程序22题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。1 .程序分析:判断素数的方法:用一个数分别
4、去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。2 .程序源代码:main()char是a的对手,j是b的对手,k是c的对手*/for(i=x,;i=z;i+) for(j=x;j=z,;j+)(if(i!=j)for(k=x;k=,z;k+)if(i!=k&j!=k)if(i!=x,&k!=x,&k!=,z,)printf(order is a-%ctb-%ctc-%cn,i,j,k);【程序23题目:打印出如下图案(菱形)*1 .程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。2 .程序源代码:m
5、ain()(int i,j,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-2*i;k+)【程序24题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13求出这个数列的前20项之和。1 .程序分析:请抓住分子与分母的变化规律。2 .程序源代码:main()(int n,t,number=20;float a=2,b=l,s=0;for(n=l;n=number;
6、n+)(s=s+a/b;t=a;a=a+b;b=t;/*这部分是程序的关键,请读者猜猜t的作用*/printf(sum is %9.6fn,s);【程序25题目:求1+2!+3!+.+20!的和1 .程序分析:此程序只是把累加变成了累乘。2 .程序源代码:main()(float n,s=0,t=l;for(n=l;n=20;n+)t*=n;s+=t;printf(l+2!+3!.+20!=%en/s);【程序26题目:利用递归方法求5!。1 .程序分析:递归公式:fn=fn_l*4!2 .程序源代码:#include stdio.hmain() int i;int fact();for(i=
7、0;i5;i+)printf(40:%d!=%dn,i/fact(i);int fact(j)intj;int sum;if(j=O)sum=l;elsesum=j*fact(j-l);return sum;【程序27题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。1 .程序分析:2 .程序源代码:include stdio.h main()(int i=5;void palin(int n);printf(40:);palin(i);printf(n);void palin(n)int n;(char next;if(n=l)(next=getchar();printf(
8、n0:); putchar(next);elsenext=getchar();palin(n-l);putchar(next);)【程序28题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?1 .程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。2 .程序源代码:age(n)int n;int c;if(n=l) c=10;else c=age(
9、n-l)+2;return(c);main()printf(%d”,age(5);【程序29题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。1 .程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供)2 .程序源代码:main()(long a,b,c,d,e,x;scanf(%lcT,&x);a=x/10000;/*分解出万位*/b=x000/1000;/*分解出千位*/c=x00/100;/*分解出百位*/d=x0/10;/*分解出十位*/e=x;/*分解出个位*/if (a!=0) printf(there are 5,%
10、ld %ld %ld %ld %ldn;e,d,c,b,a);else if (b!=0) printf(there are 4,%ld %ld %ld %ldn;e,d,c;b);else if (c!=0) printf( there are 3,%ld %ld %ldn,e,d,c);else if (d!=0) printf(there are 2,%ld %ldn,e,d);else if (e!=0) printf( there are l;%ldn,e);【程序30题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。1 .程序分析:同29例
11、2 .程序源代码: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)/*个位等于万位并且十位等于千位*/ printf(this number is a huiwenn);elseprintf(this number is not a huiwenn);【程序31题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。1 .程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判
12、断第二个字母。2 .程序源代码:#includevoid main()(char letter;printf(please input the first letter of somedayn);while (letter=getch()!=Y)/*当所按字母为 Y 时才结束*/switch (letter)case S:printf(please input second lettern);if(letter=getch()=a)printf(saturdayn);else if (letter=getch()=u)printf(sundayn);else printf(data error
13、n);break;case F:printf(fridayn);break;case ,M,:printf(mondayn);break;case TiprintfCplease input second lettern);if(letter=getch()=u,)printf(tuesdayn);else if (letter=getch()=h)printf(thursdayn);else printf(data errorn);break;case ,W,:printf(wednesdayn);break;default: printf(data errorn);【程序32题目:Pres
14、s any key to change color, do you want to try it. Please hurry up!1 .程序分析:2 .程序源代码:#includevoid main(void)(int color;for (color =0; color 8; color+)textbackground(color);/*设置文本的背景颜色*/cprintf(This is color %drn, color);cprintf(Press any key to continuern);getch();/*输入字符看不见*/【程序33题目:学习gotoxy()与drscr()
15、函数1 .程序分析:2 .程序源代码:#include void main(void)(drscr。;/*清屏函数*/textbackground(2);gotoxy(l,5);/*定位函数*/cprintf(Output at row 5 column ln);textbackground(3);gotoxy(20,10);cprintf(Output at row 10 column 20n);【程序34题目:练习函数调用1 .程序分析:2 .程序源代码:#includevoid hello_world(void)(printfCHello, world!n);void three_hel
16、los(void) int counter;for (counter =1; counter =3; counter+)hello_world();/*调用此函数*/void main(void)three_hellos();/*调用此函数*/【程序35题目:文本颜色设置1 .程序分析:2 .程序源代码:#includevoid main(void)(int color;for (color =1; color aj) min=j;tem=ai;ai=amin;amin=tem;/*output data*/printf(After sorted n);for(i=0;iprintf(,ai)
17、;【程序38题目:求一个3*3矩阵对角线元素之和1 .程序分析:利用双重for循环控制输入二维数组,再将aii累加后输出。2 .程序源代码:main()(float a33,sum=0;int ij;printf(please input rectangle element:n);for(i=0;i3;i+)for(j=0;j3;j+)scanf(%f,&aiD);for(i=0;i3;i+)sum=sum+aii;printf(duijiaoxian he is %6.2f,sum);【程序39题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。1 .程序分析:首先判
18、断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。2 .程序源代码:main()(int a口1=1,4,6,9,13,16,19,28,40,100;int tempi,temp2,number,end,i,j;printf(original array is:n);for(i=0;iend)a10=number;elsefor(i=0;inumber)templ=ai;ai=number;for(j=i+l;jll;j+)temp2=aj;aj=templ;templ=temp2;break;)for(i=0;ill;i+)printf(m,a
19、i);【程序41题目:学习static定义静态变量的用法1 .程序分析:2 .程序源代码:include stdio.hvarfunc()(int var=0;static int static_var=O;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;i3;i+)varfunc();【程序42题目:学习使用auto定义变量的用法1 .程序分析:2 .程序源代码:include stdio
20、.hmain()int i,num;num=2;for (i=0;i3;i+) printf(40: The num equal %d n,num);num+;auto int num=l;printf(40: The internal block num equal %d n,num);num+;【程序43题目:学习使用static的另一用法。1 .程序分析:2 .程序源代码:#include stdio.hmain()(int i,num;num=2;for(i=0;i3;i+) printf(40: The num equal %d n,num);num+;static int num=
21、l;printf(40:The internal block num equal %dn,num);num+;【程序44题目:学习使用external的用法。1 .程序分析:2 .程序源代码:#include stdio.hint a,b,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);【程序45题目:学习使用register定义变量的方法。1 .程序分析:2 .程序源代码:void main()(register int i;int tmp=0;for(i=
22、l;i);scanf(%d,&num);printf(40:The square for this number is %d nzSQ(num);if(num=50)again=TRUE;elseagain=FALSE;【程序47题目:宏#define命令练习(2)1 .程序分析: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=%dnzx,y);exchang
23、e(x,y);printf(x=%d; y=%dnzx,y);【程序48题目:宏#define命令练习1 .程序分析:2 .程序源代码:#define LAG #define SMA y)?x:y#define MINIMUM(x,y)(xy)?y:xvoid main()int a=10,b=20;#ifdef MAXprintf(40: The larger one is %dn,MAXIMUM(a,b);#elseprintf(40: The lower one is %dn,MINIMUM(a,b);#endif#ifndef MINprintf(40: The lower one i
24、s %dn,MINIMUM(a,b);#elseprintf(40: The larger one is %dn,MAXIMUM(a,b);#endif#undef MAX #ifdef MAXprintf(40: The larger one is %dn,MAXIMUM(a,b);#elseprintf(40: The lower one is %dn,MINIMUM(a,b);#endif#define MIN#ifndef MINprintf(40: The lower one is %dn,MINIMUM(a,b);#elseprintf(40: The larger one is
25、%dn,MAXIMUM(a,b);#endif【程序50题目:#include的应用练习1 .程序分析:2 .程序源代码:test.h文件如下:#define LAG #define EQ =include test.h/*一个新文件50.c,包含 test.h*/include stdio.hvoid main()int i=10;int j=20;if(i LAG j)printf(40:%d larger than %delse if(i EQ j)printf(40:%d equal to %d n,ij);else if(i SMA j)printf(40:%d smaller th
26、an %d n,i,j);elseprintf(40: No such value.n);【程序51题目:学习使用按位与& o1 .程序分析:0&0=0;0&1=0;1&0=0;1&1=12 .程序源代码: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);【程序52题目:学习使用按位或|。1 .程序分析:0|0=0;0|1=1;1|1=12 .程序源代码:include stdio.hma
27、in()(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);【程序53题目:学习使用按位异或八o1 .程序分析:0Ao=0;0Al=l; lA0=l; lAl=02 .程序源代码:include stdio.hmain()int a,b;a=077;b=aA3;printf(40: The a & b(decimal) is %d n,b);bA=7;printf(40: The a & b(decimal) is %d n,b);
28、【程序54题目:取一个整数a从右端开始的47位。程序分析:可以这样考虑:先使a右移4位。(2)设置一个低4位全为1,其余全为0的数。可用(04)将上面二者进行&运算。2.程序源代码:main()(unsigned a,b,c,d;scanf(%o,&a);b=a4;c=(04);d=b&c;printf(%on%on,a,d);【程序55题目:学习使用按位取反。L程序分析:0=1;1=0;2.程序源代码:include stdio.h main() int a,b;a=234;b=a;printf(40: The as 1 complement(decimal) is %d n,b);a=a;
29、printf(40: The as 1 complement(hexidecimal) is %x n,a);【程序56题目:画图,学用circle画圆形。1 .程序分析:2 .程序源代码:circle*/include graphics.hmain()int driver,mode,i;float j=l,k=l;driver=VGA;mode=VGAHI;initgrapht&driveG&mode,);setbkcolor(YELLOW);for(i=0;i=25;i+)setcolor(8);circle(310,250,k);k=k+j;j=j+0.3;【程序57题目:画图,学用li
30、ne画直线。1 .程序分析:2 .程序源代码:#include graphics.hmain()int driver,modej;float xO,yO,yl,xl;float j=12,k;driver=VGA;mode=VGAHI;initgrapht&driveG&mode,);setbkcolor(GREEN);x0=263;y0=263;yl=275;xl=275;for(i=0;i=18;i+) setcolor(5);line(xO,yO,xO,yl);x0=x0-5;y0=y0-5;xl=xl+5;yl=yl+5;j=j+10;x0=263;yl=275;y0=263;for(
31、i=0;i=20;i+)(setcolor(5);line(xO,yO,xO,yl);x0=x0+5;yO=yO+5;yl=yl-5;【程序58题目:画图,学用rectangle画方形。1 .程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。2 .程序源代码:#include graphics.hmain()int xO,y0,yl,xl,driver,mode,i;driver=VGA;mode=VGAHI;initgraph(&driver/&mode,);setbkcolor(YELLOW);x0=263;y0=263;yl=275;xl=275;for(i=
32、0;i=18;i+)(setcolor(l);rectangle(xO,yO,xl,yl);x0=x0-5;y0=y0-5;xl=xl+5;yl=yl+5;settextstyle(DEFAULT_FONT,HORIZ_DIR/2);outtextxy(150,40,How beautiful it is!);line(130,60,480,60);setcolor(2);circle(269,269,137);)【程序59题目:画图,综合例子。1 .程序分析:2 .程序源代码:# define PAI 3.1415926# define B 0.809# include graphics.h
33、#include math.hmain()(int i,j,k,x0,y0,x,y,driver,mode;float a;driver=CGA;mode=CGACO;initgraph(&driver,&mode;);setcolor(3);setbkcolor(GREEN);x0=150;y0=100;circle(x0,y0,10);circle(x0,y0,20);circle(x0,y0,50);for(i=0;i16;i+)(a=(2*PAI/16)*i;x=ceil(x0+48*cos(a);y=ceil(yO+48*sin(a)*B);setcolor(2); line(xO,
34、yO,x,Y); setcolor(3);circle(x0,y0,60);/* Make 0 time normal size letters */settextstyle(DEFAULT_FONT,HORIZ_DIR,0);outtextxy(10,170,press a key);getch();setfillstyle(HATCH_FILL,YELLOW);floodfill(202,100,WHITE);getch();for(k=0;k=500;k+) setcolor(3);for(i=0;i=16;i+) a=(2*PAI/16)*i+(2*PAI/180)*k;x=ceil(
35、x0+48*cos(a);y=ceil(yO+48+sin(a)*B);setcolor(2); line(xO,yO,x,y);for(j=l;j=50;j+)(a=(2*PAI/16)*i+(2*PAI/180)*k-l;x=ceil(x0+48*cos(a);y=ceil(yO+48*sin(a)*B);line(xO,yO,x,y);restorecrtmode();【程序60题目:画图,综合例子。1 .程序分析:2 .程序源代码:#include graphics.h#define LEFT 0#define TOP 0#define RIGHT 639#define BOTTOM 479#define LINES 400#define MAXCOLOR 15main()int driver,mode,error;int xl,yl;int x2,y2;int dxl,dyl,dx2,dy2,i=l;int count=0;int color=0;driver=VGA;mode=VGAHI;initgraph(&driver,&mode;);xl=x2=yl=y2=10;dxl=dyl=2;dx2=dy2=3;while(!kbhit()Iine(xlzyl,x2,y2);xl+=d
限制150内