Чем обеспечивается надежность программ написанных на языке си

Дается формальное изложение всех конструкций языка программирования C. Материал проиллюстрирован примерами и задачами.

Список вопросов:

  • # Чем обеспечивается надежность программ, написанных на языке Си?
  • # Где, когда и кем был создан язык Си?
  • # Можно ли на языке Си написать компилятор с языка Си при условии, что в наличии уже имеется другой компилятор с языка Си?
  • # Какого типа язык Си?
  • # Есть ли у языка Си собственный редактор?
  • # Чем определяется мобильность языка Си?
  • # Укажите ошибки и несоответствия стандартам ANSI C в следующем фрагменте: include studio.h void main ()
  • # Что было бы напечатано, если бы данные операторы являлись частью полной программы? int n; n=5; printf(«%d+%d=%d», n, n, n+n);
  • # Что будет напечатано? printf(«Что ?n мешает/n вам работать n»);
  • # Будет ли работать программа и если нет — в чем ошибки? #include int main()
  • # Укажите строки, не содержащие ошибок синтаксиса:
  • # Каким символом должен заканчиваться оператор?
  • # Какие символы могут использоваться для комментариев?
  • # Какие имена правильно написаны на языке Си?
  • # Какие имена переменных правильно написаны на языке Си?
  • # Какие классы памяти бывают?
  • # Для чего используется регистровая память?
  • # К каким переменным неприменима операция получения адреса . Какой вариант макроопределения приведет к ответу 9 в результате вызова x = NEW(j
  • # В чем опасность применения макрофункций?
  • # Как определить символьную константу DOG директивой #define?
  • # Где может появиться директива #define?
  • # Что лучше использовать: макроопределение или функцию?
  • # Каково назначение препроцессора?
  • # Где имеет силу даваемое определение директивы #define?
  • # Где может находиться программная строка #include?
  • # Из каких стадий состоит препроцессорная обработка?
  • # Какие утверждения верны?
  • # Как задается пустая директива?
  • # Каковы действия обработки директив препроцессора?
  • # Какие массивы можно инициализировать?
  • # Как получить адрес переменной?
  • # Какие операции можно применять для переменных типа указатель?
  • # Какие способы инициализации массива внутри функции правильны?
  • # Как получить значение, ссылаясь на указатель?
  • # Какие операции нельзя применять для переменных типа указатель?
  • # Какие способы инициализации неправильны?
  • # Пусть описан массив int a[ ]. Можно ли обращаться к массиву только по имени, без указания индекса?
  • # Пусть есть двумерный массив. Какой адрес записан верно?
  • # Могут ли быть элементы массива функциями?
  • # Что возвращает оператор sizeof?
  • # Какого типа могут быть элементы массива?
  • # Что означает функция malloc?
  • # Какая связь существует между указателями и массивами?
  • # Какое утверждение относительно указателя верно?
  • # Функция calloc:
  • # Что понимают в языке Си под строками?
  • # Как создать строковую константу?
  • # Какой функцией можно прочитать строку из входного потока?
  • # Какая функция возвращает длину строки?
  • # Как инициализировать внутри блока массив «Nina»?
  • # Какой функцией можно записать строку в стандартный поток вывода stdout?
  • # Какой файл нужно включить в программу для обработки строк?
  • # Какая функция может сцепить две строки?
  • # Какой функцией можно прочитать строку из стандартного файла stdin?
  • # Как можно скопировать строку s2 в строку s1?
  • # Как сохраняются в памяти строковые константы?
  • # Как сообщить компилятору размер массива символьных строк?
  • # Как можно найти в строке первое вхождение определенного символа?
  • # В какой памяти хранится строковая константа?
  • # Какой заголовочный файл содержит данные о строках?
  • # Как можно найти в строке последнее вхождение определенного символа?
  • # Что является указателем на хранящуюся в памяти строковую константу?
  • # Какую функцию нужно использовать чтобы присоединить к одной строке заданное количество символов от другой строки?
  • # Какой функцией можно выделить из строки лексемы, разделенные любым из множества символов, входящих во вторую заданную строку?
  • # Как обратиться к полям структуры student?
  • # Как объявить указатель на структуру?
  • # Как обратиться к элементу массива структур?
  • # Как передать в функцию f указатель на структуру healt_record?
  • # Как обратиться к элементу структуры при помощи указателя?
  • # Какое служебное слово у объединения?
  • # Для чего используется спецификатор typedef?
  • # Какие данные объединяет структура?
  • # Чем отличается typedef от #define?
  • # Чем отличается структура от массива?
  • # Для чего используются поля битов в структуре?
  • # Что называется переменной структурой?
  • # Может ли функция входить в структуру?
  • # Каково назначение функции fseek( )?
  • # Каково назначение потоковой функции fwrite( )?
  • # Какие функции объявлены в ?
  • # Какие функции объявляются в заголовке ?
  • # Что понимается под буферизацией?
  • # Какие функции объявляются в заголовке ?
  • # При построении целочисленной матрицы А(15х15) из какого файла берется функция clrscr( )?
  • # Как еще можно инициализировать целые n, x, y, k при построении матрицы А(15х15)?
  • # Можно ли создать список, все поля которого являются указателями?
  • # На что проверяется условие в цикле while(ch!=EOF)?
  • # Может ли struct List при создании списка иметь поле int mas[15 ][15]?
  • # Что понимается под модульным программированием?
  • # Что называется меткой?
  • # Что понимается под простым типом?
  • # Что понимается под основным циклом?
  • # Что понимают под термином «язык»?
  • # Что понимаем под линейной программой?
  • # Каким типом будете пользоваться для хранения и обработки данных о количестве жителей Новосибирска?
  • # Какой вариант синтаксически правильный?
  • # Каким типом будете пользоваться для хранения и обработки данных о количестве членов вашей семьи?
  • # Укажите неправильные варианты
  • # Какой тип наиболее подойдет для хранения и обработки данных о количестве жителей Москвы?
  • # Если значение превышает наибольшее машинное целое со знаком, то оно представляется
  • # Какие из значений констант написаны верно?
  • # Слово является естественным элементом памяти ЭВМ, какие размеры слов могут использоваться в различных типах ЭВМ?
  • # Как можно представить данные при вычислении с двойной точностью?
  • # В какой поток помещается результат работы препроцессора?
  • # Что понимают в языке Си под символьной строкой?
  • # Директиву #define можно использовать для определения символьных и строковых констант, какое использование верно?
  • # Какие управляющие символьные константы описаны верно?
  • # Какой символ продолжает макроопределение на вторую строку?
  • # Что такое операнд в языке Си?
  • # Каковы значения целых x и y в выражении y=3+2*(x=7/2);?
  • # Каково значение целой переменной x=(12+6)/2*3?
  • # Каково значение int x после выполнения выражения x=(int)3.8+3.3;?
  • # Какова последовательность выполнения операций: * (умножение), /,%?
  • # Каково значение целых переменных x и y после выполнения y=x=(2+3)/4;?
  • # Каково значение x после выполнения оператор-выражений x=0; x++;?
  • # Какая из операций написана неверно?
  • # Что будет выведено на печать в результате работы оператора printf(«%d»,100+65)?
  • # Над какими типами возможна унарная операция ++?
  • # Для чего используется унарная операция минус?
  • # Как округляется результат деления целых чисел?
  • # Над какими типами возможна унарная операция — ?
  • # Что понимается под усечением в языке Си?
  • # Каков порядок вычисления операндов операции сравнения?
  • # Есть ли ошибка в записи printf(«%2.2e то же самое, что и %2.2fn», 1201.0, 1201.0)?
  • # Что такое выражение в языке Си?
  • # Как сформировать составной оператор?
  • # Есть ли ошибка в фрагменте программы: char name[30] =»Интернет-Университет»; printf(«%c Информационных Технологийn», name);
  • # Что такое операнд?
  • # Как формируется оператор while?
  • # Есть ли ошибки в фрагменте программы: int age; scanf(«%f», age);?
  • # Как вычисляется значение выражения?
  • # Как вычисляются выражения со смешанными типами данных?
  • # Что называется простейшим выражением?
  • # Для чего используется функция printf( )?
  • # Как можно напечатать данные таблицей?
  • # Что называется составным оператором?
  • # В каких случаях используется составной оператор?
  • # Что называется блоком в языке Си?
  • # Входят ли функции printf() и scanf() в стандартную библиотеку языка Си?
  • # Зачем применяют отступы от поля в строках?
  • # Будут ли преобразованы операнды, и если — да, то к какому типу, во фрагменте программы:
  • # Задан ряд имен типов: int, double, float, char, short, long. Как правильно составить последовательность имен типов, упорядоченных от высшего типа к низшему?
  • # Какие типы могут быть явно преобразованы в тип void?
  • # Дано описание int i;. Верен ли синтаксически фрагмент выражения (char)i, и что означает запись?
  • # Что делает применение ключевого слова unsigned c рангом соответствующего типа данных со знаком?
  • # Почему понижение типа может привести к затруднениям?
  • # Зачем нужны преобразования типов?
  • # Какой процесс называется повышением типа?
  • # При вычислении выражения со смешанными типами данных с помощью автоматического преобразования и явного преобразования типов могут ли быть разные результаты?
  • # В какой тип может быть неявно преобразован char?
  • # К какому типу преобразуется операнд арифметического выражения, если хотя бы один из операндов имеет тип double?
  • # Каким образом может быть преобразовано выражение E явно?
  • # В какой тип может быть неявно преобразован int?
  • # К какому типу преобразуется операнд арифметического выражения, если хотя бы один из операндов имеет тип long?
  • # В какой тип можно преобразовать тип void ?
  • # В какой тип может быть неявно преобразован double?
  • # К какому типу преобразуется операнд арифметического выражения, если хотя бы один из операндов имеет тип unsigned?
  • # Предположим , что даны следующие определения и описания int i; char *pc, *name; char *my_calloc( ), *my_strcpy( ); Какие явные преобразования будут верны?
  • # Что делает функция getchar( )?
  • # Какое из выражений правильное?
  • # Какая из приведенных команд позволит направить данные из файла words программе get_put так, как будто они были введены в интерактивном режиме?
  • # Что делает функция putchar(ch)?
  • # Что произойдет в результате выполнения оператора putchar(‘07’);?
  • # Есть программа, которая подсчитывает число символов в файле, выполняемый код помещен в файле с именем count. Какая из команд будет производить подсчет числа символов в файле essay, а результат будет помещен в файл essayct?
  • # Что такое EOF?
  • # Что не произойдет в результате выполнения оператора putchar(‘H’);?
  • # Отметьте правильные утверждения о символе EOF
  • # Отметьте правильные утверждения, касающиеся EOF
  • # Входит ли ‘n’ в число символов в строке?
  • # Что понимается под вводом-выводом?
  • # Что называется стандартным вводом?
  • # Что является файлом в языке Си?
  • # Отметьте ложные выражения
  • # Значение number лежит между 2 и 8, но не равно 5, где записано правильно?
  • # Дан фрагмент программы: switch(letter) < case ‘a’: printf(«Отпусти свой ум. n»); break; case ‘e’: printf(«Наблюдайте за вашим телом, если хотите, чтобы ваш ум работал правильно.n»); break; case ‘c’: printf(«Мудрость не скажет того, что противно природе.n»); break; case ‘n’: printf(» Удача — это постоянная готовность использовать шанс.n»);break; default: printf(«Юмор — это спасательный круг на волнах жизни.n»); >Что будет напечатано, если letter примет значение ‘a’?
  • # Определить, какие выражения ложны: ‘a’ > ‘c’ 100>3 ‘a’>’c’ !(100 > 3) !(101 >= 99)
  • # Значение переменной сh не равно символам q и k. Какие выражения записаны неверно?
  • # Какое значение lеtter нужно задать, чтобы напечатать «Наблюдайте за вашим телом, если хотите, чтобы ваш ум работал правильно»? switch(letter)
  • # Значение number равно или больше 2, но меньше 11, где записано правильное логическое утверждение?
  • # Значение number не лежит между 3 и 6. Какое выражение возвращает истину?
  • # Какое значение нужно задать letter, чтобы напечатать фразу: «Юмор — это спасательный круг на волнах жизни»? switch(letter)
  • # Где используется default?
  • # Какие формы управления процессом выполнения программ должен обеспечивать язык программирования?
  • # Что такое истина в языке Си?
  • # Где используется case?
  • # Что позволяет выбрать простая форма оператора if?
  • # Что такое значение ложь в языке Си?
  • # Можно ли написать оператор switch без оператора break?
  • # Найти правильные значения переменной: int i=2; i +=5; i*=10; i-=6; i/=8; i%=3;
  • # Пусть int n=3;, какой цикл выведет на печать цифры?
  • # Дан фрагмент программы: switch(i) < case 1: printf(«Попытаемся проанализировать, что сейчас происходит: n»); break; case 2: printf(«расчистка площади под что-то новое в экономике, n»); break; case 3: printf(«где могут проклюнуться ростки этого нового, n»); break; case 4: printf(«или это разрушение, n»);break; default: printf(«болото, и ничего больше?. n»); >Что будет напечатано, если i примет значение 1?
  • # Что будет получено на выходе в результате работы следующего цикла for(int value = 36; value > 0; value /= 2) printf(«%3d»,value)
  • # Выберите правильные фрагменты кода
  • # Что будет напечатано, если i примет значение 3 и будет убран оператор break в операторе case 3:? switch(i)
  • # Правильна ли спецификация цикла for: for(int i=0, i <=10,i++);
  • # Пусть int n=0;, какой цикл написан синтаксически правильно?
  • # Какое значение нужно задать i, чтобы напечатать фразу «болото, и ничего больше?» ? switch(i)
  • # Что является характерными чертами структурного программирования?
  • # Каким циклом является цикл do?
  • # Для чего в цикле for можно использовать «запятую»?
  • # Какие виды циклов существуют в языке Си?
  • # Какие циклы называются вложенными циклами?
  • # Каким циклом является цикл while ?
  • # Отметьте управляющие операторы:
  • # Требуется напечатать всю таблицу расширенного ASCII (символы с кодами 1-255 включительно). Какой из примеров справится с этой задачей?
  • # Какой из приведенных циклов не выполнится ни разу?
  • # Какое значение будет иметь переменная i после выполнения следующего цикла: char i=0; while (i < 255) printf(«Current value: %dn», i++)
  • # Укажите правильный вариант функции, возвращающей сумму двух чисел:
  • # Какое различие между формальными и фактическими аргументами функций?
  • # Зачем используют оператор return?
  • # Укажите правильный вариант функции, возвращающей сумму двух вещественных чисел:
  • # Укажите правильное объявление функции с двумя аргументами:
  • # Зачем используют оператор return( )?
  • # Как передавать функции информацию?
  • # Где необходимо описывать локальные переменные в функции?
  • # Может ли функция не иметь аргументов?
  • # Почему мы пользуемся функциями?
  • # Все ли функции могут быть рекурсивными?
  • # Может ли функция содержать более одного оператора return?
  • # В качестве результата может ли функция возвращать массив или функцию? (Отметьте все верные утверждения.)
  • # Где должно быть помещено описание функции?
  • # Отметьте верное утверждение:
  • # Чем должно завершаться определение функции, возвращающей значение?
  • # Может ли быть в описании функции не указан класс памяти?
