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: 温度データを示します
- Bit 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;
}