100个经典c算法 | 程序源码

简介: 100个经典c算法 | 程序源码

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔

子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数

为多少?


程序分析:兔子的规律为数列1, 1, 2, 3, 5, 8, 13, 21…


程序源代码:

main()
{
  long f1, f2;
  int i;
  f1 = f2 = 1;
  for (i = 1; i <= 20; i++)
  {
    printf("%12ld %12ld", f1, f2);
    if (i % 2 == 0) printf("\n");/*控制输出,每行四个*/
    f1 = f1 + f2;/*前两个月加起来赋值给第三个月*/
    f2 = f1 + f2;/*前两个月加起来赋值给第三个月*/
  }
}

题目:判断101 - 200之间有多少个素数,并输出所有素数。


程序分析:判断素数的方法:用一个数分别去除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("%-4d", m); h++;
      if (h % 10 == 0)
        printf("\n");
    }
    leap = 1;
  }
  printf("\nThe total is %d", h);
}

题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位

数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153 = 1的三次方

+5的三次方+3的三次方。


程序分析:利用for循环控制100 - 999个数,每个数分解出个位,十位,百位。


程序源代码:

main()
{
  int i, j, k, n;
  printf("'water flower'number is:");
  for (n = 100; n < 1000; n++)
  {
    i = n / 100;/*分解出百位*/
    j = n / 10 % 10;/*分解出十位*/
    k = n % 10;/*分解出个位*/
    if (i * 100 + j * 10 + k == i * i * i + j * j * j + k * k * k)
    {
      printf("%-5d", n);
    }
  }
  printf("\n");
}

题目:将一个正整数分解质因数。例如:输入90, 打印出90 = 2 * 3 * 3 * 5。


程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完

成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商, 作为新的正

整数你n, 重复执行第一步。

(3)如果n不能被k整除,则用k + 1作为k的值, 重复执行第一步。


程序源代码:

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

  • 89分之间的用B表示,60分以下的用C表示。

程序分析:(a > b) ? a : b这是条件运算符的基本例子。


程序源代码:

main()
{
  int score;
  char grade;
  printf("please input a score\n");
  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:%d\n", a);
  printf("gongbeishu:%d\n", num1 * num2 / a);
}

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数


程序分析:利用while语句, 条件为输入的字符不为’\n’.


程序源代码:

#include "stdio.h"
main()
{
  char c;
  int letters = 0, space = 0, digit = 0, others = 0;
  printf("please input some characters\n");
  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=%
    d\n",letters,space,digit,others);
}

题目:求s = a + aa + aaa + aaaa + aa…a的值,其中a是一个数字。例如

2 + 22 + 222 + 2222 + 22222(此时共有5个数相加),几个数相加有键盘控制。


程序分析:关键是计算出每一项的值。


程序源代码:

main()
{
  int a, n, count = 1;
  long int sn = 0, tn = 0;
  printf("please input a and n\n");
  scanf("%d,%d", &a, &n);
  printf("a=%d,n=%d\n", a, n);
  while (count <= n)
  {
    tn = tn + a;
    sn = sn + tn;
    a = a * 10;
    ++count;
  }
  printf("a+aa+...=%ld\n", sn);
}

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6 = 1+2

+3.编程找出1000以内的所有完数。


程序源代码:

main()
{
  static int k[10];
  int i, j, n, s;
  for (j = 2; j < 1000; j++)
  {
    n = -1;
    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("%d\n", k[n]);
      }
  }
}

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,

求它在第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 %f\n", sn);
  printf("the tenth is %f meter\n", hn);
}

题目:一只猴子摘了N个桃子第一天吃了一半又多吃了一个, 第二天又吃了余下的

一半又多吃了一个, 到第十天的时候发现还有一个.


程序源代码:

main()
{
  int i, s, n = 1;
  for (i = 1; i < 10; i++)
  {
    s = (n + 1) * 2
      n = s;
  }
  printf("第一天共摘了%d个桃\n", s);
}

迭代法求方程根


/* 迭代法求一个数的平方根 */
#define Epsilon 1.0E-6 /*控制解的精度*/
#include<math.h>
main()
{
  float a, x0, x1;
  printf("请输入要求的数:");
  scanf("%f", &a);
  x0 = a / 2;
  x1 = (x0 + a / x0) / 2;
  while (fabs(x1 - x0) >= Epsilon)
  {
    x0 = x1;
    x1 = (x0 + a / x0) / 2;
  }
  printf("%f的平方根:%f.5\n", x1);
}
/* 上题的另一种算法 */
#define Epsilon 1.0E-6 /*控制解的精度*/ 
#include <stdio.h>
#include <math.h> 
main()
{
  float num, pre, this;
  do
  {
    scanf("%f", &num);/*输入要求平方根的数*/
  } while (num < 0);
  if (num == 0)
    printf("the root is 0");
  else
  {
    this = 1;
    do
    {
      pre = this;
      this = (pre + num / pre) / 2;
    } while (fabs(pre - this) > Epsilon);/*用解的精度,控制循环次数*/
  }
  printf("the root is %f", this);
}

用牛顿迭代法 求方程 2 * x * x * x - 4 * x * x + 3 * x - 6 的根

/* 牛顿迭代法 */
#define Epsilon 1.0E-6 /*控制解的精度*/
#include<math.h>
main()
{
  float x1, x0 = 1.5;
  x1 = x0 - (2 * x0 * x0 * x0 - 4 * x0 * x0 + 3 * x0 - 6) / (6 * x0 * x0 - 8 * x0 + 3);
  while (fabs(x1 - x0 >= Epsilon)
  {
    x0 = x1;
    x1 = x0 - (2 * x0 * x0 * x0 - 4 * x0 * x0 + 3 * x0 - 6) / (6 * x0 * x0 - 8 * x0 + 3);
  }
  printf("方程的根为%f\n", x1);
}

用二分法求上题

/* 二分法 */
#define Epsilon 1.0E-5 /*控制解的精度*/
#include<math.h>
main()
{
  folat x1, x2, x0, f1, f2, f0;
  x0 = (x1 + x2) / 2;
  f0 = 2 * x0 * x0 * x0 - 4 * x0 * x0 + 3 * x0 - 6;   /* 求中点的函数值 */
  while (fabs(f0) >= Epsilon)
  {
    if (f0 * f1 < 0)
    {
      x2 = x0;
      f2 = 2 * x2 * x2 * x2 - 4 * x2 * x2 + 3 * x2 - 6;
    }
    if (f0 * f2 < 0)
    {
      x1 = x0;
      f1 = 2 * x1 * x1 * x1 - 4 * x1 * x1 + 3 * x1 - 6;
    }
    x0 = (x1 + x2) / 2;
    f0 = 2 * x0 * x0 * x0 - 4 * x0 * x0 + 3 * x0 - 6;
  }
  printf("用二分法求得方程的根:%f\n", x0);
}

题目:打印出如下图案(菱形)

*








程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利

用双重for循环,第一层控制行,第二层控制列。


程序源代码:

main()
{
  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++)
      printf("*");
    printf("\n");
  }
}

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,

十位与千位相同。


程序分析:同29例


程序源代码:

main()
{
  long ge, shi, qian, wan, x;
  scanf("%ld", &x);
  wan = x / 10000;
  qian = x % 10000 / 1000;
  shi = x % 100 / 10;
  ge = x % 10;
  if (ge == wan && shi == qian)/*个位等于万位并且十位等于千位*/
    printf("this number is a huiwen\n");
  else
    printf("this number is not a huiwen\n");
}

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,

则继续判断第二个字母。


程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语

句判断第二个字母。


程序源代码:

#include <stdio.h>
void main()
{
  char letter;
  printf("please input the first letter of someday\n");
  while ((letter = getch()) != 'Y') /*当所按字母为Y时才结束*/
  {
    switch (letter)
    {
    case 'S':printf("please input second letter\n");
      if ((letter = getch()) == 'a')
        printf("saturday\n");
      else if ((letter = getch()) == 'u')
        printf("sunday\n");
      else printf("data error\n");
      break;
    case 'F':printf("friday\n"); break;
    case 'M':printf("monday\n"); break;
    case 'T':printf("please input second letter\n");
      if ((letter = getch()) == 'u')
        printf("tuesday\n");
      else if ((letter = getch()) == 'h')
        printf("thursday\n");
      else printf("data error\n");
      break;
    case 'W':printf("wednesday\n"); break;
    default: printf("data error\n");
    }
  }
}

