【C语言进阶】题目练习(2)

目录

题目6:看代码说结果

分析:

答案:255

题目7:猜名次

分析:

题目8:猜凶手

分析:

代码:

题目9:打印杨辉三角

思路:

代码:

题目10:关于指针的选择题

答案:

题目11:关于字符指针的选择题

答案:

题目12:指针数组和数组指针的选择题

答案:

题目13:数组指针判断的选择题

​编辑

答案:

题目14:函数指针的题目1

答案:

题目15:函数指针的题目2

答案:

题目16:函数指针的题目3

答案

题目17:指针选择题

答案:

题目18:关于数组名的选择题

答案:

题目19:指针数组的选择题

答案:

题目20:看代码得结果

答案:

题目6:看代码说结果

cpp 复制代码
#include<stdio.h>
#include<string.h>
int main() 
{
    char a[1000] = { 0 };
    int i = 0;
    for (i = 0; i < 1000; i++) 
    {
        a[i] = -1 - i;
    }
    printf("%d",strlen(a));
    return 0;
}

分析:

有符号的char类型是-128到127,i = 127的时候此时char没有溢出;i = 128的时候此时char溢出,-129需要进行截断,

此时-129的原码是:1000 0000 0000 0000 0000 0000 1000 0001

此时-129的补码是:1111 1111 1111 1111 1111 1111 0111 1111

只截取后8位:0111 1111十进制127;

我们惊奇地发现,当负数溢出之后,会循环到正数,也就是说无论给a[i]多大的值,只能被映射到相应的范围内,1000次循环之后,char数组中前255(-128-127一共255个数)是被初始化了的,其余的都是0,也就是第256个元素是\0,使用strlen判断长度得出结果是255;

答案:255

题目7:猜名次

根据5位运动员的表述,编程得到最后的比赛结果:

A说:B第二,我第三;

B说:我第二,E第四;

C说:我第一,D第二;

D说:C最后,我第三;

E说:我第四,A第一;

比赛结束后,每位选手只说对了一半,请编程确定比赛名次。

分析:

可以使用穷举法,每个人说的条件使用逻辑或关联,再和其他人的条件进行逻辑与关联,最后打印之前需要过滤一遍,若a*b*c*d*e == 120,再进行输出。

这个题目虽然出的不好,但是需要学会一种将实际问题转换成代码的这种思想。

题目8:猜凶手

杀人凶手是四人之一:

A:不是我;

B:是C;

C:是D;

D:C在胡说;

已知三人说了真话,一人说了假话;利用编程判断谁是凶手。

分析:

应用题转换成代码的能力非常重要,我们可以将四个人说的话当作条件,进行判断;在四个人中进行循环,如果这四个条件有三个是成立的那么就可以输出杀手。

代码:

cpp 复制代码
#include<stdio.h>
int main() 
{
    int killer = -1;
    for (killer = 'a'; killer <= 'd'; killer++) 
    {
        if (((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd')) == 3) 
        {
            printf("%c",killer);
        }
    }
}

题目9:打印杨辉三角

1

1 1

1 2 1

1 3 3 1

.....

思路:

观察到第一列和行列坐标相同的时候都是1,其余部分遵循arr[i][j] = arr[i-1][j-1] + arr[i-1][j];的逻辑。

①首先写出一个直角三角形的循环框架。

②第一列即arr[i][0]进行初始化为1,行列坐标相同也需要初始化为1;

③其余部分按照arr[i][j] = arr[i-1][j-1] + arr[i-1][j]的逻辑进行赋值。

代码:

cpp 复制代码
#include<stdio.h>
void printYanghui(int arr[10][10],int sz)
{
    int i = 0;
    for (i = 0; i < sz; i++) 
    {
        int j = 0;
        for (j = 0; j <= i; j++) 
        {
            // 先初始化
            if (j == 0) 
            {
                arr[i][j] = 1;
            }
            else if(i == j)
            {  
                arr[i][j] = 1;
            }
            else 
            {
                arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
            }
            
        }
    }
    for (int i = 0; i < sz; i++)
    {
        for (int j = 0; j < i; j++)
        {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}
int main() 
{
    int arr[10][10] = { 0 };
    printYanghui(arr,10);

    return 0;
}

题目10:关于指针的选择题

答案:

A

free函数只能释放空间,并不会将指针变量内容置空。

题目11:关于字符指针的选择题

答案:

C

hello bit是一个字符串常量,存放在常量区中,p存放的是h的地址。

题目12:指针数组和数组指针的选择题

答案:

C

数组指针是一个指向数组的指针,指针数组是一个数组,数组内的元素是指针。

题目13:数组指针判断的选择题

答案:

C

arr先和[]结合就是数组,arr先和*结合就是指针;

A:是指针数组,数组元素类型是int**。

B:是指针数组,数组元素是int*。

C:是数组指针,指针指向的是char*[10]。

D:是指针数组,数组元素是char*。

题目14:函数指针的题目1

答案:

C

fun先和*结合就是指针。

题目15:函数指针的题目2

答案:

A

先看(*F)是一个指针,再看形参正确,去除掉这些部分就是返回值了:int(*)(int),这是一个函数指针有一个int形参,返回int类型,所以A正确。

题目16:函数指针的题目3

答案

B

A的参数是int,返回值是int不合要求;

C直接排除,不是指针;

D参数返回值均为int*,不合要求。

题目17:指针选择题

答案:

D

A:arr数组第一个元素地址给p,正确

B:数组指针指向arr,正确

C:同A,正确

D:p的类型是int*,&arr类型是int(*)[10],类型不匹配。

题目18:关于数组名的选择题

答案:

A

A:arr是数组首元素的地址,&arr是整个数组的地址,错误

B:正确

C:&arr是表示整个数组,正确

D:正确

题目19:指针数组的选择题

答案:

C

A:int类型的数组,错误

B:数组指针,指向int[10]

C:正确

D:a[10]是一个数组,数组的每一个元素是int (*)(int),即函数指针。

题目20:看代码得结果

答案:

不相等

相等

①str1和str2是数组,使用==比较的是各自首元素的地址,由于这是数组,所以在栈内是单独开辟空间的,所以地址一定不等。

②str3和str4是指针,使用==比较的是地址,字符串是存在静态区的,所以这两个指针指向同一个静态区,所以相等。

相关推荐
尤老师FPGA26 分钟前
LVDS系列21:Xilinx 7系ISERDESE2原语(二)
开发语言·php
费费开心一点35 分钟前
Java程序设计学习笔记
java·笔记·学习
智驱力人工智能1 小时前
智慧后厨检测算法构建智能厨房防护网
人工智能·算法·口罩识别·行为识别·食品安全·高温预警·手套识别
amazinging2 小时前
北京-4年功能测试2年空窗-报培训班学测开-第五十四天
python·学习·面试
java1234_小锋3 小时前
【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博类别信息爬取
开发语言·python·flask
shdbdndj4 小时前
C语言:预处理
c语言·预处理
程序员JerrySUN5 小时前
深度理解 KVM:Linux 内核系统学习的重要角度
java·linux·学习
默|笙5 小时前
【c++】STL-容器 list 的实现
c++·windows·list
BTU_YC5 小时前
Neo4j Python 驱动库完整教程(带输入输出示例)
开发语言·python·neo4j
曾几何时`5 小时前
分别使用Cypher与python构建neo4j图谱
开发语言·python·机器学习