【28】C语言 | 关于指针练习(1)

news2024/9/20 22:55:26

目录

1、下列输出什么

2、计算求和

3、使用指针打印数组内容

4、打印水仙花数

5、写一个函数,可以逆序一个字符串的内容

6、题目名称:打印菱形

6、喝汽水

7、猜名次

8、下列关于整形数组输出什么并解释

9、下列关于字符数组输出什么并解释

9.1 下列关于字符数组输出

9.2 下列关于字符数组输出

9.3 下列关于字符数组输出

9.4 下列关于字符数组输出

9.5 下列关于字符数组输出

9.6 下列关于字符数组输出


1、下列输出什么

int i;//i是全局变量,不初始化,默认是0
int main()
{
    i--;
    if (i > sizeof(i))
    {
        printf(">\n") ;
    }
    else
        printf("<\n");
return 0;
}

输出>

因为:sizeof计算出的是一个unsigned数,当与有符号数-1比较的时候,-1会被看作一个无符号的数,-1在内存中存放的数是一个很大的数(32个1),所以>

2、计算求和

题目内容:

求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字

例: 2+22+222+2222+22222

//求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字
//例: 2+22+222+2222+22222

int main()
{
    int a = 0;
    int n = 0;
    int i = 0;
    int sum = 0;
    int ret = 0;
    scanf("%d %d",&a,&n);
    for(i=0; i<=n; i++)
    {
        ret = ret*10 + n;
        sum = sum + ret;
    }
    printf("%d\n",sum);
    return 0;
}

 

3、使用指针打印数组内容

题目内容:

写一个函数打印a数组的内容,不使用数组下标,使用指针。

arr是一个整形一维数组。

方法一:

void print(int *p,int len)
{
    int  i = 0;
    for(i=0;i<len; i++)
    {
        printf("%d ",*(p+i));
    }
}
int main()
{
    int arr[10] = {1,2,3,4,5,6,7,8,9,10};
    int* p = arr;
    int sz = sizeof(arr)/sizeof(arr[0]);
    print(p,sz);
    return 0;
}

方法二:

int main()
{
    int arr[] = {1,2,3,4,5,6,7,8,9,10};
    int* p = arr;
    int sz = sizeof(arr) / sizeof(arr[0]);
    int* pend = arr + sz - 1; 
    while(p <= pend)
    {
        printf("%d ",*p);
        p++;
    }

    return 0;
}

4、打印水仙花数

题目内容

求出0~100000之间的所有”水仙花数“并输出

水仙花数”是指一个n位数,其各山数子的n次方之和于该数本身,如:153=1^3+5^3+ 3^3,则153是一个

#include<math.h>
int main()
{
    int i = 0;
    int n = 1;
    int tmp = 0;
    int sum = 0;
    for(i=0; i<=100000; i++)
    {
        tmp = i;
        while(tmp/10)
        {
            n++;
            tmp = tmp/10;
        }
        tmp = i;
        while(tmp)
        {
            int ret = tmp % 10;
            sum += pow(ret,n);
            tmp = tmp / 10;
        }
        if(sum == i)
        {
            printf("%d ",i);
        }
    }
    return 0;
}

5、写一个函数,可以逆序一个字符串的内容

#include<string.h>
void reverse(char * str)
{
    int len = strlen(str)-1;
    char* left = str;
    char* right = str + len;
    while(left < right)
    {
        int tmp = 0;
        tmp = *left;
        *left = *right;
        *right = tmp;
        left++;
        right--;
    }
}
int main()
{
    char arr[] = "abcdef";
    reverse(arr);
    printf("%s",arr);

    return 0;
}

6、题目名称:打印菱形

题目内容:

用C语言在屏幕上输出以下图案:

