Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Справочная информация. Спецификации строки формата




Компиляция С-программы

Самая простая программа на языке C выглядит так:

main(){}

 Это функция с именем main. Каждая программа должна содержать одну функцию с именем main, и работа программы начнётся с выполнения этой функции. Конечно, эта программа ничего не делает, но её можно компилировать и запустить на выполнение. Технологическая среда исполнения программы может быть разной. Например, BorlandC, devcpp, MicrosoftVisualC++. В любом случае, компиляция программы, скорее всего, выдаст предупреждение о том, что функция должна возвращать значение. Добавим в программу инструкцию возврата:

           main()

           {

                          return 0;

           }

Операционная среда, запускающая программу на выполнение, получит код завершения равный нулю, что соответствует завершению без ошибок.

Упражнения

1. Запуск среды программирования (консольный режим). Краткое знакомство с меню.

2. Процесс подготовка, компиляции, запуска программы.

3. Сохранение программы.

Ввод и вывод

Язык программирования C не обеспечивает операции ввода и вывода. Чтобы обеспечить ввод-вывод данных, используются библиотеки и в первую очередь стандартная библиотека с заголовочным файлом stdio.h. По традиции, введенной авторами книги «Язык программирования Си» Брайаном Керниганом и Денисом Ритчи, обучение начинают с простой Си-программы, печатающей сообщение «Hello, World!» на стандартном устройстве вывода, которым, как правило, является монитор (дисплей):

           #include<stdio.h>// Директива препроцессора даёт компилятору команду включить возможности ввода и вывода

int main(void)

           {

                          printf( “Hello, World! \n”);

                          return 0;

           }

Выводимые символы состоят из Hello, World! и перевода строки.

Компилятор, встретив директиву include, заменяет её полным текстом файла, на который она ссылается. В приведенном примере эта строка будет заменена стандартным заголовочным файлом stdio.h. Угловые скобки указывают компилятору искать файл stdio.h в каталоге стандартных заголовочных файлов. Следующая строка является объявлением функции с именем main. Эта функция в Си-программе выполняется первой, то есть служит так называемой точкой входа в программу. Фигурные скобки после функции main обозначают её определение. Слово int говорит, что функция main возвращает (вычисляет) целое число. Слово void показывает, что функция main не требует аргументов. Следующая строка «вызывает» функцию printf. Включаемый заголовочный файл stdio.h содержит информацию, описывающую то, как нужно вызывать эту функцию. В данном примере этой функции передаётся единственный аргумент, содержащий текстовую строку «Hello, World!\n». Последовательность \n транслируется в символ «новая строка», который при отображении соответственно обозначает разрыв строки. Функция printf возвращает значение типа int, которое в этом примере не используется. Выражение return заставляет программу прекратить выполнение данной функции (main в этом случае), возвращая вызвавшей функции значение, указанное после ключевого слова return (загадочный ноль в качестве параметра требует экскурса в управление процессами, чтобы объяснить, что значит «код завершения задачи равен 0»). Последняя фигурная скобка обозначает конец определения функции main.

Процесс компиляции идёт в два этапа. Сначала производится чтение и анализ текста программы. Если ошибки не обнаружены, то генерируется код. Затем программа проверяется на наличие имён и операций, которые были использованы, но не определены. Если это возможно, то программа дополняется недостающими определениями из библиотеки. В нашем случае из стандартной библиотеки добавится определение и инициализирующий код для функции printf().

Напишем теперь программу, осуществляющую и ввод и вывод:

           #include <stdio.h>

main()

           {

                          intinch; // inch – дюйм

                          scanf(“%d”, &inch);

printf(“%f cm \n”, inch * 2.54);

                          return 0;

           }

Здесь приведена простая программа перевода значения, заданного в дюймах, в сантиметры. Число дюймов хранится в целой переменной inch. После символов // записывают комментарий. Для многострочных комментариев можно использовать скобки: /* комментарий */.

Ввод данных осуществляется с помощью функции scanf(). Функция scanf() читает символы из входного потока, интерпретирует их согласно спецификациям строки формата и присваивает соответствующие значения аргументам, каждый из которых должен быть указателем. В примере строка формата “%d” сообщает, что введённые символы следует интерпретировать как целое число. Это целое число будет присвоено переменной inch.

Вывод данных осуществляется с помощью функции printf(). Функция printf() выводит в стандартный поток вывода значения своих аргументов согласно спецификациям строки формата. В примере printf(“%fcm \n”, inch * 2.54) выводится значение произведения inch * 2.54, которое имеет формат с плавающей точкой, добавляется определение единиц измерения и переводится строка печати.

Упражнения.

  1. Обеспечить вывод результата в виде: #### in = ##.#### cm
  2. Написать программу ввода двух целых значений и печати их суммы

Основные типы и описания

Каждое имя и каждое выражение имеют тип, который определяет допустимые операции. Описание – это оператор, который вводит имя в программе и задаёт тип этого имени. Например, intinch = 0; задаёт целый тип переменной inch и присваивает ей начальное значение. Для целых определены арифметические операции +, -, *, /, %. Результат тоже будет целым.

