建立一个类NUM,并统计特定序列中相同的字符的个数。
具体要求如下:
(1)私有数据成员
l char data[25]:随机生成25 个字符。
l int num[128]:储存每个字符出现的个数。
(2)公有数据成员
l NUM(int data):构造函数,同时初始化数组data。
l void process( ):统计数组data 中每个字符出现的个数,并保存到数组
num 中。
l void print( ):输出每个出现过的字符及其出现的个数,每行输出5 个,
没有出现过的字符不显示。
(3)在主程序中定义一个对象,对该类进行测试。
个人表示有点困难啊
[查看全文]
课题内容:
为财务部门的出纳人员编制一个发放工资的软件。
已知在一个数据文件中存放了某部门的职工工号和工资额,工资都是以元为单位的整数。现有人民币的种类为100元,50元,20元,10元,5元和1元共6种。
编写程序,计算每位职工各种币种的张数、某部门各种币种的张数及总工资额数,结果存于数据文件中。
存储结构:顺序存储。
数据类型:整型数组。
#include<stdio.h>
void main()
{
int x, sum[6];
for(int a=0;a<6;a++)
sum[a]=0;
printf("请输入员工工资-用空格空开,以0为结束:");
while (scanf("%d", &x),x)
{
sum[0] += x / 100;
x %= 100;
sum[1] += x / 50;
x %= 50;
sum[2] += x / 10;
x %= 10;
sum[3] += x / 5;
x %= 5;
sum[4] += x / 2;
x %= 2;
sum[5] += x;
}
printf("100元的%d张,50元的%d张,20元的%d张,10元的%d张,5元的%d张,1元的%d张\n",sum[0],sum[1],sum[2],sum[3],sum[4],sum[5]);
return 0;
}↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
求修改成课题要求的版本T T。。。。。@@22!!
[查看全文]
#include *本站禁止HTML标签噢*
using namespace std ;
void main ()
{
int k ;
for ( k = 1 ; k > 0 ; k ++ ) ;
cout << k << endl ;
system ("pause") ;
}
老师说这是无限的,书上标答说是无限的。。。
但是我的VS2012给出了答案是-2147483648
我知道是因为超出了int范围
但是。。。考试的时候要肿么写啊:64:
[查看全文]
这段代码的作用是将多张位图变成有点类似Flash中的影片剪辑。
package util
{
import flash.display.Sprite;
import flash.utils.setInterval;
import flash.utils.clearInterval;
/**
* 创建影片剪辑
* @author zms
*/
public class MC extends Sprite
{
private var _playId:int;
private var _playNum:Number;
private var _array:Array = new Array();
private var _spriteArray:Array = new Array();
public function MC(_arr:Array) //数组的length就是影片的帧数
{
//实例化
_array = new Array();
_spriteArray = new Array();
_playId = 0;
this._array = _arr;
for (var _i:uint = 0; _i < this._array.length; _i++) {
_spriteArray[_i] = new Sprite();//创建
addChild(_spriteArray[_i]);
_spriteArray[_i].addChild(_array[_i]);
if (_i > 0) {
_spriteArray[_i].visible = false;
}
}
}
public function play(_t:uint = 550):void {
_playNum = setInterval(myPlay, _t);
}
public function stop() {
clearInterval(_playNum);
}
public function gotoAndStop(_n:uint) :void{
clearInterval(_playNum);
for (var _i:int = 0; _i < _spriteArray.length ; _i++) {
_spriteArray[_i].visible = false;
}
_spriteArray[_n - 1].visible = true;
}
public function gotoAndPlay(_n:uint,_t:uint = 550) :void{
clearInterval(_playNum);
_playId = _n - 1;
myGotoPlay();
_playNum = setInterval(myGotoPlay, _t);
}
private function myPlay():void {
for (var _i:uint = 0; _i < _spriteArray.length ; _i++) {
_spriteArray[_i].visible = false;
}
_spriteArray[_playId].visible = true;
_playId++;
if (_playId >= _spriteArray.length) {
_playId = 0;
}
}
private function myGotoPlay():void {
for (var _i:int = 0; _i < _spriteArray.length; _i++) {
_spriteArray[_i].visible = false;
}
_spriteArray[_playId].visible = true;
_playId++;
if (_playId >= _spriteArray.length){
_playId = 0;
}
}
}
}
[查看全文]
本文来自“The most stupid C bug ever”,很有意思,分享给大家。我相信这样的bug,就算你是高手你也会犯的。你来看看作者犯的这个Bug吧。。首先,作者想用一段程序来创建一个文件,如果有文件名的话,就创建真正的文件,如果没有的话,就调用?tmpfile()?创建临时文件。他这段程序就是HTTP下载的C程序。code==200就是HTTP的返回码。[mw_shl_code=c,true]else if (code == 200) { // Downloading whole file
/* Write new file (plus allow reading once we finish) */
g = fname ? fopen(fname, "w+") : tmpfile();
}[/mw_shl_code]但是这个程序,只能在Unix/Linux下工作,因为 Microsoft 的?tmpfile()的实现?居然选择了 C:\ 作为临时文件的存放目录,这对于那些没有管理员权限的人来说就出大问题了,在Windows 7下,就算你有管理员权限也会有问题。所以,上面的程序在Windows平台下需要用不同的方式来处理,不能直接使用Windows的tmpfile()函数。于是作者就先把这个问题记下来,在注释中写下了FIXME:[mw_shl_code=c,true]else if (code == 200) { // Downloading whole file
/* Write new file (plus allow reading once we finish) */
// FIXME Win32 native version fails here because
// Microsoft's version of tmpfile() creates the file in C:\
g = fname ? fopen(fname, "w+") : tmpfile();
}[/mw_shl_code]然后,作者觉得需要写一个跨平台的编译:[mw_shl_code=c,true]FILE * tmpfile ( void ) {
#ifndef _WIN32
return tmpfile();
#else
//code for Windows;
#endif
}[/mw_shl_code]然后,作者觉得这样实现很不好,会发现名字冲突,因为这样一来这个函数太难看了。于是他重构了一下他的代码——写一个自己实现的tmpfile() – w32_tmpfile,然后,在Windows 下用宏定义来重命名这个函数为tmpfile()。(陈皓注:这种用法是比较标准的跨平台代码的写法)[mw_shl_code=c,true]#ifdef _WIN32
#define tmpfile w32_tmpfile
#endif
FILE * w32_tmpfile ( void ) {
//code for Windows;
}[/mw_shl_code]搞定!编译程序,运行。靠!居然没有调用到我的w32_tmpfile(),什么问题?调试,单步跟踪,果然没有调用到!难道是问号表达式有问题?改成if – else 语句,好了![mw_shl_code=c,true]if(NULL != fname) {
g = fopen(fname, "w+");
} else {
g = tmpfile();
}[/mw_shl_code]问号表达式不应该有问题吧,难道我们的宏对问号表达式不起作用,这难道是编译器的预编译的一个bug?作者怀疑到。现在我们把所有的代码连在一起看,并比较一下:能正常工作的代码[mw_shl_code=c,true]#ifdef _WIN32
# define tmpfile w32_tmpfile
#endif
FILE * w32_tmpfile ( void ) {
code for Windows;
}
else if (code == 200) { // Downloading whole file
/* Write new file (plus allow reading once we finish) */
// FIXME Win32 native version fails here because
// Microsoft's version of tmpfile() creates the file in C:\
//g = fname ? fopen(fname, "w+") : tmpfile();
if(NULL != fname) {
g = fopen(fname, "w+");
} else {
g = tmpfile();
}
}[/mw_shl_code]不能正常工作的代码[mw_shl_code=c,true]#ifdef _WIN32
# define tmpfile w32_tmpfile
#endif
FILE * w32_tmpfile ( void ) {
code for Windows;
}
else if (code == 200) { // Downloading whole file
/* Write new file (plus allow reading once we finish) */
// FIXME Win32 native version fails here because
// Microsoft's version of tmpfile() creates the file in C:\
g = fname ? fopen(fname, "w+") : tmpfile();
}[/mw_shl_code]也许你在一开始就看到了这个bug,但是作者没有。所有的问题都出在注释上:[mw_shl_code=c,true]/* Write new file (plus allow reading once we finish) */
// FIXME Win32 native version fails here because
// Microsoft's version of tmpfile() creates the file in C:\[/mw_shl_code]你看到了最后那个C:\吗?在C中,“\” 代表此行没有结束,于是,后面的代码也成了注释。这就是这个bug的真正原因!而之所以改成if-else能工作的原因是因为作者注释了老的问号表达式的代码,所以,那段能工作的代码成了:[mw_shl_code=c,true]/* Write new file (plus allow reading once we finish) */
// FIXME Win32 native version fails here because Microsoft's version of tmpfile() creates the file in C: //g = fname ? fopen(fname, "w+") : tmpfile();
if(NULL != fname) {
g = fopen(fname, "w+");
} else {
g = tmpfile();
}
[/mw_shl_code]我相信,当作者找到这个问题的原因后,一定会骂一句“妈的”!我也相信,这个bug花费了作者很多时间!最后,我也share一个我以前犯的一个错。我有一个小函数,需要传入一个int* pInt的类型,然后我需要在我的代码里 把这个int* pInt作除数。于是我的代码成了下面的这个样子:
float result = num/*pInt;….
/* some comments */
-x<10 ? f(result):f(-result);
因为我在我当时用vi编写代码,所以没有语法高亮,而我的程序都编译通过了,但是却出现了很奇怪的事。我也不知道,用gdb调式的时候,发现有些语句直接就过了。这个问题让我花了很多时间,最后发现问题原来是没有空格导致的,TNND,下面我用代码高亮的插件来显示上面的代码,[mw_shl_code=c,true]float result = num/*pInt;
....
/* some comments */
-x<10 ? f(result):f(-result);[/mw_shl_code]Holly Shit! 我的代码成了:[mw_shl_code=c,true]float result = num-x<10 ? f(result):f(-result);[/mw_shl_code]妈的!我的这个错误在愚蠢程度上和上面那个作者出的错误有一拼。(全文完)转载自:酷壳
[查看全文]
本帖最后由 Chevelle 于 2012-12-8 23:44 编辑
大多数人都觉得IT业都是一个低龄行业,白发苍苍的老年人们跟“程序猿”这三个字是不会有任何联系的,他们不懂iPhone、Linux和云,只有那些精力旺盛的中青年人才能与代码进行无止尽的搏斗。但著名的IT老记者,56岁的史蒂文·沃恩·尼克尔斯却提醒人们:程序员,也是越老越辣的。
本文作者史蒂文·沃恩·尼克尔斯(Steven J. Vaughan-Nichols)算得上是一名骨灰级的老程序员和IT业者。早在上世纪七十年代,CP/M-80操作系统还是前沿技术,300bps还算很快的网络连接时,史蒂文就已经开始进行关于科技与商业相关文章的写作了,他也是第一个对万维网进行报道的记者。下面,就是他为广大老程序猿们发出的呼声:
我56岁了。虽然说我还不是真正意义上的爷爷,但是也老得差不多了。我最开始接触因特网是在上个世纪70年代。我使用的第一个编程语言是IBM 360汇编语言,第一个操作系统是IBM大型机OS/360系统。我是第一个报道万维网(Web)这个新的网络服务的记者,那时才1993年。不过其实我也只是知道了关于计算的一点点皮毛而已。
本文作者史蒂文·沃恩·尼克尔斯
可是最近我注意到了很多言论,都在说我们这些老人们不能理解iPhone,Linux或者云之类的“新兴事物”。这让正在使用它们的我感到自己仿佛背叛了“老年人”这个群体一样。
但是,请大家看看我们IT领域的名人吧。丹尼斯·里奇(Dennis Ritchie),C语言之父,Unix的创建者,去年辞世,享年70岁。肯·汤普逊(Ken Thompson),Unix的另一位发明者,现在已经69岁。詹姆斯·高斯林(James Gosling),Java之父,现在已经57岁。比尔•盖茨(Bill Gates)和微软CEO史蒂夫·鲍尔默(Steve Ballmer)都是56岁。史蒂夫·乔布斯(Steve Jobs)离开我们时也是56岁。蒂姆·库克(Tim Cook),乔布斯的继承者,苹果现任首席执行官,51岁。
那对于Linux和开源呢?自由软件创始人理查德·斯托曼(Richard Stallman)现在已59岁。他的开源哲学的竞争对手埃里克·雷蒙(Eric S. Raymond)现在也54岁。而就连Linux之父李纳斯·托沃兹(Linus Torvalds)也已经过了不惑之年,虽然算不上老,但是也算是大龄中年人了。
当然,不仅仅只有这些著名老程序猿才能代表我们:有调查显示,2012年,有27%的社交网络用户年龄超过了45岁。
我们这代战后婴儿潮出生的人总愿意把自己想象成一个永远年轻的家伙,但事实很残酷,我们当中已经有一些人退休了,没退休的那些老头子们,却都身处在对老员工有敌意的IT业工作环境里。
我想这就是为什么一直有许多关于“老人不理解科技”的言论,也许是有些人为了隐藏“年龄偏见”,这个IT行业里公开的秘密。
确实,那些已经人到中年的人都有家有室,可能没有太多精力来一周工作80多个小时,但是那又怎样呢?早在几十年前,在佛瑞德·布鲁克斯(Frederick Brooks)的软件管理经典著作《人月神话》中就提到:在IT领域,人力和时间并不呈线性关系,大量人员和较短的时间,并不能缩短软件的开发进度。
代码好不好,经验最重要可悲的是,这种早该摒弃的“工时越长越好”的想法却在IT领域一直存在着,事实上,真正重要的是谁工作得更有效率。在一些如法律和会计等行业里,计费工时是唯一的衡量标准,这种系统鼓励人们在每件任务上花的时间越多越好。然而在IT行业并非如此,我们需要的是高质量高效率的完成工作,在尽可能短的时间内犯尽可能少的错。
你知道吗,那些很早就开始使用C语言的老程序员不一定就比一个20岁“精通”JavaScript的天才效率低。
我也并不是说老员工总是更好的,我知道很多人处于“待退休”状态,他们也懒得去学习新的技能。他们不能理解以前的服务思维已经在这个每个人都移居到云端的时代行不通了。
但最重要的是,优秀的“祖父级”程序猿也可以做的和年轻员工一样好。记住,那些老爷爷们不仅仅理解技术,也很有可能是这些技术的发明者。
文章编译自:ComputerWorld Steven J. Vaughan-Nichols: Grandpa the programmer
作者: Steven J. Vaughan-Nichols
[查看全文]
本帖最后由 轻舟过 于 2012-8-29 23:48 编辑
面向程序员的打字练习网站http://typing.io/ ,支持各种常见的编程语言
多加练习可以增强敲代码的手感
另外他们选的代码似乎都是来自于著名开源项目,读一读也有好处的~
[查看全文]
好吧 实在是闲的没事 就把原来的一些笔记翻出来看了看 翻到个比较有意思的
我是java小白一只
群里有个人说出现了个不能读取java的错误信息(后来发现是文件没传完啊 怨念! 而不是文件找不到或者文件名等其他原因)
然后就想是不是因为文件被占用了 于是写了个小东西试试看:
[mw_shl_code=java,true]import java.io.*;
import java.nio.*;
import java.nio.channels.*;
public class TryLock{
public static void main(String args[]) throws Exception{
File file=new File("Text.java");
FileOutputStream pis=new FileOutputStream(file,true);
FileChannel fc=pis.getChannel();
FileLock fl=fc.tryLock();
System.out.println(fl);
Thread.sleep(30*1000);
if(fl!=null){
fl.release();
}
fc.close();
}
}[/mw_shl_code]
很简单的一个小例子
Text.java无非就是helloworld之类的以上是用来锁的代码在win下我先在一个cmd下运行这个程序然后我在30s内在另一个cmd下用javacText.java 会出现:读取Text.java时出错,另一个程序已锁定文件的一部分,进程无法访问本来以上就结了但那时(其实也就1个月前啦)还装了ubuntu 12.04(gnome常常卡死不动啊有木有......)
然后就在那边也试着运行了下:
居然发现可以在锁定的情况下正常编译那个Text.java 甚至可以修改 删除........
瞬间不淡定了....去csdn上问 回答说 在linux内核的系统中你甚至可以直接删除运行的程序......
这就对跨平台的结果一致性产生了冲击 但问题的本身还是来源于系统底层的本身 系统本身允许了这样的行为 和跨平台本身没关
所以 这一结果对于java的跨平台是没错的
但你要了解点平台的知识 不然会出现让你很费解的情况(我以上的例子.....)
以上..
需要更有有关linux内核的系统关于删除运行时文件的说明?:
http://bbs.chinaunix.net/thread-1702707-1-1.html
[查看全文]