max2 = (long)max*max; /* преобразуваме левия операнд към long, преди изпълнението на операцията и десния ще се преобразува към long */
void main ()
{ int num, sum, status;
suma = 0;
printf( “ Въведи число или Ctrl+Z за край: “);
status = scanf ( “%d”, &num);
while (status != EOF)
{ suma+=num;
status = scanf ( “%d”, &num);
}
printf ( “Сумата на числата = %d\n”, sum);
}
Като функция scanf връща като резултат броя на символите, които са въведени или EOF, ако е въведен символ за край на файла;
12. Масиви. Низ от символи.
Масив – n-мерна наредена съвкупност от променливи от един и същи тип;
синтаксис на дефиницията
тип име [брой елементи]
‘брой елементи’ е горна граница на размерността на масива, ‘брой елементи’ е от цял тип; пример int vect[30];
обръщането към елемент от масив е със следния синтаксис:
име [индекс], където ‘име’ е името на масива, ‘индекс’ е номерът на елемента; забележка – номерацията на индексите започва от 0 и завършва в ‘брой елементи’ – 1;
Разполагане на масив в оперативната памет – отделните елементи се разполагат в последователни полета от оперативната памет, наредени по индекс, всяко поле заема толкова байтове, колкото е типа на масива;
В програмите на машинен език не се прави проверка дали индексът е в допустимите граници за даден масив; ако индексът излиза от тези граници, тогава обръщането е към полето от оперативната памет, което е непосредствено след или преди полетата на елементите на масива; Внимание: обръщането към поле, което е извън масива (чрез задаване на некоректен индекс) може да изтрие важна информация за операционната система и дори да я срине;
В езика C водещ принцип е получаването на ефективни програми, затова елементите на масива се номерират от 0, което е неудобно за потребителя;
горният масив се нарича едномерен, защото има само една размерност; масивите могат да бъдат двумерни, тримерни и т.н.;
дефиниране на двумерен масив – float mat[20][30];
достъп до елемент на двумерен масив – mat[i][j];
разполагането на масиви от всякакви размерности става линейно;
в C при двумерния масив разполагането става по редове:
mat[0][0],…,mat[0][29],mat[1][0],…,mat[1][29],…mat[19][0],…mat[19][29]
тримерен масив – double table[10][20][30];
достъп до елемент - table[i][j][k];
Принцип за разполагане на елементите на n-мерен масив в оперативната памет – индексите по-надясно се променят по-бързо от тези по-наляво;
Можем да имаме масив от char; в C няма вграден тип за низ;
char a[20]; - разглежда се като променлива от тип низ от символи; броят на символите, обаче е с едно по-малък заради нулевия байт, който стои на последно място;
Например “abc” в масив от char: a[0]= ‘a’; a[1]=’b’; a[2]=’c’; a[3]=’\0’;
13. Оператор за цикъл for.
Този оператор е най-сложният оператор за цикъл в C;
Синтаксис:
for (израз1; израз2; израз3)
оператор
Блок-схема:
Израз2
Край
Начало
false
true
Израз1
Оператор
Израз3
Операторът е тялото на цикъла; много често израз1 се използва за да се задават начални стойности на променливи, които участват в
цикъла, израз1 може да бъде пропуснат; много често в израз3 се менят променливи, израз3 също може да бъде пропуснат;
ако израз1 и израз3 са пропуснати, но израз2 го има, тогава for става while (while е частен случай на for); ако израз2 липсва, смята се че условието е изпълнено, например:
for (;;)
оператор
този синтаксис задава безкраен цикъл;
5 ноември
Примерни фрагменти:
int a[100];
int count; int sum;
for (count = 0; a[count] != 0; count++);
Тук тялото на цикъла е празният оператор; изпълнението на цикъла ще завърши, когато в масива е намерен нулев елемент (предполага се, че такъв съществува);
char ar[100];
for (count = 0; ar[count++] != ‘\0’ ; );
Изпълнението на цикъла ще завърши, когато в масива достигнем нулеви байт; след завършване на изпълнението нулевият байт ще има индекс count-1;
for (count = -1; ar[++count] != ‘\0’ ; );
След завършване на изпълнението нулевият байт ще има индекс count;
for (suma = 0, i = 0; i < 100; suma += a[i++]);
След завършване на цикъла suma ще съдържа сумата на всички елементи на масива a;
for (i = 1, suma = 1; i < 100; i++, suma += i);
След завършване на цикъла suma ще съдържа сумата на числата от
1 до 100;
Възможно е да се влагат цикли;
Програма, която извежда набор от данни по нагледен начин с мащабен множител;
#include
#include
void main ()
{ int i, j, k, m, p;
float array[25];
k = 0;
while (k==0)
{ printf (“Въведете броя на данните: “);
scanf (“%d”, &m);
if (m > 0) && (m <=25) k = 1;
else printf (“Грешен брой!\n”);
}
printf (“Въведете мащабен множител: ”);
scanf (“%d”, &p);
for ( i = 0; i < m; i++)
{ printf (“Въведете данна номер %d : “, i+1);
scanf (“%f”,&array[i]);
}
clrscr();
for ( j = 0; j < m; j++)
{ printf (“%.10f |”, array[j]);
for (i = 0; i < array[j]/p; i++)
printf(“*”);
printf(“\n”);
}
}
Фрагмент от програма, който отпечатва стойностите на масив, който не трябва да се променя ако сменим размерността на масива;
int a[15], i;
for ( i = 0; i < sizeof(a)/sizeof(int); i++)
printf(“a[%d]=%d\n”, i, a[i]);
14. Оператор за избор на вариант switch. Оператори break, goto, continue.
Оператор break – оператор за прекъсване на цикли; може да бъде използван на произволно място в тялото на един цикъл; изпълнението на break предизвиква излизане от цикъла и предаване на управлението на оператора, записан непосредствено след цикъла; след изпълнението на break, стойностите на променливите, които са участвали в цикъла не се променят;
Пример:
#include
void main ()
{ int i, j, r, symbol;
printf (“Въведете символа: “);
symbol = getchar();
r = getchar();
printf (“Въведете текста: “);
j = 0; i = 1;
while ( ( r = getchar () ) != ‘*’ )
if (r == symbol)
{ j = 1; break; }
else i++;
if (j =1) printf (“Символът %c е на позиция %d.\n”, symbol, i)
else printf (“Символът %c не е открит!”);
}
Оператор continue – може да се разположи на произволно място в тялото на един цикъл; операторът continue завършва изпълнението на текущата итерация на цикъла; изпълнението на цикъла продължава по стандартния начин определен от дефиницията на цикъла;
Пример:
#include
void main ()
{ int a[10], i;
for (i = 0; i < 10; i++)
{ printf ( “Въведете a[%d] = “, i+1);
scanf (“%d”, &a[i]);
}
printf (“Индекси на четните числа в масива:\n”);
for ( i = 0; i < 10; i++)
{ if (a[i] % 2 != 0) continue;
printf(“%d “, i);
}
}
Сподели с приятели: