4376

Основы языка Си и элементы C++

Реферат

Информатика, кибернетика и программирование

Основы языка Си и элементы C++ Создание проекта в Microsoft Visual Studio Для разработки программ в среде Microsoft Visual Studio и Microsoft Visual Studio Express следует создать так называемый проект или решение....

Русский

2012-11-18

326.96 KB

21 чел.

Основы языка Си и элементы C++

Создание проекта в Microsoft Visual Studio

Для разработки программ в среде Microsoft Visual Studio и Microsoft Visual Studio Express следует создать так называемый проект или решение. Рассмотрим, как это сделать.

Шаг 1. Выберите пункт меню File->New->Project.

Шаг 2. Выберите тип проекта Visual C++ Win32 Console Application (консольное приложение).

Шаг 3. Укажите имя проекта и нажмите «OK».

Шаг 4. Нажмите кнопу «Finish».

Шаг 5. В окне «Solution Explorer» откройте файл с расширением cpp.

Первая программа

Существует старая добрая традиция, согласно которой изучать любой язык программирования начинают с написания программы «Hello, World!» или «Здравствуй, Мир!». Эта программа выводит на экран приветствие миру и представляет собой наиболее простой и быстрый способ заставить компьютер выполнить нашу команду. Для написания этой программы наберите в открытом редакторе следующий программный код:

//Первая программа на Си

/* Данная программа выводит

на экран приветствие */

#include "stdafx.h"

#include <iostream>

using namespace std;

int main() {

cout << "Hello, World!" << endl;

 getchar();

 return 0;

}

Запустите программу, нажав комбинацию клавиш Ctrl+F5 или кнопку с зеленым треугольником (как «Play» на музыкальном проигрывателе), и на экране монитора появится приветствие:

Разбор первой программы

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

Первая конструкция – это однострочный комментарий:

//Первая программа на Си

Однострочный комментарий определяется парой косых черточек //, которые говорят компилятору, что следующий за ними текст компилировать не нужно; действие этих черточек распространяется только на ту строку, где они расположены. Текст, расположенный между знаками /* и */, называется многострочным комментарием и также не компилируется:

/* Данная програма выводит

на экран приветствие */

Если компилятор встречает пару символов /*, то весь расположенный далее текст он воспринимает как комментарий до тех пор, пока не встретит закрывающую комбинацию */. Грамотное использование комментариев – это хороший стиль программирования. Комментарии должны облегчать понимание написанного кода для любого человека, читающего данный код. Однако и злоупотреблять комментариями не следует: ищите разумный компромисс.

Продолжим разбор программы. Очередная строка

#include "stdafx.h" 

является подключением библиотеки stdafx.h, которая является специфической для Microsoft Visual Studio. Если вы работаете в другой среде, то данная строка кода не нужна. Команды

#include <iostream>

подключают библиотеку iostream, в которой объявлен оператор cout, осуществляющий вывод на экран. Строка

using namespace std; 

указывает, какое пространство имён используется. Это C++-ная фишка, которую подробно рассматривать мы не будем: просто запомните, что для использования оператора cout нужно написать эту команду. Продолжим. Следующая команда выводит на экран приветствие миру:

cout << "Hello, World!" << endl;

Здесь "Hello, World!" – это сообщение, а endl – это перевод курсора (каретки) на новую строку.

Перед тем, как двигаться дальше, зададимся вопросом: «Что происходит, когда программа запускается?» А происходит вот что: одна за другой выполняются команды, расположенные в блоке

int main() {

}

Таким образом, main() – это начало программы на языке Си; фигурные скобки { и } являются соответственно началом и концом программы. Забегая вперед, отметим, что открывающая и закрывающая фигурные скобки используются для определения начала и конца любого блока программы: функции, цикла, условного оператора и прочих конструкций. Если провести аналогию с популярным языком Паскаль, то открывающая и закрывающая фигурные скобки соответствуют словам Begin и End в Паскале. Такой блок называется телом этих конструкций. Например, тело функции или тело цикла.

Команда

getchar();

заставляет компьютер подождать нажатия любой клавиши, чтобы дать пользователю насладиться чтением сообщения. После нажатия любой клавиши окно с сообщением закроется.

Наконец, команда

return 0;

