100个经典算法

C++语言: 临时自用代码
POJ 上做做 ACM 的题

语言的学习基础 , 100 个经典的算法
C 语言的学习要从基础开始,这里是 100 个经典的算法-1 C 语言的学习要从基础开始,这里是 100 个经典的算法

题目:古典问题:有一对兔子,从出生后第 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; /*前两个月加起来赋值给第三个月*/
  }
}

上题还可用一维数组处理, you try !


题目:判断 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( " /n The 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 的值 , 重复执行第一步。


___________________________________________________________________



程序源代码:
/* zheng int is divided yinshu*/
main()
{
int n , i;
printf( " /n please 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 ++;
   }
  }
}


C 语言的学基础, 100 个经典的算法-2
程序源代码:
#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( " /40 lease 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);
}
  • 1
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值