| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10448 人关注过本帖
标题:新手 求S=a+aa+aaa+aaaa
只看楼主 加入收藏
hanucvb
Rank: 2
等 级:论坛游民
帖 子:26
专家分:23
注 册:2011-9-21
结帖率:100%
收藏
 问题点数:0 回复次数:15 
新手 求S=a+aa+aaa+aaaa
# include <stdio.h>
# include <math.h>
int main(void)
{
    int i = 1, sum = 0, a, n, k;
   
    scanf("%d%d",&a,&n);
    for ( ; k != 0 && k <= n-i; i++)
        sum = sum + pow( 10,k);
    sum = a * ( 1 + sum);


    printf("结果是%d",sum);

    return 0;
}

我想知道 ,我这个编的程序能运行,只显示窗口后,不显示结果

为什么呢》??

———————————————————分割线——————————————————————————————
我已经修改成这样

# include <stdio.h>
# include <math.h>
int main(void)
{
    int sum = 0,  k = 1, n, a;
   
    scanf("%d%d",&a,&n);
    for ( ; k < n; k++)
        sum = sum + pow( 10,k);
    sum = a * ( 1 + sum);

    printf("结果是%d\n",sum);

    return 0;
}


[ 本帖最后由 hanucvb 于 2011-9-23 13:15 编辑 ]
搜索更多相关主题的帖子: include return 分割线 
2011-09-23 12:26
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
要学会逐行看程序代码,到for循环时,你用到k进行检测循环条件,k是多少?

授人以渔,不授人以鱼。
2011-09-23 12:30
hanucvb
Rank: 2
等 级:论坛游民
帖 子:26
专家分:23
注 册:2011-9-21
收藏
得分:0 
回复 2楼 TonyDeng
唉,自卑呐

新手还是要经常错才能成长

非常感谢这位同志!!!!
2011-09-23 12:37
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
我教你怎么调试程序,学会以后怎么写程序,愿意的话,就按照我说的一步一步做:
1.把scanf()后面的代码全部注释掉;
2.在scanf()后面加一行,写printf("a = %d, n = %d\n", a, n);
3.运行这个程序几次,输入各式各样不同的a、n值,检验程序确实正确读到了你的输入(你不要以为总能读正确,试过就明白了),学会怎么正确地输入数据
做完,再告诉你接下来怎么做,不做,就到此为止,让别人告诉你直接答案好了。

授人以渔,不授人以鱼。
2011-09-23 12:41
luosiye
Rank: 2
等 级:论坛游民
帖 子:15
专家分:39
注 册:2011-9-8
收藏
得分:0 
因为K既没有进行初始化的赋值,也不是通过键盘输入的,所以系统根本不知道K的值是多少。

要改进的话,先给K赋给初值,K++和I++同时用。

