¿Qué tipos de variables existen en el lenguaje C? ¿Cómo definir estas variables?
Los tipos de datos básicos incluyen: entero, real, carácter, puntero, etc.
Los tipos de datos extendidos incluyen: matriz, estructura, unión, ***, etc.
También puedes tener tipos personalizados.
La siguiente es una descripción detallada de los tipos básicos
Es mejor leer un libro en lenguaje C, ya sea en versión impresa o electrónica. Se recomienda leer la programación en C de Tan Gaoqiang. , la última es la tercera edición y la estaba estudiando en la segunda edición
Cantidades enteras
Las cantidades enteras incluyen constantes enteras y variables enteras. Una constante entera es una constante entera. En lenguaje C, se utilizan tres tipos de constantes enteras: octal, hexadecimal y decimal.
Constantes enteras
1. Constantes enteras octales Las constantes enteras octales deben comenzar con 0, es decir, usar 0 como prefijo del número octal. El valor digital es 0~7. Los números octales suelen estar sin signo.
Los siguientes números son números octales legales:
015 (13 en decimal) 0101 (65 en decimal) 0177777 (65535 en decimal)
Los siguientes El número no es un número octal legal:
256 (sin prefijo 0) 03A2 (contiene dígitos no octales) -0127 (aparece el signo menos)
2 Constantes enteras hexadecimales
Las constantes enteras hexadecimales tienen el prefijo 0X o 0x. Su valor digital es 0~9, A~F o a~f.
Los siguientes números son constantes enteras hexadecimales legales:
0X2A (el decimal es 42) 0XA0 (el decimal es 160) 0XFFFF (el decimal es 65535)
Lo siguiente los números no son constantes enteras hexadecimales legales:
5A (sin prefijo 0X) 0X3H (contiene dígitos no hexadecimales)
3 Constantes enteras decimales
Entero decimal. las constantes no tienen prefijo. Sus números van del 0 al 9.
Los siguientes números son constantes enteras decimales legales:
237 -568 65535 1627
Los siguientes números no son constantes enteras decimales legales:
023 (no puede tener 0 inicial) 23D (contiene dígitos no decimales)
En el programa, varios números base se distinguen según los prefijos. Por lo tanto, al escribir constantes, no utilice el prefijo incorrecto para provocar resultados incorrectos. 4. El sufijo de la constante entera es de 16 bits en una máquina con una longitud de palabra de 16 bits, por lo que el rango del número representado también es limitado. El rango de constantes enteras decimales sin signo es 0 ~ 65535 y los números con signo son -32768 ~ 32767. El rango de representación de números octales sin signo es 0~0177777. El rango de representación de números hexadecimales sin signo es 0X0~0XFFFF o 0x0~0xFFFF. Si el número utilizado excede el rango anterior, debe representarse mediante un número entero largo. Los números enteros largos se representan con el sufijo "L" o "l". Por ejemplo:
Constante de entero largo decimal 158L (el decimal es 158) 358000L (el decimal es -358000)
Constante de entero largo octal 012L (el decimal es 10) 077L (el decimal es 63) 0200000L (el decimal es 65536)
Constante entera larga hexadecimal 0X15L (el decimal es 21) 0XA5L (el decimal es 165) 0X10000L (el decimal es 65536)
Entero largo 158L y entero básico La constante 158 no hace ninguna diferencia numérica. Pero para 158L, debido a que es un número entero largo, el sistema de compilación C le asignará 4 bytes de espacio de almacenamiento. Para 158, debido a que es un tipo entero básico, solo se asignan 2 bytes de espacio de almacenamiento. Por lo tanto, se debe prestar atención a la operación y al formato de salida para evitar errores. Los números sin signo también se pueden representar mediante sufijos. El sufijo para números sin signo de constantes enteras es "U" o "u".
Por ejemplo: 358u, 0x38Au, 235Lu son números sin signo. Los prefijos y sufijos se pueden utilizar al mismo tiempo para representar varios tipos de números. Por ejemplo, 0XA5Lu representa el entero largo hexadecimal sin signo A5, que es 165 en decimal.
Variables enteras
Las variables enteras se pueden dividir en las siguientes categorías:
1. Tipo básico
El especificador de tipo es int, Ocupa 2 bytes en la memoria y su valor es una constante entera básica.
2. Entero corto
El especificador de tipo es short int o short'C110F1. Los bytes ocupados y el rango de valores son los mismos que los del tipo básico.
3. Entero largo
El especificador de tipo es long int o long, que ocupa 4 bytes en la memoria y su valor es una constante entera larga.
4. Tipo sin firmar
El especificador de tipo no está firmado.
El tipo sin signo se puede formar haciendo coincidir los tres tipos anteriores:
(1) Tipo básico sin signo El especificador de tipo es unsigned int o unsigned.
(2) El especificador de tipo entero corto sin signo es corto sin signo
(3) El especificador de tipo entero largo sin signo es largo sin signo
Cada Un tipo sin signo ocupa el mismo número de bytes de espacio de memoria que el tipo con signo correspondiente. Sin embargo, dado que se omite el bit de signo, no se pueden representar números negativos. La siguiente tabla enumera la cantidad de bytes de memoria asignados para varios tipos de enteros en Turbo C y el rango de representación del número.
El número de bytes asignados en el rango del número del especificador de tipo
int -32768~32767 ■■
short int -32768~32767 ■■
int firmado -32768~32767 ■■
int sin signo 0~65535 ■■
int largo -2147483648~2147483647 ■■■■
unsigned long 0~4294967295 ■■■■
Descripción de variables enteras
La forma general de descripción de variable es: identificador de nombre de variable especificador de tipo, identificador de nombre de variable,...
int a, b, c; (a, b, c son variables enteras)
long x, y (x, y son variables enteras largas)
unsigned p, q; (p, q son variables enteras sin signo)
Al escribir descripciones de variables, debes prestar atención a los siguientes puntos:
1. Permite especificar múltiples variables del mismo tipo después de un especificador de tipo. Separe los nombres de las variables con comas. Debe haber al menos un espacio entre el especificador de tipo y el nombre de la variable.
2. El último nombre de la variable debe terminar en ";".
3. La descripción de la variable debe colocarse antes de utilizar la variable. Generalmente se coloca al comienzo del cuerpo funcional.
[Práctica] //1int a, b;
short int c;
short d=100; -20;
b=a d;
c=a b d;
d=d-a c-b;'Vtable
a, 2, 0
b, 2, 0
c, 2, 0
d, 2, 100
de Vtable
'Actualización
1, 0, 0
3, 0
4, 100
1, 80
2,180
3,360
4,200
de Vupdate
de Práctica
[Práctica ] //2int a=5;
int b=9;
largo int c
largo d; a b-7;
d=a*b*c;
c=d*d*d;
a= c-d; p>
a, 2, 5
b, 2, 9
c, 4, 0
d, 4, 0
de Vtable
'Vupdate
1, 5
2, 9
3, 0
4, 0
3, 7
4, 315
3, 31255875
1, - 5112
de Vupdate
de Práctica
[Práctica] //3int a=6, b=19;
unsigned int c ;
int d;
c=a-b 7;
d=b*c;
a=b c d;
b= -a;'Vtabla
a, 2, 6
b, 2, 19
c, 2, 0
d, 2, 0
de Vtable
'Vupdate
1, 6, 2, 19
3, 0
4, 0
3, 65530
4, -114
1, -101
2, 101
de Vupdate
de práctica
void main(){
long x, y;
int a, b , c, d;
x=5;
y=6;
a=7; /p>
c=x a;
d=y b;
printf("c=x a=d, d=y b=d\n ", c, d) ;
}
Describe main como que devuelve void, es decir, que no devuelve ningún tipo de valor
x, y se define como tipo largo
a, b, c, d se definen como tipo int
5-gt; x
6-gt; a
8-gt; b
x a-gt; c
y b-gt; d
Mostrar resultados de ejecución del programa de largo x, y;
int a, b, c, d;
c=x a;<
/p>
d=y b;
Puede ver en el programa: x, y son variables enteras largas, a, b son variables enteras básicas. Se permiten operaciones entre ellos y los resultados de la operación son tipos de enteros largos. Sin embargo, cyd se definen como tipos enteros básicos, por lo que el resultado final es un tipo entero básico. Este ejemplo ilustra que cantidades de diferentes tipos pueden participar en operaciones y asignarse valores entre sí. La conversión de tipos la completa automáticamente el sistema de compilación. Las reglas para la conversión de tipos se introducirán más adelante.
Cantidad de tipo real
Constante de tipo real
El tipo real también se denomina tipo de punto flotante. Las constantes reales también se denominan números reales o números de coma flotante. En lenguaje C, los números reales sólo utilizan notación decimal. Tiene dos formas: forma de número decimal forma exponencial
1 forma de número decimal
Consta de los dígitos del 0 al 9 y un punto decimal. Por ejemplo: 0,0, 0,25, 5,789, 0,13, 5,0, 300, -267,8230, etc. son todos números reales legales.
2. Forma exponencial
Consiste en un número decimal, más el signo de código de exponente "e" o "E" y el código de exponente (solo puede ser un número entero, puede tener signo). Su forma general es E n (a es un número decimal, n es un entero decimal) y su valor es a*10, n tal como: 2.1E5 (igual a 2.1*10, 5), 3.7E-2 (igual a 3.7*10,) -2*) 0.5E7 (igual a 0.5*10, 7), -2.8E-2 (igual a -2.8*10,)-2*) Los siguientes no son números reales legales 345 (no punto decimal) E7 (nada antes del signo exponente Número E) -5 (Sin bandera de exponente) 53.-E3 (Signo negativo en posición incorrecta) 2.7E (Sin exponente)
El estándar C permite punto flotante números para usar sufijos. Un sufijo de "f" o "F" indica que el número es un número de punto flotante. Por ejemplo, 356f y 356. son equivalentes. El ejemplo 2.2 ilustra esta situación:
void main()
{
printf("f\nf\n", 356., 356f ); p>
}
void indica que main no devuelve ningún valor y usa printf para mostrar el resultado.
Variable de tipo real
Variable de tipo real se divide en dos clases: tipo de precisión simple y tipo de precisión doble.
El especificador de tipo es un especificador de precisión simple flotante y un especificador de precisión doble doble. En Turbo C, el tipo de precisión simple ocupa 4 bytes (32 bits) de espacio de memoria, su rango de valores es 3.4E-38 ~ 3.4E 38 y solo puede proporcionar siete dígitos significativos. El tipo de doble precisión ocupa 8 bytes (64 bits) de espacio de memoria, su rango de valores es 1,7E-308 ~ 1,7E 308 y puede proporcionar 16 dígitos significativos.
El formato y las reglas de escritura de la descripción de variable de tipo real son las mismas que las de tipo entero.
Por ejemplo: float x, y; (x, y son tipos reales de precisión simple)
double a, b, c (a, b, c son de precisión doble; tipos reales) Cantidad)
Las constantes de tipo real no se dividen en precisión simple y doble, y todas se tratan como precisión doble.
void main()
{
flotador a;
doble b
a=33333.33333;
b=33333.33333333333333;
printf("f\nf\n", a, b
}
Este programa Explica la diferencia entre flotante y doble
a ■■■■
b ■■■■■■■■
alt ---33333.33333 p >
blt;---33333.33333333333;;
Mostrar resultados del programa
Este programa explica la diferencia entre float y double
float a;< /p >
double b;
a=33333.33333;
b=33333.33333333333333; Como se puede ver en este ejemplo, dado que a es un tipo de punto flotante de precisión simple, sólo hay siete dígitos efectivos Bit. El número entero ya ocupa cinco dígitos, por lo que todos los números después de los dos decimales no son válidos. b es un tipo de doble precisión con dieciséis dígitos válidos. Sin embargo, Turbo C exige que se mantengan hasta seis decimales y que el resto se redondee.
[Práctica] //floatint a=32;
float b;
doble d; p>
flotante b; p>
d=b*100;
d=d a;
d=d 58.123456;'Vtable
a, 2, 32
p>b, 4, 0.0
d, 8, 0.0
de Vtable
'Vupdate
1, 32
2, 0
3, 0
2, 12345678.00000
3, 1234567800
3, 1234567832
3, 1234567890.123456
de Vupdate
de Práctica
[Práctica] // 1int a=543;
flotante b;
b=123.123962 a;
b=b-100;
a=b ;'Vtable
a, 2, 543
b, 4, 0.0
de Vtable
'Vupdate
1, 543
2, 0.0
2, 123.123962
2, 23.123962
1, 23
de Vupdate
de práctica
Variables de caracteres
Las variables de caracteres incluyen constantes de caracteres y variables de caracteres.
Constante de carácter
Una constante de carácter es un carácter encerrado entre comillas simples. Por ejemplo, 'a', 'b', '=', ' ' y '?' son constantes de caracteres legales. En lenguaje C, las constantes de caracteres tienen las siguientes características:
1. Las constantes de caracteres solo pueden encerrarse entre comillas simples, no entre comillas dobles ni otros corchetes.
2. Las constantes de caracteres solo pueden ser caracteres individuales, no cadenas.
3. El carácter puede ser cualquier carácter del conjunto de caracteres. Pero una vez que un número se define como un tipo de carácter,
no puede participar en operaciones numéricas. Por ejemplo, '5' y 5 son diferentes. '5' es un carácter constante y no puede participar en operaciones.
Carácter de escape
El carácter de escape es una constante de carácter especial. El carácter de escape comienza con una barra invertida "\" y va seguido de uno o más caracteres. Los caracteres de escape tienen significados específicos que son diferentes del significado original de los caracteres, por lo que se denominan caracteres de "escape". Por ejemplo, el "\n" utilizado en la cadena de formato de la función printf en los ejemplos anteriores es un carácter de escape y su significado es "retorno de carro y avance de línea". Los caracteres de escape se utilizan principalmente para representar códigos de control que son difíciles de expresar utilizando caracteres normales.
Caracteres de escape de uso común y sus significados
El significado de los caracteres de escape
\n Retorno de carro y avance de línea
\ t Jump horizontalmente a la siguiente posición de pestaña
\v Saltar verticalmente
\b Retroceso
\r Entrar
\f Alimentación de papel p>
\\ Carácter de barra invertida "\"
\' Comilla simple
\a Timbre
\ddd Caracteres representados por 1 a 3 octales números
\xhh Caracteres representados por 1 a 2 números hexadecimales
En términos generales, lenguaje C Cualquier carácter en el conjunto de caracteres se puede representar mediante un carácter de escape. Para este propósito se proponen \ddd y \xhh en la Tabla 2.2. ddd y hh son los códigos ASCII octal y hexadecimal respectivamente. Por ejemplo, \101 representa la letra "A", \102 representa la letra "B", \134 representa una barra invertida, \XOA representa una nueva línea, etc. El uso de caracteres de escape
void main( )
{
int a, b, c;
a=5; ("d \n\td d\n d d\t\bd\n",a,b,c,a,b,c);
}
Este programa practica el escape caracteres Utilice
a, b, c son números enteros 5-gt; a, 6-gt; b, 7-gt; c
Llame a printf para mostrar los resultados de ejecución del programa
p>
printf("d\n\td d\n d d\t\bd\n",a,b,c,a,b,c);
El programa genera un valor 5 en la primera columna Después de eso, está "\ n", por lo que el retorno de carro y el avance de línea están "\ t", por lo que salta a la siguiente posición de pestaña (establezca el intervalo de posición de pestaña en 8) y luego sale; el valor b es 6; deje dos espacios y luego genere c. El valor 7 va seguido de "\n" nuevamente, así que ingrese y avance de línea nuevamente después de dos espacios en blanco, se genera un valor de 5 después de tres espacios en blanco; se genera el valor de b, 6; y después de "\t" nuevamente, salta a la siguiente posición de pestaña (alineada con 6 en la línea anterior), pero el siguiente carácter de escape "\b" devuelve un espacio, por lo que el valor de c. 7 aparece junto a 6.
Variable de carácter
El valor de una variable de carácter es una constante de carácter, es decir, un solo carácter. El especificador de tipo de una variable de carácter es char. El formato y las reglas de escritura de las especificaciones de tipo de variable de carácter son las mismas que las de las variables enteras.
Por ejemplo:
a cada variable de carácter se le asigna un byte de. espacio de memoria, por lo que solo puede almacenar un carácter. El valor del carácter se almacena en la unidad de memoria de la variable en forma de código ASCII. Por ejemplo, el código ASCII decimal de x es 120 y el código ASCII decimal de y es. 121. Asigne valores 'x' e 'y' a las variables de caracteres a y b: a='x'; b='y '; en realidad almacena los códigos binarios de 120 y 121 en dos unidades a y b: a. 0 1 1 1 1 0 0 0
b 0 1 1 1 1 0 0 1
Por lo que también pueden considerarse números enteros. El lenguaje C permite asignar valores de caracteres. a variables enteras y valores enteros a variables de caracteres.
Durante la salida, las variables de caracteres pueden generarse como números enteros, y los números enteros también pueden generarse como caracteres. El valor entero es un valor de dos bytes y el valor de carácter es un valor de un solo byte. Cuando el valor entero se procesa como un valor de carácter, sólo los octetos inferiores participan en el procesamiento.
principal()
{
char a, b;
a=120; 121;
printf("c,c\nd,d\n",a,b,a,b);
}
a ■ b ■
a lt;-- 120
b lt;--- 121
Mostrar resultados del programa
Este programa explica un , b es un tipo de carácter, pero se asigna un valor entero en la declaración de asignación. A partir de los resultados, la forma de salida de los valores a y b depende del carácter de formato en la cadena de formato de la función printf. Cuando el carácter de formato es "c", el valor de la variable de salida correspondiente es un carácter. "d", el valor de salida correspondiente es El valor de la variable es un número entero.
void main()
{
char a, b
a='x'; > b='y';
a=a-32;
b=b-32
printf("c,c\nd,d; \n", a, b, a, b);
}
a, b se declaran como variables de caracteres y se les asignan valores de caracteres
Cambiar letras minúsculas Cambiar a letras mayúsculas
Salida en tipos de caracteres y enteros
En este ejemplo, a y b se describen como variables de caracteres y el lenguaje C asignado permite que las variables de caracteres participen en números. operaciones, es decir, utilizar el código ASCII del personaje para participar en la operación. Dado que los códigos ASCII de letras mayúsculas y minúsculas difieren en 32, las letras minúsculas se convierten en letras mayúsculas después de la operación. Luego, envíelos en tipos de números enteros y caracteres respectivamente.
[Práctica] //charint a=49;
char b;
char d;
b=a 10;
d=a b;'Vtable
a, 2, 49
b, 1, aleatorio
d, 1, aleatorio p>
p>
de Vtable
'Vupdate
1, 49
2, aleatorio
3, aleatorio
2, ';'
3, 'l'
de Vupdate
de práctica
[Práctica] // char c1, c2;
c1='a'; c2='b';
c1=c1-32;
c1, 1, aleatorio
c2, 1, aleatorio
de Vtable
'Vupdate
1 , aleatorio; 2, Aleatorio
1, 'a'; 2, 'b'
1, 'A' 2, 'B'
de Vupdate
de práctica
Constantes de cadena
Una constante de cadena es una secuencia de caracteres encerrados por un par de comillas dobles. Por ejemplo: "CHINA", "Programa C:", "$12.5", etc. son todas constantes de cadena legales. Las constantes de cadena y las constantes de caracteres son cantidades diferentes. Las principales diferencias entre ellas son las siguientes:
1. Las constantes de caracteres están entre comillas simples y las constantes de cadena están entre comillas dobles.
2. Las constantes de caracteres solo pueden ser de un solo carácter, mientras que las constantes de cadena pueden contener uno o más caracteres.
3. Puede asignar una constante de carácter a una variable de carácter, pero no puede asignar una constante de cadena a una variable de carácter. No existe una variable de cadena correspondiente en lenguaje C.
Este es diferente del lenguaje BASIC. Pero puedes usar una matriz de caracteres para almacenar una cadena constante. Se presenta en el capítulo Matrices.
4. Las constantes de caracteres ocupan un byte de espacio de memoria. El número de bytes de memoria ocupados por una constante de cadena es igual al número de bytes de la cadena más 1. El carácter "\0" (el código ASCII es 0) se almacena en el byte agregado. Este es el signo de fin de cadena. Por ejemplo, los bytes que ocupa la cadena "programa C" en la memoria son: programa C\0. Aunque la constante de carácter 'a' y la constante de cadena "a" tienen un solo carácter, sus situaciones en la memoria son diferentes.
'a' ocupa un byte en la memoria, que se puede expresar como: a
"a" ocupa dos bytes en la memoria, que se puede expresar como: a\0 Constantes de símbolos
Constantes simbólicas
En lenguaje C, se puede utilizar un identificador para representar una constante, lo que se denomina constante simbólica. Las constantes simbólicas deben definirse antes de su uso. Su forma general es:
#define identificador constante
Donde #define también es un comando de preprocesamiento (¿todos los comandos de preprocesamiento son?quot;# "). , se denomina comando de definición de macro (se presentará con más detalle en el Capítulo 9 Preprocesador. Su función es definir el identificador como el valor constante que sigue, una vez definido, todas las apariciones posteriores del identificador en el programa se utilizan en mayúsculas). letras para identificadores constantes simbólicos y letras minúsculas para identificadores de variables para mostrar la diferencia. void main()
{
float s,
r=5; ;
s=PI*r*r
printf("s=f\n",
}
El comando de definición de macro define PI como 3,14159 s, y r se define como un número real 5 -gt;r PI*r*r-gt;s
Mostrar resultados del programa float s, r= 5; s=PI*r*r; Este programa se define mediante un comando macro antes de la función principal. Defina PI como 3.14159 y use este valor para reemplazar PI en el programa. 3.14159*r*r. Cabe señalar que la constante simbólica no es una variable y el valor que representa se utiliza en todo momento. No se puede cambiar dentro del alcance. En otras palabras, no se puede reasignar mediante declaraciones de asignación en el programa. .