В Си существует всего лишь несколько базовых типов:

ü char - единичный байт, который может содержать один символ из допустимого символьного набора;

ü int - целое, обычно отображающее естественное представление целых в машине;

ü float - число с плавающей точкой одинарной точности;

ü double - число с плавающей точкой двойной точности.

Имеется также несколько квалификаторов, которые можно использовать вместе с указанными базовыми типами. Например, квалификаторы short (короткий) и long (длинный) применяются к целым: shortintsh; longintcounter; В таких объявлениях слово int можно опускать, что обычно и делается.

Чаще всего для представления целого, описанного с квалификатором short, отводится 16 бит, с квалификатором long - 32 бита, а значению типа int - или 16, или 32 бита. Разработчики компилятора вправе сами выбирать подходящие размеры, сообразуясь с характеристиками своего компьютера и соблюдая следующие ограничения: значения типов short и intпредставляются по крайней мере 16 битами; типа long - по крайней мере 32 битами; размер short не больше размера int, который в свою очередь не больше размера long. Квалификаторы signed (со знаком) или unsigned (без знака) можно применять к типу char и любому целочисленному типу. Значения unsigned всегда положительны или равны нулю и подчиняются законам арифметики по модулю 2n, где n - количество бит в представлении типа. Так, если значению char отводится 8 битов, то unsignedchar имеет значения в диапазоне от 0 до 255, a signedchar – от -128 до 127 (в машине с двоичным дополнительным кодом). Являются ли значения типа просто char знаковыми или беззнаковыми, зависит от реализации, но в любом случае коды печатаемых символов положительны. Тип longdouble предназначен для арифметики с плавающей точкой повышенной точности. Как и в случае целых, размеры объектов с плавающей точкой зависят от реализации; float, double и longdouble могут представляться одним размером, а могут - двумя или тремя разными размерами. Узнать размер типа можно с помощью функции sizeof().

Именованные константы для всех размеров вместе с другими характеристиками машины и компилятора содержатся в стандартных заголовочных файлах <limits.h> и <float.h>. Размер типа в байтах можно определить с помощью функции sizeof().

Целая константа, например 1024, имеет тип int. Константа типа long завершается буквой l или L, например 123456789L. Слишком большое целое, которое невозможно представить как int, будет представлено как long. Беззнаковые константы заканчиваются буквой u или U, а окончание ul или UL говорит о том, что тип константы - unsignedlong. Константы с плавающей точкой имеют десятичную точку (102.4), или экспоненциальную часть (1е-2), или же и то и другое. Если у них нет окончания, считается, что они принадлежат к типу double. Окончание f или F указывает на тип float, а l или L - на тип longdouble. Целое значение может иметь восьмеричное или шестнадцатеричное представление. Если константа начинается с нуля, то она представлена в восьмеричном виде, если с 0x или с 0X, то в шестнадцатеричном. Например, десятичное целое 31 можно записать как 037 или как 0X1F. Записи восьмеричной и шестнадцатеричной констант могут завершаться буквой L (для указания на тип long) и U (если нужно показать, что константа беззнаковая). Например, константа 0XFUL имеет значение 15 и тип unsignedlong.

К основному типу можно применять прилагательное const. Это задаёт тип, имеющий те же свойства, что и основной, но значение переменных типа const не может меняться после инициализации. Например,

constfloatx = 2.54;

Прилагательное unsigned (беззнаковое) используется только для целых типов.

К любой комбинации основных типов могут применяться арифметические операции +, -, *, / и операции сравнения ==, !=, <, >, <=, >=.

Упражнения.

1. По заданному радиусу r вычислить длину окружности l.

2. По заданной температуре f по Фаренгейту вычислить температуру по Цельсию с = (5/ 9)(f – 32).

Справочная информация. Спецификации строки формата

Строка формата обычно включает флаги, спецификаторы, указание точности и управляющие коды.

Спецификатор Тип Описание
%c char Одиночный символ
%d (%i)   int Знаковое десятичное целое число
%e (%E)   float или double Число в формате с плавающей точкой в экспоненциальной форме
%f        float или double Знаковое десятичное число с дробной частью
%o        int Беззнаковое восьмеричное целое
%s        вектор char            Последовательность символов (строка)
%u        int Беззнаковое целое
%x (%X)   int Беззнаковое шестнадцатеричное целое
%g (%G)   float или double          использует %f или %e по требованию
%p        указатель Адрес, сохранённый в указателе

Точность задаётся количеством цифр w для целых и парой w. для чисел с плавающей точкой, где w – общее количество знаков, d – количество цифр в дробной части.

Флаги

Флаг Значение
- Прижать влево
+ Всегда печатать знак
Пробел Печатать пробел, если нет знака числа
0 Печатать с ведущими нулями
# Использовать альтернативную форму %#o %#x %#f %#e %#g

Управляющие коды:

\bbackspace (на позицию назад)

\fformfeed (пропуск)

\nnewline (новая строка)

\rcarriagereturn (возврат каретки)

\thorizontaltab (горизонтальная табуляция)

