依次读取一个字符直到#,然后依次判断是不是英文字母,是不是数字,是不是空格,还是别的字符,是哪一种就给哪一种的计数加上1。然后输出每种各有多少个
n1=0,n2=0,n3=0,n4=0分别是英文字母、数字、空格和其他字符的计数器。每读入一个字符就判断一次。
其他随便说,这个程序主要是多分支的判断问题,数据从键盘输入,最后的统计结果显示在显示器上。。。这个你编就是了,围绕着这些说说。。。真是个老大啊。。。
一、问题描述
很多问题可归结为对流中字符的统计,比如对输入流中各种字符的分类统计,即统计给类字符的出现情况。
二、问题分析
本程序统计从键盘输入的一串字符中各种字符的个数,其中分为:英文字母、数字、空格和其它字符四种。程序的输入为键盘标准输入,可以输入任何可打印字符,包括空格、回车等控制字符,以'#'键作为输入的结束。在程序的最后输出上述四种字符再本次输入中出现的次数。程序可以统计除了'#'字符之外的各类字符的出现情况,因为比较简单而且分类比较模糊,没有对错误的处理。
组员的分工。。。你自己看着办
三、程序设计思路功能模块说明
首先,程序要设置四个计数器用来对四类字符的出现次数进行计数,并在开始的时候给这四个计数器赋以0值表示尚未进行计数。然后依次读取一个字符直到'#',然后依次判断是不是英文字母,是不是数字,是不是空格,还是别的字符,是哪一种就给哪一种的计数加上1。最后输出每种字符各有多少个。
四个计数器n1、n2、n3、n4设置为整数类型,符合自然规律。另一个变量ch作为getchar()函数所取得字符的临时变量,并用来作为循环体中进行判断的内容。while语句对getchar()函数获得的字符进行判断,如果不是结束标志'#',则进入循环体,否则说明输入结束,进入最后的报数阶段。在while的循环体中,判断ch的情况,如果ch在字符'a'到'z'或者'A'到'Z'之间,说明ch是英文字母,相应的计数器n1加一;如果不是上一种情况,再判断ch是不是在字符'0'到'9'之间,如果是则说明ch是数字,相应计数器n2加一;如果仍然不满足上面两个判断条件,再判断ch是不是空格,如果是则空格计数器n3加一;如果还是不满足判断条件,说明ch是其他字符,计数器n4加一。程序的最后输出四个计数器n1、n2、n3、n4的最后结果,程序结束。
四、程序调试与测试
程序的主要问题是对四种字符的界定和判断,本程序使用了比较输入字符的ASCII码值的办法。
正确的输入和输出结果,你自己搞一搞。
五、程序清单
#include <stdioh>
main()
{
int n1=0,n2=0,n3=0,n4=0;//分别用来统计的计数器,同时进行初始化(不能少)
char ch;
while((ch=getchar())!='#')//一个一个字符地输入,直到输入‘#’
{
if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z')n1++;//是否英文字母
else if(ch>='0'&&ch<='9') n2++;//是否数字字符
else if(ch==' ')n3++;//是否空格
else n4++;//其他字符
}
printf("n1=%d,n2=%d,n3=%d,n4=%d\n",n1,n2,n3,n4);//输出
}
faint
/
@ClassName: Computer
@Description: TODO( 计算机类)
@author QSK
@date 2015年5月11日 下午6:06:16
/
public class Computer {
private Integer cid;
private String cpu;
private String mainboard;
private Integer hardDisk;
private Integer memory;
private Double price;
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
thiscid = cid;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
thiscpu = cpu;
}
public String getMainboard() {
return mainboard;
}
public void setMainboard(String mainboard) {
thismainboard = mainboard;
}
public Integer getHardDisk() {
return hardDisk;
}
public void setHardDisk(Integer hardDisk) {
thishardDisk = hardDisk;
}
public Integer getMemory() {
return memory;
}
public void setMemory(Integer memory) {
thismemory = memory;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
thisprice = price;
}
public Computer() {
super();
}
public Computer(Integer cid, String cpu, String mainboard,
Integer hardDisk, Integer memory, Double price) {
super();
thiscid = cid;
thiscpu = cpu;
thismainboard = mainboard;
thishardDisk = hardDisk;
thismemory = memory;
thisprice = price;
}
/
输出所有属性
/
public static void printAllAttr(Integer cid ,String cpu , String mainboard,Integer hardDisk,Integer memory,Double price){
Systemoutprintln(cid+"\t"+ cpu+"\t"+ mainboard+"\t"+ hardDisk+"\t"+ memory+"\t"+ price+"\t");
}
}
public static void main(String[] args) {
//创建一个List集合存放电脑信息
List<Computer> list = new ArrayList<Computer>();
Scanner sc = new Scanner(Systemin);
for (int i = 0; i < 3; i++) {
Systemoutprintln("请输入第"+(i+1)+"台电脑标识:");
Integer cid = scnextInt();
Systemoutprintln("请输入第"+(i+1)+"台电脑cpu:");
String cpu = scnext();
Systemoutprintln("请输入第"+(i+1)+"台电脑主板型号:");
String mainboard = scnext();
Systemoutprintln("请输入第"+(i+1)+"台电脑硬盘大小:");
Integer hardDisk = scnextInt();
Systemoutprintln("请输入第"+(i+1)+"台电脑内存大小:");
Integer memory = scnextInt();
Systemoutprintln("请输入第"+(i+1)+"台电脑价格:");
Double price = scnextDouble();
Computer c = new Computer(cid, cpu, mainboard, hardDisk, memory, price);
listadd(c);
}
//打印出信息
for (Computer computer : list) {
ComputerprintAllAttr(computergetCid(), computergetCpu(), computergetMainboard(), computergetHardDisk(), computergetMemory(), computergetPrice());
}
}
#include <AT89X51H>
//假定继电器是安装在P35,按键分别安装在P36, P37,时钟频率12MHz
sbit sw1=P3^6;
sbit sw2=P3^7;
sbit relay=P3^5;
void SetupTimer0()
{
TMOD &= 0XF0; //仅保留T1信息
TMOD |= 0X02; //设置T0: 定时功能,方式2,自动重载8位定时器/计数器
TH0 = 256-250;//定时每025ms中断一次
TL0 = 256-250;
TR0 = 1; //开启定时器
ET0 = 1; //定时器0中断打开
}
data unsigned char us250;
data unsigned int relay_timer;
void Timer0_ISR() interrupt 1 //定时中断服务程序,为按键消抖服务
{
//如果一个动作过程刚刚开始,则设定继电器延时3000ms,并打开继电器
if (0==relay_timer && 0==sw1) {relay_timer=3000; relay=1;}
if (++us250>=4) //250us中断一次,每四次得到1ms
{
us250=0;
if(relay_timer==0) relay=0; //如继电器延时为0,则关继电器
else --relay_timer; //否则继电器延时递减
}
//如果当前正处于一个动作过程且有sw2按下,则修改继电器延时为1000ms
if (relay_timer && 0==sw2) relay_timer=1000;
}
void main()
{
us250=0;
relay_timer=0;
relay=0;
SetupTimer0();
EA = 1; //全局中断打开
while(1); //所有的动作均在中断函数内完成
}
希望对你有帮助,满意的话请采纳答案
#include <iostream>
using namespace std;
int main()
{
int n=555555;
int i=999;
while (n%i) //如果n不能被i整除则循环,能整除时n%i结果为0,循环停止
i--; //继续测试更小的i
cout<< "约数中最大的三位数是:" <<i<<endl;
i--;
cout<< "其他三位数的约数:" <<endl;
while (i>99) //判断所有的三位数
{
if(n%i==0) //如果n可以被i整除则输出i
cout<<i<<endl;
i--;
}
}
思路是:
1、定义一个数组a[n][n];
2、利用随机数%4对其赋值;
3、写投食函数,投食a[i][j],判断是否是4;
4、投食函数:如果是4,则平均分散到a[i-1][j-1]、a[i][j-1]、a[i+1][j]、a[i+1][j+1];否则返回
5、对以上四个区域进行递归调用投食函数。
具体代码自己写吧。如果不懂递归,可以追问。这个题突破点就在递归。
选一本出色的教材有条件就看英文的,然后给自己一个环境,例如LINUX+GCC+GDB,用纯粹的语言去在解决问题的过程中学习算法
没有目的性去学习,往往效率不高,可以找一些ONLINE JUDGE的题目做做例如Welcome To PKU JudgeOnline,对着里面的问题,先自己思考,尝试编程解决,如果不能解决,就翻翻算法书,想想为什么
如果还是不行,那就上网看看别人有没有解决掉,怎么做,看看他们用到什么算法,比对着,然后进一步自己去实现
有时候对于算法的问题的实现,你在实现之前也许会卡住,但是在编程过程中,随着你的锻炼和熟练度的提高会有那么一天你觉得什么都通了,而且,你是在用的过程中学习坚持走下去,一定事半功倍
“cracking the coding interview”,题目是按照array, stack&queue, 链表,树图,递归这种章节安排的,每章节题目7-8个,不多,难度中等,找感觉很有帮助。第一遍自己写不出来的话(我就是,这么弱!),画图分析,抄背默。一遍做完再做一遍,第二遍就快很多,理解也深刻了,所谓读书百遍,其意自现,算法也一样。
不要一开始就看《算法导论》,这本书有太多关于算法的数学证明
推荐你看看这本:算法(第4版) (豆瓣),作者是高德纳的学生:塞奇威克 (Robert Sedgewick)
书中算法代码主要是用Java编写,里面有大量的图来让你明白例如:排序,查找,树和图的算法运行过程。
这本书的目录编排也很清晰,他就告诉你算法主要就可以分为:排序,查找,图和字符串。从这4个方面可以演化出很多算法,最关键是:这本书的作者不但是在告诉你what,而且告诉你why(分析各种算法的优缺点)
这本书其他好的地方
比如讲到快速排序,很多书可能讲了快速排序的原理就完了。但这本书就直接讲了原始的快速排序可以改进的地方:1 在小数组上,切换到插入排序;2 三取样切分;3 三向切分的快速排序。
优先队列怎么和排序算法扯上关系呢?其实优先队列就是可以用堆排序来实现,堆排序的时间复杂度和快速排序是一样的,但是实际中为什么堆排序的运行时间要比快速排序多呢?因为这和CPU的Cache命中率有关系,堆排序不符合算法运行的局部性原则
比如书中25节,讲了排序算法的实际用途,这本书不光告诉你算法的原理,还告诉你算法的用途。
以上就是关于急救!!麻烦大家给一下这个程序的设计思路,小弟跪谢了!!全部的内容,包括:急救!!麻烦大家给一下这个程序的设计思路,小弟跪谢了!!、用java编写这个程序最好给说明下编写思路和方法、求51单片机C语言程序编程思路等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)