| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1941 人关注过本帖
标题:C primer plus 中文版P150第13题不会,看了网上的答案觉得应该不是这样,是 ...
只看楼主 加入收藏
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:10 
C primer plus 中文版P150第13题不会,看了网上的答案觉得应该不是这样,是否我理解错了
题目:
13.编写一个程序,创建两个8元素的double数组,使用一个循环来让用户键入第一个数组的8个元素的值。程序把第二个数组的元素设置为第一个数组元素的累积和。例如,第二个数组的第4个元素应该等于第一个数组的前4个元素的和,第二个数组的第5个元素应该等于第一个数组的前5个元素的和(使用嵌套循环可以做到这一点。不过利用第二个数组的第5个元素等于第二个数组的第4个元素加上第一个数组的第5个元素这一事实,可以避免嵌套而只使用单个循环来完成这个任务)。最后,使用一个循环来显示两个数组中的内容,第一个数组在一行中显示,而第二个数组中的每个元素在第一个数组的对应元素之下进行显示。

个人的主要疑问是怎么利用一个循环,来对第一个数组赋值(输入数值)且对第二个数组赋值(感觉这么也要用两个循环)?问题2、如何使用一个循环来显示两个数组中的内容。(个人的想法应该是:输出第一个数组的数组,换行,输出第二个数组的数组。然后用特殊符号,跳到第一个数组数组之后,输出第一个数组的第二个数值,循环下去,但不懂用什么符号可以上跳到上一行的)

网上的代码是这样的,感觉不符合题目要求,用单个循环来完成这个任务,用一个循环来显示两个数组的内容。
程序代码:
#include<stdio.h>

int main(void)
{

 double num[8],sum[8];

 int i,j;

 printf("Enter 8 numbers:");

 for(i=0;i<8;i++)

 {
  scanf("%lf",&num[i]);
  for(j=0,sum[i]=0;j<=i;j++)
   sum[i] += num[j];

 }

 for(i=0;i<8;i++)
  printf("%8.3lf",num[i]);

 printf("\n");

 for(i=0;i<8;i++)
  printf("%8.3lf",sum[i]);

 printf("\n");

 return 0;
}


搜索更多相关主题的帖子: double 中文版 网上 用户 
2016-09-19 23:09
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
for(i=0;i<8;i++)        //第一重循环
 {
  scanf("%lf",&num[i]);
  for(j=0,sum[i]=0;j<=i;j++)       // 第二重循环
   sum[i] += num[j];
 }                        //所以是双循环

你直接将这段用注释说明为什么用单循环而不双循环不就结了。看了半天才看懂你想问什么。

[此贴子已经被作者于2016-9-19 23:27编辑过]

2016-09-19 23:23
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
收藏
得分:0 
回复 2楼 linlulu001
知道怎么做吗?还有怎么实现用一个循环输出两个数组的数据,且第一行为第一个数组的数值,第二行为第二个数组的数值
2016-09-19 23:36
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 
for(i=0;i<8;i++)
  printf("%-8.3lf%-8.3lf",num[i],sum[i]);
2016-09-19 23:58
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
你要搞清楚一件事,我们面对的那个黑框框打印光标是只能向右、向下(换行)移动。没有能够向上跳转的功能。所以你说的

做一个循环先输出数组一的一个元素跳到下一行输出数组二的再跳回上一行、、、不好意思,没这功能。(用堆栈等技巧倒是可以实现,BUT没半毛钱意义)

不要纠结你写了多少个循环,关键是如果你用了技巧能令计算机少执行一行语句一个步骤那还好,如果不能,我建议你还是放弃技巧。因为代码是要写给人看的,少点技巧,别人理解的时候也会快点容易点。

最后,使用一个循环来显示两个数组中的内容,第一个数组在一行中显示,而第二个数组中的每个元素在第一个数组的对应元素之下进行显示。
用指针违规操作可以实现,但是不安全,是个“未定义的行为”。旁门左道
图片附件: 游客没有浏览图片的权限,请 登录注册

不好意思,截图没完整。
程序代码:
#include<stdio.h>
double num[8];
double sum[8];

void print(int i){
    if(i<8){
        printf("%8.3lf ",num[i]);
        print(i+1);       

        printf("%8.4lf ",sum[7-i]);
    }else printf("\n");
}


