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);
}
语言的学习基础 , 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);
}