c语言每日一练(8)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。

前言:
每日一练系列,每一期都包含5道选择题,2道编程题,博主会尽可能详细地进行讲解,令初学者也能听的清晰。每日一练系列会持续更新,暑假时三天之内必有一更,到了开学之后,将看学业情况更新。

五道选择题:
1、请阅读以下程序,其运行结果是( )

include

int main()
{
char c='A';
if('0'<=c<='9') printf("YES");//1
else printf("NO");
return 0;
}
A、YES B、NO C、YESNO D、语句错误

解析:易错题,很多人看到代码1的时候就会下意识的认为,它的判定条件是变量c大于等于字符0且小于等于字符9才打印YES,实际上要实现这样的功能代码得是'0'<=c&&c<='9'

代码1的执行是先进行'0'<=c这个运算,再把运算所得到的值与'9'进行比较,c存放的是字符变量'A',ASCII码值为65,'0'的ASCII码值为48。所以'0'<=c得到的值是1,再与'9'进行比较,显然1<='9',最终表达式为真,执行YES的打印。故选A

2 、下列程序的输出结果是什么( )

include

int main()
{
int n = 1001;
int ans = 0;
for(int i = 1; i <= n; ++i)
{
ans ^= i % 3;//1
}
printf("%d",ans);
return 0;
}
A、-2 B、0 C 、1 D、2

解析:^(异或)运算符的计算规则是将两个数相同的位变为0,不同的位变为1,那么两个相同的数^等于0,^运算符还满足交换律,因此在进行^的时候可以任意地交换数字之间的位置。

观察代码发现,目标是打印出ans的值,ans在最开始的时侯被赋值为0,然后进入for循环,走向代码1,不停地^i%3的值。i%3可以看出,会在0,1,2三个数中循环,而循环的开始i是为1,所以循环是1,2,0,那么ans就在不停地^1,2,0。观察可知循环的次数为1001,1001/3=333余2。而第332次1,2,0的时候是偶数,意味着第332次时,1,2,0都是一对一对的,那么全部都会被^为0,故最后的结果为(0^1^2)^1^2,等于0,所以选B

3、下面有关空指针和未初始化指针,说法错误的是( )
A、对0x0这个地址取值是非法的
B、空指针可以确保不指向任何对象或函数; 而未初始化指针则可能指向任何地方
C、空指针与任何对象或函数的指针值都不相等 D、malloc在其内存分配失败时返回的是一个未初始化的指针

解析:不能对空指针进行解引用操作,A正确。空指针是没有指先任何空间的指针,未初始化的指针是野指针,是不安全的可能指向任何地方,B正确。空指针没指向任何空间,没有值,故C正确。malloc创建失败的话会返回空指针,故D错误。选D

4、有以下函数,该函数的功能是( )

int fun(char s)
{
char
t = s;
while(*t++);//1
return(t-s);//2
}
A、比较两个字符的大小 B、计算s所指字符串占用内存字节的个数
C、计算s所指字符串的长度 D、将s所指字符串复制到字符串t中

解析:易错题,遇到这种题最好的方法就是传一个东西进去试一下,我们传字符串"abc"进去,可以看出,函数fun先使用字符指针t存放s的指针,所以此时t可以等效为"abc"的首地址,走到代码1,是一个循环,循环会令t不停地走直到走到'\0',因为'\0'的ASCII码值为0。而字符串"abc"走三次才会走到'\0'。但是要注意,*t++,也就是会走到'\0'之后的一个位置。最后走到代码2,首地址和后面的一个地址一减,就会得到字符串"abc"的长度再+1=4。综上所述,答案选B,计算的是字符串占用内存字节的个数,包含'\0'

5、若有float a[3]={1.5,2.5,3.5},pa=a;(pa++)=3; 则 pa 的值是()

A、1.5 B、2.5 C、3.5 D、4.5

解析:从左往右一步步看,首先定义了一个浮点型数组a,存放了1.5,2.5,3.5。接着,使用浮点型指针将浮点型数组a的首地址赋给pa,那么pa现在存放的值为1.5,最后(pa++)=3,先使用后++,根据优先级,解引用得到1.5=3,那么数组a首地址所指向的值被修改为4.5。然后pa++,来到2.5所在的地址,pa解引用,故最后得到的值为2.5,选B

编程题1:
统计每个月兔子的总数牛客题霸牛客网统计每个月兔子的总数牛客题霸牛客网

思路:通过一些计算你可以发现,第n个月的兔子总数就是第n个斐波那契数,接下来就很简单了。

include

int main()
{
int a=1;int b=1;
int month=0;
scanf("%d",&month);
if(month<3)
//当要计算的斐波那契数<3直接打印1
{
printf("%d",a);
return 0;
}
while(month-2)
{
int tmp=a;
a=b;
b=tmp+b;
month--;
}
printf("%d",b);
}

编程题2:
最大公约数__牛客网 (nowcoder.com)

思路:使用辗转相除法解决问题,具体做法是:用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。

include

int main() {
long long int a = 0; long long int b = 0;
//使用long long,防止数据过大
scanf("%lld %lld", &a, &b);
while (b)
{
long long int tmp = b;
//储存中间变量
b = a % b;
a = tmp;
}
printf("%lld", a);
return 0;
}

好了,今天的练习到这里就结束了,感谢各位友友的来访,祝各位友友前程似锦O(∩_∩)O

相关文章
|
4月前
|
存储 人工智能 安全
C语言:选择+编程(每日一练Day15)
C语言:选择+编程(每日一练Day15)
77 2
|
4月前
|
C语言
C语言:选择+编程(每日一练Day13)
C语言:选择+编程(每日一练Day13)
56 0
|
4月前
|
测试技术 C语言
C语言每日一练Day03——移除元素
C语言每日一练Day03——移除元素
|
4月前
|
C语言
C语言每日一练——Day02:求最小公倍数(3种方法)
C语言每日一练——Day02:求最小公倍数(3种方法)
|
4月前
|
C语言
C语言每日一练——Day01:求最大公约数(三种方法)
C语言每日一练——Day01:求最大公约数(三种方法)
|
4月前
|
存储 人工智能 C语言
C语言:选择+编程(每日一练Day16)
C语言:选择+编程(每日一练Day16)
50 3
|
4月前
|
C语言
C语言:选择+编程(每日一练Day14)
C语言:选择+编程(每日一练Day14)
57 2
|
4月前
|
编译器 C语言
C语言:选择+编程(每日一练Day12)
C语言:选择+编程(每日一练Day12)
51 2
|
4月前
|
C语言
C语言:选择+编程(每日一练Day11)
C语言:选择+编程(每日一练Day11)
44 2
|
4月前
|
C语言
C语言:选择+编程(每日一练Day10)
C语言:选择+编程(每日一练Day10)
53 1