暑假第十一天之每天一些题系列
Posted 小赵小赵福星高照~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了暑假第十一天之每天一些题系列相关的知识,希望对你有一定的参考价值。
暑假第十一天之每天一些题系列
一、选择题
- 程序的输出结果是
#include<stdio.h>
int fun(char *s)
{
char *p = s;
while(*p != '\\0')
{
p++;
}
return(p-s);
}
int main()
{
printf("%d\\n",fun("goodbye!"));
}
A. 0 B. 6 C. 7 D. 8
答案解析:
将字符串goodbye!传到fun函数,s指向该字符串,然后重新定义了个变量遍历字符串,到\\0时停止,最后返回两个指针相减,这个函数的功能其实就是在计算字符串的长度,指针-指针是指针与指针之间的元素个数,即答案是8
-
下列关于数组与指针的区别描述正确的是____
A. 数组要么在静态存储区被创建(如全局数组), 要么在栈上被创建
B. 用运算符 sizeof 可以计算出数组的容量
C. 指针可以随时指向任意类型的内存块
D. 用运算符 sizeof 可以计算出指针所指向内容的容量
答案解析:
A:还可以在堆上开辟动态数组。B:sizeof(数组名)操作符就是计算数组的容量。C:const修饰的指针不能改变。D:char* str = “hello”; sizeof(str)不能计算出内容的容量,只是指针的容量
-
下面关于定义一个int类型的指针数组,数组元素个数为10个,方法正确的是
A. int a[10] B. int (*a)[10] C. int *a[10] D. int (*a[10])(int)
答案解析:
int a[10],a先和[]结合,说明它是数组,数组的元素类型为int*,即它是一个int类型的指针数组*
-
给定如下代码: int arr[4] = {0}; int brr[4] = {1}; 数组 arr 和 brr 的值为
A. {0,0,0,0},{1,1,1,1}
B. {0,0,0,0},{1,0,0,0}
C. {0,不确定},{1,不确定}
D. 与编译器相关答案解析:
对于不完全初始化的数组,编译器会自动将剩余的空间初始化为0
-
数组定义为 int a[4] = {0}; 表达式____是错误的
A. *a B. a[0] C. a D. a++
答案解析:
a是数组名,是首元素地址,是一个常量,是不能改变的,不能++。
二、填空题
- 如下代码输出结果是什么
int main()
{
unsigned char a = 0xA5;
unsigned char b = ~a>>4+1;
printf("%d\\n",b);
return 0;
}
答案解析:
a转换为二进制为:10100101
~的优先级大于>>,故先对a按位取反得:
01011010 --补码
然后对他右移5位,得:
00000010 – 补码
11111110 --原码
又因b是无符号char,故b得值为:250
- 下面的代码输出什么
const int i = 0;
int *j = (int *) &i;
*j = 1;
printf("%d,%d", i, *j)
答案解析:
在C语言中,const变量只不过是修饰该变量名,它并不能使内存变为只读。也就是说,我们不能通过变量名再去操作这块内存。但是可以通过其它方法,如指针,通过指针是可以修改被const修饰的那块内存的。故最后打印的结果为1,1。
三、算法题
题目描述:
对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。测试样例: “qywyer23tdd” , 返回: y
思路:
这道题和我们昨天讲的那道算法题是一模一样的,只不过那个是找第一次不重复出现的数字,这个是找第一次重复出现的数字,解题思路是一样的,新创建一个数组,用来存放这些次数,我们的存放字符出现次数的方式是根据字符的ascii码值作为数组下标存放的,然后遍历字符串,以当前字符的ascii码值为下标访问新数组,第一个>1的元素的对应下标就是原数组中第一次出现一次的字符的下标
代码如下:
#include<stdio.h>
void FindNum(char *str)
{
int count[256] = { 0 };
char *p = str;
while(*p)
{
count[*p++]++;//设置每个字符出现的次数
}
while(*str)
{
if(count[*str]>1)
{
printf("第一次重复出现的字符是:%c\\n",*str);
return;
}
str++;
}
printf("没有出现重复的字符\\n");
}
int main()
{
char arr[] = "abaccdeff";
int len = sizeof(arr) / sizeof(arr[0]);
FindNum(arr);
return 0;
}
以上是关于暑假第十一天之每天一些题系列的主要内容,如果未能解决你的问题,请参考以下文章