![]() ![]() |
|
C程序开发经典实例之7 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:39:40 文章录入:杜斌 责任编辑:杜斌 | |
|
|
题目:打印出杨辉三角形(要求打印出10行如下图) 1.程序分析: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 2.程序源代码: main() { int i, j; int a[10][10]; printf("\n"); for(i=0; i<10; i++) { a[i][0] = 1; a[i][i] = 1; } for(i=2;i<10;i++) for(j=1;j<10; j++) a[i][j] = a[i-1][j-1] + a[i-1][j]; for(i=0; i<10; i++) { for(j=0;j<=i;j++) printf("%5d", a[i][j]); printf("\n"); } } 【程序62】 题目:学习putpixel画点。 1.程序分析: 2.程序源代码: #include "stdio.h" #include "graphics.h" main() { int i, j, driver = VGA, mode = VGAHI; initgraph(&driver, &mode, ""); setbkcolor(YELLOW); for(i=50; i<=230; i+=20) for(j=50; j<=230; j++) putpixel(i, j, 1); for(j=50; j<=230; j+=20) for(i=50; i<=230; i++) putpixel(i, j, 1); } 【程序63】 题目:画椭圆ellipse 1.程序分析: 2.程序源代码: #include "stdio.h" #include "graphics.h" #include "conio.h" /* 欢迎访问 C++Builder研究 - www.ccrun.com */ main() { int x = 360, y = 160, driver = VGA, mode = VGAHI; int num=20, i; int top, bottom; initgraph(&driver, &mode, ""); top = y - 30; bottom = y - 30; for(i=0; i<num; i++) { ellipse(250, 250, 0, 360, top, bottom); top -= 5; bottom += 5; } getch(); } 【程序64】 题目:利用ellipse and rectangle 画图。 1.程序分析: 2.程序源代码: #include "stdio.h" #include "graphics.h" #include "conio.h" main() { int driver = VGA, mode = VGAHI; int i, num = 15, top = 50; int left = 20, right = 50; initgraph(&driver, &mode, ""); for(i=0; i<num; i++) { ellipse(250, 250, 0, 360, right, left); ellipse(250, 250, 0, 360, 20, top); rectangle(20 - 2 * i, 20 - 2 * i, 10 * (i + 2), 10 * (i + 2)); right += 5; left += 5; top += 10; } getch(); } 【程序65】 题目:一个最优美的图案。 1.程序分析: 2.程序源代码: #include "graphics.h" #include "math.h" #include "dos.h" #include "conio.h" #include "stdlib.h" #include "stdio.h" #include "stdarg.h" #define MAXPTS 15 #define PI 3.1415926 struct PTS { int x, y; }; /* 63 63 72 75 6E 2E 63 6F 6D */ double AspectRatio = 0.85; void LineToDemo(void) { struct viewporttype vp; struct PTS points[MAXPTS]; int i, j, h, w, xcenter, ycenter; int radius, angle, step; double rads; printf(" MoveTo / LineTo Demonstration" ); getviewsettings( &vp ); h = vp.bottom - vp.top; w = vp.right - vp.left; xcenter = w / 2; /* Determine the center of circle */ ycenter = h / 2; radius = (h - 30) / (AspectRatio * 2); step = 360 / MAXPTS; /* Determine # of increments */ angle = 0; /* Begin at zero degrees */ for(i=0; i<MAXPTS; i++) { rads = (double)angle * PI / 180.0; /* Convert angle to radians */ points[i].x = xcenter + (int)( cos(rads) * radius ); points[i].y = ycenter - (int)( sin(rads) * radius * AspectRatio ); angle += step; /* Move to next increment */ } circle( xcenter, ycenter, radius ); /* Draw bounding circle */ for(i=0; i<MAXPTS; i++) { for(j=i; j<MAXPTS; j++) { moveto(points[i].x, points[i].y); /* Move to beginning of cord */ lineto(points[j].x, points[j].y); /* Draw the cord */ } } } main() { int driver, mode; driver = CGA; mode = CGAC0; initgraph(&driver, &mode, ""); setcolor(3); setbkcolor(GREEN); LineToDemo(); }
【程序66】 题目:输入3个数a, b, c,按大小顺序输出。 1.程序分析:利用指针方法。 2.程序源代码: /*pointer*/ main() { int n1, n2, n3; int *pointer1, *pointer2, *pointer3; printf("please input 3 number:n1, n2, n3:"); scanf("%d, %d, %d", &n1, &n2, &n3); pointer1 = &n1; pointer2 = &n2; pointer3 = &n3; if(n1 > n2) swap(pointer1, pointer2); if(n1 > n3) swap(pointer1, pointer3); if(n2 > n3) swap(pointer2, pointer3); printf("the sorted numbers are:%d, %d, %d\n", n1, n2, n3); } swap(p1, p2) int *p1, *p2; { int p; p = *p1; *p1 = *p2; *p2 = p; } 【程序67】 题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 1.程序分析:谭浩强的书中答案有问题。 2.程序源代码: main() { int number[10]; input(number); max_min(number); output(number); } input(number) int number[10]; { int i; for(i=0; i<9; i++) scanf("%d, ", &number[i]); scanf("%d", &number[9]); } /* 欢迎访问 C++Builder研究 - www.ccrun.com */ max_min(array) int array[10]; { int *max, *min, k, l; int *p, *arr_end; arr_end = array + 10; max= min = array; for(p=array+1; p<10; p++) if(*p > *max) max = p; else if(*p < *min) min = p; k = *max; l = *min; *p = array[0]; array[0] = l; l = *p; *p = array[9]; array[9] = k; k = *p; return; } output(array) int array[10]; { int *p; for(p=array; p<10; p++) printf("%d, ", *p); printf("%d\n", array[9]); } 【程序68】 题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 1.程序分析: 2.程序源代码: main() { int number[20], n, m, i; printf("the total numbers is:"); scanf("%d", &n); printf("back m:"); scanf("%d", &m); for(i=0; i<20; i++) scanf("%d, ", &number[i]); scanf("%d", &number[n-1]); move(number, n, m); for(i=0; i<20; i++) printf("%d, ", number[i]); printf("%d", number[n-1]); } move(array, n, m) int n, m, array[20]; { int *p, array_end; array_end = *(array + n - 1); for(p=array + n - 1; p>array; p--) *p = *(p - 1); *array = array_end; m--; if(m > 0) move(array, n, m); } 【程序69】 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 1. 程序分析: 2.程序源代码: #define nmax 50 main() { int i, k, m, n, num[nmax], *p; printf("please input the total of numbers:"); scanf("%d", &n); p=num; for(i=0; i<nmax; i++) *(p + i) = i + 1; i = 0; k = 0; m = 0; while(m < nmax) { if(*(p + i) != 0) k++; if(k == 3) { *(p + i) = 0; k = 0; m++; } i++; if(i==n) i=0; } while(*p==0) p++; printf("%d is left\n", *p); } 【程序70】 题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 1.程序分析: 2.程序源代码: main() { int len; char *str[20]; printf("please input a string:\n"); scanf("%s", str); len = length(str); printf("the string has %d characters.", len); } length(p) char *p; { int n; n = 0; while(*p!='\0') { n++; p++; } return n; } |
|
![]() ![]() |