题目一(结构体内存对齐):
计算下面代码的运行结果:
#include<stdio.h>
#include<string.h>
int main()
{
unsigned char puc[4];
struct tagPIM
{
unsigned char ucPim1;
unsigned char ucData0 : 1;
unsigned char ucData1 : 2;
unsigned char ucData2 : 3;
}*pstPimData;
pstPimData = (struct tagPIM*)puc;
memset(puc, 0, 4);
pstPimData->ucPim1 = 2;
pstPimData->ucData0 = 3;
pstPimData->ucData1 = 4;
pstPimData->ucData2 = 5;
printf("%02x %02x %02x %02x\n", puc[0], puc[1], puc[2], puc[3]);
return 0;
}
答案是02 29 00 00
题目二
编程题:变种水仙花数
//变种水仙花数
#include<stdio.h>
int main(void)
{
for (int i = 10000; i < 99999; i++)
{
//i=12345;
int sum = 0;
for (int j = 10; j <= 10000; j *= 10)
{
sum += (i / j) * (i % j);
}
if (sum == i)
{
printf("%d ", i);
}
}
return 0;
}
题目三
编程题:第一行 输入一个N整数;
第二行 输入N个值(0<N<50);
第三行 删除一个值del
实例:第一行 输入一个值:6
第二行 输入N个值:1 2 3 4 5 9
第三行 删除4
最后打印出来的是 1 2 3 5 9
#include<stdio.h>
int main(void)
{
int n = 0;
scanf("%d", &n);//输入一个整数N
int arr[50] = { 0 };
for (int i = 0; i < n; i++)
{
scanf("%d", &arr[i]);//取出N个整数/
}
int del;//输入想要删除的一个整数
scanf("%d", &del);//取地址要删除的整数
int i = 0;
int j = 0;
for (; i < n; i++)
{
if (arr[i] != del)
{
arr[j] = arr[i];
j++;
}
}
for (int k = 0; k < j; k++)//打印出数组arr[k],新的数组,删掉一个整数之后的数组
{
printf("%d ", arr[k]);
}
}
题目四
使用结合体的知识,判断一个机器是大端存储还是小端存储,如果是小端返回1,大端返回0.
#include<stdio.h>
int check_yes()
{
union un
{
char c;
int i;
}u;
u.i = 1;
return u.c;
}
int main(void)
{
int ret = check_yes();
if (ret == 1)
{
printf("小端\n");
}
else
printf("大端\n");
return 0;
}
题目五:
计算下面代码的运行结果:
#include<stdio.h>
int main()
{
union
{
short k;
char i[2];
}*s, a;
s = &a;
s->i[0] = 0x39;
s->i[1] = 0x38;
printf("%x\n", a.k);
return 0;
}
运行结果是3839 .