博文

经典c程序100例[从菜鸟到高手必看](2005-11-13 11:37:00)

摘要:

[转贴,如有错误请一起探讨]

【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
      掉不满足条件的排列。
2.程序源代码:
main()
{
int i,j,k;
printf("\n");
for(i=1;i<5;i++)    /*以下为三重循环*/
 for(j=1;j<5;j++) 
  for (k=1;k<5;k++)
   {
    if (i!=k&&i!=j&&j!=k)    /*确保i、j、k三位互不相同*/
    printf("%d,%d,%d\n",i,j,k);
   }
}
==============================================================
【程序2】
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高
   于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
   成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于
   40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于
   100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。      
2.程序源代码:
main()
{
long int i;
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonu......

阅读全文(5322) | 评论:0

[转帖]C基本结构:顺序、选择、循环(2005-11-13 11:26:00)

摘要:


 
for语句
for语句是C语言所提供的功能更强,使用更广泛的一种循环语
句。其一般形式为: for(表达式1;表达式2;表达3)
语句; 表达式1通常用来给循环变量赋初值,一般是赋值表达式。也允
许在for语句外给循环变量赋初值,此时可以省略该表达式。
表达式2通常是循环条件,一般为关系表达式或逻辑表达式。
表达式3通常可用来修改循环变量的值,一般是赋值语句。
这三个表达式都可以是逗号表达式, 即每个表达式都可由多个
表达式组成。三个表达式都是任选项,都可以省略。
一般形式中的“语句”即为循环体语句。for语句的语义是:
1.首先计算表达式1的值。
2.再计算表达式2的值,若值为真(非0)则执行循环体一次, 否则跳
出循环。
3.然后再计算表达式3的值,转回第2步重复执行。
在整个for循环过程中,表达式1只计算一次,表达式2和表达式
3则可能计算多次。循环体可能多次执行,也可能一次都不执行。for 语句的执行过程如图所示。void main(){
int n,s=0;
for(n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",s);
}
用for语句计算s=1+2+3+...+99+100

int n,s=0;
for(n=1;n<=100;n++)
s=s+n;
printf("s=%d\n",s); 本例for语句中的表达式3为n++,实际上也是一种赋值语句,相
当于n=n+1,以改变循环变量的值。void main(){
int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
for(;n>0;a++,n--)
printf("%d ",a*2);
}
用for语句修改例题。从0开始,输出n个连续的偶数。 int a=0,n;
printf("\n input n: ");
scanf("%d",&n);
fo......

阅读全文(4271) | 评论:0

[转帖]C语言教程&nbsp;&nbsp;数据类型、运算符、表达式(2005-11-13 11:24:00)

摘要:



2.无论是强制转换或是自动转换,都只是为了本次运算的需要而
对变量的数据长度进行的临时性转换,而不改变数据说明时对
该变量定义的类型。main(){
float f=5.75;
printf("(int)f=%d,f=%f\n",(int)f,f);
} f<--5.75
将float f强制转换成int f float f=5.75;
printf("(int)f=%d,f=%f\n",(int)f,f); 本例表明,f虽强制转为int型,但只在运算中起作用, 是临时
的,而f本身的类型并不改变。因此,(int)f的值为 5(删去了小数)
而f的值仍为5.75。基本运算符和表达式
运算符的种类、优先级和结合性
C语言中运算符和表达式数量之多, 在高级语言中是少见的。
正是丰富的运算符和表达式使C语言功能十分完善。 这也是C语言
的主要特点之一。
C语言的运算符不仅具有不同的优先级, 而且还有一个特点,
就是它的结合性。在表达式中, 各运算量参与运算的先后顺序不仅
要遵守运算符优先级别的规定,还要受运算符结合性的制约, 以便
确定是自左向右进行运算还是自右向左进行运算。 这种结合性是其
它高级语言的运算符所没有的,因此也增加了C语言的复杂性。运算符的种类
C语言的运算符可分为以下几类:1.算术运算符
用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余
(或称模运算,%)、自增(++)、自减(--)共七种。2.关系运算符
用于比较运算。包括大于(>)、小于(<)、等于(==)、 大于等
于(>=)、小于等于(<=)和不等于(!=)六种。3.逻辑运算符
用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
4.位操作运算符
参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、
位非(~)、位异或(^)、左移(<<)、右移(>>)六种。5.赋值运算符
用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,......

阅读全文(4107) | 评论:0

[转帖]C基本结构:顺序、选择、循环(2005-11-13 11:23:00)

摘要:



C语言程序设计
本课介绍C语言程序设计的基本方法和基本的程序语句。
从程序流程的角度来看,程序可以分为三种基本结构, 即顺序
结构、分支结构、循环结构。 这三种基本结构可以组成所有的各种
复杂程序。C语言提供了多种语句来实现这些程序结构。 本章介绍
这些基本语句及其应用,使读者对C程序有一个初步的认识, 为后
面各章的学习打下基础。
C程序的语句
C程序的执行部分是由语句组成的。 程序的功能也是由执行语
句实现的。C语句可分为以下五类:
1.表达式语句
2.函数调用语句
3.控制语句
4.复合语句
5.空语句

1.表达式语句
表达式语句由表达式加上分号“;”组成。其一般形式为: 表达式;
执行表达式语句就是计算表达式的值。例如: x=y+z; 赋值语句
y+z; 加法运算语句,但计算结果不能保留,无实际意义
i++; 自增1语句,i值增1

2.函数调用语句
由函数名、实际参数加上分号“;”组成。其一般形式为: 函数名(实际参数表);
执行函数语句就是调用函数体并把实际参数赋予函数定义中的
形式参数,然后执行被调函数体中的语句,求取函数值。(在第五章
函数中再详细介绍)例如printf("C Program");调用库函数,输出字
符串。

3.控制语句
控制语句用于控制程序的流程, 以实现程序的各种结构方式。
它们由特定的语句定义符组成。C语言有九种控制语句。 可分成以
下三类:
(1) 条件判断语句
if语句,switch语句
(2) 循环执行语句
do while语句,while语句,for语句
(3) 转向语句
break语句,goto语句,continue语句,return语句
4.复合语句
把多个语句用括号{}括起来组成的一个语句称复合语句。 在程
序中应把复合语句看成是单条语句,而不是多条语句,例如 {
x=y+z;
a=b+c;
printf(“%d%d”,x,a);

阅读全文(4284) | 评论:0

Turbo C(V2.0)使用指南(2005-11-13 11:22:00)

摘要:


  在开始看本文以前,我先说明一下C语言的安装和使用中最应该注意的地方:许多网友在下载Turbo C 2.0和Turbo C++ 3.0后,向我问得最多的是在使用过程中碰到如下问题:

1)出现找不到 stdio.h conio.h等include文件;

2)出现cos.obj无法连接之类的错误
   这些问题是由于没有设置好路径引起的,目前下载的TC2,TC3按安装分类大概有两种版本:一是通过install安装,这类应该已经设置好了路径;二是直接解压后建立TC.EXE的快捷方式,在WINDOWS下双击即可运行(DOS下直接运行TC.EXE),目前国内大多为这种,因此下载使用前请注意
路径设置:
设置方法为:
OPTION->DIRECTORIES:
INCLUDE: [TC2/3所在目录]/include
LIB: [TC2/3所在目录]/lib
output输出目录请自己设置一个工作目录,以免混在一起。最后还提醒一点:FILES中的Change dir(改变当前目录)中应设置为当前程序所在目录。

一、 Turbo C 2.0的安装和启动

  Turbo C 2.0的安装非常简单, 只要将1#盘插入A驱动器中, 在DOS的"A>" 下键入: A>INSTALL 即可, 此时屏幕上显示三种选择:
1. 在硬盘上创造一个新目录来安装整个Turbo C 2.0系统。

2. 对Turbo C 1.5更新版本。这样的安装将保留原来对选择项、颜色和编辑功能键的设置。

3. 为只有两个软盘而无硬盘的系统安装Turbo C 2.0。

  这里假定按第一种选择进行安装, 只要在安装过程中按对盘号的提示, 顺序插入各个软盘, 就可以顺利地进行安装, 安装完毕将在C盘根目录下建立一个TC 子目录, TC下还建立了两个了目录LIB和INCLUDE, LIB子目录中存放库文件, INCLUDE子目录中存放所有头文件。运行Turbo C2.0时, 只要在TC 子目录下键入TC并回车即可进入Turbo C 2. 0 集成开发环境。

二、 Turbo C 2.0集成开发环境的使用

......

阅读全文(2309) | 评论:0

Visual C++编程技巧之一(2005-11-13 11:20:00)

摘要:



1. 如何获取应用程序的实例句柄?

应用程序的 实例句柄保存在CWinAppIm_hInstance 中,可以这么调用

AfxGetInstancdHandle获得句柄.

Example: HANDLE hInstance=AfxGetInstanceHandle();

2. 如何通过代码获得应用程序主窗口的指针?

主窗口的 指针保存在CWinThread::m_pMainWnd中,调用 AfxGetMainWnd实现。

AfxGetMainWnd() ->ShowWindow(SW_SHOWMAXMIZED); //使程序最大化.

3.如何在程序中获得其他程序的 图标?

两种方法:

(1) SDK函数 SHGetFileInfo 或使用 ExtractIcon获得图标资源的 handle,

(2) SDK函数 SHGetFileInfo获得有关文件的 很多信息,如大小图标,属性,类型等.

Example(1): 在程序窗口左上角显示 NotePad图标.

void CSampleView: OnDraw(CDC * pDC)

{

if( :: SHGetFileInfo(_T("c:\pwin95\notepad.exe"),0,

&stFileInfo,sizeof(stFileInfo),SHGFI_ICON))

{

pDC ->DrawIcon(10,10,stFileInfo.hIcon);

}

}

Example(2):同样功能,Use ExtractIcon Function

void CSampleView:: OnDraw(CDC *pDC)

{

HICON hIcon=:: ExtractIcon(AfxGetInstanceHandle(),_T

("NotePad.exe"),0);

if (h......

阅读全文(3351) | 评论:0

C++ 语言程序设计从零开始——何谓编程(2005-11-13 11:15:00)

摘要:



 何谓程序

  程序,即过程的顺序,准确地说应该是顺序排列的多个过程,其是方法的描述。比如吃菜,先用筷子夹起菜,再用筷子将菜送入嘴中,最后咀嚼并吞下。其中的夹、送、咀嚼和吞下就被称作命令,而菜则是资源,其状态(如形状、位置等)随着命令的执行而不断发生变化。上面就是吃菜这个方法的描述,也就是吃菜的程序。

  任何方法都是为了改变某些资源的状态而存在,因此任何方法的描述,也就是程序,也都一定有命令这个东西以及其所作用的资源。命令是由程序的执行者来实现的,比如上面的吃菜,其中的夹、送等都是由吃菜的人来实现的,而资源则一定是执行者可以改变的东西,而命令只是告诉执行者如何改变而已。

  电脑程序和上面一样,是方法的描述,而这些方法就是人期望电脑能做的事(注意不是电脑要做的事,这经常一直混淆着许多人),当人需要做这些事时,人再给出某些资源以期电脑能对其做正确的改变。如计算圆周率的程序,其只是方法的描述,本身是不能发生任何效用的,直到它被执行,人为给定它一块内存(关于内存,请参考《C++从零开始(三)》),告诉它计算结果的精度及计算结果的存放位置后,其才改变人为给定的这块内存的状态以表现出计算结果。

  因此,对于电脑程序,命令就是CPU的指令,而执行者也就由于是CPU的指令而必须是CPU了,而最后的资源则就是CPU可以改变其状态的内存(当然不止,如端口等,不过一般应用程序都大量使用内存罢了)。所以,电脑程序就是电脑如何改变给定资源(一般是内存,也可以是其他硬件资源)的描述,注意是描述,本身没有任何意义,除非被执行。
何谓编程

  编程就是编写程序,即制订方法。为什么要有方法?方法是为了说明。而之所以要有说明就有很多原因了,但电脑编程的根本原因是因为语言不同,且不仅不同,连概念都不相通。

  人类的语言五花八门,但都可以通过翻译得到正解,因为人类生存在同一个四维物理空间中,具有相同或类似的感知。而电脑程序执行时的CPU所能感受到的空间和物理空间严重不同,所以是不可能将电脑程序翻译成人类语言的描述的。这很重要,其导致了大部分程序员编写出的拙劣代码,因为人想的和电脑想的没有共性,所以他们在编写程序时就随机地无目的地编写,进而导致了拙劣却可以执行的代码。
电脑......

阅读全文(3647) | 评论:0

C语言 新手必看(转载)(2005-11-13 11:07:00)

摘要:



本人也是刚学C不久算是老菜鸟。把我遇到的问题写出来,希望对初学者有点帮助。

一、分号,大括号

  分号。分号是表达式结束的标志,一般表达式后面都要有。写“;”的时候一定要注意:是否要结束前面的语句。注意:if,switch,for,while语句,数据类型定义,函数定义。

if(a>b) /*if语句,没有分号*/

{...}

while(i+=10,i!=100); /*while语句循环体为空,依靠逗号语句实现循环*/

struct a /*结构体数据定义,没有分号*/

{...}b; /*结构体变量,要有分号*/

int sum(...) /*函数定义,没有分号*/

{....}

大括号。大括号是一个语句段的标志。写大括号时最好一次写一对,然后把光标移到大括号里写。避免遗漏。

二、运算符号

“=”与“==”

“=”用于赋值,注意“=”左边必须是变量,右边可以是常量也可以是变量。“==”用于判断两个量的大小,左右两边可以是常量也可以是变量(尽量把常量写在左边,这样“==”误写成“=”时编译器就会报错)。运算表达式有它本身的值。“=”语句值为“=”右边的量的大小;“==”语句值为判断结果,无外乎两种,0(表示“==”两边不等)1(“==”两边相等)。

(i=1)==(3==4); /*i值为1,整个表达式值为0*/

  “,”
逗号语句是从左到右计算,整个逗号语句的值为最后一个语句的值
i=(j=2,j+8,j++);   /*先计算j=2,值为2,j+8不是运算表达式,跳过,计算j++得到整个括号内的值3*/

“/”

“/”两边都是整型变量的时候结果也是整型,而且结果遵循向0靠拢的原则。

运算符的优先级及结合方向

不多说了,表格一定要背牢。

三、变量

  命名

不要吝惜,能说明白性质尽量在变量的名字上说明。避免老是使用一个字母,或者难以理解的变量名。对于较长的变量命名可以......

阅读全文(3606) | 评论:0

只要可能就用const(2005-11-13 10:14:00)

摘要:关键字 const
                  非常多才多艺。在类的外部,你可以将它用于全局常量或命名空间常量,就像那些在文件、函数或模块范围内被声明为 static
                  的对象。在类的内部,你可以将它用于 static 和 non-static 数据成员上。对于指针,你可以指定这个指针本身是
                  const,或者它所指向的数据是 const,或者两者都是,或者都不是。                     char greeting[] = "Hello";                                          char *p = greeting; // non-const pointer,                     // non-const......

阅读全文(2888) | 评论:0

C++中的限制修饰符const(2005-11-13 10:12:00)

摘要:const修饰符可以把对象转变成常数对象,什么意思呢?                      意思就是说利用const进行修饰的变量的值在程序的任意位置将不能再被修改,就如同常数一样使用!                     使用方法是:                   const int a=1;//这里定义了一个int类型的const常数变量a;                     但就于指针来说const仍然是起作用的,以下有两点要十分注意,因为下面的两个问题很容易混淆!                     我们来看一个如下的例子:                   #include <iostream> 
                  using namespace std;  ......

阅读全文(2919) | 评论:0