Читайте также:
Как запустить программу с диска

Источник: vtone.ru

Язык Си — 01. Зачем сегодня учить Си.

Обязательно ли изучение языков программирования Си С++?

Достоинства языка Си.

Особое значение придается гибкости. Язык Си компактен, является относительно маленьким языком программирования. Ввод-вывод не считается частью языка Си, а определяется стандартной библиотекой. Вседозволенность в языке Си является следствием желания как можно больше расширить область его применения.

Язык Си удалось сделать относительно маленьким языком программирования за счет того, что в его состав не были включены ввод-вывод и средства для работы со строками. Язык Си был задуман настолько гибким, что эти возможности могли быть реализованы в каждом конкретном случае наиболее удачным образом. Практический опыт использования языка Си показал правильность такого подхода. Большая часть операционной системы UNIX и все утилиты этой операционной системы, включая и несколько трансляторов с языка Паскаль, реализованы на языке Си. Язык программирования является языком программирования с сильной типизацией, если:

  • каждый объект в этом языке программирования принадлежит точно одному из существующих в этом языке программирования типу данных;
  • преобразование типов осуществляется только путем преобразования значения из одного типа в другой;
  • преобразование типов не производится путем трактовки представления значения как данных различных типов.

02.05.2014 8.97 Mб 64 Харви Дейтел, Пол Дейтел. Как программировать на С++ [DjVu].djvu

