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



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

7 ноември

Оператор gotoдава възможност да се промени реда на изпълнение на операторите в програмата; не се препоръчва използването му – води до неясни програми; операторът goto е приложим в системното програмиране на C, той е доста ефективен, но се използва най-вече на ниво асемблер;

Синтаксис: goto етикет;
Тук етикет е идентификатор; той се поставя пред някой от операторите в програмата;

етикет: оператор


goto предава управлението на оператора със съответния етикет;
Пример: реализация на цикъл while чрез goto;
do

оператор


while (израз);
ET: оператор

if (израз) goto ET;


Предаването на управлението може да се извършва в рамките на една функция;

Внимание: трябва да се внимава, ако с goto се навлиза в тялото на цикъл без инициализация;


Оператор switch – оператор за избор на вариант, чрез него се избира една от няколко взаимноизключващи се алтернативи;
синтаксис (общ вид)
switch (израз-селектор)

{ case израз1:

оператори

[ break; ]

case израз2:

оператори

[ break; ]

[ default:



оператори

[ break; ]

}
switch, case, default са ключови (запазени) думи;

израз-селектор – израз от тип int;

израз1, израз2, … - константни изрази от тип int, които трябва да имат различни стойности;
Изпълнение:


  1. Пресмята се израз-селектор;

  2. Измежду израз1, израз2, ... се търси изразk, стойността на който е равна на стойността на израз-селектор; ако такова k съществува, тогава ще се изпълнят операторите с етикет изразk; ако такова k не съществува, тогава ще се изпълнят операторите с етикет default, ако default липсва, тогава нищо няма да се изпълни; ако пропуснем break, изпълнението ще продължи и през следващите оператори до достигане на break или до края на оператора; възможно е група оператори да имат няколко етикета:

case израз1:

case израз2:

case израз3:

оператори

break;
В езика C не е фиксирана последователност в която израз-селектор се сравнява с израз1, израз2, ...;

Да разгледаме следната конструкция:


if (израз-селектор == израз1)

{ оператори }

else if (израз-селектор == израз2)

{ оператори }


Тази конструкция на практика функционира като оператор switch, но тук ние знаем наредбата на сравненията; предимството на switch е по-ясната структура;
Вместо break може да се използва оператор return, с който се прекратява изпълнението на функцията или оператор exit, който завършва изпълнението на програмата; в блока на switch можем да дефинираме променливи; оператори switch могат да се влагат един в друг;
#include

#include //прототип на фукнцията exit

void main ()

{ char sys;

float r, x;

printf (“Въведете кода на фигурата: “);

sys = getchar ();

switch (sys)

{ case ‘c’:

x = 2 * 3.14 * r;

break;

case ‘s’:



x = 4 * r;

break;


case ‘t’:

x = 3 * r;

break;

default:


printf(“Грешен код!”);

exit (1);

}

printf (“Периметърът = %f\n”, x);



}
Ако програмата завърши с оператор exit, операционната система смята, че изпълнението е приключило нормално;

exit ( c ); Ако c = 1 – изпълнението е безуспешно, ако c = 0, изпълнението е успешно; вместо 0 и 1 могат да се използват макроси

EXIT_SUCCESS и EXIT_FAILURE; макросът е понятие на препроцесора; той е по-ефективен от именуваните константи, тъй като стойността му се замества от препроцесора, а не по време на изпълнение;

12 ноември

15. Форматиран изход. Функция prinf.


Форматиран изход – преобразуване на поле от оперативната памет и извеждане на полученото върху външен носител;
Функция printf
Синтаксис:

printf (“форматиращи параметри”, списък от аргументи);


форматиращи параметри – константа от тип символи; те са два вида:

    • последователност от символи, които се извеждат на екрана; графичните символи се изобразяват, а управляващите символи се изпълняват;

    • последователност от форматиращи символи, които не се извеждат, но управляват показването на съответния аргумент от списъка; в общия случай аргументите са произволни изрази;

Форматиращите параметри от втори тип имат следния синтаксис:

%[модификатор]форматна спецификация


В общия случай броят на форматиращите параметри е равен на броя на аргументите; изключение прави параметъра %%, който отпечатва %; форматиращите параметри определят очаквания тип на аргументите, те определят вида на показване на съответния аргумент;



Модификатори

Форматна спецификация

Интерпретация на аргумента

Изобразяване на аргумента

p, l

d

int, long int

цяло десетично число със знак

p, l

u

unsigned int,

unsigned long int



цяло десетично число без знак

p, l, #

o

unsigned int,

unsigned long int



осмично число

p, l, #

x (X)

unsigned int,

unsigned long int



шестнадесетично число

p, .t, l, L

f

float,

double,


long double

дробно десетично число

p, .t, l, L

e (E)

float,

double,


long double

число с мантиса и порядък

p

c

char

единичен символ

p, .t

s

указател към низ

последователност от символи




%




извежда символ %

За всяка форматна спецификация модификатор p е константно цяло число със знак; то задава минималната дължина на полето, в което ще се запише резултата; ако p<0, резултатът ще е подравнен отляво, ако p>0, резултатът ще е подравнен отдясно; p се поставя непосредствено след знака %;



Модификатор .t може да се използва при дробно-десетичните типове и при низовете от символи (t е константно цяло число); при дробно-десетичните типове той задава броя на цифрите след десетичната точка (ако е пропуснат по подразбиране е 6), а при низовете от символи – броят на символите, които ще се изведат, започвайки от началото на низа; модификатор .t се поставя непосредствено след p, или ако той липсва, непосредствено след %;
Модификатор l влияе на интерпретацията на аргумента – при d тя се променя на longint, при u – на unsigned long int; при o и x(X) – на unsigned long int, при f – на double, при е(Е) – на double; модификатор l се записва непосредствено преди форматната спецификация;
Модификатор L влияе на интерпретацията на аргумента – при f тя се променя на long double, при e(E) също се променя на long double; модификатор L се записва непосредствено преди форматната спецификация;
Модификатор # променя начина на извеждане на осмични или шестнадесетични; ако той присъства при форматна спецификация o, осмичното число се извежда с 0 отпред, ако той присъства при форматна спецификация x(X), шестнадесетичното число се извежда с 0x (0X) отпред; модификатор # се поставя непосредствено след %;
Забележка: при форматна спецификация e(E) мантисата се извежда нормализирана, а порядъкът е разделен от нея със символа e(E); тук модификатор .t се отнася за цифрите след десетичната точка на мантисата;
Внимание: при отпечатване едно дробно десетично число се закръгля, ако се отрежат цифрите му;
Внимание: ако при форматна спецификация c като аргумент се зададе променлива от тип int, на екрана се отпечатва символът, чийто ASCII код е записан в най-младшия байт на променливата;
При форматна спецификация s: името на един едномерен масив от char се разглежда като указател към първия елемент на масива; ако указател към низ е име на масив, тогава на екрана започва да се извеждат елементите на масива, започвайки от първия; извеждането продължава до попадане на нулев байт или след извеждане на t символа, ако е използван модификатор .t; константа от тип низ от символи също се разглежда като указател към началния символ на низа;
При задаване на минимален размер на полето (модификатор p), в някои компилатори се допуска използването на променлива, която се записва в списъка непосредствено преди аргумента, за който се отнася; за целта трябва на мястото на числото p да се запише символ ‘*’;
Примери: Незаетите позиции означаваме с _ ; на практика на тяхно място се изпечатват интервали;


Команда

Изобразяване

printf (“%x”, 255);

ff

printf(“%o”, 62);

76

printf(“%#o”, 62);

076

printf(“%#X”, 255);

0XFF

printf(“%d”, 336);

336

printf(“%2d”, 336);

336

printf(“%10d”, 336);

_ _ _ _ _ _ _ 336

printf(“%-10d”, 336);

336 _ _ _ _ _ _ _

printf(“%f”, 1234.56);

1234.560000

printf(“%.2f”, 1234.56);

1234.56

printf(“%3.1f”, 1234.56);

1234.6

printf(“%10.3f”, 1234.56);

_ _ 1234.560

printf(“%-10.3f”, 1234.56);

1234.560 _ _

printf(“%E”, 1234.56);

1.234560E+03

printf(“%15.7E”, 1234.56);

_ _ 1.2345600E+03

printf(“%c”, ‘A’);

A

printf(“%s”, “GOOD”);

GOOD

printf(“%.4s”, “GOOD OR BAD”);

GOOD

printf(“%8.4s”, “GOOD OR BAD”);

_ _ _ _ GOOD

printf(“%4.1f%%”, 25.9);

25.9%

int i=4; printf(“%*d”, i, 25);

_ _ 25

printf е функция от тип int (тя връща резултат от тип int); резултатът е броя на изведените символи; ако има грешка по време на извеждането, printf връща EOF;


Обобщение: printf е прекалено усложнена функция и води до удобства за потребителя, но не и до по-бързи и ефективни програми; съществуват и други по-прости функции, които са свързани с точно определен входен поток от данни; за предпочитане е потребителят да използва тях, ако може да ги приложи в съответната програма;




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




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

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