Conceptos básicos del lenguaje C (5) definición y uso de arreglos


Una primera mirada al lenguaje C en la colección de series

6. Definición y uso de arreglos

6.1 Definición y uso de matriz unidimensional

6.1.1 Definición de matriz unidimensional

Especificador de tipo nombre de matriz [expresión constante]
especificador de tipo: cualquier tipo de datos básico o tipo de datos construido
nombre de matriz: identificador de matriz definido por el usuario
expresión constante: el número de elementos de matriz
como: int a[10] Descripción Matriz de enteros a con 10 elementos

6.1.2 Referencias a elementos de matriz unidimensionales

La forma general de los elementos de un arreglo es: Nombre del arreglo [subíndice del arreglo]
La siguiente tabla puede ser constantes enteras, variables o expresiones enteras.
Por ejemplo: x = a[i],
a[0] = a[5] + a[7] - a[2*3];

6.1.3 Inicialización de arreglos unidimensionales

La forma general de asignación de inicialización es:
tipo especificador nombre de matriz [expresión constante] = {valor 1, valor 2, ..., valor n};
regulaciones:
1) Solo puede asignar valores iniciales a algunos elementos
2) Usted solo puede asignar elementos uno por uno Asignación, no puede asignar valores a toda la
matriz 3) Si asigna valores a todos los elementos, es posible que la cantidad de elementos de la matriz no se proporcione en la descripción de la matriz
Algunas explicaciones para la definición de una matriz unidimensional:
1) El tipo de la matriz en realidad se refiere al número de elementos de la matriz Tipo de valor
2) Las reglas de escritura del nombre de la matriz deben ajustarse a las reglas de escritura del identificador
3) El nombre de la matriz no puede ser el mismo como otros nombres de variables
4) El subíndice del elemento del arreglo comienza desde 0, y el valor máximo es el tamaño del arreglo menos 1
5) No puede estar en el cuadrado Las variables se usan para representar el número de elementos entre paréntesis [], pero pueden ser constantes simbólicas o expresiones constantes
6) Se permite describir múltiples matrices y múltiples variables en la misma descripción de tipo

6.2 Definición y uso de matriz bidimensional

6.2.1 Definición de matriz bidimensional

Especificador de tipo nombre de matriz [expresión constante 1] [expresión constante 2]
expresión constante 1: la longitud del subíndice de la primera dimensión
expresión constante 2: la longitud del subíndice de la segunda dimensión
Orden de disposición de la matriz bidimensional: almacenar por fila Por
ejemplo:
a[0] ... a00 a01 a02 a03
a[1] ... a10 a11 a12 a13
a[2] ... a20 a21 a22 a23

6.2.2 Referencias a elementos de matriz bidimensional

Forma de representación:
nombre de la matriz [subíndice] [subíndice]
Los elementos de la matriz pueden aparecer en la expresión y también pueden asignarse.
Por ejemplo: b[1][2] = b[2][3]/2 El
valor del subíndice debe ser in Dentro del rango del tamaño de matriz definido
Por ejemplo: int a[3][4]; a[3][4] = 3; (más allá del rango del tamaño de matriz)

6.2.3 Inicialización de matriz bidimensional

1) Asignar valores iniciales a arreglos bidimensionales por fila
Por ejemplo: int a[3][4] = { {1,2,3,4} , {5,6,7,8} , {9, 10,11,12 }}
2) Todos los datos se pueden escribir entre llaves, y los valores iniciales se asignan a cada elemento en el orden de la matriz.
Por ejemplo: int a[3][4] = {1, 2,3,4,5,6, 7,8,9,10,11,12}
3) Se pueden asignar valores iniciales a algunos elementos
4) Se pueden asignar valores iniciales a todos los elementos, luego al definir una matriz, no se puede especificar la longitud de la primera dimensión, pero no se puede omitir la longitud de la segunda dimensión

6.3 Ejemplo de aplicación de matrices

1. Utilice el procesamiento de matrices para encontrar el problema de la secuencia de Fibonacci

#include <stdio.h>
int main(){
    
    
	int i;
	int f[20] = {
    
    1,1};
	for(i = 2; i < 20; i++){
    
    
		f[i] = f[i - 2] + f[i - 1];
		printf("%12d", f[i]);
	}
}

2. Organiza 10 números con clasificación de burbuja

#include <stdio.h>
int main(){
    
    
	int a[10];
	int i, j, t;
	printf("please input 10 numbers : \n");
	for(i = 0; i < 10; i++){
    
    
		scanf("%d\n", &a[i]);
	}
	printf("\n");
	for(j = 1; j < 10; j++){
    
    
		for(i = 1; i <= 10 - j; i++){
    
    
			if(a[i] > a[i + 1]){
    
    
				t = a[i];
				a[i] = a[i + 1];
				a[i + 1] = t;
			}
		}
	}
	printf("the sorted number : \n");
	for(i = 0; i < 10; i++){
    
    
		printf("%d\n",a[i]);
	}
}

3. Intercambiar los elementos de fila y columna de una matriz bidimensional en otra matriz bidimensional

#include <stdio.h>
int main(){
    
    
	int a[2][3] = {
    
    {
    
    1,2,3},{
    
    4,5,6}};
	int b[3][2], i, j;
	printf("array a : \n");
	for(i = 0; i < 2; i++){
    
    
		for(j = 0; j < 3; j++){
    
    
			printf("%5d", a[i][j]);
			b[j][i] = a[i][j];
		}
		printf("\n");
	}
	printf("array b:\n");
	for(i = 0; i < 3; i++){
    
    
		for(j = 0; j< 2; j++){
    
    
			printf("%5d",b[i][j]);
		}
		printf("\n");
	}
}

4. Hay una matriz de 3*4 para encontrar el valor del elemento con el valor más grande, así como su número de fila y número de columna

#include <stdio.h>
int main(){
    
    
	int i, j, row = 0, colum = 0, max;
	static int a[3][4] = {
    
    {
    
    1,2,3,4},{
    
    9,8,7,6},{
    
    -10,10,-5,2}};
	max = a[0][0];
	for(i = 1; i < 3; i++){
    
    
		for(j = 0; j < 4; j++){
    
    
			if(a[i][j] > max){
    
    
				max = a[i][j];
				row = i;
				colum = j;
			}
		}
	}
	printf("max = %d, row = %d, colum = %d\n", max,row, colum);
}

6.4 Matrices de caracteres

6.4.1 Definición de matriz de caracteres

especificador de tipo nombre-matriz[expresión-constante]

6.4.2 Inicialización de matrices de caracteres

1) Asignar carácter por carácter a cada elemento de la matriz
2) Si la cantidad de valores iniciales proporcionados entre llaves es mayor que la longitud de la matriz, la sintaxis es incorrecta; si la cantidad de valores iniciales es menor que la longitud de la matriz, solo estos caracteres se asignan a los primeros elementos de la matriz, y el resto son "\0"
3) Si el número de valores iniciales proporcionados es el mismo que la longitud predeterminada de la matriz, la matriz la longitud se puede omitir al definir, y el sistema determinará automáticamente la longitud de la matriz de acuerdo con la cantidad de valores iniciales
4) Se pueden definir matrices de caracteres bidimensionales

6.4.3 Bandera de fin de cadena

Las cadenas se procesan con matrices de caracteres, identificador final "\0"

6.4.4 Entrada y salida de matrices de caracteres

1) Entrada y salida carácter por carácter, utilice el carácter de formato %c para la entrada o salida de un carácter.
2) Para ingresar y generar la cadena completa a la vez, use el carácter de formato %s.
3) Si la longitud de la matriz es mayor que la longitud real de la cadena, solo la salida finalizará cuando se encuentre "\0".
4) Si una matriz de caracteres contiene más de un "\0", la salida finalizará cuando se encuentre el primer "\0".
5) Puede usar la función scanf para ingresar una cadena.

6.5 Funciones de procesamiento de cadenas

6.5.1 pone

puts (matriz de caracteres):
escriba una cadena en la salida estándar hasta un carácter nulo, pero sin incluirlo. Los caracteres de nueva línea se agregan a la salida.

char str[] = {
    
    "China--Beijing"};
puts(str);
//运行结果为:China--Beijing

6.5.2 obtiene

gets (matriz de caracteres):
lee una línea de la entrada estándar stdin y la almacena en la cadena a la que apunta str. Se detiene cuando se lee una nueva línea o cuando se llega al final del archivo.
Valor de retorno de la función:
si tiene éxito, la función devuelve str. Devuelve NULL si se produce un error o si se llega al final del archivo y no se han leído caracteres.

   char str1[15];
   printf("请输入一个字符串:")
   gets(str1);
   printf("输入的字符串是:%s", str1);

6.5.3 agrietado

strcat (matriz de caracteres 1, matriz de caracteres 2):
concatene las cadenas en dos matrices de caracteres, conecte la cadena 2 a la cadena 1, coloque el resultado en la matriz de caracteres 1 y obtenga un valor después de llamar a la función – matriz de caracteres 1 la dirección de

char str1[30] = {
    
    "People's Republic of "};
char str2[] = {
    
    "Chana"};
printf("%s",strcat(str1,str2));
//输出:People's Republic of Chana

6.5.4 tiras

strcpy (matriz de caracteres 1, matriz de caracteres 2):
función de copia de cadena, copia la cadena 2 en la matriz de caracteres 1, copia la cadena a partir de la dirección de la matriz de caracteres 2 y que contiene el terminador NULL a la cadena que comienza en el espacio de direcciones de la matriz de caracteres 1

char str1[10]char str2[] = {
    
    "Chana"};
strcpy(str1,str2);

6.5.5 strcmp

strcmp (matriz de caracteres 1, matriz de caracteres 2)
compara dos cadenas carácter por carácter de izquierda a derecha (en comparación con el tamaño del código ASCII), hasta que aparecen diferentes caracteres o se encuentra "\0".
Resultado de la comparación:
Cadena 1 = Cadena 2, el valor de la función es 0
Cadena 1 > Cadena 2, el valor de la función es un entero positivo
Cadena 1 < Cadena 2, el valor de la función es un entero negativo

6.5.6 calle

función strlen (matriz de caracteres)
para probar la longitud de la cadena, el valor de la función es la longitud real de la cadena, excluyendo "\0"

char str[10] = {
    
    "Chana"};
printf("%d",strlen(str));
//结果为5

6.5.7 strlwr y strupr

strlwr (matriz de caracteres): convierte letras mayúsculas en minúsculas, otras no convierten
strupr (matriz de caracteres): convierte letras minúsculas en mayúsculas, otras no convierten
Nota: strlwr() y strupr() no son funciones de biblioteca estándar. solo se puede usar en Windows (VC, MinGW, etc.) y debe definirse por sí mismo en Linux GCC.

6.6 Ejemplo de aplicación de matriz de cadenas

1) Salida de un patrón
inserte la descripción de la imagen aquí

#include <stdio.h>
int main(){
    
    
	char diamond[][5] = {
    
    {
    
    ' ',' ','*'},{
    
    ' ','*',' ','*'},{
    
    '*',' ',' ',' ','*'},{
    
    ' ','*',' ','*'},{
    
    ' ',' ','*'}};
	int i, j;
	for(i = 0; i < 5; i++){
    
    
		for(j = 0; j < 5; j++){
    
    
			printf("%c", diamond[i][j]);
		}
		printf("\n");
	} 
}

2. Ingrese una línea de caracteres, cuente cuántas palabras hay y separe las palabras con espacios

#include <stdio.h>
int main(){
    
    
	char string[100];
	int i, num = 0, word = 0;
	char c;
	gets(string);
	for(i = 0; (c = string[i]) != '\0'; i++){
    
    
		if(c == ' ') word = 0;
		else if(word == 0){
    
    
			num++;
			word = 1;			
		}
	}
	printf("there are %d words in the line.\n", num);
}

3. Hay tres cuerdas, encuentra la más grande entre ellas.

#include <stdio.h>
#include <string.h> 
int main(){
    
    
	char str1[20];
	char str2[3][20];
	int i;
	for(i = 0; i < 3; i++){
    
    
		gets(str2[i]);
	}
	if(strcmp(str2[0],str2[1]) > 0) strcpy(str1,str2[0]);
	else strcpy(str1, str2[1]);
	if(strcmp(str2[2], str1) > 0) strcpy(str1, str2[2]);
	printf("\n the largest string is : \n%s\n",str1);
}

Supongo que te gusta

Origin blog.csdn.net/qq_43310387/article/details/123967704
Recomendado
Clasificación