Структура простой программы на Си
Скачать 330 Kb.
|
Структура простой программы на СиВ каждой программе обязательно присутствует главная функция (с именем main ()), которая выполняется первой. Каждый оператор заканчивается «;», которая является частью оператора, а не разделителем, как в Паскале. После #include, #define, main() “;” не ставится. <Подключение библиотек> int main() //заголовок {<операторы объявления переменных> <операторы присваивания, ввода/вывода, управляющие структуры > return 0; } Типы данныхРазличают простые и составные типы. Простые: символьный (1 байт) ; целый (2 байта или 4 байта); вещественный (4 байта или 8 байтов); указатели. Составные: структуры (записи): объединения. Каждая простая переменная должна быть отнесена к одному из основных типов. Это делается с помощью объявления переменных. Цель объявления - определить: форму представления (c фиксированной или плавающей точкой); точность (число знаков); способ выделения памяти (статический, автоматический (до исполнения, в процессе исполнения)); размер памяти и наличие или отсутствие знакового разряда (для типов с плавающей точкой – число разрядов для мантиссы и порядка). Пример описания простых переменныхint i, j, k; long i1, abc; short x, var; целые unsigned Z, Z1; float r1,r2; char bukva; Замечания: Всегда выдерживается соотношение размеров short<=int<=long. Данные типа char рассматриваются как целые. Использование целых без знака (для счетчиков) увеличивает максимальное целое, например, при 16 битах - до 65535 (вместо 32767). В Си отсутствует булевский тип (в C++ есть bool). Определение размеров памяти для хранения данных#include int main() { printf(“char ≡ %d bits\n",8 * sizeof(char)); printf(“unsigned char ≡ %d bits\n",8 * sizeof(unsigned char)); //далее -аналогично return 0; } char ≡ 8 bits unsigned char ≡ 8 bits int ≡ 32 bits unsigned int ≡ 32 bits long int ≡ 32 bits short int ≡ 16 bits double ≡ 64 bits float ≡ 32 bits long double ≡ 128 bits Операция sizeof возвращает число байтов, занимаемых операндом (константой, типом или переменной). КонстантыЦелые: 243 -5 , первой цифрой не должен быть 0.
Восьмеричное: 0243 012341 (если целое начинается с нуля, оно интерпретируется как восьмеричное число) 020=16; 012=10 . Шестнадцатеричное: 0X243 0x243L (начинающееся с символов 0х или 0Х) 0X20=32. Вещественные: 2.73 2Е-5 .31Е5 300. . В Паскале, если есть точка, то должны быть цифры слева и справа от нее. В Си нет такого ограничения. В Си все вещественные константы представляются числом с плавающей точкой двойной точности, 8 байт, т.е. имеющим тип double. В используемой версии компилятора для отделения дробной части числа от целой при вводе данных используется запятая, а в остальных случаях точка. 3. Символьные: 'А' '.‘ - один символ в апострофах (представляются как данные типа int, т.е. хранится код символа). Специальные управляющие символьные константы '\n' - новая строка '\t' - табуляция '\b' - возврат на шаг назад '\r' - возврат каретки '\\' - обратный слеш '\'' - апостроф ' '\"' - кавычки " '\0' - нуль-символ 4. Строковые4. Строковые Строковая константа - последовательность символов, заключенная в кавычки. Например, “Это строка”. В языке Си нет специального типа для описания строк. Строки представляются в виде массива элементов типа char. Последним элементом массива является нуль-символ '\0‘, который компилятор автоматически помещает в конец строки. Нуль-символ не выводится на печать и в таблице кодов ASCII имеет номер 0. 0 1 2 3 4 5 6 7 8 9 10 Э т о с т р о к а \0 Описания с начальным присваиванием Язык Си позволяет определить начальное значение переменной при ее описании.
float a=2.5, c=1Е-7; char C='с', lett='z'; Операции в СиОперации в Си по количеству операндов разделяются на унарные (1); бинарные (2); тернарные (3). Число операндов указано в скобках. Унарные операции имеют высший приоритет и выполняются справа налево, бинарные – слева направо. УнарныеУнарные - арифметическое отрицание -2.4 ! логическое отрицание (not) !(x>0) * разадресация *a & взятие адреса &x + унарный плюс +2 sizeof размер памяти sizeof(int) Бинарные (в порядке убывания приоритета) Арифметические * умножение a *b / деление x /10 % (остаток от деления целых чисел) z % 2 + сложение x + 2 - вычитание 3 – 5 Операции отношения > больше z>0 < меньше x <= меньше или равно 0<=x = = равно (сравнение) x==5 ! = не равно s!=0 Логические (имеют более низкий приоритет, чем операции отношения ) && - логическое "и" (and) a!=0 && d>0 || - логическое "или" (or) x==1 || x>y Примечание. В отличие от Паскаля, в выражении x-a>b && b>c || b> 10 скобки не нужны. Операции присваивания= это присваивание. (Соответствует := в Паскале). Операции увеличения (инкремент) и уменьшения (декремент) на единицу v++; – увеличение v на 1 после использования v (постфиксная форма), ++v; – увеличение v на 1 перед использованием v (префиксная форма), v--; --v; – уменьшение на 1, где v – переменная (обычно целого типа). Пример. Префиксная и постфиксная форма инкремента и декремента.#include int main() {int a=1, b=1, aplus, plusb; aplus=a++; //aplus=a; a++; //увеличивается после присваивания plusb=++b; //++b; plusb=b; //увеличивается до присваивания printf("a=%d, aplus=%d\n", a, aplus); printf("b=%d, plusb=%d\n", b, plusb); return 0; } a=2, aplus=1 b=2, plusb=2 2 1 2 2 2 2 a b aplus plusb 1 1 Операции с присваиванием [ *=, /=, +=, -=, %= ] a+=1; соответствует a=a+1; Множественные присваивания выполняются справа налево. x=y=++z; соответствует {z=z+1;y=z;x=y;} Операция «запятая» позволяет вместо составного оператора, содержащего только присваивания, использовать простой. Вычисления выполняются слева направо. x=y, x++, z-=x; соответствует {x=y; x++; z=z-x; } Наглядность программы снижается (но код укорачивается). Не рекомендуется применять операции увеличения или уменьшения к переменной, которая входит в выражение более одного раза. Операция приведенияДля приведения выражения к определённому типу используется операция приведения: (тип) выражение Она имеет наивысший приоритет, как все унарные операции. int mice; mice=1.6+1.7; //результат mice=3 mice=(int) 1.6+(int) 1.7; //результат mice=2 Во втором операторе 1.6 и 1.7 преобразуются в целые числа 1, mice=1+1=2. Математические функции Для использования этих функций подключается математическая библиотека: #include |
Число | Результат |
5 | |
10 | |
15 |
«Нет результата»
Конец игры
Потеря хода
Если необходимо, чтобы else соответствовал первому if, добавим { }. Рассмотрим пример.
if (number>6)
{
if (number<12)
printf ("Конец игры!\n");
}
else
printf ("Потеря хода!\n");
Число | Результат |
5 | |
10 | |
15 |
Потеря хода
Конец игры
«Нет результата»
Рассмотрим программу решения квадратного уравнения ax2+bx+c=0.
#include
#include
int main()
{
float a,b,c,d,x1,x2;
printf("solve ax^2+bx+c=0\n");
printf("input a,b,c\n");
scanf("%f%f%f",&a,&b,&c);
if (a==0.0) printf("linear !\n");
else
{
d=b*b-4.0*a*c;
printf("\nd=%8.3f\n",d);
if (d<0) printf("no real solutions !\n");
else
{
if (d==0.0)
{ x1=-b/(2.0*a);
printf("one !\n x=%8.3f\n",x1);
}
else
{
x1=(-b+sqrt(d))/(2.0*a);
x2=(-b-sqrt(d))/(2.0*a);
printf("two !\n x1=%8.3f",x1);
printf("\n x2=%8.3f\n",x2);
}
}
}
return 0;
}
Операция условия - сокращённый способ записи if- else (тернарная).
В общем виде условное выражение записывается следующим образом:
Например:
x= ( y<0 ) ? –y : y;
эквивалентно:
if (у<0)
х = -у;
else
х = y;
Условное выражение удобно использовать в тех случаях, когда некоторой переменной надо присвоить одно из двух возможных значений, например:
max = (а > b)?a:b;
(<условие>) ? <значение если истинно> : <значение если ложно> ;
0>