我看C++CLI和.NET选择自 soloist 的 Blog

我看C++CLI和.NET选择自 soloist 的 Blog
我看C++CLI和.NET选择自 soloist 的 Blog

最近C++/CLI成了国内程序员关注的焦点,原因是它的开发人之一Stan Lippman来中国开技术大会并全力推介它,而且《程序员》杂志刊登了孟岩老兄对此人的专访,于是软件界一时群情激昂、人声鼎沸,各种说法也是不绝于耳。此专访的节选被放在孟岩自己的BLOG上,后头跟贴相当多(恐怕有上百条),不少人流露出对C++/CLI的反感甚至鄙夷,更有过火者对Stan Lippman本人也是大肆挞伐,说他是微软的无耻鼓吹手云云。我对C++/CLI没有研究,也没有在.NET上做过开发,对它们的了解都是源于技术大拿们的介绍,但是我仍然想谈谈自己的看法(不懂也敢说话?呵呵,姑妄听之吧)。

在选择开发用语言上,我是一个非常保守的程序员,我最中意的语言是C/C++与汇编,开发工具用的最多的是Visual C++。顺便说一句,我曾经从事的并且最感兴趣的领域是游戏开发。从微软宣布.NET以来的相当长一段时间里,我对它都是报着极大的抵触情绪,认为它是一个吞食一切的庞大怪物,丑陋、臃肿与野心勃勃。至于C#,我更是毫无接触便认定它是个怪胎。我想,在中国或许有不少人和我一样有这种盲目敌视的心态吧。这是为什么呢?现在看来,最重要的原因无非一条,那就是微软的技术更新步伐越来越快,就算是保持距离跟随其后对不少人来说也是有心无力,所以我们由无能逐渐害怕,而由害怕又生出了仇恨。就像满清末期抵死反对维新的大臣一样,只不过他们有能力扼杀改革,而我们没有。

最近一段时间,由于希望能做一点将形式化方法与面向对象技术结合的研究我开始了对Eiffel以及契约式开发方法(Design by Contract)的学习。国内听说过Eiffel的人可能不多,但是听说《Object-Oriented Software Construction》(《面向对象软件构造》)这本书的人应该不少。该书曾荣获1997年JOLT大奖,它详细阐述了面向对象开发方法的各个方面,对许多重要概念做了极为细致深入的分析,而Eiffel就是书中作者(Bertrand Meyer)带领读者发展出的一套运用在软件开发全过程中的面向对象标记法。可以把Eiffel看成一门面向对象的编程语言(虽然它不仅仅是一门编程语言),在这门语言中最重要的是引入了“契

约”(contract)的概念并建立了直接支持此概念的语言机制。了解形式化方法的朋友肯定都知道前置断言(precondition)、后置断言(postcondition)、不变式(invariant),而contract就是Eiffel中它们的对应物。在人类社会中契约具有法律效力,它能明确地规定签约方的权利与义务,从而为营造一个权利与义务平衡,理性而稳定的社会提供基础。同样,契约可以通过明确程序中各种操作的权利与义务来精确地刻画它们的语义,由此构造高质量的软件才有了坚实的土壤。在学习了契约式开发思想之后我多么希望也能将它应用在其它语言中啊,尤

其是C/C++。可是C/C++并没有直接支持contract的机制。孟岩曾经撰文(《Design by Contract原则与实践》的附录)介绍如何在C++中用assert来模拟它,但是局限性太大,很多关键的思想无法运用。就在昨天我看到一篇Bertrand Meyer于2000年写的文章"The significance of .NET",说他们已经开发出了一个基于.NET的叫Contract Wizard 的软件,它能让你为.NET组件(无论是用什么语言写的)中的类以及类方法加上preconditions, postconditions 和class invariants,就象Eiffel中能够做的一样,最关键的是在此过程中你无需这个.NET组件的源代码,Contract Wizard直接对编译过的组件进行操作,更改它的metadata,然后生成一个新的带有契约的.NET组件。这就是说,以后我可以将我所需要的所有组件(不管有否源代码,不管用什么语言编写)都用与Eiffel中一致的contract武装起来,从而大大提高软件的质量与安全。很神奇,不是吗?而这一切都拜.NET中自描述的组件机制所赐。事实上Meyer的这篇文章还介绍了.NET的其它方面,比如语言间的互操作性(Language interoperability),这让程序员可以继承与扩展用不同语言写成的类;比如对象模型VOS(Virtual Object System),Meyer称之为微软“努力为各种语言定义的一个通用而适当的基础”,“而这个基础将在不同语言间起着桥梁的作用”(it is an attempt to define a suitable common base that can serve as a bridge between all these languages, and others.);比如虚拟机,微软一开始就全力提高MSIL(MicroSoft Intermediate Language)在CLR上的执行效率,这可从QUAKE2的.NET 版本没有明显的效率损失得到验证。抛开对微软的偏见站在纯粹的技术角度来看,.NET难道不是一个体现了远见、活力与趣味的平台吗?而且随着ECMA(European Computer Manufacturers Association)将CLI标准化,它还成为了一个开放的平台,著名的Mono 项目就是其在Linux上的实现。有的朋友可能会说不要拿技术权威的文章尤其是外国权威的英文文章来吓唬人。我不会狐假虎威,但是对于一个在软件领域有如此造诣的大师,如果他所说的是理性、客观且负责任的,我为什么不能相信他,又为什么不能推荐给大家,让大家能有更多的思考?

