暑假第十一天之每天一些题系列

暑假第十一天之每天一些题系列

一、选择题

  • 程序的输出结果是
#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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小赵小赵福星高照~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值