C基础day9(2023.7.11)

这篇具有很好参考价值的文章主要介绍了C基础day9(2023.7.11)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Xmind整理:

C基础day9(2023.7.11),c语言,开发语言

二、课上练习:

 练习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没有初始化,未清零。文章来源地址https://www.toymoban.com/news/detail-573713.html

到了这里,关于C基础day9(2023.7.11)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言:选择+编程(每日一练Day9)

    目录 选择题: 题一: 题二: 题三: 题四: 题五: 编程题: 题一:自除数 思路一: 题二:除自身以外数组的乘积 思路二: 本人实力有限可能对一些地方解释和理解的不够清晰,可以自己尝试读代码,或者评论区指出错误,望海涵! 感谢大佬们的一键三连! 感谢大佬们

    2024年02月09日
    浏览(45)
  • arm:day9

    1。思维导图  2..I2C实验,检测温度和湿度 iic.h si7006.h iic.c si7006.c main.c  

    2024年02月10日
    浏览(46)
  • 蓝桥杯打卡Day9

    文章目录 直角三角形 最长平衡串 本题思路: 本题就是利用欧几里得距离求解即可。  本题思路: 找一个连续的子串, 使得子串中‘0’和‘1’的个数能抵消,利用前缀和a[i]统计前i个字符中有多少个‘1’, 前缀和b[i]统计前i个字符中有多少个‘0’,记该最大连续子串开始地方为

    2024年02月07日
    浏览(45)
  • 每日打卡day9——差分矩阵

    输入一个 n 行 m 列的整数矩阵,再输入 q 个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1) 和 (x2,y2) 表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将选中的子矩阵中的每个元素的值加上 c。 请你将进行完所有操作后的矩阵输出。 输入格式 第一行包

    2024年02月16日
    浏览(49)
  • day9 项目介绍及TCP的实现

    目录 项目介绍 私人云盘(自动云同步) 1、什么是云同步?   2、需求分析 3、如何实现手动同步? 实现TCP服务端 实现TCP客户端 1、什么是云同步?   保持云端数据和终端数据的一致 上传和下载 实时同步 定时同步 手动同步 2、需求分析 文件的上传和下载 文件的大小不确

    2024年02月07日
    浏览(26)
  • 计算机网络 day9 DNAT实验

    目录 DNAT DNAT策略的典型应用环境 DNAT策略的原理 在网关中使用DNAT策略发布内网服务器 DNAT实验: 实验环境: DNAT网络规划拓扑图: 步骤: 1、创建linux客户端Web网站(go语言),实现Web服务器 1.1、下载go语言Web端代码 1.2、下载代码后传输到你的linux客户机上去 1.3、解压apiser

    2024年02月16日
    浏览(40)
  • ARM day9 (按键中断控制led亮灭)

     保存现场 异常的处理流程,保存现场会做哪些事情(四大步三小步) ----CPU自动完成 1.保存CPSR寄存器中的值,到SPSR_mode寄存器中 2.修改CPSR寄存器对应的位         1修改CPSR寄存器对应的状态位(T位)         2根据需要,禁止相应中断位(I位 / F位)         3修改CPSR寄存

    2024年02月13日
    浏览(48)
  • itheima苍穹外卖项目学习笔记--Day9: 订单模块

    (1). 查询历史订单 在OrderController中,创建查询方法 在OrderServiceImpl中,创建分页查询方法,及其父类接口 在OrderMapper中,添加查询方法,并在映射文件中写入动态SQL语句 在OrderDetailMapper中,实现根据订单id查询订单明细 (2). 查询订单详细 在OrderController中,创建查询订单详细方

    2024年02月16日
    浏览(74)
  • CSS Day9-CSS新样式

    9.1 背景相关属性 背景图片 background-image url引入图片地址 展示特点:由上到下,由左到右依次排列 背景图大小 background-size background-size:宽 高;(相比这个最优) background-size:cover; 图片展示不全 background-size:contain; 图片平铺 背景平铺 background-repeat background-repeat:repeat

    2024年01月20日
    浏览(57)
  • day9 STM32 I2C总线通信

            I2C(Inter-Integrated Circuit)总线(也称IIC或I2C)是由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。         它是同步通信的一种特殊形式,具有接口线少,控制方式简单,期间封装形式少,通

    2024年02月12日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包