测评代码:month_11/test_19/main.c · Hera_Yc/bit_C_学习 - 码云 - 开源中国
第一题:该程序输出的是多少?
#include <stdio.h>
int main()
{
unsigned char i = 7;//0~255
int j = 0;
for (; i > 0; i -= 3)
{
++j;
}
printf("%d\n", j);
return 0;
}
第二题:以下程序运行时,若输入1abcdef2df<回车>的输出结果是?
int main()
{
char a = 0, ch;
while ((ch = getchar()) != '\n')
{
if (a % 2 != 0 && (ch >= 'a' && ch <= 'z'))
{
ch = ch - 'a' + 'A';//转换为大写
}
a++;
putchar(ch);
}
printf("\n");
return 0;
}
第三题: 以下哪个选项可以将flag的第二个bit位置零?
1、flag &= ~2;
2、flag |= 2;
3、flag ^= 2;
4、flag >>= 2;
第四题:这两个结构体在#pragma pack(4)和 #pragma pack(8)的情况下大小分别是?
struct one
{
double d;//0~7
char c;//8
int i;//12~15 //4Byte
};
struct two
{
char c;//0
double d; //8~15
int i; //16~19 //5Byte
};
//#pragam pack(4)
//one: 16Byte
//two: 16Byte
//#pragam pack(8)
//one: 16Byte
//two: 24Byte
这里是结构体对齐,就不在多说了,可以参考:高阶C语言之三:自定义类型-CSDN博客
第五题:在上下文和头文件均正常的情况下,以下程序输出正确的是?
int main()
{
int x = 1;
do
{
printf("%2d\n", x++);
} while (x--);
return 0;
}
//死循环打印1
第六题:下列程序c输出的结果是?
int main()
{
int a = -3;
unsigned int b = 2;
long c = a + b;
printf("%ld\n", c);
return 0;
}
//1000 0000 0000 0000 0000 0000 0000 0011 - a原码
//1111 1111 1111 1111 1111 1111 1111 1100
//1111 1111 1111 1111 1111 1111 1111 1101 - a补码 (有符号位)
//+
//0000 0000 0000 0000 0000 0000 0000 0010 - b补码 (无符号位)
//=(内存的实际值)
//1111 1111 1111 1111 1111 1111 1111 1111 - (无符号很大的数)
//1111 1111 1111 1111 1111 1111 1111 1111 - 放在long 里面(-1的补码)
//打印-1
第七题:设定义有 char* p[] = { "shanghai","Beijing","HongKong" };,则结果j字符的表达式为?
//这个就是解析
int main()
{
char* p[] = { "shanghai","Beijing","HongKong" };
printf("%c\n", *(p[1] + 3));
return 0;
}
第八题:下列程序的执行结果
int f(x)
{
return ((x > 2) ? x * f(x - 1) : 3);
}
int i;
i = f(f(2));
//f(2)=3
//f(3)=3*f(2)=9
第九题:p[1][2]的值为?
int p[][4] = { {1},{3,2},{4,5,6},{0} };
第十题:下列程序,f(21)的运行结果:
int fun(int a)
{
a ^= (1 << 5) - 1;
return a;
}
//0000 0001 1
//0010 0000 1<<5
//0001 1111 1<<5-1
//0001 0101 21
//0001 1111 1<<5-1
//^
//0000 1010 10
第十题:下列程序中,z的执行结果是?
#define N 3+1
#define Y(n) ((N+1)*n)
int main()
{
int z = 2 * (N + Y(5 + 1));
return 0;
}
//宏是替换
//2 * (3+1 + Y(5 + 1));
// #define Y(n) ((4+1)*n)
//2 * (3+1 + ((4+1)*5 + 1));
//2*(4+25+1);
//60
第十一题:表达式a*b+d-c的类型为?
char a;
int b;
float c;
double d;
//a*b int
//a*b-c float
//a*b-c-d doublt
编程题:将字符串中的空格变换为 %20。
#include <stdio.h>
#include <string.h>
void replace(char* str, int sz)
{
char* ptr = str;
int count = 0;
while (*ptr)
{
if (*ptr == ' ')
{
count++;
}
ptr++;
}
int end1 = sz - 1;
int end2 = sz - 1 + count * 2;
while (end1 != end2)
{
if (str[end1] == ' ')
{
end1--;
str[end2--] = '0';
str[end2--] = '2';
str[end2--] = '%';
}
else
{
str[end2--] = str[end1--];
}
}
}
int main()
{
char str[30] = "we are happy";
int sz = strlen(str);
int i = 0;
replace(str, sz);
printf("%s\n", str);
return 0;
}