Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРС Программирование на Си.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
606.21 Кб
Скачать

Преобразование типов

Если в выражениях встречаются операнды различных типов, то они преобразуются к общему типу в соответствии с неболь­шим набором правил. В общем, автоматически производятся только преобразования, имеющие смысл, такие как, например, преобразование целого в плавающее в выражениях типа F+I.

Во-первых, типы CHAR и INT могут свободно смешиваться в арифметических выражениях: каждая переменная типа CHAR авто­матически преобразуется в INT. Это обеспечивает значительную гибкость при проведении определенных преобразований симво­лов. Примером может служить функция ATOI, которая ставит в соответствие строке цифр ее численный эквивалент. ATOI(S)

Неявные арифметические преобразования работают в основ­ном, как и ожидается. В общих чертах, если операция типа + или *, которая связывает два операнда (бинарная операция), имеет операнды разных типов, то перед выполнением операции "низший" тип преобразуется к "высшему" и получается резуль­тат "высшего" типа. Более точно, к каждой арифметической операции применяется следующая последовательность правил преобразования.

- Типы CHAR и SHORT преобразуются в INT, а FLOAT в DOUBLE.

- Затем, если один из операндов имеет тип DOUBLE, то другой преобразуется в DOUBLE, и результат имеет тип DOUBLE.

- В противном случае, если один из операндов имеет тип LONG, то другой преобразуется в LONG, и результат имеет тип LONG.

- В противном случае, если один из операндов имеет тип UNSIGNED, то другой преобразуется в UNSIGNED и результат имеет тип UNSIGNED.

- В противном случае операнды должны быть типа INT, и результат имеет тип INT.

Подчеркнем, что все переменные типа FLOAT в выражениях пре­образуются в DOUBLE; в "C" вся плавающая арифметика выполня­ется с двойной точностью.

Преобразования возникают и при присваиваниях; значение правой части преобразуется к типу левой, который и является типом результата. Символьные переменные преобразуются в це­лые либо со знаковым расширением ,либо без него, как описано выше. Обратное преобразование INT в CHAR ведет себя хорошо - лишние биты высокого порядка просто отбрасываются. Таким об­разом

INT I;

CHAR C;

I = C;

C = I;

значение 'с' не изменяется. Это верно независимо от того, вовлекается ли знаковое расширение или нет.

Если х типа FLOAT, а I типа INT, то как х = I; так и I = х; приводят к преобразованиям; при этом FLOAT преобразуется в INT отбрасыванием дробной части. Тип DOUBLE преобразуется во FLOAT округлением. Длинные целые преобразуются в более ко­роткие целые и в переменные типа CHAR посредством отбрасыва­ния лишних битов высокого порядка.

Так как аргумент функции является выражением, то при пе­редаче функциям аргументов также происходит преобразование типов: в частности, CHAR и SHORT становятся INT, а FLOAT становится DOUBLE. Именно поэтому мы описывали аргументы функций как INT и DOUBLE даже тогда, когда обращались к ним с переменными типа CHAR и FLOAT.

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

Упражнение

Составьте программу для функции HTOI(S), которая преоб­разует строку шестнадцатеричных цифр в эквивалентное ей це­лое значение. При этом допустимыми цифрами являются цифры от 1 до 9 и буквы от а до F.

Функции преобразования типов

Atoi (s)

Строка -> в целое

Itoa(n,s,count)

Целое –> в строка

Atof (s)

Строка -> в число с плав. Точкой

С помощью функции sprintf(buf,”msg”, x)можно выполнять преобразование типов из x в buf. Пример

#include<stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <graphics.h>

#include <math.h>

int gd=DETECT,gr;

main()

{initgraph(&gd,&gr,"..\\bgi");

int x1=5,y1=2,x2=6,y2=8;

char s[10];

float x;

x=sqrt(pow((x2-x1),2)+pow((y2-y1),2));

sprintf(s," %f ",x);

outtextxy(100,100,s);

getchar();

closegraph;

}

Задание:

  1. задать целую переменную, переменную с плавающей точкой и строку и

выполнить преобразования типов с помощью функций itoa,atoi,atof

  1. С помощью функции sprintf выполнить преобразования разных типов и вывести на экран

3. Задан радиус окружности. Вычислить и вывести в графическом режиме с надписями:

- длину окружности и площадь круга

4. Вершины треугольника заданы целочисленными координатами. Вычислить:

- длины сторон треугольника

- периметр и площадь

- вывести все в графическом формате с надписями вершин, длинами сторон и значениями периметра и площади.

5. Вывести на экран график функции y=sin (x)

Задание:

  1. задать целую переменную, переменную с плавающей точкой и строку и

выполнить преобразования типов с помощью функций itoa,atoi,atof

  1. С помощью функции sprintf выполнить преобразования разных типов и вывести на экран

3. Задан радиус окружности. Вычислить и вывести в графическом режиме с надписями:

- длину окружности и площадь круга

4. Вершины треугольника заданы целочисленными координатами. Вычислить:

- длины сторон треугольника

- периметр и площадь

- вывести все в графическом формате с надписями вершин, длинами сторон и значениями периметра и площади.

5. Вывести на экран график функции y=sin (x)

Задание:

  1. задать целую переменную, переменную с плавающей точкой и строку и

выполнить преобразования типов с помощью функций itoa,atoi,atof

  1. С помощью функции sprintf выполнить преобразования разных типов и вывести на экран

3. Задан радиус окружности. Вычислить и вывести в графическом режиме с надписями:

- длину окружности и площадь круга

4. Вершины треугольника заданы целочисленными координатами. Вычислить:

- длины сторон треугольника

- периметр и площадь

- вывести все в графическом формате с надписями вершин, длинами сторон и значениями периметра и площади.

5. Вывести на экран график функции y=sin (x)

Задание:

  1. задать целую переменную, переменную с плавающей точкой и строку и

выполнить преобразования типов с помощью функций itoa,atoi,atof

  1. С помощью функции sprintf выполнить преобразования разных типов и вывести на экран

3. Задан радиус окружности. Вычислить и вывести в графическом режиме с надписями:

- длину окружности и площадь круга

4. Вершины треугольника заданы целочисленными координатами. Вычислить:

- длины сторон треугольника

- периметр и площадь

- вывести все в графическом формате с надписями вершин, длинами сторон и значениями периметра и площади.

5. Вывести на экран график функции y=sin (x)

Задание:

  1. задать целую переменную, переменную с плавающей точкой и строку и

выполнить преобразования типов с помощью функций itoa,atoi,atof

  1. С помощью функции sprintf выполнить преобразования разных типов и вывести на экран

3. Задан радиус окружности. Вычислить и вывести в графическом режиме с надписями:

- длину окружности и площадь круга

4. Вершины треугольника заданы целочисленными координатами. Вычислить:

- длины сторон треугольника

- периметр и площадь

- вывести все в графическом формате с надписями вершин, длинами сторон и значениями периметра и площади.

5. Вывести на экран график функции y=sin (x)

Задание:

  1. задать целую переменную, переменную с плавающей точкой и строку и

выполнить преобразования типов с помощью функций itoa,atoi,atof

  1. С помощью функции sprintf выполнить преобразования разных типов и вывести на экран

3. Задан радиус окружности. Вычислить и вывести в графическом режиме с надписями:

- длину окружности и площадь круга

4. Вершины треугольника заданы целочисленными координатами. Вычислить:

- длины сторон треугольника

- периметр и площадь

- вывести все в графическом формате с надписями вершин, длинами сторон и значениями периметра и площади.

5. Вывести на экран график функции y=sin (x)

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

1. Определить строку, состоящую из своей фамилии. имени , отчества и года рождения . Вывести на экран:

a) отдельно по словам разным цветом б) фамилию и инициалы в) количество прожитых дней

2. Cоставить программу, использующую оператор присваивания, арифметические операции и операцию sizeof.

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

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

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

6. Составить программу, решающую задачу вычисления максимального и минимального значений с использованием функций max и min. В качестве входных значений для указанных функций задаются массив чисел с плавающей точкой и размер такого массива.

7. Построить 10 вложенных квадратов окрашенных поочередно в зеленый и красные цвета.

8. Транспонированием квадратной матрицы называется такое ее преобразование, при котором строки и столбцы меняются ролями: i-й столбец становится i-й строкой. Например, транспонирование матрицы:

0 1 2 0 3 6

3 4 5 дает матрицу 1 4 7

6 7 8 2 5 8

Дана квадратная матрица размера n*n. Получить транспонированную матрицу.

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

1. Определить строку, состоящую из своей фамилии. имени , отчества и года рождения . Вывести на экран:

a) отдельно по словам разным цветом б) фамилию и инициалы в) количество прожитых дней

2. Cоставить программу, использующую оператор присваивания, арифметические операции и операцию sizeof.

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

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

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

6. Составить программу, решающую задачу вычисления максимального и минимального значений с использованием функций max и min. В качестве входных значений для указанных функций задаются массив чисел с плавающей точкой и размер такого массива.

7. Построить 10 вложенных квадратов окрашенных поочередно в зеленый и красные цвета.

8. Транспонированием квадратной матрицы называется такое ее преобразование, при котором строки и столбцы меняются ролями: i-й столбец становится i-й строкой. Например, транспонирование матрицы:

0 1 2 0 3 6

3 4 5 дает матрицу 1 4 7

6 7 8 2 5 8

Дана квадратная матрица размера n*n. Получить транспонированную матрицу.

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

1. Определить строку, состоящую из своей фамилии. имени , отчества и года рождения . Вывести на экран:

a) отдельно по словам разным цветом б) фамилию и инициалы в) количество прожитых дней

2. Cоставить программу, использующую оператор присваивания, арифметические операции и операцию sizeof.

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

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

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

6. Составить программу, решающую задачу вычисления максимального и минимального значений с использованием функций max и min. В качестве входных значений для указанных функций задаются массив чисел с плавающей точкой и размер такого массива.

7. Построить 10 вложенных квадратов окрашенных поочередно в зеленый и красные цвета.

8. Транспонированием квадратной матрицы называется такое ее преобразование, при котором строки и столбцы меняются ролями: i-й столбец становится i-й строкой. Например, транспонирование матрицы:

0 1 2 0 3 6

3 4 5 дает матрицу 1 4 7

6 7 8 2 5 8

Дана квадратная матрица размера n*n. Получить транспонированную матрицу.

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

1. Определить строку, состоящую из своей фамилии. имени , отчества и года рождения . Вывести на экран:

a) отдельно по словам разным цветом б) фамилию и инициалы в) количество прожитых дней

2. Cоставить программу, использующую оператор присваивания, арифметические операции и операцию sizeof.

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

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

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

6. Составить программу, решающую задачу вычисления максимального и минимального значений с использованием функций max и min. В качестве входных значений для указанных функций задаются массив чисел с плавающей точкой и размер такого массива.

7. Построить 10 вложенных квадратов окрашенных поочередно в зеленый и красные цвета.

8. Транспонированием квадратной матрицы называется такое ее преобразование, при котором строки и столбцы меняются ролями: i-й столбец становится i-й строкой. Например, транспонирование матрицы:

0 1 2 0 3 6

3 4 5 дает матрицу 1 4 7

6 7 8 2 5 8

Дана квадратная матрица размера n*n. Получить транспонированную матрицу.