Программирование на С, С++
Шрифт:
В default мы указали случай, в котором пользователь вводит цифру, не являющуюся номером пункта меню. А что будет если пользователь введет букву. Возможно зацикливание и т.п. Чтобы этого не было. Нам необходимо предусмотреть ввод не цифр, а букв.
Листинг 6
Программа с меню
1 #include<stdio.h>
2 main
3 {
4 int a;
5 char d;
6 do
7 {
8 printf(" MENU \n1. Kvadrat chisla\n2. Kub chisla\n3. Vuhod\nVuberite punkt menu\n");
9 scanf("%s",&d);
10 switch(d)
11 {
12 case ‘1’:
13 printf("Vvedite chislo\n");
14 scanf("%d",&a);
15 printf("Kvadrat chisla raven %d\n",a*a);
16 break;
17 case ‘2’:
18 printf("Vvedite chislo\n");
19 scanf("%d",&a);
20 printf("Kub chisla raven %d\n",a*a*a);
21 break;
22 case ‘3’:
23 break;
24 default:
25 printf("Nevernui vvod!\n\n");
26 }
27 }
28 while(d!=3);
Задания:
Спроектировать
Оператор for
Оператор for – это оператор цикла, обобщение оператора while [4]. Оператор for:
for (int i=0; i<n; i++)
{
….
}
int i=0 – инициализация,
i<n – проверка условия,
i++ – модификация.
Каждый раз выполняется тело цикла, в конце идет модификация (в данном случае i++), поэтому цикл будет выполняться столько раз, сколько указано в условиях, если условие верно, то выполняется тело еще раз.
Задание: вычислить значение функции y=x*x-4*x при х от 100 до 200 включительно, начиная от 100 с шагом 20. Решение задачи в Листинге 7, результат решения Листинга 7 на Рисунке 1.
Листинг 7
#include<iostream>
using namespace std;
int main
{
int y;
for(int x=100;x<=200;x=x+20)
{
y=x*x-4*x;
cout<<"y("<<x<<")="<<y<<endl;
}
}
Рисунок 1
Типы данных
Типы данных:
char хранит символ (один байт),
int – целочисленные значения,
float – вещественные значения с одинарной точностью,
double – вещественное значения с двойной точностью и т.д.
Модификаторы:
short – короткое целое,
long – длинное целое.
Диапазон значений зависит от аппаратной и системной платформы.
Например, int будет или 16, или 32. Узнать это возможно, используя операцию sizeof, она возвращает размер в байтах, смотри Листинг 8, Рисунок 2.
Листинг 8
#include<iostream>
using namespace std;
int main
{
cout<<sizeof(int);
}
Рисунок 2
Время
Программный блок – это часть программы между фигурными скобками.
Локальные переменные живут только во время программного блока. Локальные переменные объявлены внутри блока.
Глобальная переменная живет на протяжении всей жизни программы. Глобальная переменная объявляется вне блоков программы.
Пример в Листинге 9. Если убрать скобки в строках 8 и 9, компилятор выдаст ошибку.
Листинг 9
1#include<iostream>
2using namespace std;
3
4 int main
5 {
6 int i=10;
7 cout<<i;
8 {
9 int i=11;
10 cout<<endl<<i;
11 }
12}
Преобразование типов
В зависимости от версии компилятора, округление будет либо в большую, либо в меньшую сторону. Смотри Листинг 10, Рисунок 3.
Листинг 10
#include<iostream>
using namespace std;
int main
{
int y;
y=(int)(3/10);
cout<<y<<endl;
y=(int)(10/3);
cout<<y;
}
Рисунок 3
Поразрядные операции
Напишите программу, которая переводит введенное положительное число в двоичное систему счисления и выводит на экран результат перевода.
Пример решения задания в Листинге 11.
Листинг 11
#include <iostream>
using namespace std;
void dv(int a)
{
int b[100];
int i=0;
while(a>1)
{
b[i]=a%2;
a=(a-a%2)/2;
i++;
}
b[i]=a;
for(int j=i;j>=0;j–)
cout<<b[j];
}
int main
{
int a;
cin>>a;
dv(a);
return 0;
}
Ниже даны тесты для проверки задач программы.
Тест 1
a=10
Результат
1010
Тест 2
a=2
Результат
10
Тест 3
a=8
Результат
1000
Поразрядные операции применимы только к целочисленным аргументам (char, short, int и long).
& – поразрядное И
| – поразрядное включающее ИЛИ
^ – поразрядное исключающее ИЛИ
<< – сдвиг влево
>> – сдвиг вправо
~ – одноместное поразрядное дополнение до единицы
В побитовых операциях работа идет над каждым битом.