Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1 - Лекция1_ОсновыЯзыкаСи.docx
Скачиваний:
6
Добавлен:
23.11.2019
Размер:
335.52 Кб
Скачать

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

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

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

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

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

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

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

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

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

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

#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;

system("pause");

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;

system("pause");

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;

system("pause");

return 0;

}

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

#include "stdafx.h"

#include <iostream>

using namespace std;

int main() {

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

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

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

system("pause");

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;

system("pause");

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 в Паскале?