C++/CLI是一个积极的尝试,在我看来它期望的是:在最大限度地利用.NET提供的各种先进功能的同时又最大限度地保持C++的编程模型。这是一件好事,尤其对那些喜欢C++而又必须在.NET平台上工作的人来说更是如此。讨厌C++/CLI的朋友,你们也别太过激动,毕竟你们仍然有选择Native C++的权利,没有人强迫你们。就我来说,由于游戏开发的要求,在相当长的时间里我仍然会固守C/C++以及ASM的阵地,但是同时我也极有兴趣探索C++/CLI这

门新鲜的混血语言。即便是在游戏开发领域,.NET平台的许多技术也值得学习,事实上早有游戏运用了与.NET相似的技术。比如Unreal,它的逻辑部分便是由UnrealScript脚本语言写成,而这种脚本则运行在提供了多线程以及内存回收机制的虚拟机上,并且它也能与C/C++在源码级进行良好的互操作(比如在脚本中使用由C++写的class)。虽然这些技术的发展已行之有年,但.NET无疑是一个全新的且极有价值的借鉴对象。

或许微软有许许多多霸道的做法,但是近年来它表现出的创造性却不得不令人佩服。我们可以很情绪化地咒骂C++/CLI,咒骂.NET,咒骂微软,甚至咒骂被微软雇佣了的Stan Lippman,可是我们失去的是什么呢?在上面提及的"The significance of .NET"这篇文章中,Bertrand Meyer虽然对.NET总体上持肯定态度,但是仍然批评了它的一些技术选择,比如继续提供重载overloading机制(Meyer一贯反对重载并撰有多篇文章阐述背后的理论,可惜他的真知灼见不是主流),可是这种有分量的技术批评却鲜见于我们的讨论中。我们在一次次的谩骂中发泄了心中的不满,但同时也在这一次次的谩骂中丧失了独立探索、实事求是、理性怀疑的科学精神。没有了这种精神,我们还有什么资格被称为“程序员”呢?

c语言第五章 选择结构程序设计(习题册答案)

第五章选择结构程序设计 基础练习(A) 一、填空题 1、关系表达式的运算结果是逻辑值。C语言没有逻辑型数据,以1代表“真”,以0代表“假”。 2、逻辑运算符!是单目运算符,其结合性是由右结合性。 3、C语言提供的三种逻辑运算符是&&、|| 、!。其中优先级最高的为!,优先级最低的为| | 。 4、逻辑运算符两侧的运算对象不但可以是0和1,或者是0和非0的整数,也可以是任何类型的数据。系统最终以0 和非0 来判定它们属于“真”或“假”。 5、设y为int型变量,请写出描述“y是偶数”的表达式(y%2==0)。 6、设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式x2&&x<3。 8、判断char型变量ch是否为大写字母的正确表达式是(ch>=‘A’)&&(ch<=‘Z’)。 9、当a=3,b=2,c=1时,表达式f=a>b>c的值是0。 10、当a=5,b=4,c=2时,表达式a>b!=c的值是1。 11、已知A=7.5,B=2,C=3.6,表达式A>B&&C>A||AB的值是0。 12、若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是1。 13、有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值为1。 14、有int x,y,z;且x=3,y=-4,z=5,则以下表达式的值为1。 !(x>y)+(y!=z)||(x+y)&&(y-z) 15、有int a=3,b=4,c=5,x,y;,则以下表达式的值为0。 !(x=a)&&(y=b)&&0 16、if (!k) a=3;语句中的!k可以改写为k= =0,使其功能不变。 二、选择题 1、逻辑运算符两侧运算对象的数据类型(D)。 A)只能是0或1 B)只能是0或非0正数 C)只能是整型或字符型数据 D)可以是任何类型的数据 2、以下关于运算符优先顺序的描述中正确的是(C)。 A)关系运算符<算术运算符<赋值运算符<逻辑与运算符 B)逻辑与运算符<关系运算符<算术运算符<赋值运算符 C)赋值运算符<逻辑与运算符<关系运算符<算术运算符 D)算术运算符<关系运算符<赋值运算符<逻辑与运算符 3、下列运算符中优先级最高的是(B)。 A)< B)+ C)&& D)!= 4、为判断字符变量c的值不是数字也不是字母时,应采用下述表达式(D)。 A)c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122 B)!(c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122) C)c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122 D)!(c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122) 5、能正确表示“当x的取值在[1,100]和[200,300]范围内为真,否则为假”的表 达式是(C)。 A) (x>=1)&&(x<=100)&&(x>=200)&&(x<=300) B) (x>=1)||(x<=100)||(x>=200)||(x<=300) C) (x>=1)&&(x<=100)||(x>=200)&&(x<=300)

计算机C语言趣味的程序设计——题目百例

Contest - 2011级C语言课程大作业 Start Time: 2012-02-19 16:25:00 End Time: 2012-03-01 22:00:00 Current Time: 2012-2-23 15:51:18 Status:Running Public

写在最前: 本文档中的题目;在不不同的编译器中可能会有提示错误,呵呵,小小的动动手改下变量的定义就可以运行了……………….. 由于能力不足..有题目未解决的…或者有错误的我会…认真听取大家的..意见的…. 呵呵……..有一两个….偷了下懒哦……… 提供原题目还有本人自己的解答的源代码。感谢大家的。。。。建议……………. 问题A: 趣味程序设计_狼追兔子 时间限制: 1 Sec 内存限制: 128 MB 提交: 341 解决: 63 [提交][状态][讨论版] 题目描述 一只兔子躲进了n个环形分布的洞的某一个中。狼在第一个洞没有找到兔子,就隔一个洞,到第三个洞去找;也没有找到,就隔两个洞,到第六个洞去找。以后每次多一个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能在哪个洞中? 输入 有多组测试数据,读取到文件结尾符为止。每组测试数据输入n(2≤n≤100),即洞穴个数。输入到文件结尾符为止。 输出 兔子可能藏匿的洞。如果不止一个,按从小到大的顺序输出。如果不存在,输出空行。

样例输入 10 8 15 样例输出 2 4 7 9 2 4 5 7 8 9 11 12 14 提示 用一个数组a[10],对应的元素a[0],a[1],a[2]……a[9]对应表示10个洞,初值均置1。通过一个循环用“穷举法”找兔子,第n次查找对应第(n-1)%10个洞,如果在第(n-1)%10个洞中没有找到兔子,因此将数组元素a[(n-1)%10]置0值。循环完成后,检查a数组各元素(各个洞)的值,若其值仍为1,则兔子可能藏身该洞中。 #include #include int ok[110]; int main() { int n,s,i,find; while(scanf("%d",&n)!=EOF) { memset(ok,0,sizeof(ok)); for(i=1;i<=200;i++) if(!ok[find=(i*(i+1)/2)%n]) if(find==0) ok[n]=1; else ok[find]=1; for(s=0,i=1;i<=n;i++) s+=ok[i]; for(i=1,find=0;i<=n;i++) if(!ok[i]) { if(find!=(n-s-1)) { printf("%d ",i);find++;

选择结构程序设计习题

选择结构程序设计练习 1.从键盘输入一个字符型数据,若输入一个数字字符('0'-'9'),则将其转换成相应的整数显示出来;若输入其它字符,则显示出错信息。[提示]根据字符型数据的ASCII码值是否在‘0’字符与‘9’字符之间进行判断。使用if…else…语句。 精选文档,供参考!

2.编写一个程序,其功能为:从键盘输入三个数x、y、z,判断x+y=z是否成立,若成立输出“x+y=z”的信息,否则输出“x+y!=z”的信息。[提示] 条件判断表达式x+y==z 3.编写一个程序,其功能为:输入三个整数,输出最大数和最小数。 [提示] 设置最大值变量max和最小值变量min;首先比较a,b的大小,并把大数存入max,小数存入min;然后最大值变量max和最小值变量min 再与c比较,若c大于max,则max取值c,否则保持不变;如果c小于min,则min取值c,否则保持不变。最后输出max和min的值。使用if…else…语句、if语句以及复合语句。 精选文档,供参考!

精选文档,供参考!

4.某产品生产成本c=c1+mc2,其中c1为固定成本,c2为单位产品可变成本。当生产数量m<10000时,c1=20000元,c2=10元;当生产数量m≥10000时,c1=40000元,c2=5元;编写一个程序,其功能为:分别计算出生产数量为6000以及25000时,总生产成本及单位生产成本。 精选文档,供参考!

5.分段函数的计算。编写一个程序,计算下列函数: y= x x<1 2x-1 1≤x<10 3x-11 x≥10 [提示]根据输入的x值的取值,计算y的值并输出。使用if…else if语句以及复合语句。 精选文档,供参考!

c语言趣味编程实例

1、编程序求5X+2Y+Z=50 的所有非负整数解。 #include int main() { int x, y, z; int count = 0; for (x = 0; 5 * x <= 50;x++) for (y = 0; 2 * y <= 50; y++) for (z = 0; z <= 50; z++) { if (5 * x + 2 * y + z == 50) { count++; printf("%d :", count); printf("x=%d,y=%d,z=%d", x, y, z); printf("\n"); } } return 0; } 2、把25个字母A、B、C、···、X、Y按如下要求打印出来:从最中间的字母M 开始打印,然后一左一右依次打印出其它字母,即M,L,N,K,O,...。 要求:初始化时按字母表顺序赋值。 #include int main() { char x[] = "ABCDEFGHIJKLMNPQRST"; int k; int n = 0; while (x[n]) { n++; if (x[n] == 'M') { k = n;break; } } printf("%c,",x[k]); for (int i = 1; i <= 12; i++) if (i <= 11) printf("%c,%c,", (x[k] - i), (x[k] + i)); else printf("%c,%c。", (x[k] - i), (x[k] + i)); printf("\n");

设计菜单选择趣味程序

目录 1 题目内容及设计要求 (1) 2 总体设计 (2) 2.1 总体功能框图 (2) 2.2 类的设计说明 (3) 2.3 主要算法流程图 (3) 3 程序清单及注释 (5) 4 运行结果与分析 (13) 5 总结 (17) 6 参考文献 (17)

