博文

经典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=bonus4+200000*0.3;bonus10=bonus6+400000*0.15; if(i<=100000)  bonus=i*0.1; else if(i<=200000)     bonus=bonus1+(i-100000)*0.075;    else if(i<=4......

阅读全文(5374) | 评论: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); for(;n>0;a++,n--) printf("%d ",a*2); 本例的for语句中,表达式1已省去,循环变量的初值在for语句 之前由scanf语句取得,表达式3是一个逗号表达式,由a++,n-- 两 个表达式组成。每循环一次a自增1,n自减1。a的变化使输出的偶数 递增,n的变化控制循次数。在使用for语句中要注......

阅读全文(4316) | 评论: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.赋值运算符 用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=, %=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。6.条件运算符 这是一个三目运算符,用于条件求值(?:)。7.逗号运算符 用于把若干表达式组合成一个表达式(,)。 8.指针运算符 用于取......

阅读全文(4166) | 评论: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); } 是一条复合语句。复合语句内的各条语句都必须以分号“;”结 尾,在括号“}”外不能加分号。 5.空语句 只有分号“;”组成的语句称为空语句。 空语句是什么也不执 行的语句。在程序中空语句可用来作空循环体。例如 while(getchar()!='\n') ; 本语句的功能是,只要从键盘输入的字符不是回车则重新输入。 这里的循环体为空语句。 赋值语句 赋值语句是由赋值表达式再加上分号构......

阅读全文(4335) | 评论: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所在目录]/includeLIB: [TC2/3所在目录]/liboutput输出目录请自己设置一个工作目录,以免混在一起。最后还提醒一点: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集成开发环境的使用进入Turbo C 2.0集成开发环境中后, 屏幕上显示:──────────────────────────────  File Edit Run Compile Project Options Debug Break/watch......

阅读全文(2357) | 评论: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 (hIcon &&hIcon!=(HICON)-1) pDC->DrawIcon(10,10,hIcon); } 说明: 获得notepad.exe的路径正规上来说用GetWindowsDirectory 函数得到,如果是调用 win95下的画笔,应该用访问注册表的方法获得其路径,要作成一个比较考究的程序,考虑应该全面点. 4.如何编程结束应用程序?如何编程控制windows的重新引导? 这是个很简单又是编程中......

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

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

摘要: 何谓程序  程序,即过程的顺序,准确地说应该是顺序排列的多个过程,其是方法的描述。比如吃菜,先用筷子夹起菜,再用筷子将菜送入嘴中,最后咀嚼并吞下。其中的夹、送、咀嚼和吞下就被称作命令,而菜则是资源,其状态(如形状、位置等)随着命令的执行而不断发生变化。上面就是吃菜这个方法的描述,也就是吃菜的程序。  任何方法都是为了改变某些资源的状态而存在,因此任何方法的描述,也就是程序,也都一定有命令这个东西以及其所作用的资源。命令是由程序的执行者来实现的,比如上面的吃菜,其中的夹、送等都是由吃菜的人来实现的,而资源则一定是执行者可以改变的东西,而命令只是告诉执行者如何改变而已。  电脑程序和上面一样,是方法的描述,而这些方法就是人期望电脑能做的事(注意不是电脑要做的事,这经常一直混淆着许多人),当人需要做这些事时,人再给出某些资源以期电脑能对其做正确的改变。如计算圆周率的程序,其只是方法的描述,本身是不能发生任何效用的,直到它被执行,人为给定它一块内存(关于内存,请参考《C++从零开始(三)》),告诉它计算结果的精度及计算结果的存放位置后,其才改变人为给定的这块内存的状态以表现出计算结果。  因此,对于电脑程序,命令就是CPU的指令,而执行者也就由于是CPU的指令而必须是CPU了,而最后的资源则就是CPU可以改变其状态的内存(当然不止,如端口等,不过一般应用程序都大量使用内存罢了)。所以,电脑程序就是电脑如何改变给定资源(一般是内存,也可以是其他硬件资源)的描述,注意是描述,本身没有任何意义,除非被执行。何谓编程  编程就是编写程序,即制订方法。为什么要有方法?方法是为了说明。而之所以要有说明就有很多原因了,但电脑编程的根本原因是因为语言不同,且不仅不同,连概念都不相通。  人类的语言五花八门,但都可以通过翻译得到正解,因为人类生存在同一个四维物理空间中,具有相同或类似的感知。而电脑程序执行时的CPU所能感受到的空间和物理空间严重不同,所以是不可能将电脑程序翻译成人类语言的描述的。这很重要,其导致了大部分程序员编写出的拙劣代码,因为人想的和电脑想的没有共性,所以他们在编写程序时就随机地无目的地编写,进而导致了拙劣却可以执行的代码。电脑的语言就是CPU的指令,因为CPU就这一个感知途径(准确地说还有内存定位、中断响应等感知途径),不像人类还能有肢体语言,所以电脑编程就是将人类语......

阅读全文(3706) | 评论: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靠拢的原则。运算符的优先级及结合方向不多说了,表格一定要背牢。三、变量  命名不要吝惜,能说明白性质尽量在变量的名字上说明。避免老是使用一个字母,或者难以理解的变量名。对于较长的变量命名可以使用宏定义、类型定义。#deine UP 0x4800   /*键码的宏定义*/typedef struct{....}MEM;   /*结构体变量的类型定义*/  类型注意变量的使用范围。当不确定变量的范围的时候尽量选用值域宽的类型。双目运算符两边的变量一般类型要一致。不一致的时候需要使用类型转换。上回说的是一些小问题,真正编东西,学东西还有许多要注意的地方。由于本......

阅读全文(3663) | 评论: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 data &nbs......

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

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

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

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