yuan的第二次随笔
第一题:
计算两数的和与差
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么
2:理解与分析:在main中,定义两个实数a,b;要你求两数的和与差
3:解答:通过调用函数sum_diff,指针psum接收&sum,指针pdiff接收&diff,实数op1接收实数a,实数op2接收实数b,计算两数的和与差:*psum=op1+op2;,*pdiff=op1-op2
4:输出
流程图:
实验代码:
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum=op1+op2;
*pdiff=op1-op2;
}
错误信息:
无
第二题:
拆分实数的整数与小数部分
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么
2:理解与分析:在main中,给你一个实数x,要求你将他的整数与小数分离
3:解答:在splitfloat中,利用实数x接收main中的x,利用指针intpart接收main中的&intpart,利用指针fracpart接收main中的&fracpart,再先分解x整数部分:*intpart=(int)x,小数等于x减去整数:*fracpart=x-*intpart
流程图:
实验代码:
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=(int)x;
*fracpart=x-*intpart;
}
错误信息:
1:求整数时,写成了*intpart=x/1
改正方式:
1:将它改为:*intpart=(int)t;
小结:
整数除以整数还是整数,浮点数(或者整数)除以整数(或者浮点数)是浮点数,浮点数除以浮点数还是浮点数
疑问:为什么这个也可以通过?
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart=x/1;
*fracpart=x-*intpart;
}
第三题:
在数组中查找指定元素
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么
2:理解与分析:题目给你一个数组a[MAXN],里面存有一些数字,然后再让你输入一个数字x,看数组中是否存在这个数,在调用函数list{},判断这个数是否在数组中,若在,返回这个数的下标,反之,返回-1
流程图:
实验代码:
int search( int list[], int n, int x )
{
int s=-1;
int i;
for(i=0;i<n;i++)
{
if(list[i]==x)
{
s=i;break;
}
}
return s;
}
错误信息:
无
第四题:
找最大值及其下标
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么
2:理解与分析:题目给你一个数组a[N],让你调用函数fun找出最大值max,,并输出它的下标p
3:解答:在函数fun中,指针a接受数组a[ ],n接受数组大小N,用指针p接受最大的下标,再用一个for循环找出最大值及其下标
流程图:
实验代码:
int fun(int *a,int *b,int n)
{
int i;
int s=a[0];
for(i=1;i<n;i++)
{
if(s<a[i])
{
s=a[i];
*b=i;
}
}
return s;
}
错误信息:
无
改正方式:
无
我的总结
在这两周中,我们学习了许多知识点,其中有通过调用函数:在数组中查找指定元素,这题目判断一个数是否在数组中;找最大值及其下标,这题目要求我们在数组中找出最大值及其下标;计算两数的和与差,这题目要求我们计算两个数的和与差;拆分实数的整数与小数部分,这题目要求我们将一个实数分解成整数部分,及小数部分;还有就是,这两周中,我的打字速度也进步了许多,以前不会用电脑画流程图,现在也会了。每次学到许多新的东西,我都会感到开心,并也感谢教我学习的人。
第五题:
最小数放前最大数放后
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么
2:理解与分析:在main中,给你一个数组,其中有十个整数 ,希望你通过调用函数,把最小数放前最大数放后
3:解答:
第一步:在input中,它用指针arr接收数组a[],用整数n接收数组的大小10,再用一个for循环,给数组a赋值
第二步:在max_min中,它用指针arr接收数组a[],用整数n接收数组的大小10,先定义并赋值两个整形变量,分别为:max=a[0],min=a[0];利用两个for循环,找到最大值最小值,再定义一个整型变量t,实现把最小数放前最大数放后
第三步:在output中,它用指针arr接收数组a[],用整数n接收数组的大小10,定义并赋值一个整型变量i =0,再用一个for循环,将数组a[]中的元素输出
流程图:
实验代码:
void max_min(int *arr,int n)
{
int t,s,x=0,y=0,i,min,max;
min=arr[0];max=arr[0];
for(i=0;i<n;i++)
{
if(min>arr[i])
{
min=arr[i];
x=i;
}
}
t=arr[0];arr[0]=arr[x];arr[x]=t;
for(i=0;i<n;i++)
{
if(max<arr[i])
{
max=arr[i];
y=i;
}
}
s=arr[n-1];arr[n-1]=arr[y];arr[y]=s;
}
void input(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
}
void output(int *arr,int n)
{
int i;
for(i=0;i<n;i++)
printf("%3d",arr[i]);
}
错误信息:
1.输出时:printf(" %d",arr[i]);
2.找最大值与最小值时,只用一个for循环
改正方式:
1.printf("%3d",arr[i]);
2.找最大值与最小值时,只用两个for循环,分别.找最大值与最小值
小结:
“ %d”与“%3d”不同,一个是前面空两格在输出,一个是元素输出占3个字符宽
第六题:
指针选择法排序
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么
2:理解与分析:在main中,给你一个数组,其中有十个整数 ,希望你通过调用函数,将10个数进行由大到小的排序输出
3:解答:
第一步:定义t,i=0,j=i+1,max;其中t记录最大值下标,i用于选择法排序中外层for循环,而(i+1)表示进行到了第几轮交换,j用于选择法排序中内层for循环,表示x[i]后面元素的下标,max用于储存最大值
第二步:进入第一个for循环:将max,t初始化,max=x[i]; t=i;
第三步:进入第二个for循环:判断max<x[j]?若成立:max=x[j];t=j;
第四步:离开第二个for循环后,判断t!=i?若成立:max=x[t];x[t]=x[i];x[i]=max;找到了最大值,并把它放在了第一,之后就重复第二步到第四步,直到跳出第一个for循环
流程图:
实验代码:
void sort(int *x,int n)
{
int t,i,j,max;
for(i=0;i<(n-1);i++)
{
max=x[i];
t=i;
for(j=i+1;j<n;j++)
{
if(max<x[j])
{
max=x[j];
t=j;
}
}
if(t!=i)
{
max=x[t];x[t]=x[i];x[i]=max;
}
}
}
错误信息:
第七题:
判断回文字符串
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么,了解“回文”是指顺读和倒读都一样的字符串
2:理解与分析:在main中,给你一个字符串s,要你判断它是不是回文
3:解答:
第一步:在main中,定义一个数组s[MAXN]
第二步:在palindrome中,指针s接收数组s,再定义i,n,k,j,其中,n=strlen(s),i=0,j=n-1
第三步:再利用一个for循环,条件1:i=0,j=n-1;条件二:i<j;条件三:i++,j--
第四步:在for循环中,判断:s[i]!=s[j],若成立,break;反之,继续
第五步:判断i<j?成立:return false;反之:return true;
流程图:
实验代码:
bool palindrome( char *s )
{
int i,n,k,j;
n=strlen(s);
i=0,j=n-1;
for(i=0,j=n-1;i<j;i++,j--)
{
if(s[i]!=s[j])
{
break;
}
}
if(i<j)
return false;
else
return true;
}
错误信息:
无
第八题:
使用函数实现字符串部分复制
设计思路:
1:看题目:主函数与函数声明,知道它要你干什么,希望你写一个函数,实现字符串部分复制
2:理解与分析:在main中,给你一个字符串t,要求你从第m个字符开始的全部字符复制到字符串s中
3:解答:
第一步:在strmcpy中,用指针t接收字符串t,用指针s接收字符串s,用m接收main中m(从第几个数开始复制)
第二步:定义i,j,n;其中i,j用于循环嵌套,n统计字符串s长度
第三步:调用函数strcpy,将t全部复制到s中,再调用函数strlen,统计字符串s长度,并赋值给n
第四步:再用两个for循环,实现数组s[]向左移动的单位为m-1,其一:for(i=m-1;i>0;i--);其二:for(j=i;j<n;j++);在里面为:s[j-1]=s[j];
第五步:令s[n-m+1]等于'\0',代表结束,完成了从第m个字符开始的全部字符复制到字符串s中
流程图:
实验代码:
void strmcpy( char *t, int m, char *s ){
int i,j,n;
strcpy(s, t);
n = strlen(s);
for(i=m-1;i>0;i--){
for(j=i;j<n;j++){
s[j-1]=s[j];
}
}
s[n-m+1]='\0';
}
错误信息:
没写s[n-m+1]='\0'
改正方式:
加上s[n-m+1]='\0'
小结:
字符串后面都有一个'\0'
.托管截图及网址
表格:
作业点评:
辛静瑶:http://www.cnblogs.com/X-JY/
李伍壹:http://www.cnblogs.com/chenxidream/
姜健:http://www.cnblogs.com/jj990519/
陈天胤:http://www.cnblogs.com/cty-1/
李新华:http://www.cnblogs.com/Lixinhua18/