标题:C primer plus 中文版P150第13题不会,看了网上的答案觉得应该不是这样,是 ...
取消只看楼主
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
结帖率:100%
已结贴  问题点数:10 回复次数:5 
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
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
得分:0 
回复 2楼 linlulu001
知道怎么做吗?还有怎么实现用一个循环输出两个数组的数据,且第一行为第一个数组的数值,第二行为第二个数组的数值
2016-09-19 23:36
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
BCCN_cuser
Rank: 1
等 级:新手上路
帖 子:31
专家分:1
注 册:2016-6-28
得分:0 
回复 10楼 xzlxzlxzl

这就是我想要的。
2016-09-21 19:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-468961-1-1.html




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

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