1题目内容及设计要求 题目: 设计菜单选择趣味程序 内容及要求: 设计一个比较使用的菜单,通过菜单选择不同的功能。设计分两步:首先涉及一个含有多个菜单项的菜单演示程序,然后再为这些菜单项配上相应的功能。 出圈游戏一: (1)设计一个SeqList类。 (2)在头文”head.h”中声明类,并使用默认的内联函数方式定义它们。 (3)使用类的数组来求解。 (4)用Joseph()函数求解出圈,使用函数game1()作为菜单项。 (5)在文件game1.cpp中实现Joseph和game1()函数。 出圈游戏二: (1)使用上题中的SqList类.使用向量数组求解。 (2)重载Joseph()函数来求解出圈,使用函数game2()作为菜单项。 (3)在文件game2.cpp中实现Joseph()和game2()函数 求解方程: (1)设计类FindRoot 将方程系数设计成属性,将方程的根x1,x2。以及用来作为判定条

件的d(d=b*b-4*a*c) 均设计成类的属性 (2)设计构造函数 (3)设计求根成员函数Find(). (4)设计输出结果成员函数Display(). 2总体设计 一、菜单驱动程序 二、求解一元二次方程 三、设计出圈游戏 3 2.1 总体功能框图

2.2 类的设计说明 类FindRoot的设计 为了方便,除了将方程系数设计为属性之外,还将方程的根x1和x2,以及用来作为判定条件的d(d=b*b-4*a*c)均设计成类的属性。如图1是其类图,图2是对象obj的对象图。 其中,成员函数Find()是用来求方程的根,Display()则用来输出结果。由此可见,它们都需要用到属性d。可在构造函数中求出d的值,其他成员函数直接使用这个属性,不必再去计算。 类SeqList的设计 这里要求使用名字,而在名字的字符串中,可能存在空格。可以为该类设计两个属性,一个是字符串,用来存储名字。另一个是整数,用来表示报数的位置。若使用类的数组,则可以通过数组的下标,将位置和名字对应起来。 在声明的类中,同时定义的成员函数就是默认的内联函数。另外,考虑到使用类的数组,所以不为它定义构造函数,而是用系统提供的默认无参数构造函数 2.3 主要算法流程图

CC语言趣味程序设计编程百例精解

C-C++语言趣味程序设计编程百例精解() ?81.角谷猜想 日本一位中学生发现一个奇妙的“定理”,请角谷教授证明,而教授无能为力,于是产生角谷猜想。猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1。请编程验证。 *问题分析与算法设计 本题是一个沿未获得一般证明的猜想,但屡试不爽,可以用程序验证。题目中给出的处理过程很清楚,算法不需特殊设计,可按照题目的叙述直接进行证。 *程序说明与注释 #include<stdio.h> int main() { int n,count=0; printf("Please enter number:"); scanf("%d",&n); /*输入任一整数*/ do{ if(n%2)

n=n*3+1; /*若为奇数,n乘3加1*/ printf("[%d]:%d*3+1=%d\n",++count,(n-1)/3,n); } else { n/=2; /*若为偶数n除以2*/ printf("[%d]: %d/2=%d\n",++count,2*n,n); } }while(n!=1); /*n不等于1则继续以上过程*/ } 82.四方定理 数论中著名的“四方定理”讲的是:所有自然数至多只要用四个数的平方和就可以表示。 请编程证此定理。 *问题分析与算法设计 本题是一个定理,我们不去证明它而是编程序验证。 对四个变量采用试探的方法进行计算,满足要求时输出计算结果。 *程序说明与注释 #include<stdio.h> #include<stdlib.h> int main()

选择结构程序设计练习题

选择结构程序设计练习题 1.逻辑运算符两侧运算对象的数据类型( ) A.只能是0和1 B.只能是0或非0正数 C.只能是整型或字符型数据 D.可以是任何类型的数据 2.下列运算符中优先级最高的是( ) A.< B.+ C.&& D.!= 3.能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假"的表达式是( ) A.(x>=1)&&(x<=10)&&(x>=200)&&(x<=210) B.(x>=1)||(x<=10)||(x>=200)||(x<=210) C.(x>=1)&&(x<=10)||(x>=200)&&(x<=210) D.(x>=1)||(x<=10)&&(x>=200)||(x<=210)

4.表示图中坐标轴上阴影部分的正确表达式是( ) A.(x<=a)&&(x>=b)&&(x<=c) B.(x<=a)||(b<=x<=c) C.(x<=a)||(x>=b)&&(x<=c) D.(x<=a)&&(b<=x<=c 5.判断char型量ch是否为大写字母的正确表达式是() A.‘A’<=ch<=‘Z’ B.(ch>=‘A’)&(ch<=‘Z’) C.(ch>=‘A’)&&(ch<=‘Z’) D.(‘A’<=ch)AND(‘Z’>=ch) 6.设x,y,z都是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是 () A.‘x’&&‘y’ B.x<=y C.x||y+z&&!y D.!(x

7.已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<‘B’&&!y)的值是() A.0 B.语法错误 C.1 D.“假” 8.若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是() A.A%2==1 B.!(A%2==0) C.!(A%2) D.A%2 9.设有:int a=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后的值为() A.1 B.2 C.3 D.4 10.下列运算符中优先级最低的是( )优先级最高的是( ) A.? B.&& C.+ D.!=

C语言编程练习题绝对经典!

马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人 解方程组 编写程序,采用穷举法求出结果。 编写程序,根据以下公式求e 的值。要求用两种方法计算: 1) for 循环,计算前50项 2)while 循环,直至最后一项的值小于10-4 从键盘中输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数。 猴子吃桃子问题。猴子第一天摘下若干个桃,当即只一半,又多吃一个。第二天早上又将剩下的一半吃掉一半,双多吃一个。以后每天早上都吃了前天剩下的一半零一个,到第10天早上 只剩下最后一个桃。问第一天摘了几个桃。 编程打印九九乘法表 青年歌手参加歌曲大奖赛,有10个评委打分,试编程求选手的平均得分(去掉一个最高分和一个最低分)。 从键盘中输入一个数字(可以包含小数点,其位数在60位以下,求其整数的有效位数,如输入,返回值为整数有效位数为3) 1) 输入数据为浮点型,不用数组,不用字符串,只有变量的算术运算实现此功能。 2) 使用数组来进行编程。 使用数组,编写一个十进制正整数转换为任意进制数的转换工具。 (大进制向小进制的转换。(方法是相除去余) 10进制327转八进制: 327/8 = 40 余数为7 40/8 = 5 余数为0 于是八进制数为507(第一位5是最后的商)) 使用数组,编写一个任意进制正整数转换为十进制的转换工具。(以2,10进制互转为例,其他请举一反三: 二进制数1101转十进制: 1×2的三次幂+1×2的二次幂+0×2的一次幂+1×2的零次幂=8+4+0+1=13) 10个小孩围成一圈分糖果,老师顺次分给每个人的糖块数为12,2,8,22,16,4,10,6,14,20。然后按下列规则调整,所有小孩同时把自己的糖果分一半给右边的小孩,糖块数变为 奇数的人,再向老师补要一块,问经过多少次调整后,大家的糖块一样多,且每人多少块。 11111111!2!3!4!5!!e n ≈++++++??????+

C语言 选择结构程序设计练习题