或者像楼上说的那样,单步调你就能看出错了,在int main()的大括号哪里设置个断点,再在sum=sum+pow(10,k)后设置一个断点,那然看下面K的值变化就能看出错了。
2011-09-23 12:43
g79134682
Rank: 2
等 级:论坛游民
帖 子:80
专家分:75
注 册:2011-7-29
收藏
得分:0 
for循环中;是啥意思?会不会出错啊
2011-09-23 13:06
吴军旗
Rank: 5Rank: 5
等 级:职业侠客
帖 子:286
专家分:308
注 册:2011-9-14
收藏
得分:0 
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
void main()
{int i;
float sum=0;
float a;
scanf("%f",&a);
for(i=1;i<=4;i++)
{sum=pow(a,i)+sum;}
printf("a*a+a*a+a*a*a+a*a*a*a=%f",sum);
system("pause");






图片附件: 游客没有浏览图片的权限,请 登录注册


刚开始也不行,我说几点哈:嗯 pow(x,y)   里的x要是float或double
慢慢来吧,祝你成功。。。




[ 本帖最后由 吴军旗 于 2011-9-23 13:10 编辑 ]

最惨的不是忘不了悲伤的回忆,而是那些悲伤的回忆却开始记不清。。。
2011-09-23 13:08
hanucvb
Rank: 2
等 级:论坛游民
帖 子:26
专家分:23
注 册:2011-9-21
收藏
得分:0 
回复 4楼 TonyDeng
我按你的那样去做!

输入:9999999999999999999999999
输入:7777777777777777777777777


输出的结果是:
————————————————————
9999999999999999999999999
7777777777777777777777777
a = 1241513983, n = -943252367
Press any key to continue
————————————————————

[ 本帖最后由 hanucvb 于 2011-9-23 13:21 编辑 ]
2011-09-23 13:20
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 8楼 hanucvb
嗯,不能得到正确的输入了是吧。你看写的代码,scanf("%d%d", &a, &n),两个%d%d是紧密连在一起的,意思是如果你希望输入a=1、n=2,那么将被视为12,但问题是12也是整数,因此scanf()函数事实上无法判断你输入的是什么,所以,它会把12当作是一个数,得到a=12,然后等待你输入n的值。这就是你必须敲一下回车,输入另一个数字,程序才能继续执行下去的原因。因此,你这里修改,明确告诉scanf()分隔符是什么,改为如scanf("%d,%d", &a, &n),这样,你输入时用逗号隔一下就行,而原先的那个,也可以用空格、TAB或回车等分隔。这些scanf()的古怪规律,是你用scanf()函数时必须掌握的(但你掌握不等于别的人也掌握,当你的程序给别人用时更要注意)。

由于你使用的a、n是int数据类型,所以要注意不要输入超越int许可范围的数字,否则,会得到不确定的结果(C语言并没有规定int是多少字节,也没规定超越范围时怎么裁剪为适合的值,这些是编译器的自由领域,不同编译器有不同的处理办法,不要想当然一定是这样或那样,总之要警戒这种错误发生)。这就是你那个结果的原因。

知道以上问题的可能性,就可以进入下面的步骤了。for循环,无非是起始条件、终止条件、循环动作,你的for没有起始条件,但有终止条件。那么你要把自己当作是计算机,你在执行程序,这很重要!终止条件要检测是否k!=0,那么,第一次进入for时,k是多少呢?然后它将是多少?最终又应该是多少?根据初始条件,能进入这个循环吗?根据循环中的代码,会出现终止的条件吗?这些问题,都要在代码中寻找、要明确,带着这些问题进入循环体中,检查代码,得到全部答案为止。最基本的办法,是假定自己输入的a、n分别是多少,一步一步把整个循环执行一遍,确信得到正确的结果;然后改变一下a、n的值,再执行一次;再试另外很明显差异的数据。三五次之后,程序的正确性基本得到保障了,才完成这个循环的审查。

在审查的过程,随时提醒自己在做什么题目、希望得到怎样的结果、是否确实得到了希望的东西。比如,你要s=a+aa+aaa+……,第一次得到a了吗?第二次得到aa了吗?得到的东西给s了吗?如何知道真的是a、aa、aaa?把数据打印出来看看。验证、验证、再验证。任何简单的程序,都不是看起来那么简单,步进式检查,确保到目前为止是对的,再进行下面的编码,不要一气把程序写完,随时把握程序的动向,一定要非常非常清楚程序在任何时候、在什么情景中将会做什么、在做什么。

写程序的一个基本观点是,你的程序面对的是任何情况都可能发生的环境,假设越少,程序越强壮。不要想当然用scanf()接受输入时用户会按照你的知识体系行事,检查除数不能为零是你程序的责任,不是用户的责任,他什么数据都敢往里灌,程序抗不抗得住是你程序员的本事。因此,程序员写程序时必须要能够变换角色,把自己转换为用户,亲自使用一下自己的产品,看有什么问题,须知,最终用户比你还要严格、变态得多,如果你自己都不能过关,就不要幻想用户那关能过,被退货打回头是迟早的事,与其如此,宁愿迟交货也不要被回炉,交货迟了可以解释为精益求精,但经常被退货则被视为办事不牢,感观是截然相反的。一个优秀的程序员(即使是求伯君那样的高手),也不保证能一次写出没有错误的程序,他们改错的时间比你想象中的多得多。

[ 本帖最后由 TonyDeng 于 2011-9-23 14:13 编辑 ]

授人以渔,不授人以鱼。
2011-09-23 13:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不要写自己也不清楚结果的代码。比如,你这个程序用到了pow()函数,估计你从什么地方看到这个函数的,但你了解它的后果吗?告诉我,pow()返回什么东西?是什么数据类型?它跟int做加法,结果是什么数据类型?你确定这些操作是完全在意图之中的?

事实上,看了你的代码,我反而搞不清楚题目到底是什么意思?

授人以渔,不授人以鱼。
2011-09-23 14:33
快速回复:新手 求S=a+aa+aaa+aaaa
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018070 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved