C基础day9(2023.7.11)

一、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.mfbz.cn/a/37361.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Android知识笔记】系统进程(一)

Android 系统进程有哪些 先来一个整体结构图从宏观上理解Android系统的进程结构布局: 这里我们简单总结一下: 系统的第一个进程其实是0号进程(又叫swapper进程/Idle进程) 0号进程fork出了1号进程(init进程)和2号进程(kthreadd进程) 1号进程是所有普通用户进程的祖先,2号进程…

CSDN-AI小组2023-半年-研发总结

目录 1.丐版「大模型」&#xff0c;Proof of concept2. LLM和AIGC的各种综述3. 基于Embedding的应用&#xff0c;问答&#xff0c;AI编程4. 评论区的AI助手5. 结合AIGC的各种数据自动计算6. 个性化推荐的系统重构7. 基于AIGC的个性化博客创作鼓励8. 博客质量分V5: 可解释性计算…

vulnhub靶机渗透:PWNLAB: INIT

PWNLAB: INIT 靶机环境介绍nmap扫描端口扫描服务扫描漏洞扫描扫描总结 80端口目录爆破LFI利用 3306端口回到80端口文件上传 获得立足点横向移动提权总结参考 靶机环境介绍 https://www.vulnhub.com/entry/skytower-1,96/ 靶机IP&#xff1a;192.168.56.103 kali IP&#xff…

Linux信号机制

转自&#xff1a;深入理解Linux信号机制(1.0)_城中之城的博客-CSDN博客 一、信号机制概览 相信大家对信号并不陌生&#xff0c;很多人都用过kill命令或者CtrlC组合键杀死过进程&#xff0c;或者遇到过程序因为收到SIGSEGV信号而崩溃的。而对信号的基本原理&#xff0c;估计很…

含多类型充电桩的电动汽车充电站优化配置方法(Matlab代码实现)

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

cloud Alibab+nacos+gateway集成swaggerui,统一文档管理(注意点)

首先说明&#xff1a;本文只说整合注意点 效果图和功能参考链接 1.使用gateway访问nacos服务&#xff0c;503 在网关服务添加依赖即可解决 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign&…

一款玩法十分经典的RPG游戏《QQ宠物大乐斗2》

文章目录 1.介绍2.界面介绍2.1游戏主界面&#xff1a;2.2出城界面&#xff1a; 3.战斗系统3.1主动战斗3.2被动战斗 4.技能系统4.1主动技能4.2被动技能4.3五神技狂龙傲天拳惊天混元掌灵气寒霜指道威无极真气八卦迷踪腿 5.道具系统6.装备系统6.1装备品质6.2装备展示6.3装备获得方…

MySQL---表数据高效率查询(简述)

目录 前言 一、聚合查询 &#x1f496;聚合函数 &#x1f496;GROUP BY子句 &#x1f496;HAVING 二、联合查询 &#x1f496;内连接 &#x1f496;外连接 &#x1f496;自连接 &#x1f496;子查询 &#x1f496;合并查询 &#x1f381;博主介绍&#xff1a;博客名…

C++之重写基类虚函数添加override区别(一百六十二)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

C#打印十六进制的代码

代码为&#xff1a; for (int k0; k<16; k) {Console.Write($"{buf[k]:X2}_"); } System.Console.Write("\n"); 输出效果如下&#xff1a;

Ceph 存储(最详细!)

目录 一&#xff1a;存储基础 1、单机存储设备 &#xff08;1&#xff09;DAS&#xff08;直接附加存储&#xff0c;是直接接到计算机的主板总线上去的存储&#xff09; &#xff08;2&#xff09;NAS&#xff08;网络附加存储&#xff0c;是通过网络附加到当前主机文件系统…

奇迹MU架设教程:SQL Server 2008数据库的安装教程

不管是搭建什么游戏&#xff0c;都是有数据库的&#xff0c;奇迹MU用的是SQL 数据库&#xff0c;根据服务器系统选择SQL server版本&#xff0c;我比较喜欢用Windows server 2008R2系统&#xff0c;所以我安装的是SQL server 2008。作为架设奇迹很重要的数据库程序&#xff0c;…

暑假第七天打卡

离散&#xff1a; 主析取范式和主合取范式的应用&#xff1a; &#xff08;1&#xff09;求公式成真与成假赋值&#xff1a; 化为主析取范式后&#xff0c;下标化为二进制就是成真赋值&#xff0c;不在下标里的就是成假赋值 化为主合取范式后&#xff0c;下标化为二进制就是…

【C++】模板(函数模板与类模板)讲解

本篇文章会对C中的模板进行讲解&#xff0c;其中会对函数模板和类模板进行讲解。希望本篇文章会对你有所帮助。 文章目录 一、函数模板 1、1 模板的引入 1、2 函数模板举例讲解 1、2、1 函数模板的概念 1、2、2 函数模板格式 1、2、3 函数模板实例化 1、2、4 模板参数的匹配原则…

栈--C语言实现数据结构

本期带大家一起用C语言实现栈&#x1f308;&#x1f308;&#x1f308; 一、栈的概念&#x1f30e; 栈是一种常见的数据结构&#xff0c;它遵循后进先出&#xff08;Last In, First Out&#xff09;的原则。可以将其类比为现实生活中的一摞书或者一叠盘子。 栈由一个连续的内…

Mac环境下安装nginx并本地部署项目

1、前提 必须安装了homebrew&#xff0c;可在终端输入命令brew -v查看是否已经安装&#xff0c;如果输入指令出现版本号说明已经安装成功 如果未安装先安装&#xff08;homebrew官网地址&#xff09; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/H…

神经网络之VGG

目录 1.VGG的简单介绍 1.2结构图 3.参考代码 VGGNet-16 架构&#xff1a;完整指南 |卡格尔 (kaggle.com) 1.VGG的简单介绍 经典卷积神经网络的基本组成部分是下面的这个序列&#xff1a; 带填充以保持分辨率的卷积层&#xff1b; 非线性激活函数&#xff0c;如ReLU&a…

1、Redis入门与应用

Redis入门与应用 Redis的技术全景 Redis一个开源的基于键值对&#xff08;Key-Value&#xff09;NoSQL数据库。使用ANSI C语言编写、支持网络、基于内存但支持持久化。性能优秀&#xff0c;并提供多种语言的API。 我们要首先理解一点&#xff0c;我们把Redis称为KV数据库&am…

优化SQL查询实现高效数据检索(一)

大家好&#xff0c;SQL&#xff08;结构化查询语言&#xff09;可以帮助大家从数据库中收集数据&#xff0c;它是专为此而设计的&#xff0c;换句话说&#xff0c;它使用行和列来处理数据&#xff0c;让使用者能够使用SQL查询来操作数据库中的数据。 SQL查询 SQL查询是一系列…

Nginx Linux安装

参考 : http://test.runoob.com/w3cnote/nginx-install-and-config.html 点击跳转 下载安装包 - 这里选择的是 nginx-1.6.3 pgp 网址 : http://nginx.org/en/download.html 点击跳转 2. 上传Linux - 这里新建了临时文件夹 mkdir /usr/local/tmp 3. 解压 tar -zxvf nginx-1.6.…
最新文章