C基础day9(2023.7.11)

news2024/12/23 22:44:12

一、Xmind整理:

二、课上练习:

 练习1:实现字符串逆置

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char str[]="hello";
	char *p=str;
	char *q=str+strlen(str)-1;
	while(p<q)
	{
		char t=*p;
		*p=*q;
		*q=t;
		p++;
		q--;
	}
	puts(str);
	return 0;
}

 练习2:值传递 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void fun(int a)
{
    printf("a=%d\n",a);
}
void fun_p(int *p)
{
    printf("p=%p\n",p);
}
int main(int argc, const char *argv[])
{
    int a=100;
    int arr[]={11,22,33};
    int *p=&a;//p=&a  *p=a
    fun(a);
    fun(arr[0]);
    fun(*p); 
    fun_p(&a);
    fun_p(arr);
    fun_p(p);
    return 0;
}

 练习3: 指针和一维数组

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void fun(int *arr,int len)
{
	int *p=arr;
	for(int i=0;i<len;i++)
	{
	//	printf("arr[%d]=%d\n",i,arr[i]);
	//	printf("%d ",*(arr+i));
	//	printf("%d ",*(&arr[0]+i));
	//	printf("arr[%d]=%d\n",i,p[i]);
	//	printf("%d ",*(p+i));
	//	printf("%d ",*(&p[0]+i));
	//	printf("%d ",*p++);
	//	printf("%p\t",&arr[i]);
	//	printf("%p\t",arr+i);
	//	printf("%p\t",&arr[0]+i);
	//	printf("%p\t",&p[i]);
	//	printf("%p\t",&p+i);
	//	printf("%p\t",&p[0]+i);
		printf("%p\t",p++);
		}
}
int main(int argc, const char *argv[])
{	
	int arr[]={11,22,33,44};
	int len=sizeof(arr)/sizeof(arr[0]);
	fun(arr,len);
  	return 0;
}

 练习4:使用指针实现冒泡排序、简单选择排序

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void Bubble(int *p,int n)
{
	for(int i=1;i<n;i++)
	{
	    int count=0;
		for(int j=0;j<n-i;j++)
		{
			if(*(p+j)>*(p+j+1))
			{
				int t=*(p+j);
				*(p+j)=*(p+j+1);
				*(p+j+1)=t;
				count++;
			}
		}
		if(count==0)
			break;
	}
	for(int i=0;i<n;i++)
	{
		printf("%d\t",p[i]); 
	}
	printf("\n");
}
void Sort(int *q,int n)
{
	for(int i=0;i<n-1;i++)
	{
		int max=i;
		for(int j=i+1;j<n;j++)
		{
			if(*(q+max)<*(q+j))
			{
				max=j;
			}
		}
		if(max!=i)
		{
			int t=*(q+max);
			*(q+max)=*(q+i);
			*(q+i)=t;
		}
	}
	for(int i=0;i<n;i++)
	{
		printf("%d\t",*(q+i));
	}
	printf("\n");
}
int main(int argc, const char *argv[])
{
	int m,n;
	printf("请问你要输入一个几位数组:");
	scanf("%d",&n);
	int arr[n];
	for(m=0;m<n;m++)
	{
		printf("请输入第%d个数:",m+1);
		scanf("%d",&arr[m]);
	}
	Bubble(arr,n);
	Sort(arr,n);
	return 0;
}

 练习5:指针指向字符数组的地址

int main(int argc, const char *argv[])
{
    char str[]="hello";//str在栈区,字符串"hello"在只读区,
                       //把字符串常量复制一份给str 
    char *p=str;//p=str   //p内存在栈区,p指向栈区str首地址
    *p='H';
    //正确,p修改栈区的内容
    puts(str);
    puts(p);
}

 练习6: 定义数组str,指针p,通过p指向str

              通过指针实现输入

              通过指针把大小转换小写

              通过指针实现输出

#include <stdlib.h>
int main(int argc, const char *argv[])
{
    char str[20];
    char *p=str;
    printf("please enter p:");
    gets(p);
    for(int i=0;i<strlen(p);i++)
    {
        if(*(p+i)>='a'&&*(p+i)<='z')//if(str[i]>='a'&&str[i]<='z')
        {
            *(p+i)-=32;
        }
    }
    printf("%s\n",p);
    return 0;
}

 练习7:实现字符串连接 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void my_strcat(char *dest,char *src)
{
	int i=0;
	for(i=0;*(dest+i)!='\0';i++);
	for(int j=0;*(src+j)!='\0';j++)
	{
		*(dest+i++)=*(src+j);
	}
	*(dest+i)='\0';
}
int main(int argc, const char *argv[])
{
	char dest[20]="das";
	char src[20]="ewew";
	my_strcat(dest,src);
	puts(dest);
	return 0;
}

