Язык программирования Си


         

Хрестоматия по программированию на Си в Unix- часть 6


- 6 - Си в UNIX

Ответ:

/* Треугольник из звездочек */ #include <stdio.h>

/* Печать n символов c */ printn(c, n){ while( --n >= 0 ) putchar(c); }

int lines = 10; /* число строк треугольника */ void main(argc, argv) char *argv[]; { register int nline; /* номер строки */ register int naster; /* количество звездочек в строке */ register int i;

if( argc > 1 ) lines = atoi( argv[1] );

for( nline=0; nline < lines ; nline++ ){ naster = 1 + 2 * nline;

/* лидирующие пробелы */ printn(' ', lines-1 - nline);

/* звездочки */ printn('*', naster);

/* перевод строки */ putchar( '\n' ); } exit(0); /* завершение программы */ }

1.12. В чем состоит ошибка?

main(){ /* печать фразы 10 раз */ int i; while(i < 10){ printf("%d-ый раз\n", i+1); i++; } }

Ответ: автоматическая переменная i не была проинициализирована и содержит не 0, а какое-то произвольное значение. Цикл может выполниться не 10, а любое число раз (в том числе и 0 по случайности). Не забывайте инициализировать переменные, возьмите описание с инициализацией за правило!

int i = 0;

Если бы переменная i была статической, она бы имела начальное значение 0. В данном примере было бы еще лучше использовать цикл for, в котором все операции над индексом цикла собраны в одном месте - в заголовке цикла:

for(i=0; i < 10; i++) printf(...);




Содержание  Назад  Вперед