C语言作业-Day8

写作能力有限,请多多包含( $ _ $ )
如有错误理解,请指出文中有误的地方。(可以私信)
一、选择题
1、如下程序的运行结果是( )
A: 'a' 'b'     B: ab\0c\0     C: ab c     D: ab
  • 1. C语言字符串以'\0'结尾,扫描到即结束,故字符串打印的内容只有"ab"  
  • 2. char c[5] = { 'a', 'b', 's', 'c', 'd' }; printf("%s", c); 不会溢出!
char c[5]={'a', 'b', '\0', 'c', '\0'};
printf("%s", c);

答案:D

2、若有定义: int a[2][3]; ,以下选项中对 a 数组元素正确引用的是( )
A: a[2][0]     B: a[2][3]     C: a[0][3]     D: a[1>2][1]
  • int a[2][3]   行坐标数字:0,1        列坐标数字:0,1,2
  • AB 选项行坐标超范围     C选项列坐标超范围    D选项 1>2  -->  0
答案:D
3、在下面的字符数组定义中,哪一个有语法错误( )
A: char a[20]="abcdefg";     B: char a[]="x+y=5.";
C: char a[15];                      D: char a[10]='5';
  • D中的'5'是一个字符常量,不能给字符型数组a初始化
  • char a[10]定义的是长度为10的字符数组,
    如果是想初始化数组中内容全为'5'那应该是char a[10]={'5'};
    如果是只是想a[10]为'5'的话,那应该是char a[10];a[10]='5';

答案:D

4、下列定义数组的语句中正确的是【多选】( )
A:
#define size 10
char str1[size], str2[size+2];
B: char str[];     C: int num['10'];     D: int n=5; int a[n][n+2];
  •  A选项:宏替换,没问题;
  • B选项:非法定义,一维数组必须定义数组元素个数;
  • C选项:字符'0',转换成十进制为48,所以该选项最终为int num[48];
  • D选项:n是变量,变量的值要在程序运行时才能知道(虽然我们能看到它的值是5,但程序不知道),而数组的大小在编译期就得确定。错误,数组定义下角标不能为变量,注:C99标准中支持了使用变量,这里不做特殊考虑。

答案:AC

5、已知 i,j 都是整型变量,下列表达式中,与下标引用 X[i][j] 不等效的是【多选】( )
A: *(X[i]+j)     B: *(X+i)[j]     C: *(X+i+j)     D: *(*(X+i)+j)
  • A选项,先走x[i]那么就是第i行,再走被包裹在括号内的+j,故走到第i行第j列的地址,再解引用得到内容,故与目标等效,故不选A。
  • B选项,()和[]优先级相同从左往右即可,但*的优先级最低,最后走,故走出来为**((x+i)+j),显然越界,不等效,B正确。 

  • C选项,X是二维数组的数组名,数组名相当于第一行的地址,X+i+j,跳过了i+j行,就越界了,不等效,C正确。

  • D选项,*(x+i)走到第i行,第0列,受到解引用*的影响,+j相当于走到第j列,再解引用,故得到第i行第j列的元素,等效,D错误。

答案:BC
二、编程题 
1、字符个数统计_牛客题霸_牛客网 (nowcoder.com)

#include <stdio.h>

int main() {
    char arr[501]={0};
    while(~scanf("%s",&arr))
    {
        char table[128]={0};//新建数组放置标签
        char *ptr=arr;
        int count=0;
        while(*ptr!='\0')
        {
            if(table[*ptr]!=1)//判断数组内部值是否被标记过
            {
                count++;//没有增加基数
            }
            table[*ptr++]=1;//小标置为1
        }
        printf("%d\n",count);

    }
    return 0;
}
2、169. 多数元素 - 力扣(LeetCode) 

int majorityElement(int* nums, int numsSize) {
    int res=nums[0]; // 第一支占领高地的军队
    int count=0; // 此军队当前士兵数量为0
    for(int i=0;i<numsSize;i++) 
    {
        if(tmp==nums[i]) //若遇到相同元素,则当前军队增加一个士兵
        {count++;}
        else  //  反之,当前军队被消灭一个士兵
        {
            count--;
            if(count <= 0)  //若高地全军覆没,则下一军队占领高地  
            {
            res=nums[i+1];
            } 
        }
       
    }

    return tmp;  //返回最后占领高地
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值