三、课后作业:

 1.下面的代码有什么错误

void test()
{
	char string[10];
	char *str1="0123456789";
	strcpy(string,str1);
 }

 答:这里声明的是一个字符串长度为10的数组,但"0123456789"的长度为11,在将str1拷贝          至string时,会导致数组越界。

        ①当越界访问的空间没有被占用,可以正常访问,输出垃圾值;

        ②当越界访问的空间被占用,但是不是重要的数据,可以访问,输出垃圾值 ​;

        ③当越界访问的空间被占用,并且存储重要的数据,不可以访问,段错误。

 2.请问一下代码有什么问题 

int main()
{
	char a;
	char *str=&a;
	strcpy(str,"hello")
	printf(str)
	return 0;
}

答:共有两处错误。

       ①在定义一个字符串数组的时候,不能直接定义为a,定义为a指向的是单字符a的地址,它只能容纳一个字节大小,所以在函数将字符串“hello”复制给str时,会导致越界;

       ②strcpy(str,"hello")与printf(str)两个语句,未使用分号结束。 

 3.有什么错?

char* s="AAA";
printf("%s",s);
s[0]='B';
printf("%s",s);

答:指针s指向的是字符串常量,字符串常量在只读区,只能读取不能修改,s[0]='B'表示对字符串常量的第一个值进行修改,所以会报错,出现段错误 。

 4.下面是一段计算0……100累加和的代码,请指出这段代码中的错误。

int main()
{
	int *MyData;
	int Count=100;
	int Sum,i;
	for(i=0;i<Count;i++){
		*MyData++=i;
	}
	for(i=0;i<Count;i++){
	Sum+=*MyData;
	MyData++;
	}
	return Sum;
}

答:共有两处错误。

       ①i<Count,使得i=100时无法进入循环;

       ②int *MyData定义的是一个野指针,未被初始化的指针会造成计算机混乱,甚至死机【计算机随机的地址,不确定,不正确】;  

       ③sum没有初始化,未清零。

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

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

相关文章

UE编辑器灯光颜色,能量传入Shader流程

编辑器界面&#xff1a; 代码流程&#xff1a; FLinearColor ULightComponent::GetColoredLightBrightness() const {// Brightness in Lumensfloat LightBrightness ComputeLightBrightness();FLinearColor Energy FLinearColor(LightColor) * LightBrightness;if (bUseTem…

数学建模-拟合算法

这里的线性函数指的是参数为线性&#xff0c;而不是变量为线性。 yabx^2是线性的 用的比较多的是多项式拟合和自己定义的 拓展资料&#xff1a;工具箱曲线拟合类型评价解释 文件-导出代码 自动生成的代码修改图名和标签 如果不收敛&#xff0c;自己要修改初始值&#xf…

ES 跨集群搜索 Cross-cluster search (CCS)

跨集群查询 跨集群搜索(cross-cluster search)使你可以针对一个或多个远程集群运行单个搜索请求。 例如&#xff0c;你可以使用跨集群搜索来筛选和分析存储在不同数据中心的集群中的日志数据。 环境准备 角色IP系统dev172.16.122.244CentOS 7.9prod172.16.122.245CentOS 7.9 ES…

记忆——记忆宫殿——地点桩

地点桩图片 室内物品放置方法——时钟放置法 https://www.zhihu.com/question/34549534 地点桩的扩展和记忆 我告诉你一个让记忆宫殿数量翻125倍的方法&#xff0c;以后用一个地点桩就扔一个。 这方法是我在背了几本书后才在偶然中发现的&#xff0c;我叫他“五行推演法”&a…

ES(1)简介和安装

文章目录 简介倒排索引 安装 简介 ES是面向文档型数据库&#xff0c;一条数据在这里就是一个文档。 和关系型数据库大致关系如下: ES7.x中废除掉Type&#xff08;表&#xff09;的概念 倒排索引 要知道什么是倒排索引&#xff0c;就要先知道什么是正排索引 idcontent100…

判断数组中所有元素是否均为True numpy.alltrue()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断数组中所有元素是否均为True numpy.alltrue() [太阳]选择题 请问关于以下代码的说法错误的是&#xff1f; import numpy as np print(【执行】np.alltrue([True, True, True])) print(n…

C/C++图形库EasyX保姆级使用教程(四) 图片的展示与缩放

C/C图形库EasyX保姆级使用教程 第一章 Microsoft Visual Studio 2022和EasyX的下载及安装使用 第二章 图形化窗口设置以及简单图形的绘制 第三章 图形颜色的填充及相关应用 第四章 图片的展示与缩放 文章目录 C/C图形库EasyX保姆级使用教程前言一、图片的展示1.变量存储图片2.…

安全测试方法介绍(下)渗透测试

