Lenguaje C --- algo de programación sobre algoritmos

1. Cada tipo de dato tiene un cierto rango de expresión,
 la programación implementa un algoritmo para
 calcular el valor máximo que el tipo entero int del sistema actual puede expresar de la manera más fácil sin asumir la longitud del tipo de dato.

#incldue<stdio.h>
int main()
{   //方法一 
	int a = 1, max;
	while(1){
		max = a;
		a<<= 1;
		a |= 1;
		if(a<0) break;
	}
	printf("int 最大的数值为%d", max);
	//方法二 
	//int max = ~(0x1 << sizeof(int)*8-1);
    //printf("int的最大值为%d\n", max)
}

2. Calcula cuantas moléculas de agua hay en N litros de agua, y el resultado final se expresa en notación científica

#include <stdio.h>

int main() {
    const double AVOGADRO = 6.02e23;
    const double MOLECULAR_WEIGHT = 18.0;
    double liters;
    double molecules;
    
    printf("请输入纯净水的升数:");
    scanf("%lf", &liters);
    
    molecules = AVOGADRO * liters * 55.55 / MOLECULAR_WEIGHT;
    
    printf("%.3e个分子\n", molecules);
    
    return 0;
}

3. El paquete de datos transmitido por un terminal de dispositivo integrado existente es un número entero sin signo de 32 bits. Los significados de los bits en este paquete de datos son los siguientes:

  • Bit 00-07: indica datos de temperatura
  • Bit 08-15: Indica datos de humedad
  • Bits 16-19: Indican el estado de 4 puertas (número de puerta 0-3)
  • Bit 20-23: Indica el estado de 4 luces (número de luz 0-3)
  • 24-31 bit: reservado para copia de seguridad

Los siguientes son los paquetes recibidos en el período más reciente:

0x12344520, 0xff004B1C, 0x00553C1E

#include <stdio.h>
#include <stdint.h>

#define MASK_TEMPERATURE 0xFF
#define MASK_HUMIDITY 0xFF00
#define MASK_DOOR_0 0x10000
#define MASK_DOOR_1 0x20000
#define MASK_DOOR_2 0x40000
#define MASK_DOOR_3 0x80000
#define MASK_LIGHT_0 0x100000
#define MASK_LIGHT_1 0x200000
#define MASK_LIGHT_2 0x400000
#define MASK_LIGHT_3 0x800000

typedef struct {
    uint8_t temperature;
    uint8_t humidity;
    uint8_t door[4];
    uint8_t light[4];
} SensorData;

int main() {
    uint32_t raw_data = 0xBEEFFACE; // 示例数据包
    SensorData data;
    
    // 解析数据包
    data.temperature = raw_data & MASK_TEMPERATURE;
    data.humidity = (raw_data & MASK_HUMIDITY) >> 8;
    data.door[0] = (raw_data & MASK_DOOR_0) >> 16;
    data.door[1] = (raw_data & MASK_DOOR_1) >> 17;
    data.door[2] = (raw_data & MASK_DOOR_2) >> 18;
    data.door[3] = (raw_data & MASK_DOOR_3) >> 19;
    data.light[0] = (raw_data & MASK_LIGHT_0) >> 20;
    data.light[1] = (raw_data & MASK_LIGHT_1) >> 21;
    data.light[2] = (raw_data & MASK_LIGHT_2) >> 22;
    data.light[3] = (raw_data & MASK_LIGHT_3) >> 23;
    
    // 打印数据
    printf("温度:%d\n", data.temperature);
    printf("湿度:%d\n", data.humidity);
    printf("门状态:\n");
    for (int i = 0; i < 4; i++) {
        printf("门%d:%s\n", i, data.door[i] ? "打开" : "关闭");
    }
    printf("灯状态:\n");
    for (int i = 0; i < 4; i++) {
        printf("灯%d:%s\n", i, data.light[i] ? "亮" : "灭");
    }
    
    return 0;
}

 4. Escriba un programa que genere un patrón piramidal después de que el usuario ingrese cierta letra mayúscula.
Por ejemplo, si se ingresa la letra E, se generará el siguiente patrón:

    A
   ABA
  ABCBA
 ABCDCBA
ABCDEDCBA

Programación de código: 

#include <stdio.h>

int main(void)
{
    // 输入一个字母
	char ch;
	scanf("%c", &ch);
		
	if((ch<'A') || (ch>'Z'))
	{
		printf("只接受大写字母\n");
        exit(0);
	}

    // 总行数
	int line = ch - 'A' + 1;

	int i, j;
	for(i=1; i<=line; i++)
	{
        // 输出若干个空格
		for(j=0; j<line-i; j++)
		{
			printf(" ");
		}

        // 输出若干个升序字母
		for(j=0; j<i; j++)
		{
			printf("%c", 'A'+j);
		}

        // 输出若干个降序字母
		for(j-=2; j>=0; j--)
		{
			printf("%c", 'A'+j);
		}
		printf("\n");
	}
	return 0;
}

5. Realice la conjetura del granizo (la conjetura del granizo se refiere a cualquier número entero positivo n, si n es un número impar, se cambiará a 3n+1, de lo contrario se cambiará a n/2. Repita este proceso y finalmente obtendrá una secuencia con valor 1. Por ejemplo, para n = 10, la secuencia se convierte en 10-5-16-8-4-2-1).

#include <stdio.h>

int hailstone(int n) {
    int count = 0;
    while (n != 1) {
        if (n % 2 == 0) {
            n = n / 2; // 如果是偶数,将它变为 n/2
        } else {
            n = 3 * n + 1; // 如果是奇数,将它变为 3n+1
        }
        count++;
    }
    return count;
}

int main() {
    int num;
    printf("请输入一个正整数:");
    scanf("%d", &num);
    int count = hailstone(num);
    printf("%d 到达 4-2-1 谷底共经过了 %d 次变换。\n", num, count);
    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/yangjiaying1/article/details/130161306
Recomendado
Clasificación