第一题:
计算两数的和与差
设计思路:
描述方法:
第一步:阅读主函数和函数声明,弄清楚程序中每个函数的意义
第二步:通过op1和op2计算所需要的数值并将其赋给pusm和pdiff
第三步:输出函数
流程图:
实验代码:
void sum_diff( float op1, float op2, float *psum, float *pdiff )
{
*psum = op1 +op2;
*pdiff = op1 -op2;
}
遇到的问题:
无
第二题:
拆分实数的小数与整数部分
设计思路:
描述方法:
第一步:阅读主函数和函数声明,弄清楚程序中每个函数的意义
第二步:先通过实数求出其整数部分并赋值给*inpart,再用减法用实数减去整数部分并赋值给*fracpart
实验代码:
void splitfloat( float x, int *intpart, float *fracpart )
{
*intpart = (int)x;
*fracpart = x - *intpart;
}
遇到的问题:
无
第三题:
在数组中查找指定元素
设计思路:
描述方法:
第一步:阅读主函数和函数声明
第二步:看题目的要求,遍历数组,从一个数组中找到所需要的数,如果找到则返回其下角标;如果没有找到,则返回-1
流程图:
实验代码:
int search( int list[], int n, int x )
{
int i;
for(i=0; i<n; i++,)
{
if(list[i]==x)
return i;
}
return -1;
}
遇到的问题:
无
第四题:
找最大值及其下标
设计思路:
描述方法:
第一步:将最大值存储在max里
第二步:利用for循环来比较数组中的每个数来找出最大值,再将其下标赋值给*b
流程图:
实验代码:
int fun(int *a,int *b,int n)
{
int i;
int max=a[0];
for(i=0;i<n;i++)
{
if(max<a[i])
{
max=a[i];
*b=i;
}
}
return max;
}
遇到的问题:
错误信息:将i复制给*b的时候没写*
改正方法:*b=i
第五题:
最小数放前最大数放后
设计思路:
描述方法:
第一步:将数据存放到input数组中
第二步:通过max_min遍历数组找到最大值和最小值,并按照题目要求进行交换
第三步:通过output输出所求数据
流程图:
实验代码:
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 min=arr[0],max=arr[0];
int i,temp;
int j=0,k=0;
for(i=0;i<n;i++){
if(min>*(arr+i)){
min=*(arr+i);
j=i;
}
if(max<*(arr+i)){
max=*(arr+i);
k=i;
}
}
temp=*(arr+0);*(arr+0)=*(arr+j);*(arr+j)=temp;
temp=*(arr+n-1);*(arr+n-1)=*(arr+k);*(arr+k)=temp;
}
void output(int *arr,int n){
int i;
for(i=0;i<n;i++){
printf("%3d",*(arr+j));
}
}
遇到的问题:
错误信息:忘记了怎么交换数组的位置
改正方法:参考别人的作业
错误信息:最后输出的时候忘记了题目要求的3列
改正方法:%d→%3d
第六题:
指针选择法排序
设计思路:
描述方法:
第一步:遍历数组找到最大值放到第一位
第二步:循环上一步知道将所有数都排序完成
第三步:输出
流程图:
实验代码:
void sort(int *x,int n)
{
int i,j,k,temp;
for(i=0; i<n-1; i++)
{
k=i;
for(j=i+1; j<n; j++)
{
if(x[j] > x[k])
k = j;
}
if(i != k)
{
a = x[i];
x[i] = x[k];
x[k] = temp;
}
}
}
遇到的问题:
错误信息:第一次编写时错误的写成了冒泡排序法
改正方法:用选择排序法重新编写
第七题:
判断回文字符串
设计思路:
描述方法:
第一步;将字符串输入进数组
第二步:利用循环分两次将字符串从前往后和从后往前定义并进行比较
第三步:如果相同则返回true,如果不同则返回false
流程图:
实验代码:
bool palindrome(char *s)
{
int a,b;
int n=strlen(s);
a=0,b=n-1;
while(b>a)
{
if(s[a]!=s[b])
{
return false;
}
a++,b--;
}
return true;
}
遇到的问题:
无
第八题:
使用函数实现字符串部分复制
设计思路:
描述方法:
第一步:调用函数strmcpy进行复制
第二步:判断m是否超过字符串长度,如果超过则为'/0',若没超过则进行复制
流程图:
实验代码:
void strmcpy(char *t,int m,char *s)
{
int i;
int sum=0;
for(i=0;t[i]!='\0';i++) {sum++;}
if(sum<m) {s[0]='\0';}
else
{
for(i=0;t[m-1]!='\0';i++,m++)
{
s[i]=t[m-1];
}
s[i]='\0';
}
}
遇到的问题:
错误信息:编译错误 for循环时忘记了t[m-1]='\0',m++
学习总结和进度
1、这两周主要学习了指针的用法,虽然指针占了主要部分,但在习题中也用到了很多别的知识,本来基础就不好,又得重新看C语言的书,不仅能当作复习,还加深了我对其他知识的印象。
2、
https://gitee.com/lhdsb666/zuoye
3、
[梁圣然] (http://www.cnblogs.com/messi6/p/8626565.html)
[张琪] (http://www.cnblogs.com/zhang03/p/8641322.html)
[林松] (http://www.cnblogs.com/BigFace123/p/8635570.html)
4
5