02.05.2014 905.43 Кб 94 Шпоры по C++.rtf

02.05.2014 775.17 Кб 168 Язык программирования Си++. Лекции.DOC

Ограничение

Для продолжения скачивания необходимо пройти капчу:

Источник: studfile.net

ПАСКАЛЬ или СИ. Молоток или Кувалда

Ныне профессиональное программирование плотно ассоциируется с Си и не без оснований. Ведь не просто так на Си написаны ядра таких ОС, как Linux и Windows . Но есть и те, кто считает, что Паскаль – надёжнее и даже эффективнее. А некоторые считают, что главная проблема данного спора – совершенно различный синтаксис данных языков.

Читайте также:
Правила построения программ исследования психолого педагогической диагностики

На самом деле вопрос, что лучше, СИ или Паскаль схож с вопросом, что лучше, кувалда или молоток? Чего мы хотим от языка и компилятора?

  • Удобств, при написании исходного текста?
  • Высокоэффективного кода программы?
  • Высокой надежности программы?

Если эффективный код не требуется, то есть, в решаемой проблеме нет массированной обработки данных, а в надежности сомнений нет, то тогда лучше применять Паскаль. Но если требуется высокоэффективный код, то лучше применить Си. А такой код требуется при массированной обработке данных. При этом, в полный рост встает и проблема надежности.

Чем сложнее метод, тем труднее обеспечить надежность. Сам подход Си к написанию кода не имеет принципиальных ограничений, в отличие от Паскаля. И по этому, существует такое заблуждение, что все эти Type , Var и Record не просто так введены в язык программирования Паскаль.

Дескать, они уже исключают массу возможных ошибок, так что время, потраченное на кажущуюся бессмысленной работу, окупит себя многократно. Но это не всегда так, тем более, что настоящий программист будет пользоваться свободами языка с умом, а такие свободы есть в языке СИ. Всем известный факт, что язык программирования СИ обеспечивает лучший код, за счет его оптимизации.

А в Паскале нет никакой оптимизации. Ярые поклонники Паскаля скажут, что она там и не нужна, вроде как, компилятор просто создает уже оптимальный код. Но так ли это. Я даже больше скажу, нет ещё в мире безупречного языка программирования. И потому, что бы там не говорили, ну не может компилятор Паскаля создавать оптимальный код.

Программист более-менее высокого уровня представляет, что происходит в процессе исполнения с базовыми регистрами (селекторами), и как физически размещаются данные в памяти RAM . Глупости это все, — скажет ярый поклонник Паскаля. Не царское это дело. Я вот напишу алгоритм решения задачи, а компилятор создаст оптимальный, или около того, код. А как исполняется сей «оптимальный» код?