题目:Press any key to change color, do you want to try it.Please hurry up!


程序源代码:

#include <conio.h>
void main(void)
{
  int color;
  for (color = 0; color < 8; color++)
  {
    textbackground(color); /*设置文本的背景颜色*/
    cprintf("This is color %d\r\n", color);
    cprintf("ress any key to continue\r\n");
    getch(); /*输入字符看不见*/
  }
}

题目:学习gotoxy()与clrscr()函数


程序源代码:

#include <conio.h>
void main(void)
{
  clrscr(); /*清屏函数*/
  textbackground(2);
  gotoxy(1, 5); /*定位函数*/
  cprintf("Output at row 5 column 1\n");
  textbackground(3);
  gotoxy(20, 10);
  cprintf("Output at row 10 column 20\n");
}

题目:练习函数调用


程序源代码:

#include <stdio.h>
void hello_world(void)
{
  printf("Hello, world!\n");
}
void three_hellos(void)
{
  int counter;
  for (counter = 1; counter <= 3; counter++)
    hello_world();/*调用此函数*/
}
void main(void)
{
  three_hellos();/*调用此函数*/
}

题目:文本颜色设置


程序源代码:

#include <conio.h>
void main(void)
{
  int color;
  for (color = 1; color < 16; color++)
  {
    textcolor(color);/*设置文本颜色*/
    cprintf("This is color %d\r\n", color);
  }
  textcolor(128 + 15);
  cprintf("This is blinking\r\n");
}

题目:求100之内的素数


程序源代码:

#include <stdio.h>
#include "math.h"
#define N 101
main()
{
  int i, j, line, a[N];
  for (i = 2; i < N; i++) a = i;
  for (i = 2; i < sqrt(N); i++)
    for (j = i + 1; j < N; j++)
    {
      if (a != 0 && a[j] != 0)
        if (a[j] % a == 0)
          a[j] = 0;
    }
  printf("\n");
  for (i = 2, line = 0; i < N; i++)
  {
    if (a != 0)
    {
      printf("%5d", a);
      line++;
    }
    if (line == 10)
    {
      printf("\n");
      line = 0;
    }
  }
}

题目:对10个数进行排序


程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个

元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。

程序源代码:

#define N 10
main()
{
  int i, j, min, tem, a[N];
  /*input data*/
  printf("please input ten num:\n");
  for (i = 0; i < N; i++)
  {
    printf("a[%d]=", i);
    scanf("%d", &a);
  }
  printf("\n");
  for (i = 0; i < N; i++)
    printf("%5d", a);
  printf("\n");
  /*sort ten num*/
  for (i = 0; i < N - 1; i++)
  {
    min = i;
    for (j = i + 1; j < N; j++)
      if (a[min] > a[j]) min = j;
    tem = a;
    a = a[min];
    a[min] = tem;
  }
  /*output data*/
  printf("After sorted \n");
  for (i = 0; i < N; i++)
    printf("%5d", a);
}

题目:求一个3 * 3矩阵对角线元素之和


程序分析:利用双重for循环控制输入二维数组,再将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);
}

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数

组中。


程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况

,插入后此元素之后的数,依次后移一个位置。


程序源代码:

main()
{
  int a[11] = { 1,4,6,9,13,16,19,28,40,100 };
  int temp1, temp2, number, end, i, 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);
}

题目:将一个数组逆序输出。


程序分析:用第一个与最后一个交换。


程序源代码:

#define N 5
main()
{
  int a[N] = { 9,6,5,4,1 }, i, temp;
  printf("\n original array:\n");
  for (i = 0; i < N; i++)
    printf("%4d", a);
  for (i = 0; i < N / 2; i++)
  {
    temp = a;
    a = a[N - i - 1];
    a[N - i - 1] = temp;
  }
  printf("\n sorted array:\n");
  for (i = 0; i < N; i++)
    printf("%4d", a);
}

题目:学习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();
}

题目:学习使用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++;
    }
  }
}

程序源代码:

#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 %d\n", num);
      num++;
    }
  }
}

题目:学习使用external的用法。


程序源代码:

#include "stdio.h"
int 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 %d\n", c);
}

题目:学习使用register定义变量的方法。


程序源代码:

void main()
{
  register int i;
  int tmp = 0;
  for (i = 1; i <= 100; i++)
    tmp += i;
  printf("The sum is %d\n", 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=%d\n", x, y);
  exchange(x, y);
  printf("x=%d; y=%d\n", x, 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", i, j);
  else if (i EQ j)
    printf("\40: %d equal to %d \n", i, j);
  else if (i SMA j)
    printf("\40:%d smaller than %d \n", i, 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 %d\n", MAXIMUM(a, b));
#else
  printf("\40: The lower one is %d\n", MINIMUM(a, b));
#endif
#ifndef MIN
  printf("\40: The lower one is %d\n", MINIMUM(a, b));
#else
  printf("\40: The larger one is %d\n", MAXIMUM(a, b));
#endif
#undef MAX
#ifdef MAX
  printf("\40: The larger one is %d\n", MAXIMUM(a, b));
#else
  printf("\40: The lower one is %d\n", MINIMUM(a, b));
#endif
#define MIN
#ifndef MIN
  printf("\40: The lower one is %d\n", MINIMUM(a, b));
#else
  printf("\40: The larger one is %d\n", MAXIMUM(a, b));
#endif
}

题目:#include 的应用练习


程序源代码:

test.h 文件如下:
#define LAG >
#define SMA <
#define EQ ==
#include "test.h" /*一个新文件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", i, j);
  else if (i EQ j)
    printf("\40: %d equal to %d \n", i, j);
  else if (i SMA j)
    printf("\40:%d smaller than %d \n", i, 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);
}

题目:取一个整数a从右端开始的4~7位。


程序分析:可以这样考虑:

(1)先使a右移4位。

(2)设置一个低4位全为1, 其余全为0的数。可用(0 << 4)

(3)将上面二者进行& 运算。


程序源代码:

main()
{
  unsigned a, b, c, d;
  scanf("%o", &a);
  b = a >> 4;
  c = ~(~0 << 4);
  d = b & c;
  printf("%o\n%o\n", a, 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, mode, i;
  float x0, y0, y1, x1;
  float j = 12, k;
  driver = VGA; mode = VGAHI;
  initgraph(&driver, &mode, "");
  setbkcolor(GREEN);
  x0 = 263; y0 = 263; y1 = 275; x1 = 275;
  for (i = 0; i <= 18; i++)
  {
    setcolor(5);
    line(x0, y0, x0, y1);
    x0 = x0 - 5;
    y0 = y0 - 5;
    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, y0, x0, y1);
    x0 = x0 + 5;
    y0 = y0 + 5;
    y1 = y1 - 5;
  }
}

题目:画图,学用rectangle画方形。


程序分析:利用for循环控制100 - 999个数,每个数分解出个位,十位,百位。


程序源代码:

#include "graphics.h"
main()
{
  int x0, y0, y1, x1, driver, mode, i;
  driver = VGA; mode = VGAHI;
  initgraph(&driver, &mode, "");
  setbkcolor(YELLOW);
  x0 = 263; y0 = 263; y1 = 275; x1 = 275;
  for (i = 0; i <= 18; i++)
  {
    setcolor(1);
    rectangle(x0, y0, x1, y1);
    x0 = x0 - 5;
    y0 = y0 - 5;
    x1 = x1 + 5;
    y1 = y1 + 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);
}

相关文章
|
4月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
111 1
|
16天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
43 1
|
25天前
|
存储 缓存 算法
通过优化算法和代码结构来提升易语言程序的执行效率
通过优化算法和代码结构来提升易语言程序的执行效率
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
90 8
|
1月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
91 7
|
1月前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
41 3
|
2月前
|
存储 缓存 算法
如何通过优化算法和代码结构来提升易语言程序的执行效率?
如何通过优化算法和代码结构来提升易语言程序的执行效率?
|
2月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
2月前
|
缓存 分布式计算 监控
算法优化:提升程序性能的艺术
【10月更文挑战第20天】算法优化:提升程序性能的艺术
|
2月前
|
存储 算法 安全
ArrayList简介及使用全方位手把手教学(带源码),用ArrayList实现洗牌算法,3个人轮流拿牌(带全部源码)
文章全面介绍了Java中ArrayList的使用方法,包括其构造方法、常见操作、遍历方式、扩容机制,并展示了如何使用ArrayList实现洗牌算法的实例。
24 0