Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы алгоритмизации и программирования. Часть 1. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
каждое новое задание будем выполнять в отдельной функции, а из функции
4
1
=ay
#include <stdio.h> #include <conio.h> void zadanie1(); //объявление функции void main() { //вызов функции zadanie1() zadanie1(); } void zadanie1() { //вывод сообщения на экран printf("Hello, world"); getch(); }
main()- вызывать функцию, выполняющую требуемое задание.
Поскольку выполнение начинается с функции main(), то ей должны
быть известны спецификации (имена, количество и тип параметров, тип возвращаемого значения) всех функций, которые из нее вызываются. Отсюда следует, что объявляться функции должны до того, как будут вызваны. А вот определение функции уже может следовать и до, и после main().
В тексте программы внесите следующие изменения, представленные на рис. 2.6. Обратите внимание, что символом // отмечается начало комментария, который позволяет делать пояснения к программе. Комментарии в Visual Studio выделяются зеленым цветом.
8. Скомпилируйте и исполните измененную программу, повторно
сохраните проект.
Рис. 2.6
где a - число, равное 3. (Ответ: z = 65640,45.)
Вычислите значение выражения z = x2 + y3 при x = 256,2 и
ЗАДАНИЕ 2
,
51
ТЕХНОЛОГИЯ РАБОТЫ
227 xx
xxx 84
3
Рис. 2.7
#include <math.h> //объявление функ. zadanie2() void zadanie2();
void main() { //zadanie1(); zadanie2(); } void zadanie2() { float a,x,y,z; //Ввод вещественных чисел x и a printf("Input x= "); scanf("%f",&x); printf("\nInput a= "); scanf("%f",&a); //Расчет y и z y = 1 / (pow(a,(1/4))); z = pow(x,2) + (y,2); //вывод результата z printf("\nz= %.2f",z); getch(); }
1. В программе добавьте директиву #include, при-
соединяющую заголовочный файл math.h (рис. 2.7),
поскольку в функции будем производить математические расчеты. Ниже объявите но­вую функцию zadanie2().
В главной функции main()
добавьте вызов создаваемой функции zadanie2().
Для того чтобы первая, ранее созданная, функция zadanie1() не отвлекала от отладки новой функции, в процедуре main() закомментируйте zadanie1(), поставив перед ней символы однострочного комментария //.
после исправления ошибок (если они имеются) перейдите к ее исполнению командой Start Debugging. Проверьте полученный результат.
двух нижеследующих арифметических выражений (в зависимости от числа студентов, работающих на компьютере).
самостоятельной задачи индивидуального варианта из табл. 1.8.
3. Выполните компиляцию программы по команде Build, Build Solution,
4. Самостоятельно составьте программы для вычисления одного или
1) y =
2) y =
при х = 3. (Ответ: y = 4.)
при х = 14,933. (Ответ: y = 1.)
5. Самостоятельно создайте функцию для решения первой
Под функцией zadanie1()
введите текст функции zadanie2(), листинг кото­рой представлен на рис. 2.7.
52
2.4. Логические выражения и условные операторы
Операция сравнения
Знак операции
Равно
==
Не равно
!=
Меньше
<
Больше
>
Меньше или равно
<=
Больше или равно
>=
Логические выражения содержат три основных логических операции:
отрицание - !, логическое “И” - &&, логическое “ИЛИ” - ||.
Значения «истина» или «ложь» дают результаты операций сравнения,
представленные в табл. 2.3.
Таблица 2.3
Условный оператор if в языке С записывается в виде:
if ( Условие) Оператор 1 [else Оператор 2], где Условие, заключенное в круглые скобки, - это любое выражение, считающееся истинным, если оно не равно нулю. Отличие от языка Basic заключается в отсутствии ключевого слова then и в том, что перед else ставится ;.
В табл. 2.4 приведены условные операторы в виде блок-схем и описаний на языке C. В первой строке табл. 2.4 дается условный оператор с неполным ветвлением, во второй - с полным ветвлением, а в третьей - с полным ветвлением и двумя условиями.
Если в табл. 2.4. оператор содержит несколько операторов, то их нужно заключать в логические скобки {}.
53
Условный оператор switch имеет вид:
switch (Выражение) {
case конст1: [Оператор 1]
case конст2: [Оператор 2]
…
default: [Оператор]
}
Выражение в скобках должно иметь целый тип; конст1, конст2 - константные выражения целого типа. Порядок выполнения оператора switch
следующий: вычисляется выражение в скобках, если его значение равно значению какого-либо из константных выражений, происходит переход к оператору, стоящему после этого константного выражения, в противном случае - к оператору, стоящему после метки default. Выхода из оператора
switch автоматически не происходит, в отличие от аналогичного оператора в языке Basic. Для этого воспользуемся оператором выхода break.
Рассмотрим примеры задач на языке С, которые понадобятся при выполнении самостоятельной работы. Напоминаем, что язык С чувствителен к регистру.
Пример 2.1. Применяя логические операции, операции сравнения из
табл. 2.3 и условный оператор с полным ветвлением из табл. 2.4, рассмотрим на языке С программы для:
а) определения наибольшего (max) среди двух чисел a и b:
if (a>b)
max = a;
else
max = b;
54
Таблица 2.4
0 или 3 если 4,
3;≤≤ 0 если ,
2
xx
xx
f
 
 
7 если ,ln
;1 если ,4
;71 если ,93
3
xx
xx
xx
f
Блок-схема
С
if (Условие) Оператор;
if (Условие) Оператор 1;
else
Оператор 2;
if (Условие 1) Оператор 1;
else if ( Условие 2) Оператор 2;
else
Оператор 3;
1
3
Условие
Оператор
Нет
Да
2
Условие
Оператор 2
Оператор 1
Нет
Да
Условие 1
Условие 2
Оператор 1
Оператор 2
Оператор 3
Нет
Нет
Да
Да
б) вычисления значения функций
для заданного x
if (x>=0 && x<=3)
f = pow(x,2);
else
в) вычисления значения функции
f = 4;
55
для заданного х
if (x>=1 && x<=7)
f = 3*x+9;
else if (x<1)
f = 4*pow(x,3);
else
f = log(x);
Пример 2.2. Рассмотрим на языке C программы для:
а) вычисления суммы S, среднего значения Sr и количества No отрицательных чисел среди чисел a, b, c. Программа на языке С будет иметь вид
S=0; No=0;
if (a<0) {
S=S+a;
No=No+1;
}
S=S+b; No=No+1;
}
S=S+c; No=No+1;
}
б) определения, имеется ли среди трех чисел a, b, c только одно
положительное число.
if (b<0) {
if (c<0) {
Sr=S/No;
Указание: должно выполняться условие ((a>0) И (b<0) И (c<0)) ИЛИ ((b>0) И (a<0) И (c<0)) ИЛИ ((c>0) И (a<0) И (b<0)). Вывод словесный: “Имеется” или “Не имеется”. Ниже приводится программа на BASIC, содержащая условие и вывод.
56
if ((a>0 && b<0 && c<0)||(b>0 && a<0 &&
случае. противном в 1
; если ,
xy
yxyx
Z
x y Z
2
45
44
0,5
56,6
57,1
15
15
1
c<0)||
(c>0 && a<0 && b<0)
printf(“Имеется”);
else
printf(“Не имеется”);
д) подсчета суммы S чисел a, b, c, d, делящихся без остатка на 3.
Тогда программа на на языке С будет иметь вид
S=0; if (fmod(a,3)==0) S=S+a; if (fmod(b,3)==0) S=S+b; if (fmod(c,3)==0) S=S+c; if (fmod(c,3)==0) S=S+d;
ЗАДАНИЕ 3
Составьте функцию zadanie3() для вычисления математического выражения, содержащего условные операторы.
Даны два вещественных числа - x и y. Вычислить значения функции
Ответ:
ТЕХНОЛОГИЯ РАБОТЫ
1. Самостоятельно нарисуйте в тетрадь блок-схему для решения поставленной задачи, а затем приступите к набору функции на рис. 2.8, компиляции, отладке и выполнению программы. Указание: не забудьте объявить новую функцию zadanie3(), а также в главной функции main()
добавить вызов функции zadanie3().
57
 
 
.1
;10,
;0,0
2
2
случаяхдругихвх
xеслих
хесли
y
Ответ:
х
у
-35
0
2,08
3,32
0,3
0,09
void zadanie3() { float x,y,z; //Ввод вещественных чисел x,y printf("Input x= "); scanf("%f",&x); printf("\nInput y= "); scanf("%f",&y); //полное ветвление if (x>y) z=x-y; else z=y-x+1; printf("\nz= %.2f",z); getch(); }
Рис. 2.8
2. Самостоятельно составь-
те блок-схему, наберите и испол­ните программу для вычисления математического выражения с условием, приведенным ниже (пример 2.1, в).
Составьте функцию zadanie4() на языке С с применением оператора
switch, которая по заданному числу от 1 до 3 выводит его название.
ТЕХНОЛОГИЯ РАБОТЫ
1. Самостоятельно нарисуйте в тетради блок-схему для решения поставленной задачи, а затем приступите к набору программы на рис. 2.9, ее компиляции, отладке и выполнению.
2. Самостоятельно составьте блок-схему, наберите и запустите программу для следующей задачи: написать программу, которая по заданному номеру дня недели выводит его название.
3. Самостоятельно создайте функции для решения второй группы самостоятельных задач индивидуального варианта из табл. 1.8.
ЗАДАНИЕ 4
58
void zadanie4() { int x; //Ввод целого x printf("Input x= "); scanf("%d",&x); //оператор switch switch (x) { case 1: { printf("\nOne");break; } case 2: { printf("\nTwo");break; } case 3: { printf("\nThree");break;} default:{ printf("\nNone");break; } //break - оператор выхода } getch(); }
Рис. 2.9
2.5. Циклы и массивы
В п. 1.5 были рассмотрены циклы с параметром (1, 2),
предусловием (3) и постусловием (4), блок-схемы которых и описание
на языке С представлены в табл. 2.5.
Цикл for имеет вид:
for([инициализирующее выражение]; [логическое выражение]; [корректирующее
выражение]) [ Тело цикла ]
например,
for(i=1; i<m; i=i+1) p=p*i;
которое можно также записать следующим образом:
for(i=1; i<m; i++) p=p*i;
Оператор цикла while записывается в виде:
while( Условие )[ Тело цикла ]
и выполняется до тех пор, пока Условие в скобках истинно, например:
while(i<n) {S=S+i; i=i+1;}
или
while(i<n) {S+=i; i++;}
Оператор цикла do..while записывается в виде:
do [ Тело цикла ] while( Условие ),
59
например:
Блок-схема
С
for(i=n; i<k; i=i+h) { [ Тело цикла ]
}
for(i=n; i<k; i=i+h) for(i=m; i<l; i=i+r) {
[ Тело цикла ]
}
while(Условие) {
[ Тело цикла ]
}
do {
[ Тело цикла ]
}
while(Условие)
1
2
3
4
i = n, k, h
Тело цикла
i = n, k, h
j = m, l, r
Тело цикла
Условие
Тело цикла
Да
Нет
Условие
Тело цикла
Да
Нет
do {S+=i; i++;} while(i<n)
и выполняется до тех пор, пока истинно Условие, которое проверяется после выполнения цикла.
Таблица 2.5
Определение массивов. Описание массивов имеет вид: одномерного {Тип элементов массива} Имя_массива[длина],
например: int a[5],
например: float a[3][4].
и двумерного {Тип элементов массива} Имя_массива[длина1][длина2],
Индексы элементов любого массива начинаются с нуля.
60
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]