Автор работы: Пользователь скрыл имя, 22 Октября 2010 в 13:05, Не определен
Лабораторная работа
Программирование 
на языках высокого уровня ч2 
Лабораторная 
№1 
Задача 1 
Составить программу на языке С/С++, содержащую:
- объявления и инициализацию указателей на различные типы объектов:
переменные, массивы, структуры;
- объявления и инициализацию указателей с различными модификаторами (const, near, far, huge);
- преобразования 
указателей различных типов, в 
том числе типа void. 
 
 
#include <stdio.h>
#include <conio.h>
#include <iostream.h> 
void main(void)
{
//переменные
const double Eu=8.1;
double *pEu=(double*)&Eu;
*pEu=4.6;
//изменения константы Eu с помощью указателя
      
cout<<Eu<<"\n"; 
//массивы
float Y[]={1,2,3,4,5,6};  //
float *pY=Y;     //pY указывает 
на начало массива y[] 
//структуры
struct komp
{
char proc [20];
int memory;
};
komp *Celeron=NULL;  //
komp MStar[]={"Celeron2000",512,"
Celeron=&MStar[0];
cout<<"\n"<<Celeron<<"\t"<<
//модификаторами 
(const, near, far, huge) 
double St[]={8.1,3.3,1.4};
double *const pSt=&St[2];  //
                              
//преобразования 
указателей различных типов 
unsigned long A=12345678;
char *char_=(char*)&A;   //
int *int_=(int*)&A; //указатель на объект целого типа
float *float_=(float*)&A;  //
cout<<A<<"\t"<<(void*)char_<<"
cout<<A<<"\t"<<*char_<<"\t"<<*
cerr<<"  "; 
void *vp;
int i=77;
float f=2.7;
vp=&i;
cout<<"*(int*)vp="<<*(int*)vp;
vp=&f;
cout<<"*(float*)vp="<<*(float*
 
cerr<<" ";
getch();
} 
 
 
Задача 2
Составить программу на языке С/С++, содержащую:
- простейшие 
действия с одномерными 
  используя 
указатели, методы доступа к 
элементам массивов через 
- простейшие 
действия с многомерными 
используя указатели, методы доступа к элементам массивов через указатели;
- всевозможные операции с указателями.
*/ 
 
#include <stdio.h>
#include <conio.h>
#include <iostream.h> 
 
void main(void)
{ 
//одномерные массивы
int x[]={4,5,6,7,2,4,6};
char ch[]="ABCD";
char ch1[]={'A','B','C','D'};
int *px=x;
char *pch=ch;
      char 
*pch1=ch1; 
for(int i=0;i<7;i++) cout<<*(px+i)<<"\t";
cout<<pch<<"\n";
for(i=3;i>=0;i--) cout<<*(pch1+i)<<"\t";
cout<<"\n";
      for(i=0;i<4;i++) 
cout<<*(pch1++)<<"\t"; 
//многомерные массивы
int A[3][3]={1,2,3,4,5,6,7,8,9};
      char 
B[3][3]={'A','B','C','D','E','
      cout<<*(*(A+1))<<"\n"; 
int C[3][2][4]=
{ 0, 1, 2, 3,
10, 11, 12, 13,
            100, 101, 102, 
            110, 111, 112, 
            200, 201, 202, 
210, 211, 212, 213
};
cout<<***C<<"\n";
      cout<<*(*(*(C+1)+1)+3)<<
int sum=0;
for(int i=0;i<3;i++)
for (int j=0;j<2;j++)
{
cout<<"\n";
for(int k=0;k<4;k++)
{
                        sum+=*
                        cout<<
}
}
      cout<<"\n"<<sum; 
 
 
 
cerr<<" "; 
} 
 
 
 
 
 
Задача 3
Составить программу на языке С/С++, содержащую:
- объявления 
указателей на функции и 
- доступ к содержимым по указателям.
*/ 
#include <stdio.h>
#include <conio.h>
#include <iostream.h> 
void f1(int *x)
{
cout<<*x;
} 
int** f2(int *x)
{
int **z= new int*[*x];
for (int i=0;i<*x;i++) z[i] = new int[*x];
for (i=0;i<(*x);i++)
for (int j=0;j<(*x);j++)
                  *(*(z+i)+j)=
return z;
} 
 
void main(void)
{
int A=5;
void (*fun)(int*);
fun=f1;
int *pa=&A;
      (*fun)(pa); 
      int 
**pf=NULL; 
int (**(*fun1)(int*));
fun1=f2;
      pf=(*f2)(pa); 
      cout<<"\n"<<**pf; 
for (int i=0;i<(*pa);i++)
{
cout<<"\n";
for (int j=0;j<(*pa);j++)
                  cout<<*(*(
}
cerr<<" ";
} 
 
 
 
Задача 4
Составить программу на языке С/С++, содержащую:
- динамическое размещение массивов;
- интерпретацию 
составных описателей. 
 
 
 
 
 
 
 
 
 
 
11 
 
Задача 1
а) Создать программу определения факториала числа n, использующую цикл (любой - for или while).
б) Составить описание рекурсия математическими терминами.
в) Разработать схему рекурсивных вызовов.
г) Составить 
программу определения 
д) Проанализировать работу рекурсивной функции с помощью отладчика.
е) Сделать сравнительный анализ работы двух программ.
*/ 
 
а)
#include <iostream.h> 
void main()
{
int i;
cout << "Введите число:";
cin >> i;
// расчет факториала
int j, fact=1;
for (j=i; j>=1; j--) fact*=j;
    cout << 
"Факториал равен:" << fact; 
} 
г)
#include <iostream> 
long fact(int f)
{
if (f<0) return (0);
if (f==0) return (1);
return (f*fact(f-1));
} 
 
 
Задача 2
Написать программу рекурсивной функции Аккермана с использованием основной функции ackr и
вспомогательной функции smacc. Составить описание рекурсия математическими
терминами. Разработать схему рекурсивных вызовов. Проанализировать работу рекурсивной
функция с помощью отладчика.
*/ 
#include <stdio.h>
#include <conio.h> 
void main(void)
{
//clrscr();
int x,y,n;
long t;
int ackr(int,int,int);
      printf("\nВведите 
3 целых положительных числа:\n")
n=3,x=3,y=3;
      //scanf("%d%d%d",&n,%x,&
t=ackr(n,x,y);
printf("Результат вычисления функции Акермана = %ld",t);
      getch(); 
} 
int smacc (int n, int x)
{
switch (n)
{
case 0: return (x+1);
case 1: return (x);
case 2: return (0);
case 3: return (1);
default: return (2);
}
} 
int ackr(int n, int x, int y)
{
int z;
int smacc(int,int);
      if(n==0||y==0)z=smacc(n,
else
{
z=ackr(n,x,y-1);
z=ackr(n-1,z,x);
}
return z;
} 
 
 
 
 
Задача З
Подобрать собственный пример, иллюстрирующий работу рекурсивной функции.
Составить программу, выполнить ее анализ.
*/ 
 
 
Рекурсивный ввод 
и печать списка. 
#include <stdlib.h>
#include <stdio.h> 
struct cell
{
char sign[10];
int weight;
struct cell *pc;
Информация о работе Программирование на языках высокого уровня