Операторы ветвления и логические операции.




Оператор if. Оператор if else. Логические операции &&, || и!. Библиотека символьных функций cctype. Условная операция?:. Оператор switch. Операторы continue и break. Циклы чтения чисел. Базовый файловый ввод-вывод.

 

// more_and.cрр -- использование оператора if else и логической операции "И"

#include <iostream>

const char * qualify[4] = // массив указателей на строки

{

"10,000-meter race.\n", // забег на 10 000 метров

"mud tug-of-war.\n", // перетягивание каната в грязи

"masters canoe jousting.\n", // состязания мастеров каноэ

"pie-throwing festival.\n" // фестиваль по бросанию пирожков

};

int main ()

{

using namespace std;

int age;

cout «"Enter your age in years: "; // запрос возраста в годах

cin » age;

int index;

if (age > 17 && age < 35)

index = 0;

else if (age >= 35 && age < 50)

index = 1;

else if (age >= 50 && age < 65)

index = 2;

else

index = 3;

cout «"You qualify for the " «qualify[index]; // вывод рекомендованного результата

return 0;

}

 

// cctypes.cpp — использование библиотеки ctype.h

#include <iostream>

#include <cctype> // прототипы символьных функций

int main()

{

using namespace std;

cout «"Enter text for analysis, and type @"

“ to terminate input. \n"; // запрос текста для анализа; завершающий символ - @

char ch;

int whitespace = 0;

int digits = 0;

int chars = 0;

int punct = 0;

int others = 0;

cin.get(ch); // получение первого символа

while (ch!= '@') // проверка на признак окончания ввода

{

if(isalpha(ch)) // буквенный символ?

chars++;

else if(isspace(ch)) // пробельный символ?

whitespace++;

else if(isdigit(ch)) // десятичная цифра?

digits++;

else if(ispunct(ch)) // знак препинания?

punct++;

else

others++;

cin.get(ch); // получение следующего символа

}

cout «chars «" letters, "

«whitespace << " whitespace, "

«digits << " digits, "

«punct «" punctuations, "

«others «" others.\n";

return 0;

// вывод количества букв, пробелов, цифр,

// знаков препинания и прочих символов

}

 

// condit.срр — использование условной операции?:

#include <iostream>

int main ()

{

using namespace std;

int a, b;

cout << "Enter two integers: "; // запрос на ввод двух целых чисел

сіn » а » b;

cout «"The larger of " «a «" and " «b;

int c = a > b? a: b; // с = а, если а > b, иначе с = b

cout << " is " << с << endl; // вывод большего из указанных чисел

return 0;

}

 

// switch.ерр — использование оператора switch

#include <iostream>

using namespace std;

void showmenu (); // прототипы функций

void report();

void comfort();

int main()

{

showmenu();

int choice;

cin » choice;

while (choice!= 5)

{

switch(choice)

{

case 1: cout «"\a\n";

break;

case 2: report();

break;

case 3: cout «"The boss was in all day.\n";

break;

case 4: comfort();

break;

default: cout «"That's not a choice. \n";

}

showmenu();

cin » choice;

}

cout «"Bye!\n";

return 0;

}

void showmenu()

{

cout << "Please enter 1, 2, 3, 4, or 5:\n"

"1) alarm 2) report\n"

"3) alibi 4) comfort\n"

"5) quit\n";

}

void report()

{

cout «"It's been an excellent week for business. \n"

"Sales are up 120%. Expenses are down 35%.\n";

}

void comfort()

{

cout «"Your employees think you are the finest CEO\n"

"in the industry. The board of directors think\n"

"you are the finest CEO in the industry. \n";

}

 

// outf ile. cpp -- запись в файл

#include <iostream>

#include <fstream> // для файлового ввода-вывода

int main()

{

using namespace std;

char automobile[50];

int year;

double a_price;

double d_price;

ofstream outFile;

outFile.open("carinfo.txt");

cout «"Enter the make and model of automobile:

cin.getline(automobile, 50);

cout «"Enter the model year: ";

cin >> year;

cout << "Enter the original asking price: ";

cin >> a_price;

d_price = 0.913 * a_price;

cout << fixed;

cout.precision(2);

cout.setf(ios_base::showpoint);

cout << "Make and model: " «automobile << endl;

cout «"Year: " «year «endl;

cout << "Was asking $" << a_price << endl;

cout << "Now asking $" << d_price << endl;

// Вывод той же информации с использованием outFile вместо cout

outFile << fixed;

outFile.precision(2);

outFile.setf(ios_base::showpoint);

outFile << "Make and model: " << automobile «endl;

outFile «"Year: " «year «endl;

outFile «"Was asking $" «a_price «endl;

outFile «"Now asking $" «d_price «endl;

outFile.close(); // завершить работу с файлом

return 0;

}

 

