[] Estructura de datos y estudio algoritmo de notas - "notas algoritmo" -4

estructura

  • El formato básico de la estructura:
    struct el nombre {
    // estructuras de datos básicos o tipos de datos personalizados
    };
    Ej de.
	struct studentInfo {
		int id;
		char gender;
		char name[20];
		char major[20];
	}Alice, Bob, sru[1000];
  • No es definir la estructura en sí, pero puede definir su propio tipo de variables de puntero
    Ej
	struct node {
		node n;//错误!!! 不能定义node型变量
		node* next;//可以定义node*型指针变量
	};
  • Hay dos maneras de acceder a la estructura, el funcionamiento y, "" '->' Operación
    Ej
	struct studentInfo {
		int id;
		char name[20];
		studentInfo* next;
	}stu, *p;

las variables de acceso Stu, tales como la redacción: stu.id / stu.name / stu.next;
acceso variable de puntero p elementos diga algo como:
(* p) .id / (p *) .name / (p *) .Next / p> Identificación / p> nombre / p> siguiente

  • Constructor inicializa la estructura de
    constructores: hay necesidad de escribir el tipo de retorno, y el mismo nombre de la función y el nombre de la estructura
	struct studentInfo {
		int id;
		char gender;
		//下面的参数用以对结构体内部变量进行赋值
		studentInfo(int _id, char _gender) {
			//赋值
			id = _id;
			gender = _gender;
		}

O escrita en una fila

	struct studentInfo {
		int id;
		char gender;
		//下面的参数用以对结构体内部变量进行赋值
		studentInfo(int _id, char _gender):id(_id),gender(_gender){}
	};

Así que cuando sea necesario se puede estructurar la asignación directa de variables:

	studentInfo stu = studentInfo(10086, 'm');

Sin embargo, si se redefinen constructor, pasa a través de la inicialización de definición de variables de la estructura, es decir, el constructor por defecto generada studentInfo {}
caso está cubierto, a fin de no inicializar ambas variables en la definición de la estructura, sino también disfrutar inicialización aportar comodidad, puede agregar manualmente "studentInfo". Esto significa que, siempre que el número y tipo de parámetros no son idénticos, se puede definir tantos constructores, para adaptarse a diferentes situaciones de inicialización

P.ej

	struct studentInfo {
		int id;
		char gender;
		//用以不初始化就定义结构体变量
		studentInfo(){}   //没有分号!
		//只初始化gender
		studentInfo(char _gender) {
			gender = _gender;
		}
		//同时初始化id和gender
		studentInfo(int _id, char _gender):id(_id),gender(_gender){}
	}stu,*p;

P.ej

	struct Point {
		int x, y;
		Point() {}
		Point(int _x, int _y) :x(_x), y(_y) {}
	}pt[10];
	int main() 
	{
		int num = 0;
		for (int i = 1; i <= 3; i++) {
			for (int j = 1; j <= 3; j++) {
				pt[num++] = Point(i, j);
			}
		}
		for (int i = 0; i < num; i++) {
			printf("%d,%d\n", pt[i].x, pt[i].y);
		}
		return 0;
	}

unión

  • Unión (también conocido como el Conjunto) es también un tipo de estructura de datos, son los diferentes tipos de datos se organizan en forma conjunta ocupar la misma pieza de memoria, un tipo de estructura de datos.

  • Tipo de unión declaración y un método similar a la estructura

  • Unión de palabras clave Unión

  • La forma general:
    Unión nombre común {corporal
    lista de miembros;
    };

  • Estructuras y uniones de forma anónima, la declaración después de que ningún programa más largo en el anonimato.

  • La diferencia entre la estructura común y el cuerpo:
    la memoria de longitud variable estructura está ocupada por los miembros de cuentas y una longitud de memoria, cada miembro de cada celda de memoria ocupa su
    memoria de variables unión ocupado por la longitud más larga es la longitud del miembro. Dirección y la dirección de sus miembros, es decir, una variable de unión es la misma dirección.

  • Unión referencias a variables:
    el uso de variables del sindicato, incluida la asignación, utilizando sólo son variables miembro.
    miembros de la unión nombre de variable: Representación

  • las variables inicializadas sindical permitidas para la asignación, la asignación en el programa sólo

  • https://wenku.baidu.com/view/e2c46dfd83d049649a665848.html

Ejercicio
C-11.1

Título Descripción
completar un programa estadístico para los candidatos de votos. Supongamos que hay tres candidatos, los nombres son Li, Zhang y diversión. Utilice el nombre de votos de cada candidato y estructuras de almacenamiento. Registrar cada voto votos nombre, la salida de los votos finales de cada candidato. formato de estructura puede definirse como sigue:
struct persona {
char nombre [20 es];
[. 3]; COUNT int} Leader = { "de Li", 0, "Zhang", 0, "Fun", 0};

La primera línea de entrada no es un número entero n, hay n indican la siguiente información se introducirá votos. 100 para asegurar que no más de n.
Después de las n filas, cada fila contiene el nombre de una persona, que vota por la papeleta. Para asegurar que cada nombres individuales son Li, Zhang y diversión en uno.

Hay tres líneas de salida, respectivamente, el número de votos Li, Zhang y diversión por persona. Primeros nombres para el formato de salida, la salida seguido de dos puntos, el resultado final de candidatos útiles.
Tenga en cuenta que el extremo de salida de la línea de recapitulación.

  • encuentran problemas
    si la sentencia if se escribe como si (== namei líder [j] .name), el programa no funciona correctamente. Resuelve este problema con la función strcmp, supongo que una de las razones es el tamaño de la cadena no se pueden comparar directamente
#include <cstdio>
#include <cstring>


int main() 
{
	struct person {
		char name[20];
		int count;
	}leader[3] = { "Li",0,"Zhang",0,"Fun",0 };
	int n;
	char namei[20] = {};
	scanf("%d\n", &n);
	if (n > 100)
		return 0;
	for (int i = 0; i < n; i++)
	{
		scanf("%s", namei);
		for (int j = 0; j <= 2; j++)
		{
		//如果下面这个if语句写成if(namei==leader[j].name),程序无法正常运行。
			if (!strcmp(namei, leader[j].name))
			{
				leader[j].count ++;
			}
		}
	}
	for (int i = 0; i < 3; i++)
	{
		printf("%s:%d\n", leader[i].name, leader[i].count);
	}
	return 0;
}

11.2 lenguaje C

Título Descripción
definición de un estudiante estructura, almacenamiento de número de la escuela del estudiante, nombre, sexo y edad, para leer toda la información para cada estudiante, sino en la estructura y de salida. definición Student de la estructura como sigue:
estudiante struct {
int NUM;
nombre char [20 es];
Char Sex;
int Edad;}; la reclamación título puntero apunta a una matriz de estructuras utilizadas para entrada y salida.

La primera línea de entrada no es un número entero n, n representa los siguientes estudiantes de información entrarán. Asegúrese de que no más de n 20.
Después de las n filas, cada fila contiene del estudiante correspondiente número de estudiante, nombre, sexo y edad, separadas por un espacio. Para asegurar que cada nombres individuales no contienen espacios y la longitud de no más de 15, el sexo está representado por M y F dos caracteres.

Hay líneas de salida n, cada línea de salida de un estudiante número de estudiante, nombre, sexo y edad, separadas por un espacio. Tenga en cuenta que el extremo de salida de la línea de recapitulación.

#include <cstdio>
	#include <cstring>


	int main() 
	{
		struct student {
			int num;
			char name[20];
			char sex;
			int age;
			student(){};
		}*p,stu[20];//不可以没有stu[20]
		p = stu;//!!!看这里
		int n;
		scanf("%d\n", &n);
		for (int i = 0; i < n; i++)
		{
			//scanf("%d %s %c %d", &((p+i)->num), ((p + i)->name), &((p + i)->sex),&((p + i)->age));
			//这里要取址符!!
			scanf("%d %s %c %d", &((*(p + i)).num), (*(p + i)).name, &((*(p + i)).sex), &(( *(p + i)).age));
		}
		for (int i =0 ; i < n; i++)
		{
			printf("%d %s %c %d\n", (p + i)->num, (p + i)->name, (p + i)->sex, (p + i)->age);
			//printf("%d", ((*p).num));
		}
		return 0;
}

El código anterior no es un puntero escrito:

		for (int i = 0; i < n; i++)
		{
			scanf("%d %s %c %d", &((*p).num), (*p ).name, &((*p).sex), &(( *(p)).age));
			p++;
		}

11.4 lenguaje C

Título Descripción
proporcionó datos para un número de personal, que incluye a los estudiantes y profesores. datos de los estudiantes incluyen: número, nombre, sexo, ocupación, clase. Los maestros incluyen: número, nombre, sexo, ocupación, trabajo. Como puede verse, los datos incluidos estudiantes y profesores son diferentes. Ahora requiere los datos almacenados en la misma mesa, las estructuras utilizadas para lograr la unión. Estructura se define de la siguiente manera:
struct {
int num;
char nombre [10];
Char sexo;
trabajo de carbón;
Unión {
; clase int
posición char [10];
} categoría;}; En la estructura anterior, si el artículo que trabajo como s (estudiante), entonces la clase del tema 5 (clase); si el trabajo es un término t (maestro), entonces la posición del tema 5 (posición).
Los datos de entrada de varias personas, que se almacenan en la matriz de estructuras que contienen más de un cuerpo común, y salidas.

De entrada de la primera fila existe un entero n, los datos para n menos personal n filas, respectivamente. N asegurarse de que no más de 100.
N líneas después de cada línea del contenido separados por un espacio 5. 4 antes de que el número de la persona son (número entero), el nombre (carácter de longitud de la cadena no exceda 9 sin espacios), género (carácter, m o f), y la ocupación (carácter, S o T). Si el artículo 4 es s, el elemento 5 es un entero que representa la clase; si el artículo 4 es t, el elemento 5 a una longitud de no más de una cadena sin espacios 9, que muestra la posición.

Un total de líneas de salida n, el mismo que el formato de entrada, leer toda la salida de contenido. Tenga en cuenta que el extremo de salida de la línea de recapitulación.

	#include <cstdio>
	#include <cstring>


	int main() 
	{ 
		struct {
			int num;
			char name[10];
			char sex;
			char job;
			union {
				int classnum;
				char position[10];
			}category;
		}sta[100],*p;
		int n;
		scanf("%d", &n);
		p = sta;
		for (int i = 0; i < n; i++)
		{
			scanf("%d %s %c %c", &((*p).num), (*p).name, &((*p).sex), &((*p).job));
			if (((*p).job) == 's') scanf("%d", &((*p).category.classnum));
			else if (((*p).job) == 't') scanf("%s", ((*p).category.position));
			p++;
		}
		p = sta;
		for (int i = 0; i < n; i++)
		{
			printf("%d %s %c %c ",((*p).num), (*p).name, ((*p).sex),((*p).job));
			if (((*p).job) == 's') printf("%d\n", ((*p).category.classnum));
			else if (((*p).job) == 't') printf("%s\n", ((*p).category.position));
			p++;
		}
		return 0;
}

11.7 lenguaje C

Descripción Título
escribir dos funciones de entrada y de impresión, respectivamente, 5 para la entrada de registro de datos de los estudiantes y imprimir cinco registros de los estudiantes. Para cada estudiante, cuyos registros contienen un número de estudiante, el nombre, la puntuación de un total de tres cursos de cinco. Y de entrada con la función maestro llama a la entrada de la función de impresión y de salida, respectivamente.
Requiere el uso de una matriz de estructuras de lograr, que comprende un cuerpo estructural 5 cada uno registros de estudiantes.

Anote el total de cinco líneas, conteniendo cada uno el número de un estudiante estudiante (número entero), el nombre (sin espacios longitud de la cadena no exceda de 19) y tres grados de curso (un número entero entre 0 y 100), separadas por un espacio .

La misma entrada y formato de salida, cada línea de salida de todos los registros de un estudiante. Tenga en cuenta que el extremo de salida de la línea de recapitulación.

#include <cstdio>
#include <cstring>

struct student {
	char name[10];
	int num;
	int score[3];
}stu[5], *p;

void input(student* stu)
{
	p = stu;
	for (int i = 0; i < 5; i++)
	{
		scanf("%d %s",  &((*p).num),(*p).name);
		for (int j = 0; j < 3; j++)
			scanf("%d", &((*p).score[j]));
		p++;
	}
}

void output(student * stu)
{
	p = stu;
	for (int i = 0; i < 5; i++)
	{
		printf("%d %s ", (*p).num, (*p).name);
		for (int j = 0; j < 3; j++)
		{
			printf("%d ", (*p).score[j]);
			if (j == 2) printf("\n");
		}
		p++;
	}
}

int main() 
{ 
	p = stu;
	input(p);
	p = stu;
	output(p);
	return 0;
}

11.8 lenguaje C

Título Descripción
Hay 10 estudiantes, cada dato de rendimiento de los estudiantes, incluyendo el número, nombre, tres cursos. Estos 10 estudiantes leen salida de datos requiere una puntuación media global de tres cursos, así como los datos personales del estudiante promedio más alto (incluyendo el número de estudiante, el nombre, el tercer grado por supuesto, el promedio).

Introduzca el
total de 10 filas, cada fila que contiene el número de un estudiante estudiante (número entero), el nombre (sin espacios longitud de cadena no exceda de 19) y tres grados de curso (un número entero entre 0 y 100), separado por un espacio .

Salida La primera línea contiene tres números reales representan la puntuación media total de tres cursos, 2 cifras decimales, la salida de un espacio después de cada número.
La segunda línea de la más alta estudiante de la producción media de los datos personales, los datos de entrada en el mismo formato. Si hay una serie de datos de los estudiantes individuales del estudiante promedio más alto, de acuerdo con la salida de entrada puntaje más alto de primer orden.
Tenga en cuenta que el extremo de salida de la línea de recapitulación.

#include <cstdio>
#include <cstring>

struct student {
	char name[10];
	int num;
	int score[3];
}stu[10], *p;

void input(student* stu)
{
	p = stu;
	for (int i = 0; i < 10; i++)
	{
		scanf("%d %s",  &((*p).num),(*p).name);
		for (int j = 0; j < 3; j++)
			scanf("%d", &((*p).score[j]));
		p++;
	}
}

void output1(student * stu)
{
	for (int i = 0; i < 3; i++)
	{
		double sum = 0;
		p = stu;
		for (int j = 0; j < 10; j++)
		{
			sum += p->score[i];
			p++;
		}
		printf("%.2lf ", (double)(sum/10));
	}
	printf("\n");
}

void output2(student* stu)
{
	p = stu;
	double sco[10] = {0},maxsco=0;
	int maxnum;
	for (int i = 0; i < 10; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			sco[i] += p->score[j];
		}
		sco[i] = (double)(sco[i] / 10);
		if (sco[i] > maxsco)
		{
			maxsco = sco[i];
			maxnum = i;
		}
		p++;
	}
	p = stu + maxnum;
	printf("%d %s ", (*p).num, (*p).name);
	for (int j = 0; j < 3; j++)
	{
		printf("%d ", (*p).score[j]);
	}
}

int main() 
{ 
	p = stu;
	input(p);
	p = stu;
	output1(p);
	p = stu;
	output2(p);
	return 0;
}
Publicado 43 artículos originales · ganado elogios 4 · Vistas 1223

Supongo que te gusta

Origin blog.csdn.net/weixin_42176221/article/details/99709160
Recomendado
Clasificación