Ввод и вывод русских символов
При выводе на консоль русские символы могут отображаться некорректно. Попробуйте запустить следующий пример:
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 в Паскале?