// sumfile.cpp -- чтение файла

#include <iostream>

#include <fstream> // поддержка файлового ввода-вывода

#include <cstdlib> // поддержка exit()

const int SIZE = 60;

int main()

{

using namespace std;

char filename[SIZE];

ifstream inFile; // объект для обработки файлового ввода

cout «"Enter name of data file: // запрос имени файла данных

cin.getline(filename, SIZE);

inFile.open(filename); // ассоциирование inFile с файлом

if (!inFile.is_open()) // не удалось открыть файл

{

cout «"Could not open the file " << filename «endl;

cout «"Program terminating.\n";

exit(EXIT FAILURE);

}

double value;

double sum = 0.0;

int count = 0; // количество прочитанных элементов

inFile >> value; // ввод первого значения

while (inFile.good())// пока ввод успешен и не достигнут EOF

{

++count; // еще один элемент прочитан

sum += value; // вычисление текущей суммы

inFile » value; // ввод следующего значения

}

if (inFile.eof())// достигнут конец файла

cout «"End of file reached.\n";

else if (inFile.fail()) // ввод прекращен из-за несоответствия типа данных

cout «"Input terminated by data mismatch.\n";

else // ввод прекращен по неизвестной причине

cout «"Input terminated for unknown reason.\n";

if (count == 0) // данные для обработки отсутствуют

cout «"No data processed.\n";

else

{

cout << “Items read: " << count «endl;

cout «“Sum: " «sum «endl;

cout «"Average: " «sum / count «endl;

}

inFile.close();

return 0;

}

 

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

2. Напишите предшественник программы, управляемой меню. Она должна отображать меню из четырех пунктов, каждый из них помечен буквой. Если пользователь вводит букву, отличающуюся от четырех допустимых, программа должна повторно приглашать его ввести правильное значение до тех пор, пока он этого не сделает. Затем она должна выполнить некоторое простое действие на основе пользовательского выбора. Работа программы должна выглядеть примерно так:

Please enter one of the following choices:

c) carnivore p) pianist

t) tree g) game

f

Please enter a c, p, t, or g: q

Please enter a c, p, t, or g: t

A maple is a tree.

3. Напишите программу, которая читает слова по одному за раз, пока не будет введена отдельная буква q. После этого программа должна сообщить количество слов, начинающихся с гласных, количество слов, начинающихся с согласных, а также количество слов, не попадающих ни в одну из этих категорий. Одним из возможных подходов может быть применение isalpha() для различения слов, начинающихся с букв, и остальных, с последующим применением if или switch для идентификации тех слов, прошедших проверку isalpha(), которые начинаются с гласных. Пример запуска может выглядеть так:

Enter words (q to quit):

The 12 awesome oxen ambled

quietly across 15 meters of lawn, q

5 words beginning with vowels

4 words beginning with consonants

2 others

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

Задание на дом

1. Королевство Нейтрония, где денежной единицей служит тварп, использует следующую шкалу налогообложения: первые 5 000 тварпов — налог 0%, следующие 10 000 тварпов — налог 10%, следующие 20 000 тварпов — налог 15%, свыше 35 000 тварпов — налог 20%. Напишите программу, которая использует цикл для запроса доходов и выдачи подлежащего к выплате налога. Цикл должен завершаться, когда пользователь вводит отрицательное или нечисловое значение.

2. Постройте программу, которая отслеживает пожертвования в Общество Защиты Влиятельных Лиц. Она должна получать из файла количество меценатов, их имена и суммы пожертвований от каждого. Информация должна сохраняться в динамически выделяемом массиве структур. Каждая структура должна иметь два члена: символьный массив (или объект string) для хранения имени и переменную-член типа double — для хранения суммы пожертвования. После чтения всех данных программа должна отображать имена и суммы пожертвований тех, кто не пожалел $10 000 и более. Этот список должен быть озаглавлен меткой "Grand Patrons". После этого программа должна выдать список остальных жертвователей. Он должен быть озаглавлен "Patrons". Если в одной из двух категорий не окажется никого, программа должна напечатать "nоnе". Помимо отображения двух категорий, никакой другой сортировки делать не нужно.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2018-01-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: