Базовые типы данных и операции языка С

  • Вид работы:
    Практическое задание
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    106,69 Кб
  • Опубликовано:
    2015-01-09
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Базовые типы данных и операции языка С

Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования "Владимирский государственный университет имени Александра Григорьевича и Николая Григорьевича Столетовых"

Кафедра Физики и прикладной математики





Лабораторная работа

по дисциплине

"Объектно-ориентированное программирование"

на тему:

"Базовые типы данных и операции языка С"


Выполнила:

Амочкин А.В.

ст. гр. ПМИ-111

Проверила:

Шишкина М.В.


Владимир 2013

Цель работы: познакомиться со всеми базовыми типами языка С и особенностями форматирования при вводе/выводе на стандартное устройство с помощью функций printf/scanf. Изучить приоритеты операций языка С и особенности их использования в сложных выражениях.

Задача:

.Для всех базовых типов определить размер в байтах.

.Для всех целых типов рассчитать диапазон представления данных.

. Исследовать вопрос о переполнении типов. По ходу выполнения задания давать комментарии по поведению компиляции и run.

.1Создать переменную типа int, проинициализировать ее максимальным положительным значением, допустимым для этого типа. С помощью функции printf и спецификаторов для целого знакового и целого без знакового (%d - знаковый, %u - для без знакового) вывести на экран значение этой переменной исходное и увеличенное на единицу.

.2Создать три переменные типа int. Две из них проинициализировать так, чтобы сами значения находились в пределах допустимого типом диапазона, а их сумма давала переполнение. Результат суммы записать в третью переменную и вывести ее значение на экран.

.3Объявить переменную типа char, проинициализировать ее значением 350, вывести на экран ее значение со спецификаторами для символьного и целого без знакового типа. Объяснить полученный результат.

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

.Проанализировать выражения на предмет их синтаксической корректности и в случае необходимости внести нужные изменения, расставить порядок действий, прокомментировать значения искомых переменных k и i.

массив тип программа переполнение

1) Int k, i=1, k=1+++i;

) Int k, i=1, k++i++;

) Int k, i=1, k+=k++;

) Int k, i=1, k+=++k;

) int a,b,c,d,k; b=2; d=3; k=(a=b)+(c=d) искомые: k,a,c

) int a,b,k; a=2; b=1; k=(a!=b)?(a-b++):(++a-b) искомые: a,b,k

) 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;std::cout;std::cin;main()

{ setlocale(LC_ALL,"RUSSIAN");(time(NULL));<<"\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);i=2147483646; cout<<"\nзадание 3.1\n";("\n %d",i);("\n %d",++i);a,b,c; cout<<"\nзадание 3.2\n";=2147483646;=2147483645;=a+b;("\n %d",c);t=5000; cout<<"\nзадание 3.3\n";("\n %c",t);("\n %d",t);("\n %u",t);short us; //задание 4short ss;a1=-126; unsigned char a2=254; signed short int a3=-32000; unsigned long int a4=63000; double a5=1.3456;("\nzadanie 4");("\nspec %%d");("\nchar=%d",a1);("\nunsigned char=%d",a2);("\nsigned short int=%d",a3);("\nunsigned long int=%d",a4);("\ndouble=%d",a5);("\nspec %%c");("\nchar=%c",a1);("\nunsigned char=%c",a2);("\nsigned short int=%c",a3);("\nunsigned long int=%c",a4);("\ndouble=%c",a5);("\nspec %%u");("\nchar=%u",a1);("\nunsigned char=%u",a2);("\nsigned short int=%u",a3);("\nunsigned long int=%u",a4);("\ndouble=%u",a5);("\nspec %%f");("\nchar=%f",a1);("\nunsigned char=%f",a2);("\nsigned short int=%f",a3*10000000000);("\nunsigned long int=%f",a4);("\ndouble=%f",a5);<<"\nПрисвоения различных типов";=a2;<<"\nChar=int "<<a1;=a5;<<"\nChar=float "<<a1;=-126; a2=254; a5=1.3456;=a1;<<"\nInt=char "<<a2;=a5;<<"\nint=float "<<a2;=-126; a2=254; a5=1.3456;=a1;<<"\nFloat=char "<<a5;=a2;<<"\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);

}

Задание 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 на наименьшее число, возможное для данного типа.

. аналогично предыдущему заданию получили отрицательное число из-за переполнения типа. В данном случае можно заметить, что когда число достигает верхней границы диапазона, при увеличении на 1 оно становится наименьшим. При увеличении на число n>1, получаем число, большее наименьшего на n-1.

. подобно предыдущим 2-м частям 3-го задания, в данном случае получаем значение переменной типа char, равное 94. При выводе со спецификатором %d получаем 94, при %c получаем символ, соответствующий коду 94 в таблице ASCII.

Задание 4

для спецификатора %f корректно вывелось только значение для переменное типа float: все остальные обнулились. Для спецификатора %с получили все символы, соответствующие кодам, кроме как для значения с плавающей точкой. Для спецификаторов %u и %d в случае с целочисленными типами все происходит в соответствии с результатами задания 3.

Задание 5

) int k, i=1; k=1+(++i); Ответ: k=3, i=2;=i+1=2, затем 1+2=3, k=3

) int k, i=1; k+=i++; Ответ: k=1, i=2;=k+i=1, k=1, i=i+1=2

) int k, i=1; k+=k++; Ответ: k=1;

Изначально k=0, k+=0, k+1=1;

) 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;=b=2, c=d=3, k=2+3=5;

) int a,b,k; a=2; b=1; k=(a!=b)?(a-b++):(++a-b); Ответ: a=2; b=2; k=1;неравно b? - Да. -> k=a-b=2-1=1, b=b+1=2;

) 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;*a=3.5*3=10.5, y1=10.5/2=5.25/b=3/2=1.5, но и a, и b принадлежат к целочисленному типу, поэтому a/b=1, y2=c*1=3.5*1=3.5


Вывод

таким образом, удалось познакомиться со всеми базовыми типами языка С и особенностями форматирования при вводе/выводе на стандартное устройство с помощью функций printf/scanf, изучить приоритеты операций языка С и особенности их использования в сложных выражениях, познакомиться с особенностями использования инкремента.

Похожие работы на - Базовые типы данных и операции языка С

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!