- •6. Функции в языке с
- •6.1 Описание функции
- •Void main()
- •6.2 Вызов функции
- •6.3 Варианты описания и использования функций
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •7. Работа со строками
- •7.1 Способы описания строк в программе
- •7.2 Ввод-вывод строк
- •7.3 Функции для работы со строками
- •8. Структуры и объединения в языке с
- •8.1 Описание структур
- •8.2 Инициализация структур
- •8.3 Работа с элементами структур
- •8.4 Структуры и указатели
- •8.5. Битовые поля в структурах
- •Работа с битовыми полями:
- •8.6. Объединения
- •Работа с полями объединения
- •8.7. Отличие объединения от структуры
- •8.8. Применение объединений
- •Void main()
- •9. Файлы в языке c. Функции работы с файлами
- •A) чтение данных из файла
- •Б) запись данных в файл
- •Дополнительные функции для работы с файлами
- •10. Программирование в графическом режиме
- •Функции библиотеки graphics
- •Управление графической системой Управление графическим режимом производится с помощью следующих функций:
- •Черчение и заполнение
- •Управление цветом
- •Обработка ошибок в графическом режиме
- •Функции запроса состояния
- •Void main()
- •11. Директивы препроцессора
- •11.1. Директива #include
- •11.2. Директива #define
- •11.3. Директива #undef
- •12. Побитовые (поразрядные) операции
- •Использование побитовых операций
Void main()
{
float a[3][4], b[5][6], c[4][7], sa, sb, sc, pa, pb, pc;
clrscr();
fmatr(a, 3, 4, 1.9, -3.7, &sa, &pa, ’A’);
printf(“sa=%.1f pa=%.1f\n”, sa, pa);
fmatr(b, 5, 6, 2.5, 4.1, &sb, &pb, ’B’);
printf(“sb=%.1f pb=%.1f\n”, sb, pb);
fmatr(c, 4, 7, 5.3, 3.1, &sc, &pc, ’C’);
printf(“sc=%.1f pc=%.1f\n”,sc,pc);
}
5. Аргументом функции является другая функция
Описание функции. Такой аргумент описывается как указатель на функцию
void f1(тип (*fun)(тип1 арг1,…),…);
Внутри функции записывается вызов этой другой функции:
fun(x, y, z,…);
При вызове функции указывается только имя конкретной функции-аргумента:
f1(f2,…)
где f2 – имя конкретной функции. Функция f2 должна иметь одинаковый список аргументов с функцией fun.
Пример:. Составить программу для вычисления и вывода на экран значений функций:
f1=1.1*x*sin(2.9x) для –5<=x<=5, x=0.2
f2=1.5ecos(1.8y) для 0<=y<=4, y=0.1
f3=3.7tg(4.2z) для 1<=z<=6, z=0.05
Обозначим: xmin=xn, xmax=xk, x=dx
Программа для 5-го варианта:
#include<stdio.h>
#include<math.h>
#include<conio.h>
/* Описание функций f1, f2, f3 */
float f1(float x)
{
return(1.1*x*sin(2.9*x));
}
float f2(float y)
{
return(1.5*exp(cos(1.8*y)));
}
float f3(float z)
{
return(3.7*tan(4.2*z));
}
/* Описание функции ff, которая вычисляет и выводит
значения любой из функций f1, f2, f3 */
void ff(float (*fun)(float x), float xn, float xk, float dx, char fname)
{
float x1 ,f;
printf( “Значения функции f%c для x Є[%.1f, %.1f] dx=%.2f\n”, fname, xn, xk, dx);
for(x1=xn; x1<=xk; x1+=dx)
{
f=fun(x1);
printf(“%.3f “,f);
}
printf(“\n”);
}
/* Главная функция */
Void main()
{
clrscr();
ff(f1, -5, 5, 0.2, ’1’);
ff(f2, 0, 4, 0.1, ’2’);
ff(f3, 1, 6, 0.05, ’3’);
}
7. Работа со строками
В языке С есть тип данных char, который можно использовать как для работы с отдельными символами, так и со строками.
Символ – один символ, заключенный в апострофы: 'A', '!', '+', занимает 1 байт памяти
Строка – один и более символов, заключенных в кавычки "…". При записи в памяти, в конце строки автоматически записывается специальный символ конца строки '\0' – нуль-символ.
"А" – строка в памяти занимает 2 байта: 'A'+'\0'
"ABCDEF" ("ABCDEF\0")
"Results of calculations" В памяти: "Results of calculations\0"
7.1 Способы описания строк в программе
1. Строковая константа. Рассмотрена ранее. Используется в операторах ввода-вывода:
printf("Введите значение А=");
scanf("%f",&a);
2. Строка записывается в виде символьного массива:
char mst[50];
char a[30]=”Ошибка ввода данных”;
/* Ввод строки */
scanf(”%s”,mst); //Ввод с клавиатуры строки в массив mst
Со строкой можно работать в целом, используя ее имя – mst или посимвольно:
a[3]==’б’
a[5]==’a’
С символьным массивом можно работать только по одному символу:
char symb[7]={’a’,’b’,’c’,’d’,’e’,’f’,’g’};
symb[2]==’c’
symb= =&symb[0]
3. Строка записывается как указатель на тип char
char *pstr=”Memory size”;
pstr – имя строки
*(pstr+i) – i-й символ
*(pstr+4)==’r’
4. Массив символьных строк
char arr_str[5][40] ={“хлеб”,
”молоко”,
”картофель”,
”помидоры”,
”яблоки”};
arr_str[i] – имя i-й строки
arr_str[1] – имя строки "молоко"
arr_str[i][j] – j-й символ в i-й строке
arr_str[2][3]= =’т’
5. Массив указателей на тип char
char *pstr_arr[5]={“клубника”,
“вишня”,
“банан”,
“ананас”,
“слива” };
pstr_arr[i] – имя i-й строки
*(pstr_arr[i]+j) – j-й символ в i-й строке
*(pstr_arr[2]+2)==”н”
Здесь память для строк выделяется по их длине.
