- •1 Порядок разработки программного продукта
- •2 Структура программы на языке с
- •Int age; // Поле age
- •Void main(void) // Основная функция
- •3 Типы данных языка с
- •Void main(void)
- •Int *iptr; // Объявление указателя
- •Void main(void)
- •Int *iptr; // Объявление указателя
- •Void main(void)
- •Void show_string(char *string)
- •Void main(void)
- •4 Операции языка с
- •Арифметические операции
- •Void main(void)
- •Void main(void)
- •Логические операции
- •Void main(void)
- •Операции отношения
- •Поразрядные операции
- •Побитовые операции
- •Void main(void)
- •Адресные операции
- •Операция “условие”
- •Void main(void)
- •Операция sizeof()
- •Void main(void)
- •Int size;
- •Void main(void)
- •Int *iptr;
- •Void main(void)
- •Int *list,I;
- •Операция вызова функции
- •5 Операторы языка с
- •Условный оператор if
- •Оператор switch
- •Void main(void)
- •Void main(void)
- •Оператор цикла for
- •Void main(void)
- •Void main(void)
- •Void main(void)
- •Цикл while
- •Void main(void)
- •Цикл do ... While
- •Void main(void)
- •Вложенные циклы
- •Void main(void)
- •Void main(void)
- •Int I,j,score;
- •Int scores[line][column];
- •Оператор безусловного перехода
- •Оператор break
- •Void main(void)
- •Оператор continue
- •Void main(void)
- •If (I % 5) continue;
- •Оператор return
- •6 Организация функций
- •Int sum_vect(int V[], int n)
- •Void main(void)
- •Void main(void)
- •Void main(void)
- •7 Библиотечные функции
- •7.1 Функции форматного ввода-вывода
- •Int printf(char*format[, argument,...]);
- •Void main(void)
- •Void main(void)
- •Int scanf(char *format[,argument,...]);
- •Функции для работы с файлами
- •Void main(void)
- •Int vect[line];
- •Void main(void)
- •Void main(void)
- •Void main(void)
- •Void main(void)
- •7.3 Графические средства языка с
- •Void main(void)
- •Initgraph(&gdriver, &gmode, ""); // Инициализация графического режима
- •Int maxX, maxY;
- •Void far initgraph(int far *driver, int far *mode, char far *path);
- •Void main(void)
- •Int driver, mode, errorcode;
- •Void far rectangle(int left, int top, int right, int bottom);
- •Void far setviewport(int left, int top, int right, int bottom, int flag);
- •Void far circle(int X, int y, int radius);
- •7.4 Функции для работы со строками
- •Void main (void)
- •Void main (void)
- •Void main (void)
- •Void main (void)
- •Void main (void)
- •7.5 Математические функции
- •Продолжение таблицы а.7
- •Продолжение таблицы а.7
Void main(void)
{
float result, p =3.14;
result = sq(p);
result = sq(p + 2.15 * 5.0);
result = sq(100.0);
if (sq(p) == 100.0) p = sq(p);
switch (sq(p))
{
case 100 : printf(“Ответ - 100\n”);
case 10000 : printf(“Ответ - 10000\n”);
}
result = sum(sq(p), sq(2.5));
result = sum(sq(p+1.0)+2.0, 6.0);
}
float sum(float a, float b) // Определение функции sum()
{
return(a+b);
}
float sq(float a) // Определение функции sq()
{
return(a*a);
}
В качестве примера можно рассмотреть сортировку элементов линейного массива методом “пузырька” :
// Пример 6.3.
//Программа сортировки методом пузырька
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 30
void bubble_sort(int array[], int size)
{
int temp,i,j;
for(i=0; i<size; i++)
for(j=0; j<size; j++)
if (array[i] < array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
}
}
void main (void)
{
int values[MAXSIZE],i;
for(i=0; i<MAXSIZE; i++)
values[i]=rand() % 100;
bubble_sort(values,MAXSIZE);
for (i=0; i<MAXSIZE; i++) printf("%d\n ",values[i]);
}
Очень удобной, а иногда и просто необходимой формой передачи аргумента является указатель (см. примеры 6.4 и 6.5):
// Пример 6.4.
// Указатели как параметры функции
#include <stdio.h>
void swap_values(int *a, int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void main(void)
{
int one = 1, two = 2;
swap_values(&one,&two);
printf("one равно %d two равно %d\n",one,two);
}
// Пример 6.5.
// Найти сумму элементов вектора с использованием указателя
#include <stdio.h>
int sum_vect(int *pv, int n)
{
int i, s = 0;
for (i=0; i<n; i++) s+=*(pv+ i);
return(s);
}
void main(void)
{
int summa, *pvect, vect[9]={1,2,3,4,5,6,7,8,9};
pvect = vect;
summa = sum_vect(pvect, 9);
printf (“Сумма элементов вектора %d\n”,summa);
}
В операторе s + = * (p + i); суммируются значения, которые находятся по адресу *(p + i). Оператором summa = sum (pvect,9); из основной программы в функцию sum2 передается адрес первого элемента и размер массива.
Часто, особенно в библиотеке языка Си используются функции, возвращающие указатели:
// Пример 6.6.
// Функции, возвращающие указатели
#include <stdio.h>
char *find(char *string)
{
int i=0;
while((string[i]!=' ') && (string[i]!='\0')) // Пока не будет найден пробел
putchar(string[i++]); // или конец строки
if (string[i]==' ') return &string[i]; // Возвращает адрес первого пробела
else return NULL; // Возвращает адрес нулевого байта
}
Void main(void)
{
char *ptr;
ptr=find("Поиск первого пробела в строке");
printf("\nАдрес равен %p\n",ptr);
}
7 Библиотечные функции
7.1 Функции форматного ввода-вывода
Универсальной функцией форматного вывода является printf(). Прототип этой функции содержится в библиотечном файле <stdio.h>:
Int printf(char*format[, argument,...]);
Здесь format — это управляющая строка символов, которая показывает, как должны быть напечатаны параметры. Она содержит:
символы, печатаемые текстуально;
идентификаторы данных, называемые также “спецификациями преобразования”;
[,argument,...] — список аргументов, которые выводятся с помощью функции printf (список аргументов может отсутствовать).
Спецификации преобразования имеют формат:
%[флаги][ширина][.точность][F | N | h | l]тип.
Знак % и тип являются обязательными, параметры в квадратных скобках —необязательны; [F | N | h | l] — модификатор принимаемого размера: F и N — для указателей far (дальний адрес) и near (ближний адрес, берется по умолчанию), h— короткое целое, l — длинное целое.
Спецификатор формата извлекает аргумент и форматирует его по заданному формату. Основные типы преобразования данных приведены в табл. 7.1.
Таблица 7.1 — Спецификаторы преобразования типов
Символ типа |
Входной аргумент |
Формат вывода |
1 |
2 |
3 |
d |
Целое |
Знаковое десятичное целое |
I |
Целое |
То же |
o |
Целое |
Беззнаковое восьмеричное целое |
u |
Целое |
Беззнаковое десятичное целое |
x |
Целое |
Беззнаковое шестнадцатеричное целое (a, b, c, d, e, f) |
X |
Целое |
Беззнаковое шестнадцатеричное целое (A, B, C, D, E, F) |
f |
Число с плавающей точкой |
Знаковое число в форме [—] dddd.dddd |
Символ типа |
Входной аргумент |
Формат вывода |
e E |
Число с плавающей точкой |
Знаковое число в форме [—] d.dddd e[+/—]ddd [—] d.dddd E[+/—]ddd (показательная форма) |
g G |
То же |
Знаковое число в форме e или f в зависимости от заданного значения и точности: 0.1234 —> 0.1234 0.00001234 —> 1.234 e-5 |
c |
Символ |
Печатается символ |
s |
Строка |
Печатается строка |
% |
Нет |
Печатается символ % |
p |
Указатель |
Входной аргумент печатается как указатель |
+ |
Знак |
Число выводится со знаком |
- |
Знак |
Выравнивание по левому краю |
// Пример 7.1.
// Вывод числа в десятичном, восьмеричном
// и шестнадцатеричном виде
#include <stdio.h>