急救!!麻烦大家给一下这个程序的设计思路,小弟跪谢了!!

急救!!麻烦大家给一下这个程序的设计思路,小弟跪谢了!!,第1张

依次读取一个字符直到#,然后依次判断是不是英文字母,是不是数字,是不是空格,还是别的字符,是哪一种就给哪一种的计数加上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语言程序编程思路等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9855389.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存