Лекции по увод в програмирането



страница8/16
Дата25.07.2016
Размер0.96 Mb.
#5224
ТипЛекции
1   ...   4   5   6   7   8   9   10   11   ...   16

31 октомври

Задача: Да се намерят максимумът и квадратът на максимума на две числа, които се въвеждат по потвърждаване;


#include

void main ()

{ int n1, n2, max, r, p;

long int max2;

do {

printf ( “Въведете първото число: “);



scanf (“%d”, &n1);

printf ( “Въведете второто число: “);

scanf (“%d”, &n2);

if (n1>=n2)

max = n1;

else max = n2;

printf ( “Max (n1, n2) = %d\n”, max);

max2 = (long)max*max; /* преобразуваме левия операнд към long, преди изпълнението на операцията и десния ще се преобразува към long */

printf ( “ Квадратът на max (n1, n2) = %ld\n”, max2);

printf (“ Ще въвеждате ли още? (y/n): “);

r = getchar(); премахване на Enter от буфера

p = getchar();

while (p==’y’ || p==’Y’);

}
Задача: Да се намери сумата на числа, въведени до символ EOF.


#include

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);

}

}






Сподели с приятели:
1   ...   4   5   6   7   8   9   10   11   ...   16




©obuch.info 2024
отнасят до администрацията

    Начална страница