C博客作业05--指针

| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业05--指针 |
| 这个作业的目标 | 学习指针相关内容 |
| 姓名 | 宋宇龙 |

0.展示PTA总分(0----2)

1.本章学习总结(3分)

1.1 指针定义、指针相关运算、指针做函数参数。

指针定义:
int *p;float *fp;char *cp;

指针相关运算:
int p,a=3;
p=&a; //&取地址运算符
(1)&:表示取地址
:表示取内容
(2)&p与&a相同,是地址
指针做函数参数:
void swap2(int
px,int *py)
{
.......
}
调用: swap2(&a,&b);

1.2 字符指针

指针如何指向字符串:

char sa[]="array";
const char* sp="point";

printf("%s",sa); array
printf("%s",sp); point
printf("%s\n","string"); string

printf("%s",sa+2); ray
printf("%s",sp+3); nt
printf("%s\n","string"+1); tring

总结:数组名sa、指针sp、字符串"string"的值都是地址
printf("%s",地址);

字符串相关函数:

string.h
字符串复制:strcpy(str1,str2);

解决溢出问题:strncpy(str1,str2,n);//最多复制n个字符

字符串连接:strcat(str1,str2);


解决溢出问题:strncat(str1,str2,n);//最多追加n个字符到str1

字符串比较:strcmp(str1,str2);

if(strcmp(str1,str2)>0){} //比较字符串的内容
if(strcmp(str1,str2)>0)
if(strcmp(str1,str2)<0)
if(strcmp(str1,str2)=0)
strcmp(str1,str2) //比较字符串的大小
从首项开始比较ASCII码,若相等继续向后比较,若str1大于str2则返回1,等于返回0,小于返回-1

求字符串长度:strlen(str);
计算字符串的有效长度,不包括'\0'

strbrk(str1,str2) 检索字符串str1中第一个匹配字符串str2中字符的字符

strrchr(str,c) 参数str所指向的字符串中搜索左后一次出现字符c的位置

strstr(str1,str2)字符串str1中查找第一次出现字符串str2的位置

type.h

islower() 如果c有相对应的小写字母,则该函数返回c的小写字母,否则c保持不变///???

toupper() 如果c有相对应的大写字母,则该函数返回c的大写字母,否则c保持不变
//将字符串中的所有大写所有大写字符转换成小写字符
include <stdio.h>
include <string.h>
include <ctype.h>

int main() {
char input[] = "JOUrnalDev";
char output[256];

// Get the input size
int size = strlen(input);

for (int i=0; i<size; i++)
    // Store the upper case letters to output[i]
    output[i] = toupper(input[i]);

printf("Input: %s\n", input);
printf("Output: %s", output);
return 0;

}

//Input: JOUrnalDev
//Output: JOURNALDEV

isdigit() 检测是否是十进制数字字符,如果是返回非零值,否则返回0

stdlib.h

atoi():(该函数返回转换后的长整数,如果没有执行有效的转换,则返回零)

1.3 指针做函数返回值

char* p;

return p;

1.4 动态内存分配

stdlib.h
int* p;
p=(int)calloc(n,sizeof(int))在堆中分配n个连续空间,每一储存空间的长度为sizeof(int),并全部初始化为0
p=(
int)calloc(n,sizeof(int))分配一连续空间,不初始化
free(p) 当某个动态储存空间不在用时,及时释放

1.5 指针数组及其应用

double ,a[2],p,q;
p=&a[0];
q=p+1;
printf("%d",q-p); 指针p和q之间的元素个数
printf("%d",(int)q-(int)p); 指针p和q之间的字节数 (int)q为地址值

1.6 二级指针

a[3][3]
a[i]表示一维数组,每行地址第一个元素地址
二维数组名a表示指向第一行地址的地址,所以是二维地址
a:二级指针,指向a[0]
a+i 指a[i],二级指针
*(a+i) 即a[i],表示第i行首元素地址,是一级指针
*(a+i)+j 即a[i]+j=&a[i][j],第i行第j个元素的地址,一级地址
**(a+i)即a[i][0]
((a+i)+j)即a[i][j]
a+i+j 第i+j行二级地址

二维数组名a,int** p;
a+i 二级地址
a[i] 一级地址
(a+i)=a[i]
一级地址
运算后就是内容

1.7 行指针、列指针

行指针:
形式:int (p)[n]
含义:p为指向含n个元素的一维数组的指针变量,二级指针
a[i][j]=
((p+i)+j)=((p+i))[j]=p[i][j]

eg.(*(p+1))[0]=a[1][0]

列指针:
int a[2][3]
形式:int* p;p=a[0]
*(p+i)表示离a[0][0]第i个位置的元素

2.PTA实验作业(7分)

2.1 题目名1(2分)

6-9 合并两个有序数组(2) (15分)

2.1.1 伪代码

2.1.2 代码截图

2.1.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点



我写的代码虽然看起来段,但运算量大
同学写的代码运算时间短

2.2 题目名2(2分)

7-5 删除字符串中的子串 (20分)

2.2.1 伪代码

2.2.2 代码截图


2.2.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点。


我写的代码太长了,没有用新学的函数strstr()

2.3 题目名3(3分)

选择说反话-加强版这题介绍字符指针操作如何操作字符串。并说明和超星视频做法区别。

2.3.1 伪代码

2.3.2 代码截图

自己写的

网上的

2.3.3 请说明和超星视频做法区别,各自优缺点。

就挺好!

posted @ 2020-12-27 21:49  2012宋宇龙  阅读(103)  评论(0编辑  收藏  举报