暑假第二十天之每天一些题系列
Posted 小赵小赵福星高照~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暑假第二十天之每天一些题系列相关的知识,希望对你有一定的参考价值。
暑假第二十天之每天一些题系列
一、选择题
- 若函数的参数是数组,则传递给这个参数的值是
A. 整个数组被拷贝过去
B. 数组的首地址
C. 数组元素的个数
D. 数组第一个元素的值
答案解析:
数组传参是传过去得是数组的首地址
- 以下数组初始化错误的是
A. int d[2][3] = {{1,2},{3,4},{5,6}};
B. int a[2][3] = {0};
C. int a[][3] = {1,2,3,4,5,6};
D. int b[][3] = {{1,2},{0}};
答案解析:
二维数组d是二行三列,但是初始化里面一个大括号是一行,有三个大括号就是三行,故是错误的
- char x[] = “China”; 则 x 所占据的空间为
A. 6个字节
B. 7个字节
C. 5个字节
D. 8个字节
答案解析:
字符串的结束标志是\\0,China后面还要一个字符\\0,故是六个字符,占用六个字节
- 以下不能正确进行字符串初始化的语句是
A. char str[8] = {‘g’, ‘o’, ‘o’, ‘d’, ‘!’};
B. char str[5] = “good!”;
C. char *str = “good!”;
D. char str[5] = {‘g’, ‘o’, ‘o’, ‘d’, ‘!’};
答案解析:
字符串后面还有\\0,而数组str只有五个空间,存不下\\0,故这种初始化是错误的。
- 若有如下变量定义,则正确的叙述为
char x[] = "abcd";
char y[] = {'a', 'b', 'c', 'd'};
A. 数组x和数组y的值相同
B. 数组x的长度小于数组y的长度
C. 数组x的长度大于数组y的长度
D. 两个数组的长度相同
答案解析:
数组x和数组y的值不同,数组x当中有\\0,数组y没有;故数组x的长度大于数组y
二、填空题
- 如下程序的输出结果是______________
#include<stdio.h>
int fun(int x)
{
int count = 0;
while (x)
{
count++;
x = x &(x - 1);
}
return count;
}
int main()
{
printf("%d\\n", fun(2019));
}
答案解析:
x=x&(x-1),这个操作是将x的二进制位当中从低位到高位的第一个1删除,故该函数的作用是计算传进来参数的二进制位当中1的个数,2019的二进制位的1的个数为:8
- 如下程序的输出结果是___________
int Func(int a)
{
int b = 0;
static int c = 3;
a = c++,b++;
return (a);
}
int main()
{
int a = 2, i, k;
for (i = 0; i < 2; i++)
{
k = Func(a++);
}
printf("%d\\n", k);
return 0;
}
答案解析:
for循环一共进行两次,故调用两次Func函数,第一次调用函数,a=c++,b++;a为3,c变为4,b变为1,然后第二次调用,因为c是静态变量,故a此时是4,故最后返回4,故最后k=4。
- 如下程序的输出结果是__________
#include<stdio.h>
int main()
{
int s = 0,n;
for(n=0; n<4; n++)
{
switch(n)
{
default:s+=4;
case 1:s+=1;
case 2:s+=2;
case 3:s+=3;
}
}
printf ("%d\\n",s);
return 0;
}
答案解析:
当n=0时,switch语句进入default,因为没有break,故会一直往下执行case,执行完后,s=10,当n=1时,switch语句执行case 1,因为没有break,故会一直往下执行case,执行完后,s=16,当n=2时,switch语句执行case 2,因为没有break,故会一直往下执行case,执行完后,s=21,当n=3时,switch语句执行case 3,执行完后,s=24,故最后s为24
三、算法题
题目描述:
编写代码完成如下功能:删除字符串首尾的空格,中间的连续空格只留一个,原来字符串的顺序不变。
如 “*****as****adadq******”(*是空格) 变成 “as*adadq”
代码如下:
char* format_string(char arr[])
{
char* begin = arr;//指向首字符
char* cur = arr;//指向当前处理的字符
while (*cur!='\\0')
{
//去掉首部空格
if (*begin == ' ')
{
begin++;
cur++;
}
//如果有两个以上的空格
if (*cur == ' ' && (*(cur + 1) == ' '|| *(cur+1) == '\\0'))//去除中间的空格与尾部的空格
{
char* temp = cur;
while (*(temp + 1) != '\\0')
{
*temp = *(temp + 1);
temp++;
}
*temp = '\\0';
}
else
{
cur++;
}
}
return begin;
}
int main()
{
char arr[] = " i love you ";
printf("%s\\n", format_string(arr));
return 0;
}
以上是关于暑假第二十天之每天一些题系列的主要内容,如果未能解决你的问题,请参考以下文章