С++: Л/р№2 Функции - часть I

Лабораторная работа № 2 <br/>Функции - часть I (2 часа) <br/><br/>Цель работы: изучение создания и использования функций. <br/><br/>Порядок выполнения работы <br/>1.Провести анализ примеров. Программы из примеров копируются в файлы С++ и выполняются. <br/>2.Выполнить задания. <br/>3.Защитить выполненную работу. <br/><br/>Контрольные вопросы <br/>1.Как работают программы примеров? <br/>2.Перечислить преимущества применения указателей для передачи аргументов. <br/><br/>Примеры <br/><br/>Пример 1. Демонстрация способов применения функций. <br/><br/>Пример вызова функции sum(int, int) с передачей значений (Call-by-Value). <br/><br/>#include &lt;stdio.h&gt; <br/><br/>sum(int, int); /* прототип функции, возвращающей целое число и <br/> использующей два аргумента типа int */
29 апреля 2004, четверг 22:04
4upuk4ek для раздела Блоги
Лабораторная работа № 2
Функции - часть I (2 часа)

Цель работы: изучение создания и использования функций.

Порядок выполнения работы
1.Провести анализ примеров. Программы из примеров копируются в файлы С++ и выполняются.
2.Выполнить задания.
3.Защитить выполненную работу.

Контрольные вопросы
1.Как работают программы примеров?
2.Перечислить преимущества применения указателей для передачи аргументов.

Примеры

Пример 1. Демонстрация способов применения функций.

Пример вызова функции sum(int, int) с передачей значений (Call-by-Value).

#include <stdio.h>


sum(int, int); /* прототип функции, возвращающей целое число и
использующей два аргумента типа int */

void main(void) /* начало определения функции, не возвращающей
значений и не получающей аргументов */
{
int a = 5, b = 4, c;
c = sum(a, b); /* вызов функции sum(). Возвращаемое значение
присваивается переменной с */
printf("Сумма чисел равна %d\n", c);
}

sum(int k, int l) /* начало определения функции sum(). Если тип
возвращаемого значения не задан, принимается
по умолчанию int */
{
int m;
m = k + l;
return m;
}

Пример вызова функции с передачей адресов (Call-by-Reference).

#include <stdio.h>


sum(int*, int*); /* прототип функции, возвращающей целое число и
использующей два аргумента типа "указатель на
целое" (int *) */

void main(void) /* начало определения функции, не возвращающей
значений и не получающей аргументов */
{
int a = 5, b = 4, c;
c = sum(&a, &b); /* вызов функции sum(). Возвращаемое значение
присваивается переменной с */
printf("Сумма чисел равна %d\n", c);
}
sum(int * k, int * l) /* начало определения функции, возвращающей
значение типа int и имеющей 2 аргумента
типа "указатель на целое" (int *) */
{
int m;
m = * k + * l;
return m;
}


Задания

Задание 1.
Программу задания из лабораторной работы 1 реализовать с использованием функций.

Задание 2.
Проанализировать работу приведенной ниже функции, осуществить её вызов. Для этого в программе задать две строковые переменные одинаковой длины. Указатели на переменные передать функции. В результате значение одной переменной должно быть скопировано во вторую.

Пример вызова функции с передачей адресов. Переносит ASCIIZ-строку, на начало которой указывает source, в буфер, на начало которого указывает destination. Возвращает указатель на начало буфера destination.

char * my_strcpy(char * destination, char * source)

{
char * ret_ptr = destination;
while(*source) /* пока не достигнут символ '\0' */
* destination++ = * source++;
* destination = '\0'; /* в цикле не был перенесен символ '\0' */
return ret_ptr;
}


Выполнение задания
1)
#include<stdio.h>

#include<conio.h>
#define size 4
float max(float a[size][size],int*,int*,int*);
float min(float a[size][size],int*);
void main()
{
int i,imx,jmx,j;
float a[size] [size]={{9,8,7,6},
{8,4,6,5},
{1,0,5,-3},
{0,2,4,-2}},mi_ma,ma_mi;
clrscr();
/*
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
{
printf("Введите А[%i][%i]=",i,j);
scanf("%f",&a[i][j]);
}
}
*/
for(i=0;i<size;i++)
{
for(j=0;j<size;j++)
{
printf(" %g ",a[i][j]);
}
puts("");
}
for(i=0;i<size;i++)
{
mi_ma=max(a,&imx,&jmx,&i);
ma_mi=min(a,&jmx);
if(ma_mi==mi_ma)
{
printf("a=%gi=%i j=%i\n",mi_ma,imx+1,jmx+1);
}
else;
}
getch();
}
///////////////////////max_fun///////////////////////////
float max(float a[size][size],int* imx,int* jmx,int* i)
{
float mi_ma;
int j;
mi_ma=a[*i][0];
for(j=0;j<size;j++)
{
if(a[*i][j]<mi_ma)
{
mi_ma=a[*i][j];
*imx=*i;
*jmx=j;
}
else;
}
return(mi_ma);
}
//////////////////////////////min_fun///////////////////////
float min(float a[size][size],int* jmx)
{
float ma_mi;
int j,i=0;
ma_mi=a[i][*jmx];
for(j=*jmx;i<size;i++)
{
if(a[i][j]>ma_mi)
{
ma_mi=a[i][j];
}
else;
}
return(ma_mi);
}


2)
#include<stdio.h>

#include<conio.h>
char* my_strcpy(char*, char*);
void main()
{
char *a, *b, *c;
clrscr();
printf("A--->>>");
scanf("%s",a);
printf("B--->>>");
scanf("%s",b);
c=my_strcpy(a,b);
printf("%s\n%s\n%s\n",a,b,c);
getch();
}
char * my_strcpy(char * destination, char * source)
{
char * ret_ptr = destination;
while(*source) /* пока не достигнут символ '\0'
*/
* destination++ = * source++;
* destination = '\0'; /* в цикле не был перенесён символ '\0'
*/
return ret_ptr;


По материалам ОмГУПС, все права защищены...


[Содержание ПС]