第四章选择结构程序设计 一、填空 1.在C语言中,表示逻辑“真”值用_________。 2.得到整型变量a的十位数字的表达式为_________。 3.表达式:(6>5>4)+(float)(3/2)的值是_________。 4.表达式:a=3,a-1‖--a,2*a的值是_________。(a是整型变量) 5.表达式:(a=2.5-2.0)+(int)2.0/3的值是_________。(a是整型变量)6.C语言编译系统在给出逻辑运算结果时,以数值_________代表“真”,以 _________代表“假”;但在判断一个量是否为“真”时,以_________代表“假”,以_________代表真。 7.当m=2,n=1,a=1,b=2,c=3时,执行完d=(m=a!=b)&&(n=b>c)后,n的值为_________,m的值为_________。 8.若有int x,y,z;且x=3,y=-4,z=5,则表达式:!(x>y)+(y!=z)||(x+y)&&(y-z)的值为_________。 二、编程: 1.企业发放的奖金根据利润提成。利润(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,求应发放奖金总数? 2.输入三个整数x,y,z,请把这三个数由小到大输出。 3.输入某年某月某日,判断这一天是这一年的第几天? 4.本程序演示从键盘输入x的值,计算并打印下列分段函数的值。 y=0(x<60) y=1(60<=x<70) y=2(70<=x<80) y=3(80<=x<90)

C++第一单元实验一第二题-菜单选择程序

【设计题目】 设计菜单选择趣味程序 【设计要求】 菜单是应用程序的界面,本题的任务是设计一个比较实用的菜单,通过菜单选择不同的功能。设计分为两步:首先设计一个含有多个菜单项的菜单演示程序,然后再为这些菜单项配上相应的功能。 菜单内容 程序运行后,界面给出3个菜单项的内容和输入提示。 1.解一元二次方程 2.出圈游戏 3.退出程序 选择l-3: 使用数字1-3来选择菜单项,执行相应的菜单项功能,其他输入则不起作用。 【总体设计】 一、菜单驱动程序 输入1-3之间的任意一个数字,即可进入相应选择项。从程序测试结果可知,当选择相应选择项时,其输出信息分别为:解一元二次方程、出圈游戏和退出程序。 1.主程序的设计 假设使用文件select.cpp,内容如下: /********************************* *select.cpp主程序文件 *********************************/ #include"cpp2.h" void main() { handle_menu(); //调用菜单处理函数 }

2.实现循环和功能选择的设计-菜单处理函数 /********************************* *菜单处理函数 *********************************/ void handle_menu(void) { for(; ;) { switch(menu_select())//调用菜单选择函数 { case 1: FindIt();//求解一元二次方程 break; case 2: game();//出圈游戏 break; case 3: cout<<"\t再见!\n"; return; } } } 这里使用for循环实现重复选择,假设输入选择用变量用cn存储,它作为menu_select()函数的返回值提供给switch语句。 3.得到cn的合理值的设计-菜单选择函数 应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数 值cn,以便供给switch语句使用。 /********************************* *菜单选择函数 **********************************/

作业2 选择结构作业

顺序结构练习2 1 解 2 输入实数x ,求下面的三角波脉冲函数 F(x) 的值 3 书本P98第3题 4书本P98第4题 ? ????<≤+-<≤-≥<=0.320.300 .165.00 .300.280.145.00.32,0.280 .0)(x x x x x x x F 02=++C Bx Ax

以下题目选做: 5 用IF语句编写下面功能程序: (1) 读入a,b,若a>b,则置X=1.23,否则置X=32.1,打印X值; (2) 读入a,b,c,d,若a+b>c+d,则X=1.1,若a+b=c,则X=0.0,若a+b0,则Z=cosX); 当X>0时,Z=100,打印Z值。 7 读入一个整型变量N的值,用CASE构造编程, 若N=1、2、3、5,则Y=X; N=4、8,则Y=X2; N=6、7,则Y=X3,其它情况则Y=0,打印Y值。 8 输入一个数M,判断能否被7,11,17整除,如能被以上三个数之一整除,则打印出“M能被7(或11,17)整除”,如不能被以上三个数整除,则打印出“M 不能被1,11,17整除” 9 输入四个数A,B,C,D,按照由大到小的顺序把它们打印出来 10 有四个原,圆心分别为(2,2)(-2,2)(2,-2)(-2,-2),圆半径为1,坐标在圆上或者园内的点,相应的H值为10,园外的点,响应的H值为零。输入一个坐标点(X,Y),求相应的H(提示:用逻辑变量)

1602多级菜单程序超经典.

/****************************************************************************** ******* 项目: 1602液晶显示实验+键盘+菜单+DS1302 编译器: A VR Studio_4.12sp4+winA VR412 目标芯片: A Tmega16 时钟: 外部8000000hz 建立日期: 2006-11-18 最后修改日期: ******************************************************************************* **********/ /*--------------------------------------------------------------------------------------- LCD引脚定义 ------------------------------------------------------------------------------------------ 1602pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 地Vcc VL Rs Rw En D0 D1 D2 D3 D4 D5 D6 D7 灯+ 灯- | | | | | | | M16 PA1 PA2 PA3 PA4 PA5 PA6 PA7 ******************************************************************************* **********/ /*------------------------------------------------------------------------------------------ 头文件 ------------------------------------------------------------------------------------------*/ #include /*----------------------------------------------------------------------------------------- 管脚宏定义 ------------------------------------------------------------------------------------------*/ #define LCD_EN_PORT PORTA #define LCD_EN_DDR DDRA #define LCD_RW_PORT PORTA #define LCD_RW_DDR DDRA #define LCD_RS_PORT PORTA #define LCD_RS_DDR DDRA #define LCD_DA TA_PORT PORTA #define LCD_DA TA_DDR DDRA #define LCD_DA TA_PIN PINA

复试C语言常考趣味程序设计

狼追兔子 1 巧夺偶数 2 五猴分桃 3 高次方数 4 借书方案 5 过桥问题 6 数制转换7 打渔晒网8 喝酒问题9 哥德巴赫猜想10 打印日历11 抓交通肇事逃逸犯12 反序数13 新郎新娘14 称重砝码15 求车速16 谁是窃贼17 出售金鱼18 百钱百鸡19 谜语博士20 猜牌术(-)21 舍罕王的失算22 怎样存钱利最大23 猜牌术(二)24 爱因斯坦的数学题25 取火柴游戏26 平分鱼和筐27 可逆素数28 三色球问题29 抢n游戏30 问题A: 趣味程序设计_狼追兔子 时间限制: 1 Sec 内存限制: 128 MB 提交: 341 解决: 63 [提交][状态][讨论版] 题目描述 一只兔子躲进了n个环形分布的洞的某一个中。狼在第一个洞没有找到兔子,就隔一个洞,到第三个洞去找;也没有找到,就隔两个洞,到第六个洞去找。以后每次多一个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能在哪个洞中? 输入 有多组测试数据,读取到文件结尾符为止。每组测试数据输入n(2≤n≤100),即洞穴个数。输入到文件结尾符为止。 输出 兔子可能藏匿的洞。如果不止一个,按从小到大的顺序输出。如果不存在,输出空行。 样例输入 10 8 15

样例输出 2 4 7 9 2 4 5 7 8 9 11 12 14 提示 用一个数组a[10],对应的元素a[0],a[1],a[2]……a[9]对应表示10个洞,初值均置1。通过一个循环用“穷举法”找兔子,第n次查找对应第(n-1)%10个洞,如果在第(n-1)%10个洞中没有找到兔子,因此将数组元素a[(n-1)%10]置0值。循环完成后,检查a数组各元素(各个洞)的值,若其值仍为1,则兔子可能藏身该洞中。 #include #include int ok[110]; int main() { int n,s,i,find; while(scanf("%d",&n)!=EOF) { memset(ok,0,sizeof(ok)); for(i=1;i<=200;i++) if(!ok[find=(i*(i+1)/2)%n]) if(find==0) ok[n]=1; else ok[find]=1; for(s=0,i=1;i<=n;i++) s+=ok[i]; for(i=1,find=0;i<=n;i++) if(!ok[i]) { if(find!=(n-s-1)) { printf("%d ",i);find++; } else printf("%d",i); } printf("\n"); } return 0; } 问题B: 趣味程序设计_巧夺偶数 时间限制: 1 Sec 内存限制: 128 MB

switch选择结构作业

1、有else if块的选择结构是()C A.基本if选择结构 B.if-else选择结构 C.多重if选择结构 D.switch选择结构 2、下列关于if选择结构和switch选择结构的说法正确的是()BD A.if-else选择结构中else语句是必须有的 B.多重if选择结构中else语句可选 C.嵌套if选择结构中不能包含else语句 D.switch选择结构中default语句可选 3、下列代码运行结果是? 很干燥 public static void main(String[] args) { int shiDu = 45; if (shiDu >= 80) { System.out.println("要下雨了"); } else if (shiDu >= 50) { System.out.println("天很阴"); } else if (shiDu <= 30) { System.out.println("很舒适"); } else if (shiDu >= 0) { System.out.println("很干燥"); } } 4、下面代码运行结果是()学钢琴 public static void main(String[] args) { int day = 3; switch (day) { case 1: case 3: case 5: System.out.println("学钢琴"); break; case 2: System.out.println("学英语"); default: System.out.println("休息哦"); } } 5、下列语句序列执行后,k 的值是( )。54 int x = 6, y = 10, k = 5; switch (x % y) { case 0: k = x * y;

C语言选择结构程序设计编程题.doc

实验2 选择结构程序设计 一.实验目的: 1.掌握选择控制语句的使用方法; 2.了解C程序语句的执行过程。 二.实验内容: 1.编写程序:输入一个整数,判断该数的奇偶性。(输出相应的标志even-偶数odd-奇数,请记住这两个单词)。 2.从键盘输入的正整数,判断是否能被5和7同时整除,若是,则输出Yes;否则输出No。 3.输入一个字符,如果是大写字母改变为小写字母;如果是小写字母,则把它变为大写字母;若是其它字符则不变。 4.编写程序,对于给定的一个百分比制成绩,输出相应的五分制成绩。设:90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为’E’(用if…else…与switch 语句两种方法实现)。 5. 企业发放的奖金根据利润提成。利润(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,求发放奖金总数。 6. 输入某年某月某日,判断这一天是这一年的第几天。 7. 输入一个字符,请判断是字母、数字还是特殊字符。 8. 身高预测: 男性成人身高=(父亲身高+母亲身高)*0.54cm 女性成人身高=(父亲身高*0.923+母亲身高)/2cm 如果喜爱体育锻炼,那么身高可增加2%;如果有良好的饮食习惯,可增加身高1.5%。键盘输入性别、父母身高、是否爱好体育锻炼、是否有良好的饮食习惯,利用给定身高预测方法对你的身高进行预测。 9. 要求用switch语句编程设计一个简单的计算器程序。要求根据用户从键盘输入的表达式。 操作数1 运算符op 操作数2 计算表达式的值。指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。 在此基础上,增加如下要求: (1)如果要求程序能进行浮点数运算,程序应该如何修改?如何比较实型变量和常数0是否相等? (2)如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符,那么程序如何修改? (3)如果要求连续多次算术运算,每次运算结束后,程序都给出提示: Do you want to continue(Y/N y/n)? 如果用户输入Y或y时,程序继续进行其它算术运算,否则程序才退出运行状态。那么程序如何进行修改?

使用菜单选择趣味程序

攀枝花学院 学生课程设计(论文) 题目:使用菜单选择趣味程序 学生姓名:张阳学号:201010804052 所在院(系):计算机学院 专业:软件工程 班级:2010级1班 指导教师:何春燕 2010年6月20日

攀枝花学院本科学生课程设计任务书 注:任务书由指导教师填写。

课程设计(论文)指导教师成绩评定表

摘要 生活在二十一世纪的我们,我们面临着生活的挑战,社会的快速发展,时代的不断更新。越来越来多的现代科技占有主导地位,特别是科技方面的,尤为是计算机技术,在我们生活的各个领域广泛运用,占有一席之地,所谓的后来者居上。本次课程设计的内容就是使用菜单选择趣味程序,其主要操作就是通过编写程序来完成菜单选项,然后通过调用函数来完成小程序的编写,还要用到我们学到的选择,嵌套,循环的方法的使用。该课程主要是将我们的所学C语言运用于实践,在实践中学习,获得成长,锻炼我们的独立思考能力,动手操作能力,完善自己。我会努力完成此次任务,真正获得知识。 关键词:菜单项,函数,调用

目录 摘要 ............................................................................................................................................................................ I 1 需求分析 (1) 1.1 问题描述 (1) 1.2 需求环境 (1) 1.3 功能描述 (1) 2 概要设计 (2) 2.1 程序模块设计 (2) 2.2程序流程图 (2) 2.3 数据结构的设计 (3) 2.3.1 选择结构 (3) 2.3.2 调用函数 (3) 3 详细设计 (4) 3.1程序功能 (4) 3.2趣味菜单程序 (4) 4 测试与运行程序 (8) 5程序运行感言 (10) 结束语 (11) 参考文献 (12)

C语言第二次作业(选择结构)

C语言第二次作业 .要求写出: 一、实验目的: 1.了解C语言表示逻辑量的方法。 2.学会正确使用逻辑运算符和逻辑表达式。 3.熟练掌握if语句的使用。 4.熟练掌握多分支选择语句—switch语句。 5.结合程序掌握一些简单的算法。 6.进一步学习调试程序的方法。 二、实验内容:(程序代码及调试结果) 1.某年如果能被4整除,但不能被100整除,或者能被400整除的年是闰年。判断从键盘输入的年份是否为闰年。 #include int main () { int x; printf("请输入年份:\n"); scanf("%d",&x); if(x%400==0){ printf("该年是闰年"); } else{

if(x%4==0){ printf("该年是闰年"); } else{ printf("该年不是闰年"); } } } 2、某个自动加油站有‘a’,‘b’,‘c’三种汽油品种,单价分别为 6.92, 7.37,7.64(元/公升),也提供了“自己加”或“协助加” 两个服务等级,这样用户可以得到5%或10%的优惠,请编程序针对用户输入加油量m,汽油品种y和服务类型z(‘f’—自动加,‘m’—自己加,‘e’—协助加),(注:‘f’—自动加无优惠),计算应付款pay。(请用多分支选择switch语句)。 #include

int main() { double x,z,pay; char y,l; printf("请选择汽油品种\n"); scanf(" %c",&y); switch(y) {case 'a': z=6.92;break; case 'b': z=7.37;break; case 'c': z=7.64;break; default: printf("选择错误\n"); } printf("请输入汽油量\n"); scanf("%lf",&x); printf("请选择服务等级\n"); scanf(" %c",&l); switch(l) {case 'f':

c语言第4章 选择结构程序设计习题答案

第4章选择结构程序设计 习题(P111) 4.2 C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”? 答:C语言中用1表示真,0表示假;系统按照“非0为真,0为假”判断一个逻辑量的真假。 4.3 写出下面各逻辑表达式的值。设a=3,b=4,c=5。 (1)a+b>c&&b==c (2)a||b+c&&b-c (3)!(a>b)&&!c||1 (4)!(x=a)&&(y=b)&&0 (5)!(a+b)+c-1&&b+c/2 解:该题在求解过程中注意: 一、优先级。逻辑运算符(&&和||)低于算术运算符和关系运算符而高于赋值运算符,在逻辑运算符中,逻辑非最高,逻辑与其次,逻辑或最低; 二、逻辑表达式的求值规则。(P94) 所以得以上表达式的值分别为:(1)0 (2)1 (3)1 (4)0 (5)1 4.4有3个整数a、b、c,由键盘输入,输出其中最大的数。 分析:这是一个规模较小的求最值的算法,习题1.6用函数的方法实现。该题不用函数调用实现,但方法是最值,再依次和第二、第三个数比较得结果。其中都要用到单分支或双分支选择结构语句。 参考程序如下: main() { int a,b,c,max; /*定义4个整型变量,其中a,b,c存原始数据,max存最值*/ printf("\ninput the value of a,b,c:"); /*提示输入*/ scanf("%d%d%d",&a,&b,&c); /*格式符之间无分隔符,输入时可以以空格、回车、跳格分隔*/ if(a>b) max=a; else max=b; if(max

选择结构练习题

选择结构练习题 一、选择题 1.下列错误的语句是() A.if(a>b) printf(“%d”,a); B.i f(&&); a=m C.i f(1)a=m;else a=n; D.if(a>0);{else a=n;} 2. #include main() { int x,y; scanf(“%d”.&x); y=0; if (x>=0) {if (x>0) y=1;} else y=-1; printf (“%d”,y); } 当从键盘输入32时,程序输出结果为() A.0 B. -1 C. 1 D. 不确定值 2.以下程序的输出结果是() #include main() { int a=2,b=-1,c=2; if (a>b) if (b<0 ) c=0; else c+=1; printf(“%d\n”,c); } A.0 B. 1 C.2 D.3 4. 以下程序的输出结果是() #include main() { int k=2; switch (k) {case 1:printf(“%d\n”,k++);break; case 2:printf(“%d”,k++); case 3:printf(“%d\n”,k++);break; case 4:printf(“%d\n”,k++); default :printf(“Full!\n”);} } A.1 3 B.2 3 C.2 2 D 3 2 5.下列程序的运行结果是()

main() { int a=2,c=5; printf(“a=%d,b=%d\n”,a,c); } A. a=%2,b=%5 B. a=2,b=5 C.a=c,b=d D a=%d,b=%d 6.语句pritnf(“a\bre\’hi\’y\\\bou\n”);的输出结果是() A. a\bre\\’hi\’y\\bou B.a\bre\’hi\’y\bou C.re’hi’you D. abre’hi’y\bou 7.如下程序的输出结果是() #include main() {int a=12,b=5,c=-3; if(a>b) if(b<0) c=0; else c++; printf(“%d\n”,c); } A.0 B. 1 C. -2 D.-3 8.从键盘输入5,下列程序运行结果是() #include main() {int x; scanf(“%d”,&x); if(x--<5) printf(“%d”,x); else print(“%d”,x++); } A. 3 B.4 C. 5 D.6 9. 如下程序的输出结果是() #include main() { int a=15,b=21,m=0; switch(a%3) {case 0: m++;break; case 1: m++; switch(b%2) {default: m++; case 0: m++; break; } } printf(“%d\n”,m); } 10.下面的程序() #include main() {int x=3,y=0,z=0;

相关文档
最新文档