C 언어 --- 알고리즘에 대한 일부 프로그래밍

1. 데이터 타입마다 표현의 범위가 정해져 있는데, 데이터 타입의 길이  를 가정하지 않고 현재 시스템의 정수형 int가 가장 쉽게 표현할 수 있는 최대값을 계산하는
 알고리즘을 프로그램하라 .

#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. N리터의 물에 몇 개의 물 분자가 있는지 계산하고 최종 결과를 과학적 표기법으로 표시

#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. 기존의 임베디드 단말이 전송하는 데이터 패킷은 32비트의 부호 없는 정수이며 이 데이터 패킷의 비트의 의미는 다음과 같다.

  • 비트 00-07: 온도 데이터를 나타냅니다.
  • 비트 08-15: 습도 데이터를 나타냅니다.
  • 비트 16-19: 4개 도어의 상태 표시(도어 번호 0-3)
  • 비트 20-23: 표시등 4개(표시등 번호 0-3)의 상태를 나타냅니다.
  • 24-31비트: 백업용으로 예약됨

다음은 가장 최근 기간에 수신된 패킷입니다.

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. 사용자가 특정 대문자를 입력하면 피라미드 패턴을 생성하는 프로그램을 작성하십시오.
예를 들어 문자 E를 입력하면 다음과 같은 패턴이 생성됩니다.

    A
   ABA
  ABCBA
 ABCDCBA
ABCDEDCBA

코드 프로그래밍: 

#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. 우박 추측을 실현합니다(우박 추측은 임의의 양의 정수 n을 의미하며, n이 홀수이면 3n+1로 변경되고, 그렇지 않으면 n/2로 변경됩니다. 이 과정을 반복하면 최종적으로 값이 1인 시퀀스를 가져옵니다. 예를 들어 n = 10인 경우 시퀀스는 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;
}

추천

출처blog.csdn.net/yangjiaying1/article/details/130161306