завершает функцию main(), а вместе с ней и всю программу. Возвращаемое функцией main() значение называется кодом возврата и указывает на то, успешно или с ошибкой завершилась программа. Значение 0 означает успешное завершение, а отличное от 0 – информирует об ошибке.

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

Вариации функции main()

Существует несколько разновидностей функции main(). Первый вариант – это то, что предлагает нам Visual Studio по умолчанию. В скобках указываются параметры, которые передаются в программу, если соответствующий ей исполняемый exe-файл вызывается через командную строку. Аргумент argc – это число параметров, а массив argv[] – это список параметров.

int _tmain(int argc, _TCHAR* argv[]) {

 

 return 0;

}

Стандартный вид функции main() следующий:

int main(int argc, _TCHAR* argv[]) {

 

 return 0;

}

Для многих программ передаваемые параметры не требуются, поэтому их можно опустить:

int main() {

 return 0;

}

Некоторые компиляторы, в частности, тот, который задан по умолчанию в Microsoft Visual Studio, поддерживают функцию main() без указания кода возврата:

void main() {

}

Данный способ удобен, поскольку здесь нет ничего лишнего, однако некоторые компиляторы, например, тот, который по умолчанию встроен в Code::Blocks, не поддерживают такой вид функции main().

При разработке программ из данного курса можно использовать любой из рассмотренных вариантов.

Переменные и типы данных

Любая компьютерная программа – это набор команд, оперирующих с переменными и производящих какие-то вычисления; даже слово «computer» (компьютер) переводится на русский язык как «вычислитель».

В математике мы сталкиваемся с переменными, значениями которых являются числа. Числа бывают натуральными, целыми, рациональными, вещественными, комплексными и т.д. Существуют также булевы (логические) переменные, которые могут принимать два значения: истина или ложь, хотя и этим значениям часто ставятся в соответствие числа 0 и 1. Таким образом, каждая переменная имеет свой тип, определяющий диапазон возможных значений этой переменной.

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

Строго говоря, переменная – это именованный участок памяти, размер которого определяется типом этой переменной. Узнать размер типа можно при помощи функции sizeof(). Ниже будет рассмотрен пример ее использования, а сейчас перечислим основные типы данных языка Си.

Тип

Описание

Размер типа (байт)

Диапазон значений

char

Символ или целое число со знаком

1

-128..127

unsigned char

Символ или целое число без знака

1

0..255

short

Целое число

со знаком

2

-32768..32767

unsigned short

Целое число

без знака

2

0..65535

int

Целое число

со знаком

4

-2147483647..2147483647

unsigned int

Целое число

без знака

4

0..4294967295

float

Вещественное

Число

4

6 знаков после запятой

double

Вещественное

Число

8

10 знаков после запятой

bool

Логический

Тип

1

true и false (0 и 1)

void

Пустой тип

-

-

Перед работой с переменной ее необходимо объявить; объявление переменной – это указание ее имени и типа. Переменные могут быть объявлены по одной или сразу несколько, при этом указываются тип переменной и ее имя через пробел, а завершается объявление точкой с запятой. Если сразу объявляется несколько переменных, то они перечисляются через запятую:

int number, age, weight;

float length, width;

bool isEven;

char symbol;

Присвоение значения объявленной переменной – это занесение значения в выделенную под переменную ячейку памяти. Осуществляется присвоение при помощи оператора =. Указывается имя переменной и ее новое значение, а между ними ставится оператор присваивания:

number = 10;

length = 2.5;

isEven = true;

symbol = 'A';

Присвоить значение переменной также можно при ее объявлении, в этом случае говорят, что происходит инициализация переменной или переменная инициализируется:

int number = 10, x=7;

float length = 2.5;

bool isEven = true;

char symbol = '*', letter = 'A';

Имя переменной нужно выбирать так, чтобы оно отражало назначение этой переменной. Конечно, можно добавить комментарий:

//Возраст студента

int x;

однако предпочтительнее использовать следующее имя:

int student_age;

В таком случае комментарий вообще не понадобится.

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

Ключевые слова и идентификаторы

Все слова, не считая знаков препинания, операций и чисел, в языке Си можно разделить на две группы: ключевые слова и идентификаторы. Ключевые слова – это зарезервированные компилятором слова для работы; к ним относятся названия типов, условные операторы, циклы и ряд других конструкций языка, которые подробно рассматриваются далее в этой следующих темах. Как правило, современные среды разработки подсвечивают ключевые слова специальным цветом. В языке Си существует 32 ключевых слова:

auto

break

case

char

const

continue

default

do

double

else

enum

extern

float

for

goto

if

Int

long

register

return

short

signed

sizeof

static

struct

switch

typedef

union

unsigned

void

volatile

while

Идентификаторы – это названия переменных, функций и других объектов, создаваемых программистом или уже созданных в заголовочных файлах. Следует заметить, что активно используемые функции printf(), scanf(), а также название функции main() являются идентификаторами, а не ключевыми словами.

При выборе идентификаторов необходимо придерживаться трех правил:

  1. в идентификаторах можно использовать буквы нижнего и верхнего регистра, цифры и знак подчеркивания «_»;
  2. первым символом в идентификаторе может быть буква или знак подчеркивания;
  3. язык Си чувствителен к регистру букв, например, int и Int – это два разных слова.

Вот примеры корректных и некорректных идентификаторов:

Корректные

Некорректные

_123

1number

my_variable

int

BIG_LETTERS

t^

FLoat

float

a1b2

_$var

Основные арифметические операции

Для работы с переменными используются операции, наиболее часто – арифметические.

Операция

Описание

Пример

+

Сложение

z = x+y

-

Вычитание

z = x-y

-

Изменение знака

z = -x

*

Умножение

z = x*y

/

Деление нацело (если операнды - целочисленные)

z = x/y

/

Деление (если хотя бы один операнд вещественный)

z = x/y

%

Остаток от деления (применим только для целочисленных операндов)

z = x%y

Вывод информации на экран

Для вывода информации на экран на первых порах мы будем использовать C++-ый оператор cout. В дальнейшем мы познакомимся ещё с C-шными функциями вывода, используемыми для форматного вывода. Как правило, этот оператор используется в следующей форме:

cout << <выводимое выражение> << endl;

Например,

cout << "Hello, World!" << endl;

cout << 14 << endl;

float my_variable = 10;

cout << my_variable << endl;

int x=5, y=10;

cout << (x+y) << endl; //Выведет 15

Обратите внимание на то, что для вывода значения переменной нужно указать имя этой переменной. Таким образом, команда

float my_variable = 10;

cout << my_variable << endl;

 

выведет число 10, а команда

cout << "my_variable" << endl;

выведет строку my_variable.

Одной командой можно вывести несколько выражений:

 

cout << "my_variable=" << my_variable << endl;

Эта команда выведет my_variable=10. Для перевода курсора на новую строку используется endl.

Итак, оператор cout может использоваться для вывода на экран переменных и выражений любых типов.

Ввод информации с клавиатуры

Для ввода информации с клавиатуры используйте оператор cin. Необходимо только указать имя переменной, куда будет сохранено введённое значение:

//Ввод символа

char symbol;

cin >> symbol;

//Ввод целого числа

int number;

cin >> number;

//Ввод строки

char str[100];

cin >> str;

//Ввод вещественного числа

float x;

cin >> x;

После ввода указанные переменные будут хранить значения, полученные с клавиатуры. Обратите внимание на то, что при использовании cout ставится значок <<, а при использовании cin – >>.

 

Работа с символами и строками

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

Несколько символов, идущих подряд, образуют строку. Строка – это массив символов. Для объявления строки необходимо указать её имя и максимальный размер:

char my_string[100];

char name[50];

Задать значение строки можно при её объявлении:

char str[] = "Математика – царица наук.";

Вывести строку на экран можно следующими способами:

cout << str << endl;

cout << "Заседание продолжается!" << endl;

cout << 'H'<<'e'<<'l'<<'l'<<'o'<<'!' <<endl;

Обратите внимание на то, что строки заключаются в двойные кавычки, а символы – в апострофы. Это нужно учитывать при работе с ними. Ниже приведены примеры.

//Корректные записи

//Пример 1.

char ch = 'A';

//Пример 2.

char str[] = "Кашу маслом не испортишь";

//Пример 3.

cout << "Назвался груздем — полезай в кузов";

//Пример 4.

cout << "С"; cout << "ы"; cout << "p" << endl;

//Пример 5.

cout << 'С'; cout << 'ы'; cout << 'p' << endl;

//Некорректные записи

//Пример 1. (Символ заключён в кавычки)

char ch = "A";

//Пример 2. (Запись строки в char)

char ch = "Россия";

//Пример 3. (Запись строки в char)

char ch = 'Россия';

//Пример 4 (Строка заключена в апострофы).

char str[] = 'Кашу маслом не испортишь';

//Пример 5 (Строка заключена в апострофы).

cout << 'Кашу маслом не испортишь';

Ввод и вывод русских символов

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

cout<<"Столовая наполнилась неприятным"<<endl;

cout<<"синим сигарным дымом.

Пес дремал,"<<endl;

cout<<"уложив голову на передние лапы"<<endl;

Если текст на экране отобразился нормально, то дальше можно не читать, однако, если вы увидели нечто подобное:

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

Первый, наиболее простой способ, заключается в использовании так называемого транслита. В этом случае можно заменять русские буквы английскими подобно тому, как часто пишут в СМС. Например, вместо фразы «Столовая наполнилась дымом» можно написать «Stolovaya napolnilasdymom». Однако подобный способ – это насилие над русским языком, поэтому намного лучше – научиться работать с русскими буквами.

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

#include <iostream>

using namespace std;

#include <locale.h>

int main() {

setlocale(LC_ALL, "Russian");

cout<<"Столовая наполнилась неприятным"<<endl;

cout<<"синим сигарным дымом.

Пес дремал,"<<endl;

cout<<"уложив голову на передние лапы"<<endl; return 0;

}

После этого текст должен отобразиться так, как требуется:

Однако это еще не все. Рассмотрим пример:

 

setlocale(LC_ALL, "Russian");

char name[20];

cout << "Введите свое имя:";

cin >> name;

cout << "Ваше имя:";

cout << name << endl;

Введенное имя выведется некорректно:

Для устранения проблемы можно использовать второй способ:

#include <iostream>

using namespace std;

#include <windows.h>

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

char name[20];

char name[20];

cout << "Введите свое имя:";

 cin >> name;

 cout << "Ваше имя:";

cout << name << endl;

return 0;

}

Кроме того, нужно сменить шрифт консоли. Щелкните правой клавишей мыши на шапку консоли и выберите Свойства. Выберите вкладку Шрифт и установите Lucida Console.

 

Примеры решения задач

Задача 1. Подоходный налог в России составляет 13%. Напишите программу, которая принимает доход гражданина в рублях и вычисляет фактическую денежную сумму, которую он получит на руки.

//Если работаем в Visual Studio, то

//добавляем эту строку

#include "stdafx.h"

//… для cout и cin

#include <iostream>

using namespace std;

//… для setlocale()

#include <locale.h>

int main() {

 //Корректно отображаем русские сивмолы

setlocale(LC_ALL, "Russian");

//Объявляем переменную для дохода

float income;

 

//Просим пользователя ввести доход

cout << "Введите свой доход:" << endl;

 

//Вводим расстояние

cin >> income;

 

//Вычисляем реальный доход (-13%)

float real_income = income*0.87;

 

//Выводим результат на экран

cout << "Ваш фактический доход составляет "

 << real_income << "рублей" << endl;

return 0;

}

Задача 2. Расстояние от Земли до Солнца составляет 150 000 000 км. Скорость света равна 300 000 км/сек. Напишите программу, которая вычисляет, за какое время свет, стартовавший с Солнца, достигнет поверхности Земли.

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <locale.h>

int main() {

setlocale(LC_ALL, "Russian");

 //Скорость света (км/сек)

 float light_speed = 300000;

//Расстояние от Солнца до Земли (км)

 float distance = 150000000;

 

//Время в секундах

float time_sec = distance/light_speed;

//Время в минутах

float time_min = time_sec/60;

 //Выводим результат на экран

 cout << "Свет достигнет Земли за " <<

 time_sec << " секунд ";

cout<< "или за " << time_min << " минут." <<

endl;

return 0;

}

Задача 3. Напишите программу, которая принимает трёхзначное число и вычисляет сумму его цифр.

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <locale.h>

