代码改变世界

第一次作业

2018-03-25 18:24  梁圣然  阅读(239)  评论(20编辑  收藏  举报

6-1 计算两数的和与差

一.设计思路

(1)描述算法:

1.仔细阅读题目,了解题意。
2.查看主函数,并找出函数中的形参和实参。
3.根据题意将op1和op2的和赋给psum 即psum=op1+op2; 同理,将op1和op2的差赋给pdiff 即pdiff=op1-op2;
4.提交答案 根据提示加以改正,直到程序成功运行。

(2)流程图:

二.实验代码:

    void sum_diff( float op1, float op2, float *psum, float *pdiff ){
     *psum=op1+op2;
     *pdiff=op1-op2;
}

三.调试过程中碰到的问题和解决办法

 错误原因:做题的时候马虎语句后不加“;”
 改正方法:在每句语句后注意加“;”注意:不要画蛇添足例如if条件句括号后不加“;”

6-2 拆分实数的整数与小数部分

一.设计思路

(1)描述算法:

1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.由题意可知x为实数型将其强制转化为整形取整数部分(int)x;然后并将值赋给 intpart
4.将原来的实数减去整数部分为剩下的小数部分,再将小数部分赋给
fracpart 即fracpart=x-intpart;

(2)流程图:

二.实验代码:

void splitfloat( float x, int *intpart, float *fracpart ){
  *intpart=(int)x;
  *fracpart=x-*intpart;
}

三.调试过程中碰到的问题和解决办法

错误信息:程序不能通过
错误原因:强制转化的格式错误
改正方法:正确格式为(int)x;

6-1 在数组中查找指定元素

一.设计思路

(1)描述算法:

1.仔细阅读题目,了解题意。
2.查看主函数,并找出函数中的形参和实参
3.利用for循环语句,将数组中的元素x循环比较如果存在于x相同的记录其下标并通过break结束循环,return将找到的值返回主函数
4.存在则返回下标,不存在输出Not found

(2)流程图:

二.实验代码:

int search( int list[], int n, int x ){
  int j;
  int b=-1;
  for(j=0;j<n;j++)
  {
     if(list[j] == x)
    {
      b=j;
      break; 
    }
	
	}return(b);
}

三.调试过程中碰到的问题和解决办法

错误原因:多次查找函数中与“x"相等的元素
改正方法:for循环中加入一个break 或者return结束函数

6-2 找最大值及其下标

一.设计思路:

(1):描述算法

1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.定义一个数组a[n] 循环变量i 最大值max 最大值下标p
4.调用函数利用函数找出最大值确定下标,输出结果

(2).流程图

二实验代码:

int fun(int *a,int *b,int n){
  int j;
  int q=a[0];
  for(j=0;j<N;j++){
    if(a[j]>q)
    {
      *b=j;
      q=a[j];
    }
    }return(q);
}

三.调试过程中碰到的问题和解决办法

错误原因:没有给q赋初值
改正方法:将a[0]赋给q

6-1 最小数放前最大数放后

一.设计思路:

(1):描述算法

1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.利用第一个函数定义一个数组
4.定义两个变量p,q负责记录最大最小值下标
5.输出数组元素,并且元素输出占3列

(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 min=arr[0],max=arr[0];
	int i,change;
	int q=0,p=0;
	for(i=0;i<n;i++){
		if(min>*(arr+i)){
			min=*(arr+i);
			q=i;
		} 
		if(max<*(arr+i)){
			max=*(arr+i);
			p=i;
		}
	}
	change=*(arr+0);*(arr+0)=*(arr+q);*(arr+q)=change;
	change=*(arr+n-1);*(arr+n-1)=*(arr+p);*(arr+p)=change;
}
void output(int *arr,int n){
	int i;
	for(i=0;i<n;i++){
		printf("%3d",*(arr+i));
	}
}

三.调试过程中碰到的问题和解决办法

错误信息1:编译错误
错误原因:*arr指针所指向地址中的数
改正方法:min>arr+i 改正 min>*(arr+i)

6-2 指针选择法排序

一.设计思路:

(1):描述算法:

1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.输入数组斌且赋值
4.利用选择排序法进行排序,输出结果

(2)流程图

二.实验代码:

void sort(int *x,int n){
 		int i,j,k,change;
 		for(i=0;i<n-1;i++){
 			k=i;
 			for(j=i+1;j<n;j++){
 				if(*(x+k)<*(x+j)){
 					k=j;
				 }
			 }
			 if(k!=i){
			 	change=*(x+i);*(x+i)=*(x+k);*(x+k)=change;
			 }
		 }
	 }

三.调试过程中碰到的问题和解决办法

错误信息1:编译错误
错误原因:选择排序法循环里的for循环变量应该是j<n,i+1,外层循环确定第一个数依次比较
改正方法:for(j=i+1;j<n;j++)

6-1 判断回文字符串

一.设计思路:

(1):描述算法:

1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.根据回文的定义利用函数strlen求出字符串的长度
4.通过for循环比较字符串的第一个字符和最后的字符是否相同

(2) 流程图:

二.实验代码:

bool palindrome( char *s ){
  int i,b;
  b=strlen(s);//求出字符串的实际长度
  for(i=0;i<b/2;i++){
    if(*(s+i)!=*(s+b-i-1)){
      return false;
    }
  }return true;
}  

三.调试过程中碰到的问题和解决办法

错误信息1:编译错误
错误原因:s代表的是地址 *(s+i)=s[i]
改正方法:将s+i改成为*(s+i)

6-2 使用函数实现字符串部分复制

一.设计思路:

(1):描述算法:

1.仔细阅读题目,了解题意
2.查看主函数,并找出函数中的形参和实参
3.调用函数strmcpy
4.函数中定义i a 循环变量,先判断不等于‘\0’在执行循环

(2):流程图

二.实验代码:

void strmcpy( char *t, int m, char *s ){
  int i,a;
  for(i=m,a=0;*(t+i-1)!='\0';i++,a++){
    *(s+a)=*(t+i-1);
    
  }*(s+a) = '\0';
  
}

三.调试过程中碰到的问题和解决办法

错误信息1:部分正确
错误原因:在函数中循环结束没加*(s+a) = '\0'
改正方法:在for循环外加上*(s+a) = '\0'只有在程序执行时遇到‘\0’带表结束占据一个字节

学习总结和进度

1.知识点

1.学习指针 int *p 星号指针标识符 *p所指的是地址p中存的数据
2.强制转换 例如一个float型数x (int)x可以转换成整型
3.break 跳出循环
4.输出整数占m列的格式是%md 例如占3列就是%3d
5.选择排序法外层循环条件小于是数组元素个数-1,内层循环起始条件是外层循环变量的值+1,循环条件是小于数组元素的个数,找到最大值或最小值的下标与第一个元素交换
6.交换,先引用一个变量来进行交换
7.strlen(s) 求出字符串的实际长度

2.托管截图

3.表格

4.我点评的人

林昊 http://www.cnblogs.com/lh991014/p/8638313.html
陆文奇 http://www.cnblogs.com/748luwenqi/p/8645546.html
王文博 http://www.cnblogs.com/wwb986187/p/8635502.html