Читайте также:
Кто имеет право работы создание файла и их редактирование в программе арм втд

А исполняется он «камнем», процессором. А это — чрезвычайно сложное устройство конвейерного типа. Внутри сидит самая быстрая память. Она «летает» со скоростью, зависящей от тактовой частоты. Но этой памяти мало. А более медленной памяти, RAM, ее гораздо больше. И умный камень, в то время, пока команды исполняются, подгружает в быструю память команды и данные из медленной.

Это и есть конвейер. И конвейер получается тем эффективнее, чем плотнее физически размещены данные в RAM. То есть, базовые адреса текущих сегментов данных не должны резко менять свои значения. И это может сделать программист на Си.

И вполне может оказаться, и сплошь и рядом оказывается, что математически оптимальный алгоритм окажется много хуже математически неоптимального, но «заточенного» под конвейер процессора. Элементарный тест показывает, что один и тот же алгоритм при «правильном» размещении в памяти исполняется в 5-7 раз быстрее, чем при «неправильном». Манипулирование размещением данных в памяти позволяет применить принципиально новые и высокоэффективные методы обработки данных. Например, во многих случаях можно алгоритм сортировки методом «пузыря» (кстати, идеально «заточенного» под конвейер) заменить на алгоритмы группировки, то есть, неполной сортировки. При сокращении времени сортировки в сотни и тысячи раз.

Итак, о главном отличии программирования на Паскале от программирования на Си. Конечно же, код, написанный на Си — будет более эффективным, чем код, написанный на Паскале, но нельзя сказать, что на Паскале невозможно составить высокоэффективный код. Дело в том, что Си — это системный язык программирования и поэтому больше пригоден для системного уровня программирования.

Хотя задачи прикладного уровня с лёгкостью решаются с использованием Си. Паскаль же, в чистом виде, в настоящее время изучается в различных учебных заведениях и служит всего лишь только базой для более перспективных языков. Текст на Паскале, это, в основном, формальное, абстрактное представление алгоритма решения задачи.

А текст на Си может быть не просто формальным, но и аппаратно-ориентированным представлением алгоритма решения задачи. Однако, говоря о различиях Си и Паскаля, надо иметь в виду, что в любом программировании, прежде всего, важна методика построения программы. Объектно-ориентированное программирование ООП , в настоящее время, не имеет альтернативы.

В этом смысле, С++ , Object Pascal , равно, как и другие объектно-ориентированные языки программирования, являются близкими родственниками. Но, только в том случае, если программист действительно адекватно пользуется методами ООП. Ибо любую, сколь угодно сложную программу (мы не говорим о библиотеках, где, конечно все — ООП) можно реализовать, как 1-2 класса. Но это будет пародия на ООП.

Источник: cppstudio.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru