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

 
на правах рекламы


Проверка ошибок ввода в языке программирования Си


Цель работы: ознакомиться с возможностями функции scanf(). Научиться составлять условные алгоритмы на примере алгоритма проверки ошибок ввода данных. Реализовать алгоритм на языке Си.

1. Разветвляющиеся (условные) алгоритмы


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

Шаг 1. Задать х.


Шаг 2. ЕСЛИ х=0 ТО f := 1 ИНАЧЕ f := .
КОНЕЦ


Эта управляющая конструкция носит название развилка (проверка условия, условная конструкция) – ЕСЛИ условие ТО действия при истинном условии ИНАЧЕ действия при ложном условии.

2. Условная конструкция в языке Си


Для организации ветвления алгоритма в Си используется оператор проверки условия if (логическое выражение) {действия при истинном значении выражения} else {действия при ложном значении выражения}. Оператор else может отсутствовать, если это обусловлено алгоритмом.

Логическое условие может быть сложным, т.е. может состоять из нескольких условий, связанных между собой логическими операциями:
- «И» (конъюнкция), в Си оператор &&, все логическое выражение считается истинным только в том случае, если истинны все простые выражения.
- «ИЛИ» (дизъюнкция), в Си оператор ||, все логическое выражение считается ложным только в том случае, если ложны все простые выражения.

Например, запишем следующее условие «Если переменная x меньше переменной y и переменная x меньше переменной z»: x
Если в блоках программы, выполняющихся при истинности или ложности условия необходимо выполнить два и более действий, эти блоки определяются фигурными скобками. Приведем примеры.
- Если x < y, то вывести на экран значение суммы x и y, значение переменной x заменить на 10.
if (x %d”,x+y);
x = 10;
}


- Если x не равно y вывести на экран соответствующее сообщение, в противном случае вывести на экран значения переменных переменную x увеличить в два раза.

if(x!=y)
printf(“Переменные имеют неравные значения”);
else {
printf(“x = %d, y = %d\n”,x,y);
x*=2;
}


3. Возможности функции scanf()


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

int y,n;
printf(“Введите значение переменной n: ”);
y = scanf(“%d”,&n);
if (y!=1) {printf(“Введены неверные данные…\n ”);
system(“pause”);
exit(0);
}
else { …}


В рассмотренном примере количество вводимых полей – 1 (вводится одна переменная n). Следовательно, если переменная y не принимает значение один – произошла ошибка ввода. На экран выводятся соответствующие сообщения. Программа ожидает нажатия клавиши и заканчивает работу (exit). В случае успешной работы выполняется часть программы, описанная в блоке else.
При одном вызове функции возможно ввести более одной переменной. В этом случае спецификаторы формата пишутся один за другим, без пробелов. Каждому спецификатору должен соответствовать свой адрес переменной. При этом scanf при успешном вводе возвращает количество успешно считанных полей. Например:


float x,y,z;
printf(“Введите значения переменных x,y и z: ”);
int m = scanf(“%f%f%f”,&x,&y,&z);


После успешного выполнения программы значение переменной m примет значение 3.

4. Задание на лабораторную работу


Составить и записать алгоритм решения индивидуального задания с проверкой корректности данных. По составленному алгоритму написать программу на языке Си.

5. Порядок выполнения работы


1. Получить индивидуальное задание
2. По индивидуальному заданию определить типы и значения данных, являющиеся некорректными для задачи.
3. Составить и записать алгоритм решения задачи
4. Составить программу, реализующую алгоритм:
4.1.Описать входные и выходные данные
4.2.Ввести данные с клавиатуры
4.3.Проверить входные данные
4.4.Вычислить значение функции
4.5.Вывести полученное значение на экран
4.6.Вывести личные данные
4.7.Выполнить компиляцию проекта
5. Защитить работу


Задание оценивается в 5 баллов:
1 балл алгоритм,
1 балл – код программы,
3 балла ответы на вопросы.

6. Пример выполнения задания


Задание: Даны x, y, z. Вычислить a, b, если
Проверка ошибок ввода в языке программирования Си
и
Проверка ошибок ввода в языке программирования Си.
. Значения x,y,z вводить с клавиатуры.

2. Определение некорректных данных- символьные данные;
  • , ошибка деления на 0;
  • , ошибка извлечения квадратного корня, ошибка деления на 0;
  • , ошибка извлечения корня четвертой степени
  • , - ошибка деления на 0;
  • , - ошибка деления на 0.
3. Алгоритм 1. Ввести c клавиатуры значения x,y,z
2. Если x или y или z – не число, то вывести
сообщение “Введены не
числа”
перейти на 10
3. ЕСЛИ z-x=0 или x = 0, ТО вывести
сообщение “Ошибка деления на 0”
перейти на 10
  1. ЕСЛИ или ТО вывести
сообщение
“Ошибка
извлечения корня”
перейти на 10
5. Вычислить
6. Вывести значение a на экран
7. ЕСЛИ a = 0 или a = z ТО вывести
сообщение
“Ошибка деления на 0”
перейти на 10
8. Вычислить
9. Вывести значение b на экран
10. Конец
4.Составление программыДля использования математических функций и констант подключите библиотеку математических функций:
#include <math.h>
4.6.Вывод личных данныхprintf(“Программу выполнил Иванов Андрей Сергеевич\n”);
4.1.Описание переменныхfloat x,y,z,a,b;
4.2. Ввод данных с клавиатурыprintf(“Введите значения переменных: ”); int m = scanf(“%f%f%f”,&x,&y,&z);
4.3.Проверка входных данныхif (m!=3) {printf (“Введены не числа\n”);
system(“pause”);
exit(0);}
if (x==0 ||z-x==0) {printf (“Ошибка деления на 0\n”);
system(“pause”);
exit(0);}
float temp = x – y/sqrt(x) ;
if (temp<0||x<0) {printf (“Ошибка извлечения
корня\n”);
system(“pause”);
exit(0);}
4.4Вычисление значения функцииa = 2*y/(z-x)-fabs(x);a = a*pow(temp,1/4.);
4.5 Вывод результатаprintf(“Значение а = %9.3f\n”,a);
4.3.Проверка входных данныхif (a==0 ||a==z) {printf (“Ошибка деления на 0\n”); system(“pause”); exit(0);}
4.4Вычисление значения функцииb = a – x/(2*a)+ x*x/(a-z);
4.5 Вывод результатаprintf(“Значение b = %9.3f\n”,b);


Пример программы на Си – папка Dev-lab2.

7. Контрольные вопросы


1. Что возвращает функция scanf?
2. Запишите функцию scanf для ввода трех переменных.
3. Что Вы понимаете под некорректными данными?
4. Какие данные будут некорректными для решения следующей задачи – “Даны длины трех сторон треугольника. Найдите площадь треугольника.”
5. Как в Си реализована условная конструкция структурного программирования?
6. Опишите синтаксис конструкции if else языка Си.
7. Какое значение примет переменная m после выполнения следующего фрагмента программы:

float i;
int j;
int m = scanf(“%f%d”,&i, &j);

если с клавиатуры были введены значения 3 2?

8. Какое значение примет переменная m после выполнения следующего фрагмента программы:

float i;
int j;
int m = scanf(“%f%d”,&i, &j);

если с клавиатуры были введены значения 3 d?

9. Какое значение примет переменная x после выполнения следующего фрагмента программы:

int x = 10;
int k = 12,z = 74;
if (k


10. Какое значение примет переменная x после выполнения следующего фрагмента программы:

int x = 10;
int k = 31,z = 22;
if (k

Теги: Программирование, Си

Комментарии:

Оставить комментарий
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.