Переменные и базовые типы данных языка С
Практическая часть
Для приводимых примеров будем приводить только текст программы и результат ее выполнения. Программы должны быть написаны в Visual Studio (см. тему 1).
Пример 1. Напишите программу ввода символа, строки, действительных и целых чисел. Действительные числа сложите, целые числа перемножьте. Для действительных чисел использовать типы float и double.
Программный код решения примера:
#include <stdio.h> #include <conio.h> int main (void) { // Объявления char ch, str[79+1];// С учетом одного места для символа '\0' int x, y, z; float a, b, c; double A, B, C; // Выполнение программы printf("\n\t Enter a symbol: "); ch = getchar(); printf("\t The symbol is: %c\n", ch); _flushall(); printf("\n\t Enter a string: "); gets_s(str, 79); printf("\t The string is: %s\n", str); a = 2.42F; b = 3.58F; c = a + b; printf("\n\t The sum %1.2f and %1.2f (as float) is equal: %1.4f\n", a, b, c); A = 12.1234567796602; B = 2.7182818284509; C = A + B; printf("\n\t The sum %1.13f and %1.13f \n\t is equal (as double): %1.13f\n", A, B,C); x = 2; y = 7; z = x*y; printf("\n\t Multiplication %d on %i (as an integer) is equal: %d\n", x, y, z); printf("\n\n Press any key: "); _getch(); return 0; }
В объявлении символьного массива str[79+1] в методических целях сделано напоминание, что для строки следует предусмотреть символ ее завершения, т. е. '\0'. В определении переменных типа float добавлены суффиксы F.
Результат выполнения программы показан на рис. 2.1.
Добавим считывание данных с помощью функции scanf_s(). В результате получим следующую программу:
#include <stdio.h> #include <conio.h> int main (void) { // Объявления char ch, str[79+1]; int x, y, z; float a, b, c; double A, B, C; // 1-я часть printf("\n\t Enter a symbol: "); ch = getchar(); printf("\t The symbol is: %c\n", ch); _flushall(); printf("\n\t Enter any string: "); gets_s(str, 79); printf("\t The string is: %s\n", str); a = 2.42F; b = 3.58F; c = a + b; printf("\n\t The sum %1.2f and %1.2f (as float) is equal: %1.4f\n", a, b, c); A = 12.1234567796602; B = 2.7182818284509; C = A + B; printf("\n\t The sum %1.13f and %1.13f \n\t is equal (as double): %1.13f\n", A, B,C); x = 2; y = 7; z = x*y; printf("\n\t The multiplication %d on %i (as an integer) is equal: %d\n", x, y, z); // 2-я часть printf("\n\t Enter a symbol: "); scanf_s("%c", &ch, 1); printf("\t The symbol is: %c\n", ch); printf("\n\t Enter any string: "); scanf_s("%s", str, 79); printf("\t The string is: %s\n", str); _flushall(); // для устранения пустой строки printf("\t Enter a real number a: "); scanf_s("%f", &a); printf("\t Enter a real number b: "); scanf_s("%f", &b); c = a + b; printf("\t The sum %1.2f and %1.2f (as float) is equal: %1.4f\n", a, b, c); printf("\n\t Enter a real number A: "); scanf_s("%lf", &A); printf("\t Enter a real number B: "); scanf_s("%lf", &B); C = A + B;
Результат выполнения видоизмененной программы показан на рис. 2.2.
В начале функции int main(void) сделано объявление переменных, которые будут использоваться в программе. Каждый тип переменных объявлен через запятую. В частности, char str[81] означает массив символов, в квадратных скобках указано их число. Функции printf() выводят либо только сообщения, либо еще заданные переменные соответствующих типов.
Функция _flushall() используется для того, чтобы устранить пробельную строку, образованную либо после действия функции getchar(), либо после действия функции scanf(). В некоторых компиляторах функция _flushall() используется без префиксного нижнего подчеркивания.
Функция gets() позволяет считывать символы с наличием разделителей, в частности, с пробелами. В Microsoft Visual Studio 2010 рекомендуется использовать gets_s(), чтобы не было предупреждений.
Следует обратить внимание на формат записи функций scanf(). Если сканируются числа, или одиночные символы, то присваивание этих символов переменным, которые были объявлены через соответствующие типы данных, осуществляется с помощью взятия адреса этих переменных, т.е. с помощью символа &, например, scanf_s("%c",&ch, 1). При сканировании массива символов, т.е. при сканировании строки, символ & не используется. Имя массива само по себе является указателем. Обращение к адресу осуществляется с помощью указателей (будут рассмотрены позднее). Для сканирования чисел типа double в функции scanf_s() используется спецификатор l.