第一次作业
作业要求一:
1、设计思路:
(1)算法描述:
第一步:定义p并赋初值;
第二步:计算出p++,(p)++,*(p++)并进行比较;
(2)流程图
2、实验代码:
(1)
int main()
{
int a=2;
int *p;
p=&a;
printf("%d %d %d",p++,(p)++,*(p++));
}```
(2)```#include <stdio.h>
int main()
{
int p=2;
printf("%d %d %d",p++,(p)++,*(p++));
}```
结论:p为整型时,p++与(p)++结果相同,但是编译器报错,p为指针类型时,p++与(p)++结果相同
1:
错误原因:定义的p是整型变量,间接访问运算符无法使用
![](https://images2018.cnblogs.com/blog/1342842/201803/1342842-20180324213729734-698679812.png)
改正方法:使用间接访问运算符时要先定义指针变量,这样才有效
作业要求二:
题目6-1计算两数的和与差
1、 设计思路:
(1) 算法:
第一步:定义函数
第二步:计算两数的和与差
(2) 流程图:![](https://images2018.cnblogs.com/blog/1342842/201803/1342842-20180324213744574-155373367.png)
2、 实验代码
```void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}```
题目二
拆分实数的整数与小数部分:
1、 设计思路:
(1)算法:
第一步:定义函数
第二步:用强制转换类型将x转换成int类型,得到整数部分,用间接访问运算符将值赋值给intpart
第三步:x-*intpart为小数部分
(3) 流程图:
![](https://images2018.cnblogs.com/blog/1342842/201803/1342842-20180324213958139-1711178428.png)
2、 实验代码:
```void splitfloat( float x, int *intpart, float *fracpart)
{
*intpart=(int)(x);
*fracpart=x-*intpart;
}```
要求三:
1、 本周来主要学习地址和指针的概念,变量的指针和指向变量的指针变量,如何引用指针变量
2、 代码托管:https://github.com/mayujuan981017/-pta-.git
Pta第三次作业
6-1 最小数放前最大数放后
1、 设计思路:
(1)、算法:
第一步:定义最大值和最小值,定义一个变量;
第二步:将数组中的第一个元素赋值给最大值和最小值,用变量存放最值的下标;
(2)流程图:
![](https://images2018.cnblogs.com/blog/1342842/201803/1342842-20180324213848354-2048516338.png)
2、 实验代码:```void input(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
}
void max_min(int *arr,int n)
{
int max=arr[0],p,i;
p=0;
for(i=1;i<n;i++)
{
if(max<arr[i])
{
max=arr[i];
p=i;
}
}
arr[p]=arr[n-1];
arr[n-1]=max;
int min=arr[0];
p=0;
for(i=1;i<n;i++)
{
if(min>arr[i])
{
min=arr[i];
p=i;
}
}
arr[p]=arr[0];
arr[0]=min;
}
void output(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%3d",arr[i]);
}
}```
6-2 指针选择法排序
1、 设计思路:本题我利用的是冒泡排序
(1) 算法:
第一步:比较相邻的两个元素,如果第一个比第二个小,就交换它们;
第二步:对每一对相邻的元素作同样的工作,直到最后一对;
第三步:针对所有元素进行以上步骤,除了最后一个;
(2) 流程图:
6-2 指针选择法排序
1、 设计思路:本题目我采用的是冒泡法排序
(1) 算法:
第一步:比较相邻两个元素,如果第一个元素比第二元素小,就交换;
第二步:对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。最后一个元素应该是最大的;
第三步:针对所有元素进行以上循环,除了最后一个;
(2) 流程图:
![](https://images2018.cnblogs.com/blog/1342842/201803/1342842-20180324214145149-1210378939.png)
(3) 实验代码: ```void sort(int *x,int n)
{
int i,j,t;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(x[i]<x[i+1])
{
t=x[i];x[i]=x[i+1];x[i+1]=t;
}
}
}
}```
第四次作业:
6-1 判断回文字符串
1、 设计思路:
(1) 算法:
第一步:先测定字符串的长度;
第二步:循环的次数为长度的一半,将首尾的字符进行比较;
第三步:若判断相等,则计数器加1,如果计数器的值与循环的次数相等,那么说明是回文;
(2) 流程图:
![](https://images2018.cnblogs.com/blog/1342842/201803/1342842-20180324214230069-1171895625.png)
(3) 实验代码: ```bool palindrome( char *s )
{
int x,i,cnt=0;
x=strlen(s);
for(i=0;i<x/2;i++)
{
if(s[i]==s[x-1-i])
{
cnt++;
}
}
if(cnt==x/2)
{
return true;
}else
{
return false;
}
}```
![](https://images2018.cnblogs.com/blog/1342842/201803/1342842-20180324214314434-142861869.png)
6-2 使用函数实现字符串部分复制
设计思路:
(1) 算法:
第一步:测出输入字符串的长度;
第二步:判断m是否超过输入字符串的长度,若超过则为空串,不超过进行第三步;
第三步:定义一个变量j,,第m个元素为s[j]的第一个元素,i++,直到i>=x结束循环,使s[j]的最后一个元素为字符串结束标志‘\0’
(2) 流程图:
![](https://images2018.cnblogs.com/blog/1342842/201803/1342842-20180324214400147-34536617.png)
(3) 实验代码:
```void strmcpy( char *t, int m, char *s )
{
int x,i,j;
x=strlen(t);
if(m>x)
{
*s=NULL;
}else
{
for(i=m-1,j=0;i<x;i++,j++)
{
s[j]=t[i];
}
s[x-m+1]='\0';
}
}```
总结:本周学习了如何通过指针引用数组元素,用数组名做函数参数,比较了以变量名和数组名作为函数的参数,字符串的表示形式
评论:邓欣茹:http://www.cnblogs.com/dxfish/p/8597352.html
焦瑞君:http://www.cnblogs.com/jiaoruijun/p/8639383.html
申怡苗:http://www.cnblogs.com/Vinecy/p/8619059.html
辛静瑶:http://www.cnblogs.com/X-JY/p/8550457.html
李新华:http://www.cnblogs.com/Lixinhua18/p/8569649.html