int main()
{
    int line = 0;
    scanf("%d",&line);
    int i = 0;
    for(i=0; i<line; i++ )
    {
        int j = 0;
        for(j=0; j<line-1-i ; j++)
        {
            printf(" ");
        }
        for(j=0; j<i*2+1; j++)
        {
            printf("*");
        }
        printf("\n");

    }
    for(i=0; i<=line-1; i++)
    {
        int j = 0;
        for(j=0; j<=i; j++)
        {
            printf(" ");
        }
        for(j=0; j<2*(line-1-i)-1 ;j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

6、喝汽水

1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水 (编程实现)。

int main()
{
    int money = 0;
    scanf("%d",&money);
    int total = money;
    int empty = money;
    while(empty >=2)
    {
        total += empty / 2; 
        empty = empty / 2 + empty % 2;
    }
    printf("%d\n",total);
    return 0;
}

 或者

int main()
{
    int money = 0;
    scanf("%d",&money);
    int total = money;
    if(total>0)
    {
        total = money*2 - 1;
    }
    printf("%d\n",total);
    return 0;
}

7、猜名次

题目内容:

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:

  • A选手说:B第二,我第三;
  • B选手说:我第二,E第四;
  • C选手说:我第一,D第二;
  • D选手说:C最后,我第三:
  • E选手说:我第四,A第一;

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

int main()
{
    int a = 0;int b = 0;int c = 0; int d = 0; int e = 0;
    int i = 0;
    for(a=1; a<=5; a++)
    {
        for(b=1; b<=5; b++)
        {
            for(c=1; c<=5; c++)
            {
                for(d=1;d<=5;d++)
                {
                    for(e=1; e<=5; e++)
                    {
                        if((b==2)+(a==3)==1 &&((b==2)+(e==4)==1) 
                            && (c==1)+(d==2)==1 
                            &&((c==5)+(d==3)==1)
                            &&((e==4)+(a==1)==1))
                        {
                            if(a*b*c*d*e == 120)
                            {
                                printf("a=%d b=%d c=%d d=%d e=%d\n",a,b,c,d,e);
                            }
                        }
                    }
                }
            }
        }
    }

    return 0;
}

8、下列关于整形数组输出什么并解释

int main()
{
    int a[] = { 1,2,3,4 };
    printf("%d\n",sizeof(a));
    printf("%d\n",sizeof(a + 0));
    printf("%d\n",sizeof(*a));
    printf("%d\n",sizeof(a + 1));
    printf("%d\n",sizeof(a[1]));

    printf("%d\n",sizeof(&a));
    printf("%d\n",sizeof(*&a));
    printf("%d\n",sizeof(&a + 1));
    printf("%d\n",sizeof(&a[0]));
    printf("%d\n",sizeof(&a[0] + 1));


    return 0;
}
//sizeof(数组名) - 数组名表示整个数组的 - 计算的是整个数组的大小
//&数组名 - 数组名表示整个数组,取出的是整个数组的地址
//除此之外,所有的数组名都是数组首元素的地址
int main()
{
    int a[] = { 1,2,3,4 };
    printf("%d\n",sizeof(a));   //16       - sizeof(数组名) - 数组名表示整个数组的 - 计算的是整个数组的大小
    printf("%d\n",sizeof(a + 0));// 4/8    - a+0是第一个元素的地址,sizeof(a+0)计算的是地址的大小
    printf("%d\n",sizeof(*a));   //4       - 首元素的地址被解引用,sizeof(*a)计算的是第一个元素的大小
    printf("%d\n",sizeof(a + 1)); //4/8    - a+1是第二个元素的地址,计算的是地址的大小
    printf("%d\n",sizeof(a[1]));  //4      - 计算的是第二个元素大小

    printf("%d\n",sizeof(&a));  // 4/8     - &a虽然数组的地址,但也是地址,sizeof(&a)计算的一个地址的大小
    printf("%d\n",sizeof(*&a));  // 16     - 对整个数组解引用,计算的是整个数组的大小
    printf("%d\n",sizeof(&a + 1));// 4/8   - &a + 1是数组后面的空间的位置地址
    printf("%d\n",sizeof(&a[0])); // 4/8   - 表示第一个元素的地址
    printf("%d\n",sizeof(&a[0]+ 1));//4/8  - 表示第二个元素的地址


    return 0;
}

9、下列关于字符数组输出什么并解释

9.1 下列关于字符数组输出

int main()
{
    char arr[] = {'a','b','c','d','e','f'};
    printf("%d\n",sizeof(arr));
    printf("%d\n",sizeof(arr + 0));
    printf("%d\n",sizeof(*arr));
    printf("%d\n",sizeof(arr[1]));
    printf("%d\n",sizeof(&arr));
    printf("%d\n",sizeof(&arr + 1));
    printf("%d\n",sizeof(&arr[0] + 1));

 
    return 0;
}
int main()
{
    char arr[] = {'a','b','c','d','e','f'};
    printf("%d\n",sizeof(arr)); //6           - sizeof(arr)表示整个数组的地址
    printf("%d\n",sizeof(arr + 0));// 4/8     - 单独的arr(没有和sizeof搭配)就是首元素的地址,加0还是首元素的地址
    printf("%d\n",sizeof(*arr));// 1          - arr就是首元素的地址,*arr就是'a'
    printf("%d\n",sizeof(arr[1]));// 1        - 就是'b'
    printf("%d\n",sizeof(&arr));// 4/8        - 取数组的地址
    printf("%d\n",sizeof(&arr + 1));// 4/8    - 跳过一个数组的地址,'f'的后面
    printf("%d\n",sizeof(&arr[0] + 1));// 4/8 - 跳过一个元素的地址,即'b'的地址

    return 0;
}

9.2 下列关于字符数组输出

#include<string.h>
int main()
{
    char arr[] = {'a','b','c','d','e','f'};
    printf("%d\n",strlen(arr));//
    printf("%d\n",strlen(arr + 0));//
    printf("%d\n",strlen(*arr));//
    printf("%d\n",strlen(arr[1]));//   
    printf("%d\n",strlen(&arr));//
    printf("%d\n",strlen(&arr + 1));//
    printf("%d\n",strlen(&arr[0] + 1));//

    return 0;
}
#include<string.h>
int main()
{
    char arr[] = {'a','b','c','d','e','f'};
    printf("%d\n",strlen(arr));//随机值      - arr为首元素的地址,后的/0找不到
    printf("%d\n",strlen(arr + 0));//随机值  - arr+0 还是首元素的地址
    printf("%d\n",strlen(*arr));//错误       - *arr 这里找到的是'a',而非一个地址
    printf("%d\n",strlen(arr[1]));//错误     - arr[1]这里找到的是'b',而非一个地址       
    printf("%d\n",strlen(&arr));//随机值     - 找到数组的地址开始数
    printf("%d\n",strlen(&arr + 1));//随机值 - 找到数组后面的地址开始数
    printf("%d\n",strlen(&arr[0] + 1));//随机值 - 从'b'开始向后数

    return 0;
}

9.3 下列关于字符数组输出

int main()
{
    char arr[] = "abcdef";
    printf("%d\n",sizeof(arr)); 
    printf("%d\n",sizeof(arr + 0));
    printf("%d\n",sizeof(*arr));
    printf("%d\n",sizeof(arr[1]));
    printf("%d\n",sizeof(&arr));
    printf("%d\n",sizeof(&arr + 1));
    printf("%d\n",sizeof(&arr[0] + 1));

    return 0;
}
int main()
{
    char arr[] = "abcdef";
    printf("%d\n",sizeof(arr)); //7           - sizeof(arr)表示整个数组的地址
    printf("%d\n",sizeof(arr + 0));// 4/8     - 单独的arr(没有和sizeof搭配)就是首元素的地址,加0还是首元素的地址
    printf("%d\n",sizeof(*arr));// 1          - arr就是首元素的地址,*arr就是'a'
    printf("%d\n",sizeof(arr[1]));// 1        - 就是'b'
    printf("%d\n",sizeof(&arr));// 4/8        - 取数组的地址,它还是要给地址
    printf("%d\n",sizeof(&arr + 1));// 4/8    - 跳过一个数组的地址,'f'的后面
    printf("%d\n",sizeof(&arr[0] + 1));// 4/8 - 跳过一个元素的地址,即'b'的地址

    return 0;
}

9.4 下列关于字符数组输出

#include<string.h>
int main()
{
    char arr[] = "abcdef";
    // "a b c d e f \0"
    printf("%d\n",strlen(arr));
    printf("%d\n",strlen(arr + 0));
    printf("%d\n",strlen(*arr));
    printf("%d\n",strlen(arr[1]));
    printf("%d\n",strlen(&arr));
    printf("%d\n",strlen(&arr + 1));
    printf("%d\n",strlen(&arr[0] + 1));

    return 0;
}
#include<string.h>
int main()
{
    char arr[] = "abcdef";
    // " a b c d e f \0"
    printf("%d\n",strlen(arr));//6           - arr为首元素的地址,到\0停止
    printf("%d\n",strlen(arr + 0));//6       - arr+0 还是首元素的地址
    printf("%d\n",strlen(*arr));//错误       - *arr 这里找到的是'a',而非一个地址
    printf("%d\n",strlen(arr[1]));//错误     - arr[1]这里找到的是'b',而非一个地址       
    printf("%d\n",strlen(&arr));//6          - 找到数组的地址开始数
    printf("%d\n",strlen(&arr + 1));//随机值 - 找到数组后面的地址即\0开始数
    printf("%d\n",strlen(&arr[0] + 1));//5   - 从'b'开始向后数

    return 0;
}

9.5 下列关于字符数组输出

int main()
{
    char* p = "abcdef";
    printf("%d\n",sizeof(p)); //          
    printf("%d\n",sizeof(p + 1));//     
    printf("%d\n",sizeof(*p));//           
    printf("%d\n",sizeof(p[0]));//        
    printf("%d\n",sizeof(&p));//       
    printf("%d\n",sizeof(&p + 1));//     
    printf("%d\n",sizeof(&p[0] + 1));//  

    return 0;
}
int main()
{
    char* p = "abcdef";
    //p 是一个指向字符窜的指针
    printf("%d\n",sizeof(p)); //4/8           - p是一个指针
    printf("%d\n",sizeof(p + 1));//4/8        - p+1是'b',但是它还是一个地址
    printf("%d\n",sizeof(*p));//1             - *p拿出来a 
    printf("%d\n",sizeof(p[0]));//1           - p[0] <==> *(p + 0)
    printf("%d\n",sizeof(&p));//4/8           - 是取(地址p)的地址
    printf("%d\n",sizeof(&p + 1));//4/8       - 是取(地址p后面一个单位)的地址
    printf("%d\n",sizeof(&p[0] + 1));//4/8    - 是取地址b的地址

    return 0;
}

9.6 下列关于字符数组输出

#include<string.h>
int main()
{
    char* p = "abcdef";
    printf("%d\n",strlen(p)); //          
    printf("%d\n",strlen(p + 1));//     
    printf("%d\n",strlen(*p));//           
    printf("%d\n",strlen(p[0]));//        
    printf("%d\n",strlen(&p));//       
    printf("%d\n",strlen(&p + 1));//     
    printf("%d\n",strlen(&p[0] + 1));//  

    return 0;
}
#include<string.h>
int main()
{
    char* p = "abcdef";
    // " a b c d e f \0"
    printf("%d\n",strlen(p));//6           - p为首元素的地址,到\0停止
    printf("%d\n",strlen(p + 1));//5       - p为首元素的地址+1,到\0停止
    printf("%d\n",strlen(*p));//错误       - *p 这里找到的是'a',而非一个地址
    printf("%d\n",strlen(p[0]));//错误     - p[0]这里找到的是'a',而非一个地址       
    printf("%d\n",strlen(&p));//随机       - 取到的是(地址p)的地址,后面到什么时候就碰到\0了,不知道
    printf("%d\n",strlen(&p + 1));//随机   - 取到的是(地址p)的地址再往后跳一个单位,后面到什么时候就碰到\0了,不知道
    printf("%d\n",strlen(&p[0] + 1));//5   - 从'b'开始向后数

    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/182653.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++详解】——初识STL(string类的使用)

&#x1f4d6; 前言&#xff1a;STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且一个包罗数据结构与算法的软件框架。 目录&#x1f552; 1. string 概述&#x1f552; 2. 标准库中的stri…

【小程序 | 黑马优选】tabBar、首页制作

文章目录tabBar制作首页制作配置网络请求制作轮播图效果渲染轮播图的UI解构配置小程序分包点击轮播图跳转到商品详情页面封装 uni.$showMsg() 方法分类导航区制作楼层区域制作tabBar制作 在 pages 目录中&#xff0c;创建首页(home)、分类(cate)、购物车(cart)、我的(my) 这 4…

windows下zookeeper搭建

程序包下载 官网下载地址 下载解压后如下&#xff01; 注意&#xff0c;zookeeper需要java环境&#xff0c;如果配置了JAVA_HOME那最好&#xff0c;如果没配置就会出现点击bin下的zkServer.cmd后CMD窗口一闪而过 修改配置 如果本地端口没有特别要求可以直接复制conf下的zo…

多臂PEG衍生物8-Arm PEG-SAA,8-Arm PEG-Succinamide Acid,八臂PEG丁二酸酰胺

一&#xff1a;产品描述 1、名称 英文&#xff1a;8-Arm PEG-SAA&#xff0c;8-Arm PEG-Succinamide Acid 中文&#xff1a;八臂-聚乙二醇-丁二酸酰胺 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Carboxylic acid PEG Multi-arm PEGs 4、分子量&#xff1a;可定制…

IDEA新建js项目(hello)和执行js脚本

一)、安装Node.js具体操作参考:https://blog.csdn.net/xijinno1/article/details/128774375二)、IDEA中新建js项目(hello world)1.按照下图&#xff0c;新建js项目2.选中示例代码文件后点击鼠标右键&#xff0c;选中菜单栏中的 运行* 栏目运行代码(第一次运行代码的方式)3.若是…

【版本控制】Git快速上手

Do you know what Git is&#xff1f; 一.引入 (1) 作用 Git 是一个分布式版本控制系统&#xff0c;主要是用于管理开发过程中的源代码文件&#xff08;Java类&#xff0c;xml文件&#xff0c;html页面等&#xff09;。可用于代码回溯&#xff0c;版本切换&#xff0c;多人协作…

AcWing 292. 炮兵阵地(状态压缩DP)

AcWing 292. 炮兵阵地&#xff08;状态压缩DP&#xff09;一、题目二、思路1、分析2、状态表示3、状态转移4、循环设计5、初末状态三、代码一、题目 二、思路 1、分析 这道题的话和我们之前讲解的AcWing 327. 玉米田&#xff08;状态压缩DP&#xff09;和AcWing 1064. 小国王…

Jenkins环境搭建与实战

Jenkins环境搭建与实战1、Jenkins2、GItLab的安装2.1、安装依赖2.1.1、CentOS8安装报错2.1.2、找不到对应包安装报错2.2、配置镜像2.3、安装gitlab3、安装Jenkins4、Maven安装4.1、出现报错 The JAVA_HOME environment variable is not defined correctly的错误5、Jenkins 通过…

SWIFT Framework .NET 2023

SWIFT Framework .NET 2023 Latest 2023 specification messages.Improves parsing..NET Framework 4.8 release.Performance updates.Improves handling of special characters. SWIFT Framework.NET是一个用于在组织信息系统基础架构中捕获、验证和处理SWIFT消息的系统。SWI…

3.5主存储器与CPU的连接

文章目录一、引子二、单块存储芯片与CPU的连接三、多块存储芯片与CPU的连接1.现代计算机2.命名3.增加主存的存储字长--位扩展&#xff08;1&#xff09;单块&#xff08;2&#xff09;多块4.增加主存的存储字数--字扩展&#xff08;1&#xff09;单块&#xff08;2&#xff09;…

19行列式公式和代数余子式

行列式公式 学习了关于行列式的这么多性质&#xff0c;现在我们有能力推导二阶行列式公式了&#xff1a; 观察上面的推导过程&#xff0c;不难发现&#xff0c;行列式的值等于使用性质3.b 分解后所得的那些非零行列式的和&#xff0c;所谓的非零行列式也即该行列式各行各列都…

【算法基础】大整数加减乘除法(高精度)

大整数的思想:用数组存储大整数(超长整数),比如存储1000位的整数只需要开辟一个长度为1000的数组(C++通常使用vector),今天将通过OJ例题来介绍高精度问题。(完全0基础的先建议自主学习一下,本博客默认已了解大致思想) 一、 大整数加法(大整数 + 大整数) (一)Qu…

6 逻辑斯蒂回归

文章目录回归问题和分类问题问题提出逻辑回归二分类问题逻辑函数与线性回归方程的不同模型变化loss函数不同BCEloss函数的介绍课程代码课程来源&#xff1a; 链接课程文本来源借鉴&#xff1a; 链接以及&#xff08;强烈推荐&#xff09; Birandaの回归问题和分类问题 有监督学…

Docker安装Tomcat服务器

Docker安装Tomcat服务器查看tomcat镜像下载 tomcat镜像启动tomcat容器浏览器访问容器中的tomcat1 查看ip2 查看容器是否启动3 进入容器重启容器浏览器访问查看tomcat镜像 docker search tomcat下载 tomcat镜像 咱直接下载最近版本的tomcat镜像 docker pull tomcat查看一下本…

芯片验证系列——激励(stimulus)

对于芯片验证&#xff0c;主要的挑战在于&#xff1a;1.如何打出所有可能的激励灌给DUT&#xff1b;2.如何在各种可能得激励情况下&#xff0c;判断出不符合硬件描述的行为。本文单单聚焦于一些关于构造stimulus方面的想法吧&#xff0c;结合了红皮书, writing testbench和项目…

储殷黄日涵教授《丁香花》唐磊推荐杨语莲,意味拜师赵本山有望吗

熟悉娱乐圈的人都知道&#xff0c;这个圈子包含有很多潜规则&#xff0c;尤其是一些女艺人&#xff0c;想要有所成就&#xff0c;不是有才华就可以的。就拿音乐人杨语莲来说&#xff0c;她是一个非常有才华的歌手&#xff0c;然而就因为不接受潜规则&#xff0c;至今仍是歌红人…

设计模式:单例模式

1、单例模式 单例模式是指在整个系统生命周期内&#xff0c;保证一个类只能产生一个实例&#xff0c;确保该类的唯一性。 为什么需要单例模式 单例模式是为了保证程序的线程安全。 线程安全&#xff1a; 在拥有共享数据的多条线程并行执行的程序中&#xff0c;线程安全的代…

cuda和pytarch的安装-参考官网的安装-较为通用

文章目录cuda 安装PyTorch 1.x版本安装cuda 安装 官网&#xff1a;cuda各个版本安装教程 选择相应版本点击版本前方链接就可以进入安装教程页面 例如&#xff1a;我想要为ubuntu系统安装一个11.7版本的cuda&#xff0c;则选择11.7版本的连接&#xff0c;然后进入安装教程页面…

深度学习之优化算法

入门小菜鸟&#xff0c;希望像做笔记记录自己学的东西&#xff0c;也希望能帮助到同样入门的人&#xff0c;更希望大佬们帮忙纠错啦~侵权立删。 目录 一、优化算法与深度学习 1、优化算法对于深度学习的意义 2、优化算法与深度学习的关系 3、优化算法在深度学习中的主要挑…

如何用Spring整合MyBatis和Junit

Spring整合MyBatis和Junit一. 整合MyBatis1. 目录&#xff1a;2. pom.xml&#xff1a;3. domain层&#xff1a;4. dao层&#xff1a;5. service层&#xff1a;AccountService接口类&#xff1a;AccountServiceImpl实现类&#xff1a;6. jdbc.properties配置文件&#xff1a;7. …