На этом шаге мы приведем текст такой программы.
В этой программе создана функция расчета, которой передается в качестве параметра указатель на структуру. Результат расчет показан рисунке 1.
// 65_1.cpp: главный файл проекта. #include "stdafx.h" #include <clocale> //обязательно для функции setlocale() #include <stdio.h> //for getchar(),putchar() #include <conio.h> #include <stdlib.h> //for atoi() #include <string.h> #define eof -1 #define MAXLINE 1000 using namespace System; //--- Ввод строки с клавиатуры --- int getline(char s[], int lim) { int c,i; for(i=0; i<lim-1 && (c=getchar()) != eof && c != '\n'; i++) s[i] = c; s[i] = '\0'; i++; //для учета количества return i; } struct zrp //структура данных по зарплате { char *name; //имя работника float stavka; //оплата за один рабочий день float nalog; //величина налога } emp[] = {"Иванов", 200, 0.1, "Петров",300,0.2, "Сидоров", 400, 0.3 }; //3десь задан массив экземпляров структур: одна структура //содержит данные на одного работника. Массив сразу проинициализирован. //Функция начисления зарплаты одному работнику. //RabDn - количество отработанных дней* float zarplata(zrp *z, int RabDn) { return(z->stavka * RabDn * (1 - z->nalog)); } void main() { setlocale(LC_ALL,"Russian"); //функция setlocale() с аргументами //для корректного вывода кириллицы char c, s[MAXLINE]; zrp *p1; //определение размера массива: int RazmMas = sizeof(emp)/sizeof(zrp); do { //ввод номера работника: m: printf("Задайте номер работника >"); getline(s, MAXLINE); int i=atoi(s); if(i < RazmMas) //контроль количества заданных элементов массива p1=&emp[i]; else goto m; //ввод количества отработанных дней: printf("Количество отработанных дней >"); getline(s, MAXLINE); i=atoi(s); float zp = zarplata(p1, i); //обращение к функции расчета зарплаты printf ("%s %6.2f\n",p1->name, zp) ; } while( (c=getchar() ) != eof); //конец цикла do...while }
На следующем шаге мы рассмотрим рекурсию в структурах.