Базовые типы данных и операции языка С
Иерархия типов данных. Определение понятий "указатель", "массив". Получение количества машинных слов, отведенных под каждый тип данных. Проверка программы на переполнение типа int. Анализ заданных выражений на предмет из синтаксической корректности.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 07.06.2014 |
Размер файла | 176,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки РФ
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Владимирский государственный университет имени Александра Григорьевича и Николая Григорьевича Столетовых"
Кафедра Физики и прикладной математики
Лабораторная работа
по дисциплине
"Объектно-ориентированное программирование"
на тему:
"Базовые типы данных и операции языка С"
Выполнила:
Амочкин А.В.
ст. гр. ПМИ-111
Проверила:
Шишкина М.В.
Владимир 2013
Цель работы: познакомиться со всеми базовыми типами языка С и особенностями форматирования при вводе/выводе на стандартное устройство с помощью функций printf/scanf. Изучить приоритеты операций языка С и особенности их использования в сложных выражениях.
Задача:
1.Для всех базовых типов определить размер в байтах.
2.Для всех целых типов рассчитать диапазон представления данных.
3. Исследовать вопрос о переполнении типов. По ходу выполнения задания давать комментарии по поведению компиляции и run.
3.1Создать переменную типа int, проинициализировать ее максимальным положительным значением, допустимым для этого типа. С помощью функции printf и спецификаторов для целого знакового и целого без знакового (%d - знаковый, %u - для без знакового) вывести на экран значение этой переменной исходное и увеличенное на единицу.
3.2Создать три переменные типа int. Две из них проинициализировать так, чтобы сами значения находились в пределах допустимого типом диапазона, а их сумма давала переполнение. Результат суммы записать в третью переменную и вывести ее значение на экран.
3.3Объявить переменную типа char, проинициализировать ее значением 350, вывести на экран ее значение со спецификаторами для символьного и целого без знакового типа. Объяснить полученный результат.
4.Создать переменные всех базовых типов, выполнить всевозможные присвоения на этих разнотипных переменных, вывести на экран значения переменных с различными спецификаторами несоответствующими их типам.
5.Проанализировать выражения на предмет их синтаксической корректности и в случае необходимости внести нужные изменения, расставить порядок действий, прокомментировать значения искомых переменных k и i.
массив тип программа переполнение
1) Int k, i=1, k=1+++i;
2) Int k, i=1, k++i++;
3) Int k, i=1, k+=k++;
4) Int k, i=1, k+=++k;
5) int a,b,c,d,k; b=2; d=3; k=(a=b)+(c=d) искомые: k,a,c
6) int a,b,k; a=2; b=1; k=(a!=b)?(a-b++):(++a-b) искомые: a,b,k
7) int a=3; int b=2; float y1, y2, c=3.5; y1=c*a/b; y2=c*(a/b)
Краткая теория
Все данные, используемые в программе, можно разделить на две группы: константы и переменные. К первой группе относятся данные, не изменяющие своего значения в ходе выполнения программы, данные второй группы могут изменять свое значение.
Как константы, так и переменные могут быть различных типов, которые определяют их структуру, набор допустимых значений, правила использования и способ представления в ЭВМ. Иерархию типов данных можно представить следующей схемой.
Простые (скалярные) типы:
· целые,
· вещественные,
· символьные,
· указатели,
· перечислимый тип.
Составные (структурированные) типы:
o массив,
o структура,
o объединение.
Переменная простого (скалярного) типа в любой момент времени хранит только одно значение. В отличие от простых переменных, переменные составного (структурированного) типа одновременно хранят несколько значений.
Целые и вещественные переменные предназначены для хранения чисел, символьные переменные - это также числовые переменные, они хранят ASCII коды символов.
Указатель - это переменная, значением которой является адрес объекта (обычно другой переменной) в памяти компьютера. Таким образом, если одна переменная содержит адрес другой переменной, то говорят, что первая переменная указывает (ссылается) на вторую.
Массив - это группа элементов одинакового типа (double, float, int и т. п.). Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве.
Структура - это совокупность элементов, объединенных под одним именем. Структура представляет собой составной объект, в который могут входить элементы различных типов. Для каждого элемента выделяется своя область памяти.
Перечислимый тип представляет собой набор целочисленных констант, используемых обычно для организаций разветвлений в программе.
Объединение - это совокупность переменных различных типов, использующих одну и ту же область памяти. Объединение подобно структуре, однако в каждый момент времени объединение может хранить значение только одного из элементов объединения. Хотя доступ к этой области памяти возможен с использованием любого из элементов, элемент для этой цели должен выбираться так, чтобы полученный результат не был бессмысленным.
Для определения данных целого типа используются ключевые слова char, int, short, long, которые определяют диапазон значений и размер области памяти, выделяемой под переменные. При объявлении целых типов можно использовать ключевые слова signed и unsigned, которые указывают, как интерпретируется старший бит объявляемой переменной. Если указано ключевое слово unsigned, то старший бит интерпретируется как часть числа, в противном случае старший бит интерпретируется как знаковый. В случае отсутствия ключевого слова unsigned целая переменная считается знаковой. В том случае, если спецификатор типа состоит из ключевого типа signed или unsigned и далее следует идентификатор переменной, то она будет рассматриваться как переменная типа int. Отметим, что ключевые слова signed и unsigned не обязательны.
Переменная типа char(signed char) занимает в памяти 1 байт, при этом старший бит хранит информацию о знаке числа: 0 соответствует положительному числу, 1 - отрицательному. Биты с 0-го по 6-й используются для записи значения числа. Запись в каждый из этих битов значения 1 соответствует наибольшему положительному числу, равному 127, при этом старший бит установлен в 0. Такое представление целых чисел называется прямым кодом. Для хранения отрицательных чисел используется представление чисел, называемое дополнительным кодом.
Задания
Задание 1
Код программы
#include "conio.h"
#include <stdlib.h>
#include "locale"
#include <iostream>
//using namespace std;
using std::cout;
using std::cin;
int main()
{ setlocale(LC_ALL,"RUSSIAN");
srand (time(NULL));
cout<<"\n";// Задание1
cout<<"Int "<<sizeof(int)<<"\n"<<"Char "<<sizeof(char)<<"\n"<<"Long "<<sizeof(long)<<"\n"
<<"Short "<<sizeof(short)<<"\n"<<"Float "<<sizeof(float)<<"\n"<<
"Double "<<sizeof(double)<<"\n"<<
"Long double "<< sizeof(long double);
int i=2147483646; cout<<"\nзадание 3.1\n";
printf("\n %d",i);
printf("\n %d",++i);
int a,b,c; cout<<"\nзадание 3.2\n";
a=2147483646;
b=2147483645;
c=a+b;
printf("\n %d",c);
char t=5000; cout<<"\nзадание 3.3\n";
printf("\n %c",t);
printf("\n %d",t);
printf("\n %u",t);
unsigned short us; //задание 4
signed short ss;
char a1=-126; unsigned char a2=254; signed short int a3=-32000; unsigned long int a4=63000; double a5=1.3456;
printf("\nzadanie 4");
printf("\nspec %%d");
printf("\nchar=%d",a1);
printf("\nunsigned char=%d",a2);
printf("\nsigned short int=%d",a3);
printf("\nunsigned long int=%d",a4);
printf("\ndouble=%d",a5);
printf("\nspec %%c");
printf("\nchar=%c",a1);
printf("\nunsigned char=%c",a2);
printf("\nsigned short int=%c",a3);
printf("\nunsigned long int=%c",a4);
printf("\ndouble=%c",a5);
printf("\nspec %%u");
printf("\nchar=%u",a1);
printf("\nunsigned char=%u",a2);
printf("\nsigned short int=%u",a3);
printf("\nunsigned long int=%u",a4);
printf("\ndouble=%u",a5);
printf("\nspec %%f");
printf("\nchar=%f",a1);
printf("\nunsigned char=%f",a2);
printf("\nsigned short int=%f",a3*10000000000);
printf("\nunsigned long int=%f",a4);
printf("\ndouble=%f",a5);
cout<<"\nПрисвоения различных типов";
a1=a2;
cout<<"\nChar=int "<<a1;
a1=a5;
cout<<"\nChar=float "<<a1;
a1=-126; a2=254; a5=1.3456;
a2=a1;
cout<<"\nInt=char "<<a2;
a2=a5;
cout<<"\nint=float "<<a2;
a1=-126; a2=254; a5=1.3456;
a5=a1;
cout<<"\nFloat=char "<<a5;
a5=a2;
cout<<"\nFloat=int "<<a5;
//printf("\nspec %%s");
//printf("\nchar=%10s"|"\nunsigned char=%5s"|"\nsigned short int=%5s"|"\nunsigned long int=%5s"|"\ndouble=%5s",a1,a2,a3,a4,a5);
getch();
return 0;
}
Задание 2
в задании 1 мы получили количество машинных слов, отведенное под каждый тип данных. Для того чтобы рассчитать диапазон для каждого типа, воспользуемся формулой:
(для знаковых типов)
(для беззнаковых типов), где s - количество машинных слов.
Получим:
Целый тип |
Диапазон |
|
signed short int |
-32 768 … 32 767 |
|
unsigned short int |
0 … 65 535 |
|
signed long int |
-2 147 483 648 … 2 147 483 647 |
|
unsigned long int |
0 … 4 294 967 295 |
|
signed char |
-128 … 127 |
|
unsigned char |
0 … 255 |
Задание 3
1. переполнение типа int вызвало изменение значения переменной i на наименьшее число, возможное для данного типа.
2. аналогично предыдущему заданию получили отрицательное число из-за переполнения типа. В данном случае можно заметить, что когда число достигает верхней границы диапазона, при увеличении на 1 оно становится наименьшим. При увеличении на число n>1, получаем число, большее наименьшего на n-1.
3. подобно предыдущим 2-м частям 3-го задания, в данном случае получаем значение переменной типа char, равное 94. При выводе со спецификатором %d получаем 94, при %c получаем символ, соответствующий коду 94 в таблице ASCII.
Задание 4
для спецификатора %f корректно вывелось только значение для переменное типа float: все остальные обнулились. Для спецификатора %с получили все символы, соответствующие кодам, кроме как для значения с плавающей точкой. Для спецификаторов %u и %d в случае с целочисленными типами все происходит в соответствии с результатами задания 3.
Задание 5
1) int k, i=1; k=1+(++i); Ответ: k=3, i=2;
i=i+1=2, затем 1+2=3, k=3
2) int k, i=1; k+=i++; Ответ: k=1, i=2;
k=k+i=1, k=1, i=i+1=2
3) int k, i=1; k+=k++; Ответ: k=1;
Изначально k=0, k+=0, k+1=1;
4) int k, i=1; k+=++k; Ответ: k=2;
Изначально k=0, k+1=1, k=k+1=2;
5) int a,b,c,d,k; b=2; d=3; k=(a=b)+(c=d); Ответ: k=5; a=2;c=3;
a=b=2, c=d=3, k=2+3=5;
6) int a,b,k; a=2; b=1; k=(a!=b)?(a-b++):(++a-b); Ответ: a=2; b=2; k=1;
a неравно b? - Да. -> k=a-b=2-1=1, b=b+1=2;
7) int a=3; int b=2; float y1, y2, c=3.5; y1=c*a/b; y2=c*(a/b);
Ответ: y1=5.25; y2=3.5;
c*a=3.5*3=10.5, y1=10.5/2=5.25
a/b=3/2=1.5, но и a, и b принадлежат к целочисленному типу, поэтому a/b=1, y2=c*1=3.5*1=3.5
Вывод
таким образом, удалось познакомиться со всеми базовыми типами языка С и особенностями форматирования при вводе/выводе на стандартное устройство с помощью функций printf/scanf, изучить приоритеты операций языка С и особенности их использования в сложных выражениях, познакомиться с особенностями использования инкремента.
Размещено на Allbest.ru
Подобные документы
Организация типов данных. Записи, оператор присоединения. Множества, операции над ними. Строки, стандартные процедуры и функции, работающие со строками. Совместимость типов. Явное и неявное преобразование типов. Многомерные массивы. Операции отношения.
презентация [30,8 K], добавлен 13.10.2013Классификация типов данных, отличия синтаксических конструкций языков C# и C++. Базовые типы: Array, String, StringBuilder. Средства стандартного ввода и вывода и возможности форматирования вывода. Понятие о регулярных выражениях и их применении.
лабораторная работа [148,8 K], добавлен 13.05.2014Типы данных, использованные при создании базы данных. Структура программы, используемые переменные, выражения и указатели. Концептуальное (инфологическое), логическое (даталогическое) и физическое проектирование. Тестирование программы и описание полей.
курсовая работа [398,4 K], добавлен 16.07.2012Изучение категории типов данных, видов выражений и операций, работа на языке Си. Составление программы вычисления значения функции у(х) при произвольном значении х. Блок-схема алгоритма. Описание текста программы и рассмотрение контрольного примера.
лабораторная работа [124,7 K], добавлен 09.01.2012Сущность понятия "тип данных". Объектно-ориентированный стиль программирования. Простые типы данных в языке Паскаль: порядковые, вещественные, дата-время. Булевский (логический) тип. Синтаксис определения ограниченного типа. Регулярные типы (массивы).
реферат [24,1 K], добавлен 01.12.2009Базы данных с двумерными файлами и реляционные системы управления базами данных (СУБД). Создание базы данных и обработка запросов к ним с помощью СУБД. Основные типы баз данных. Базовые понятия реляционных баз данных. Фундаментальные свойства отношений.
реферат [57,1 K], добавлен 20.12.2010Понятие и критерии классификации баз данных. Характеристика совокупностей элементов данных: массив, дерево, запись. Компоненты любой модели данных. Способы размещения значений элементов в физической записи. Методы доступа к данным: дерево, хеширование.
реферат [84,7 K], добавлен 22.11.2010Сущность и характеристика типов моделей данных: иерархическая, сетевая и реляционная. Базовые понятия реляционной модели данных. Атрибуты, схема отношения базы данных. Условия целостности данных. Связи между таблицами. Общие представления о модели данных.
курсовая работа [36,1 K], добавлен 29.01.2011Описание программы, реализующей различные операции над строковыми типами данных, а также методы их обработки для получения заданных в задании результатов. Требования к программному продукту. Процедура проверки сохранения данных программы перед закрытием.
курсовая работа [1,1 M], добавлен 26.02.2015Электронная таблица как двумерный или n-мерный массив данных, размещенный на машинных носителях информации, определение ее главных достоинств и принципы работы. Общее описание редактора Excel, типы данных и принципы работы с ними. Построение диаграмм.
лабораторная работа [3,2 M], добавлен 12.04.2012