\'  singlequote (одиночный апостроф)

\0  null (пустой символ)

Примеры:

intn = 25;

float x = 2.54;

char c = 'A';

printf("% 5d,%8.1f,_%d \n", n, x, c);// _ _ _25,_ _ _ _ _2.5,_65

printf("%-5d,%8.6f,%#6x \n", n, x, c);// 25_ _ _,2.540000,_ _0x41

printf("%+5d,%4.2e,%c \n", n, x, c); // _ _+25,2.54e+000,A

 

Задачи для решения

1. Даны две целых переменных a и b. Обменять их значения.

2. Дано натуральное число в шестнадцатеричной системе счисления. Напечатайте его значение в десятичной системе счисления.

3. Дано два целых числа. Напечатайте сумму, разность и произведение данных чисел.

4. В прямоугольнике даны длины сторон. Вычислите и напечатайте периметр и площадь прямоугольника.

5. Дано два натуральных числа. Вычислите и напечатайте их частное и остаток от деления.

6. Дано натуральное двузначное число. Напечатайте сумму его цифр. Например, сумма цифр двузначного числа 92 равна одиннадцати.

7. Даны целые коэффициенты квадратного уравнения . Вычислите и напечатайте его дискриминант .

8. Целая переменная c должна использоваться как переключатель, т.е. если ее значение равно 0 (выключено), то ей следует присвоить значение 1 (включено), и наоборот. Напишите программу, которая преобразует введенное значение c. Условный оператор не использовать.

9. Цвета в шестнадцати цветовой палитре делятся на тёмные (с номерами от 0 до 7) и светлые (с номерами от 8 до 15) так, что каждому тёмному цвету соответствует светлый. Например, тёмному цвету 1 соответствует светлый цвет 9, а светлому цвету 14 соответствует тёмный цвет 6. По заданному номеру цвета вычислите номер соответствующего ему цвета.

10. Дана целая переменная a, не равная нулю. Присвойте ей противоположное значение и напечатайте его. Например, если значение переменной a равно -15, то противоположным значением будет 15.

11. Вычислите сумму первых n членов натурального ряда чисел.

12. Вычислите n-ый член арифметической прогрессии по заданному первому члену a и разности d.

13. Дано натуральное трехзначное число. Напечатайте сумму цифр этого числа.

14. До 1971 года в Англии в денежной системе использовались следующие единицы: 1 фунт стерлингов = 20 шиллингов; 1 шиллинг = 12 пенсов. “Нищий” в Сити в среднем зарабатывал P пенсов. Сколько это составляет фунтов, шиллингов и пенсов. Например, 512 пенсов составляют 42 шиллинга и 8 пенсов, а 42 шиллинга составляют 2 фунта и 2 шиллинга. Ответом будет 2, 2 и 8.

15. На 1 января приходится понедельник — первый день недели. От начала года идёт k-ый день. Какой это день недели (указать порядковый номер дня недели)?

Указания и решения

Обмен значениями с использованием третьей переменной Обмен значениями без использования третьей переменной. Используется в случае дефицита памяти.
nt main(void) { int a, b; //здесь ввод входных данных intc = a; a = b; b = c;    //здесь вывод результата return 0; } int main(void) { int a, b; //здесь ввод входных данных a = b - a; b = b - a; a = a + b;   //здесь вывод результата return 0; }
  1. Используем функцию scanf() из <stdio.h>, позволяющую указать формат вводимых данных.

inta;

scanf("%x", &a);//вводится целое шестнадцатеричное число

Вводим с клавиатуры шестнадцатеричное число. Например, 1f.

  1. Без комментариев.
  2. Без комментариев.
  3. Без комментариев.
  4. В десятичной системе счисления двузначное число , где d - цифра десятков, а e - цифра единиц. Очевидно, что d = n /10, e = n % 10.
  5. b2 = b*b.
  6. с = 1 - с.
  7. с = (с + 8) % 16.
  8. c = -c.
  9. S = 1 + 2 + ... + n = (1 + n)*n/ 2.
  10. Без комментариев.
  11. См. комментарий к задаче 6.
  12. Количество шиллингов - это частное от деления количества пенсов на 12. Количество фунтов - частное от деления количества шиллингов на 20.

intk; //день от начала года

intd; //день недели

//здесь ввод входных данных

d = (k-1) % 7 +1;

//здесь вывод результата

Советы по программированию

1. Начинайте запись программы (функции) с комментариев. Это может быть несколько предложений, описывающих, что и каким образом должна делать программа (функция). Если вы не можете написать пару комментариев, то, возможно, вы не понимаете, что вы делаете. Комментарий в Си-программе можно оформить двумя способами:

· /* все, что заключено в этих скобках – комментарий */

· // отсюда и до конца строки – комментарий.

2. В программах с большим количеством переменных полезно комментировать каждую переменную. Вариантом может быть выработка единообразия в обозначениях. Заметьте, что в Си-программах имена различаются при использовании букв прописных и строчных. Традиционно прописные буквы используют для обозначения констант.










Последнее изменение этой страницы: 2018-05-10; просмотров: 117.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...