int main() {

setlocale(LC_ALL, "Russian");

 //Шестизначное число

 int number;

 cout << "Введите трёхзначное число:" << endl;

 cin >> number;

 

//Вычленяем три его цифры

 int d1 = (number/100)%10;

int d2 = (number/10)%10;

int d3 = number%10;

 

//Выводим результат

 cout << "Сумма цифр числа " << number;

 cout << " равна " << (d1+d2+d3) << endl;

return 0;

}

Задача 4. Напишите программу, которая выводит на экран цифру 8 из звёздочек.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main() {

cout << "***" << endl << "* *" << endl;

cout << "***" << endl << "* *" << endl;

cout << "***" << endl;

 return 0;

}

Задача 5. Напишите программу, которая принимает фамилию, имя и отчество человека, а затем выводит его полное имя.

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <windows.h>

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

 

char first_name[100];

char surname[100];

char patronymic[100];

 

cout << "Введите Вашу фамилию: ";

cin >> surname;

 

cout << "Введите Ваше имя: ";

cin >> first_name;

cout << "Введите Ваше отчество: ";

cin >> patronymic;

cout << "Ваше полное имя:" << endl;

 cout << surname << " " << first_name

<< " " << patronymic << endl;

return 0;

}

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Опишите структуру программы на языке Си.
  2. Какая директива подключает библиотеку?
  3. Какую библиотеку нужно подключить для работы с операторами cout и cin?
  4. Что такое комментарий? Какие типы комментариев существуют в языке Си? Как выделить комментарий?
  5. Перечислите известные вам типы данных, которые есть в языке Си. Какой размер в памяти занимают переменные этих типов? Какие значения они могут принимать?
  6. Объясните, чем отличаются ключевые слова от идентификаторов? Какие правила нужно соблюдать при создании имен переменных? Приведите примеры корректных и некорректных идентификаторов.
  7. Объясните, как работает операторы cout и cin. Приведите примеры. Зачем нужна команда endl?
  8. Какие основные арифметические операторы существуют в языке Си?
  9. Как выполнить деление нацело и вычислить остаток от деления?
  10. Объясните, в чём заключается различие между кавычками и апострофами при работе с символами и строками. Приведите примеры.
  11. Как сделать так, чтобы русские символы отображались корректно?
  12. Какую библиотеку нужно подключить для работы с функцией setlocale()?
  13. Какая библиотека требуется для работы с функциями SetConsoleCP() и SetConsoleOutputCP()?
  14. Какой из значков << или >> используется в операторе cout (cin)?
  15. Какие значки используются в Си в качестве аналогов для begin и end в Паскале?

 

А также другие работы, которые могут Вас заинтересовать

70539. ОПОРНИЙ КОНСПЕКТ ЛЕКЦІЙ ІЗ ДИСЦИПЛІНИ МАКРОЕКОНОМІКА 2.15 MB
  В трансформаційних умовах розвитку економіки України всім учасникам ринкових перетворень потрібний базовий обсяг економічних знань. Що ж до майбутніх фахівців з економіки та менеджменту – студентів економічних спеціальностей, то необхідним є вивчення не лише базового курсу економічної теорії...
70542. БЕЗОПАСНОСТЬ ЖИЗНЕДЕЯТЕЛЬНОСТИ: КОНСПЕКТ ЛЕКЦИЙ 1.36 MB
  Учебная дисциплина БЖД обязательная общеобразовательная дисциплина в которой соединена тематика безопасного взаимодействия человека со средой обитания и вопросы защиты от негативных факторов и чрезвычайных ситуаций. В результате изучения курса Безопасность жизнедеятельности специалист...
70543. Моя родина 16.8 KB
  Програмовий зміст: формувати у дітей поняття «родина, сім'я», виховувати любов до свої родини і до свої родичів, розвивати навички спілкування, відповідати на запитання вихователя; вчити помічати гендерні відмінності, уважно слухати художній твір, виконувати рухи, відповідні до тексту...
70545. Этапы развития технических средств и информационных ресурсов 17.31 KB
  Критерии информационной культуры человека: 1 умение адекватно формулировать потребность в информации; 2 эффективно осуществлять поиск нужной информации; 3 перерабатывать информацию и создавать качественно новую; 4 наличие коммуникативных навыков Развитие мировых информационных...