| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1854 人关注过本帖
标题:几道对你们来说简单的c语言程序题,请帮忙看看,谢谢各位朋友们~
只看楼主 加入收藏
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
几道对你们来说简单的c语言程序题,请帮忙看看,谢谢各位朋友们~
第一道:计算1-1/2+1/3-1/4+…+1/n的和,在主函数输入n,计算输出结果。
#include<stdio.h>
main()
{int n,i;
int c=1;
float b=0.0,a;
scanf("%d",&n);
for(i=1;i<=n;i++)
   
    {    a=c*(1/i);
         b=b+a;
         c=c*(-1);
    }
printf("%f",b);
fflush(stdin);
getchar();

输出永远是1.000000,不知道为啥。

2.完数的判断(完数是一个数的所有因子除了它本身和为该数本身,如6=1+2+3就是完数)
#include<stdio.h>
main()
{int a=0,n,b,i;
scanf("&d",&n);
for(i=1;i<n;i++)
{
    if(n%i= =0)
         {
         b=i;
            a=a+b;
         }
}
if (a==n)
printf("yes");
else
printf("no");
fflush(stdin);
getchar();
 }
输出永远都是no,这是为啥呢?
搜索更多相关主题的帖子: c语言程序 include 朋友 
2016-07-05 18:54
hcs_xiaohan
Rank: 2
等 级:论坛游民
帖 子:40
专家分:23
注 册:2016-7-4
收藏
得分:5 
第一题数据丢丢失,把 a=c*(1/i); 换成 a=c*(1./i);就可以了
2016-07-05 19:07
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:10 
第一题将所有的int改成float,要不然就要强制转换成float来计算,记住scanf的输入格式要改下。
第二题scanf("&d",&n);改成scanf("%d",&n); if(n%i==0)"=="中间最好不要有空格。


[此贴子已经被作者于2016-7-5 19:11编辑过]

2016-07-05 19:10
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
回复 3楼 linlulu001
恩恩。好的,还有一点,第一题 我将那个1/i改成了1.0/i然后就可以运行了,这是为什么啊?
2016-07-05 19:27
hcs_xiaohan
Rank: 2
等 级:论坛游民
帖 子:40
专家分:23
注 册:2016-7-4
收藏
得分:0 
回复 4楼 FATALIZM
你不用换成1.0 换成“1.”也可以,不信试试看,加一个点是为了避免整除问题
2016-07-05 19:32
低调低调
Rank: 3Rank: 3
来 自:四川省成都市
等 级:论坛游侠
威 望:1
帖 子:66
专家分:103
注 册:2016-6-23
收藏
得分:5 
因为数据类型输出转换不对,就比如说10/3=3.33333333但是当我们定义两个变量来计算之后结果会改变的,如下:
int a,b;
scanf("%d %d",&a,&b);
printf("%d",a/b);
你觉的输出的值是多少呢?输出的值只有3,因为我们定义了两个整数型的变量来用于计算,那么最后我们计算出来的数值也会自动强制转换为整数型的,而不是一个浮点型的!为了避免这样的情况出现,我们在用程序表达一个除法或者四则运算时,都会将其中一个数值改为float类型的数值,不然就只能在最后进行一个数值的强制转换,或者丢失掉一部分数值!

至于第二题上面已经有大大给你解释过了,我就不再这里献丑了!
2016-07-05 19:39
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
1是整型,1.0是浮点型,默认情况下低级自动向高级转化,所以1.0/i转化为浮点型。
1/i那就是整型,它不会自动转化,所以除了第一次让a=1.后面所有的a都是0,
所以才会出现输出永远是1.000000。
2016-07-05 20:03
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
回复 7楼 linlulu001
恩恩,明白了,谢谢啦
2016-07-06 19:46
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
还有一个问题,自己定义一个函数,将数组里小于5的数字变成-1输出,其他的保持原样不变,请大家看看这个程序对吗?拜托了拜托了



#include<stdio.h>
void ccc(int array_b[10])
{ int i;
    for(i=0;i<10;i++)
        {
          if(array_b[i]<=5)
             array_b[i]=-1;
        }
}
 main()
 { int array_a[10]={1,2,5,-2,7,10,11,-6,4,-9},i;
    for(i=0;i<10;i++)
         printf("%d",array_a[i]);
    ccc(array_a);
    for(i=0;i<10;i++)
        printf("%d",array_b[i]);
 
 fflush(stdin);
 
 getchar();
  }
2016-07-06 19:52
FATALIZM
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2016-6-28
收藏
得分:0 
回复 9楼 FATALIZM
不对不对应该是这样对吗
#include<stdio.h>
void ccc(int array_b[10])
{ int i;
    for(i=0;i<10;i++)
        {
          if(array_b[i]<=5)
             array_b[i]=-1;
        }
}
 main()
 { int array_a[10]={1,2,5,-2,7,10,11,-6,4,-9},i;
    for(i=0;i<10;i++)
         printf("%d",array_a[i]);
    ccc(array_a);
    for(i=0;i<10;i++)
        printf("%d",array_a[i]);
 
 fflush(stdin);
 
 getchar();
  }
2016-07-06 19:55
快速回复:几道对你们来说简单的c语言程序题,请帮忙看看,谢谢各位朋友们~
数据加载中...
 
   



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

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