暑假第十八天之每天一些题系列
一、选择题
#define N 3
#define Y(n) ((N+1)*n)
A. 出错 B. 42 C. 48 D. 54
答案解析:
#define定义的符号和宏在预处理阶段完成替换,z=2*(N+Y(5+1));被替换为:z=2*(3+((3+1)*5+1));则z的值为48
int i=6;
if ( i<= 6 )
printf("hello\n");
else
printf("bye-bye\n");
A. 打印出 “hello” B. 打印出 “bye-bye” C. 不能通过编译 D. 打印出 “hello bye-bye”
答案解析:
if else语句,i<=6,则进入if语句,否则进入else语句。
答案解析:
C语言的标识符一般应遵循如下的命名规则: 1 标识符必须以字母a~z、 A~Z或下划线开头,后面可跟任意个(可为0)字符,这些字符可以是字母、下划线和数字,其他字符不允许出现在标识符中。 2 标识符区分大小写字母 3 标识符的长度,c89规定31个字符以内,c99规定63个字符以内 4 C语言中的关键字,有特殊意义,不能作为标识符 5 自定义标识符最好取具有一定意义的字符串,便于记忆和理解。
char ch = -1;
printf("%d\n", ch);
A. 运行错误,因为 %d 和 ch 的类型不匹配 B. ASCII 码表中 255 那个位置的字符 C. 255 D. -1
答案解析:
char也是本质上也是整形,它是有符号的char,故以整形打印为-1,若是无符号的char,以整形打印为255
for循环的前两部分在结束时都要加分号,没有语句也要加分号
二、填空题
答案解析:
结果是:8.000000;10/4是2,2*4等于8,强制类型转换为double,故为8.000000
答案解析:
此处为逗号表达式,逗号表达式的值是最后一个表达式的结果,每个表达式从左往右依次计算,a变为3,b变为4,故最后表达式值为7
int main()
{
int i,x,y;
i = x = y = 0;
do {
++i;
if( i%2 )
x += i,
i++;
y += i++;
} while ( i<=7 );
printf("%d %d %d", i, x, y);
}
答案解析:
第一次循环下来,i=3,x=1,y=2;第二次循环下来,i=5,x=1,y=6,第三次循环后,i=7,x=1,y=12;第四次循环后,i=9,x=1,y=20。此时i>7,循环结束,故打印为9,1,20
三、算法题
题目描述:
如何判断一个数n是否是2的k次方?注意:不用求K是多少,只需要判断,请编写函数实现
思路:
2的次方的数的二进制只有一个1,n&n-1是去掉n的二进制当中的那个1,如果它是0的话说明是2的次方,否则不是
代码如下:
#include<stdio.h>
void judge_is_2pow(int n)
{
if(n&n-1)
{
printf("这个数不是2的次方\n");
}
else
{
printf("这个数是2的次方\n");
}
}
int main()
{
judge_is_2pow(4);
return 0;
}
|