C程序100实例之七

【程序61】
题目:打印出杨辉三角形(要求打印出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;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值