2014-08-13 2 views
0

Код, приведенный ниже, из учебника по программированию c. Цель состоит в том, чтобы найти среднее значение из 10 значений с плавающей запятой.Объясните пример кода (c программирование)

#include <stdio.h> 

void avg(double *d, int num); 

int main(void) 
{ 
    double nums[]={1.0,2.0,3.0,4.0,5.0, 
        6.0,7.0,8.0,9.0,10.0} 

    avg(nums,10); 

    return 0; 
} 

void avg(double *d, int num) 
{ 
    double sum; 
    int temp; 

    temp=num-1; 

    for(sum=0;temp>=0;temp--) 
     sum=sum+d[temp]; 
    printf("Average is %f", sum/(double)num); 
} 

Что происходит, когда d [Temp] используется в линии 23.

+7

Плохого стиля использовать 'сумму = 0' как инициализация (когда уже существует «temp = num - 1'). Что это за книга? – cnicutar

+3

Также использование «temp» в качестве итератора, когда вы ожидаете 'i', также итерации вниз. Это просто плохой код. – cnicutar

+4

Получить еще одна книга –

ответ

1
sum=sum+d[temp] 

Где вы обращаетесь каждый temp-й элемент массива двойного d.

Если у Вас есть 3 номер

temp=num-1; // temp =2 

for(sum=0;temp>=0;temp--) 
    sum=sum+d[temp]; 

расширится to-

sum=0+d[2]; then temp becomes 1 // you are adding 2nd element with sum 
sum=sum+d[1]; then temp becomes 0 // here you are adding with previous result // First element + sum 
sum=sum+d[0]; then temp becomes -1 // condition fails // 0th element + sum 

Это односвязный

sum=d[2]+d[1]+d[0]; 
1

d[temp] означает, чтобы получить доступ к temp-й элемент массива, на который указывает d. То есть d указывает на массив не менееtemp+1double s, и вы хотите получить temp-й из них.

+0

Это важная и часто путающая вещь. Массивы X и указатели на X взаимозаменяемы. +1 – 0xC0000022L

+0

@ 0xC0000022L нет * всегда * сменный, но * часто * сменный (из-за уклона указателя) –

+0

@DrewMcGowen: достаточно справедливо. Дело в том, что большинство новичков вообще не получают эту двойственность. – 0xC0000022L

0

В строке 23

d[temp] получит поплавка данные индекса с temp в nums массиве,

В другой перспективе d[temp] заменит с temp + 1-го элемента массива nums.

0

Вы перебираете свои nums [] - Array и в этой строке вы добавляете все значения в свою переменную. d [temp] доступ к значению элемента по временной шкале индекса.

Смежные вопросы