安全主要测试方法主要有&#xff1a;静态源代码审查&#xff0c;这个在编码阶段就可以进行&#xff0c;这个阶段如果出现问题&#xff0c;修复起来成本也比较低。程序发布之后可以进行渗透测试。前面的文章中我们为大家介绍了静态源代码审查的方法和策略&#xff0c;接下来本文…

【milvus】向量数据库,用来做以图搜图+人脸识别的特征向量

1. 安装milvus ref:https://milvus.io/docs 第一次装东西&#xff0c;要把遇到的问题和成功经验都记录下来。 1.Download the YAML file wget https://github.com/milvus-io/milvus/releases/download/v2.2.11/milvus-standalone-docker-compose.yml -O docker-compose.yml看…

微信小程序中常见组件的使用

文章目录 微信小程序中常见组件的使用视图组件viewscroll-viewswipermovable-area 基础组件icontextrich-textprogress 表单组件buttoncheckbox、checkbox-grouplabelforminputpicker单列选择器多列选择器时间选择器&日期选择器&地区选择器 picker-viewradiosliderswit…

人工智能-神经网络

目录 1 神经元 2 MP模型 3 激活函数 3.1 激活函数 3.2 激活函数作用 3.3 激活函数有多种 4、神经网络模型 1 神经元 神经元是主要由树突、轴突、突出组成&#xff0c;树突是从上面接收很多信号&#xff0c;经过轴突处理后传递给突触&#xff0c;突触会进行选择性向下一级的…

[项目实战] 使用Idea构建单页面Vue3项目(不使用node、npm)

前言 某天张三对小花说&#xff0c;我需要在一台新电脑上实现一个前端的漂亮页面&#xff1a;比如京东手机首页(m.jd.com)。 小花这时吭哧吭哧的去新电脑上安装nodejs、npm&#xff0c;然后在本地使用npm构建vue3项目&#xff0c;在项目里下载安装element-plus、axios。下一步…

常用异常检测算法总结与代码实现[统计学方法/K近邻/孤立森林/DBSCAN/LOF/混合高斯GMM/自编码器AutoEncoder等]

这篇博文主要是延续前文系列的总结记录&#xff0c;这里主要是总结汇总日常主流的异常检测算法相关知识内容。 &#xff08;1&#xff09;基于统计方法的异常值检测 基于统计方法的异常值检测是一种常用的异常检测算法&#xff0c;它基于样本数据的统计特性来识别与其他样本显…

【RS】ENVI5.6 栅格数据坐标转换

ENVI是一个完整的遥感图像处理平台&#xff0c;广泛应用于科研、环境保护、气象、农业、林业、地球科学、遥感工程、水利、海洋等领域。目前ENVI已成为遥感影像处理的必备软件&#xff0c;包含辐射定标、大气校正、镶嵌裁剪、分类识别、阈值分割等多种功能。ENVI针对绝大部分的…

【三相STATCOM】使用D-Q控制的三相STATCOM技术【三相VSI STATCOM为R-L负载提供无功功率】(Simulink实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

COMEN 科曼C60、C80心电监护仪协议对接

通过网口&#xff0c;成功对接到参数&#xff1a; HR、NibpDia、NibpMean、NibpSys、Spo2、Resp、Sys、Dia、Mean、Temp、PR等数值

flutter开发实战-flutter二维码条形码扫一扫功能实现

flutter开发实战-flutter二维码条形码扫一扫功能实现 flutter开发实战-flutter二维码扫一扫功能实现&#xff0c;要使用到摄像头的原生的功能&#xff0c;使用的是插件&#xff1a;scan 效果图如下 一、扫一扫插件scan # 扫一扫scan: ^1.6.01.1 iOS权限设置 <key>NSCa…

移动互联网时代的网络口碑营销怎么做

从人类开始交换商品的时代开始&#xff0c;口碑营销就已经存在&#xff0c;是靠口耳传播的营销方式。小马识途认为进入当今移动互联网时代&#xff0c;口碑营销又有了新的发展&#xff0c;网络口碑营销推广开始普及。营销人员将传统口碑营销与移动互联网营销相结合&#xff0c;…

在arm平台上安装qt

qt官网上如果没有找到对应的安装包&#xff0c;就需要下载源代码自行编译安装qt&#xff0c;时间会久一点 qt下载 进入官网下载 如下图步骤选择源代码包&#xff08;以5.12.12为例&#xff09; 可以复制链接地址在迅雷上创建下载任务&#xff0c;下载速度会快些 qt的编译与…

基于Javaweb实现ATM机系统开发实战(十)取款功能实现

老规矩&#xff0c;先看前端页面&#xff1a; <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <% taglib prefix"c" uri"http://java.sun.com/jsp/jstl/core" %> <!D…