Новосибирский Государственный Университет
Опубликован: 26.08.2005 | Доступ: свободный | Студентов: 17108 / 2712 | Оценка: 4.07 / 3.55 | Длительность: 13:11:00
ISBN: 978-5-9556-0057-4
Лекция 14:

Структуры

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >

Переименование типов

Формат

typedef старый_тип новый_тип

Примеры:

typedef long large;
/* определяется тип large, эквивалентный типу long */
typedef char *string;
/* тип string, эквивалентен типу char* */

Переименование типов используется для введения осмысленных или сокращенных имен типов, что повышает понятность программ, и для улучшения переносимости программ (имена одного типа данных могут различаться на разных ЭВМ).

Пример:

/* Реализован алгоритм, который позволяет определить 
строки матриц, состоящие из одинаковых целых, 
расположенных в различных столбцах. Используются 
двумерные массивы и структуры. Сначала выполняется 
сортировка строк по возрастанию. Отсортированные 
строки сравниваются и выводятся на экран номера 
одинаковых строк */
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
#define n 4 /*количество строк */
#define m 4 /*количество столбцов*/
typedef struct mas{int i,i1;} mas;
int m1[n][m]; /*исходный массив*/
struct mas{int i,i1;}; 
mas a[n*2]; 
/*массив типа mas, где будут лежать одинаковые 
	строки, a[1].i и a[1].i1 - одинаковые строки*/
void main()
{
	clrscr();
	int i,j;
	randomize();
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			m1[i][j]=random(2);
			/*случайным образом в массив заносим целые*/
			for(i=0;i<n;i++) {
				printf("\n %d) ",i);
				for(int j=0;j<m;j++)
					printf(" %d",m1[i][j]);
			}
	int min, p;
/* индекс минимального элемента после s-го элемента 
i-ой строки сортировка строк массива по возрастанию */
	for(i=0;i<n;i++) { /* i-сортировка i-ой строки */
		for(int s=0;s<m-1;s++) {
			min=m1[i][s+1];
			for(int j=s;j<m;j++)
				if(m1[i][j]<=min) {
					min=m1[i][j];p=j;
				}
/* запоминаем минимальный элемент в ряду после 
s-го элемента */
			if(m1[i][s]>=min) {
				m1[i][p]=m1[i][s];m1[i][s]=min;
			}
/* меняем местами s-й и p-й элемент,если 
	s-й > p-го(минимального) */
		}
	}
	printf("\n");
	for(i=0;i<n;i++) {
		printf("\n %d) ",i);
		for(int j=0;j<m;j++)
			printf(" %d",m1[i][j]);
/* выводим отсортированный массив */
	}
	int s,k=0; 
/*сколько элементов в i-й строке совпадают с элементами i1 строки*/
/*сколько строк совпали*/
	int i1;
	for(i=0;i<n-1;i++)	/* верхняя строка i */
		for(i1=i+1;i1<n;i1++) { /* нижняя строка i1 */
			s=0;
			for(int j=0;j<m;j++) 
/* сравнение идет по j-му столбцу */
				if(m1[i][j]==m1[i1][j]) s++;
/* если соответствующие элементы в i-й и i1-й строки совпадают то кол-во совпавших увеличивается на 1 */
			if(s==m) {a[k].i=i;a[k].i1=i1;k++;}
/* если все элементы i-й и i1-й строки совпали, то они одинаковые */
		}
		printf("\n Совпадающие строки :");
		for(i=0;i<k;i++)
			printf("\n %d и %d",a[i].i,a[i].i1);
/* распечатываем a[i].i-ю и a[i].i1-ю совпадающую 
	 строку */
	getch();
}
< Лекция 13 || Лекция 14: 1234 || Лекция 15 >
Вадим Ратьков
Вадим Ратьков

Объясните, пожалуйста, чем отличаются два этих кода?

printf("смешанное деление: 7./4 это %2.2f \n", 7./4);

и

printf("смешанное деление: 7./4 это %f \n", 7./4);

%f  это, понятное дело, float. А что такое %2.2f ?

Вопрос возник при прочтении лекции 3 часть вторая курса Основы программирования на языке C.

http://www.intuit.ru/studies/courses/43/43/lecture/1281?page=2

Анна Алексанина
Анна Алексанина

Я хочу выполнить одну из программ, которые есть в лекции. Но для этого мне надо компилировать текст, а я не знаю, как это сделать. ОС Windows.

Лариса Шакалова
Лариса Шакалова
Россия, Севастополь
Регина Шакирова
Регина Шакирова