int main(void)

 {
    int i,j;
  printf("Enter 8 numbers:\n");
    printf("num[0]%p,num[7]=%p,sum[0]=%p,sum[7]=%p\n",num,&num[7],sum,&sum[7]);
    printf("通过观察可知,此时恰好num,sum数组地址是连在一起的,所以可以越界访问输出。\n");
    printf("这个巧合跟我们声明变量的时机有联系,但没人可以保证他一定在任何情况下都是这样的。\n") ;
   

   

   

  for(i=0;i<8;i++)
  {
//   scanf("%lf",&num[i]);
    num[i]=i+1;
   if(i==0)
    sum[i]= num[i];
    else
    sum[i]=sum[i-1]+num[i];
  }
    for(double*p=num;p!=&sum[8];++p){
        if(p==&num[8])printf("\n");
        printf("%8.3lf",*p);
    }

 


 

//  print(0);
  return 0;

 } 




[此贴子已经被作者于2016-9-20 11:39编辑过]


φ(゜▽゜*)♪
2016-09-20 09:57
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1744
专家分:3216
注 册:2015-12-2
收藏
得分:10 
回复 楼主 BCCN_cuser
以下代码供参考
#include<stdio.h>

int main(void)
 {
  double num[8],sum[8];
  int i,j;
  printf("Enter 8 numbers:\n");
  for(i=0;i<8;i++)
  {
   scanf("%lf",&num[i]);
   if(i==0)
    sum[i]= num[i];
    else
    sum[i]=sum[i-1]+num[i];
  }
  for(i=0;i<8;i++)
   printf("%8.3lf",num[i]);
  printf("\n");
  for(i=0;i<8;i++)
   printf("%8.3lf",sum[i]);
  printf("\n");
  return 0;
 }
2016-09-20 10:44
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
收藏
得分:0 
回复 6楼 ehszt
今天看到第七章才知道可以用分支语句实现。在第六章的习题实在不懂如何操作。多谢了。
但是后面那个输出没有达到题目的要求。不懂为什么题要这么要求。


[此贴子已经被作者于2016-9-21 00:28编辑过]

2016-09-21 00:15
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
收藏
得分:0 
回复 5楼 书生牛犊
里面好多东西看不懂,还在努力看书。。

#include<stdio.h>
double num[8];//这个是在声明数组变量?为什么不是在主函数内的?
double sum[8];//这个是在声明数组变量?为什么不是在主函数内的?

void print(int i){
    if(i<8){
        printf("%8.3lf ",num[i]);
        print(i+1);   //这个是起到什么作用,返回一个printf(i+1)的数值吗?   

        printf("%8.4lf ",sum[7-i]);
    }else printf("\n");//看不懂为什么能起到一行输出第一个数组,第二行输出第二个数组的作用  
}


int main(void)
 {
    int i,j;
  printf("Enter 8 numbers:\n");
    printf("num[0]%p,num[7]=%p,sum[0]=%p,sum[7]=%p\n",num,&num[7],sum,&sum[7]);//是什么东西,主要作用是什么?  
    printf("通过观察可知,此时恰好num,sum数组地址是连在一起的,所以可以越界访问输出。\n");
    printf("这个巧合跟我们声明变量的时机有联系,但没人可以保证他一定在任何情况下都是这样的。\n") ;
   

   

   

  for(i=0;i<8;i++)
  {
//   scanf("%lf",&num[i]);
    num[i]=i+1;
   if(i==0)
    sum[i]= num[i];
    else
    sum[i]=sum[i-1]+num[i];
  }
    for(double*p=num;p!=&sum[8];++p){//指针吗?还没学到,压力。。。
        if(p==&num[8])printf("\n");
        printf("%8.3lf",*p);
    }
 

 

//  print(0);
  return 0;
 }
2016-09-21 00:24
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
收藏
得分:0 
回复 4楼 linlulu001
printf("%-8.3lf%-8.3lf",num[i],sum[i]); //这段起不到一行输出第一个数组数值,第二行输出第二个数组数值的作用啊。
2016-09-21 00:26
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:0 
看这个代码符合你要求不
程序代码:
#include <stdio.h>
void main()
{
    double num[8],sum[8],s;
    int i;
    printf("Enter 8 numbers:\n");
    for(i=0,s=0;i<8;i++)
    {
        scanf("%lf",&num[i]);
        s+=num[i];
        sum[i]=s;
    }
    for(i=0;i<16;i++)
    {
        if(i==8)printf("\n");
        if(i<8)printf("%8.3lf",num[i]);
        else printf("%8.3lf",sum[i-8]);
    }
}
2016-09-21 00:50
快速回复:C primer plus 中文版P150第13题不会,看了网上的答案觉得应该不是这样 ...
数据加载中...
 
   



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

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