第一次作业
作业一:
1.计算两数的和与差
a.插入代码
void sum_diff( float op1, float op2, float *psum, float *pdiff ){
*psum=op1+op2;
*pdiff=op1-op2;
}
b.流程图
c.调试中的问题:这题太简单,没问题!!
2.拆分实数的整数与小数部分
a.插入代码
void splitfloat( float x, int *intpart, float *fracpart ){
*intpart = (int)x;
*fracpart = x - *intpart;
}
b.流程图
c.调试中的问题:这题太简单,没问题!!
3.在数组中查找指定元素
a.代码
int search(int list[], int n, int x)
{
int j;
int mark=0;
for(j=0;j<n;j++)
{
if(list[j]=x)
{
mark=1;
break;
}
}
if(mark==1)
{
return j;
}
else
{
return -1;
}
}
b.流程图
c.本体在调试中未出现问题
4.找最大值及其下标
a.代码
int fun(int *a,int *b,int n)
{
int i;
int max=0;
for(i=0,max=0, *b=0;i<n;i++){
if(a[i]>max)
{max=a[i]; *b=i;}
}
return max;
}
b.流程图
通过for循环找到数组中的最大值,返回最大值。
c.未出现调试中的问题
5.最小数放前最大数放后
a.代码
#include<stdio.h>
void input(int *arr,int n)
{
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
}
void max_min(int *arr,int n)
{
int j=0,x=0,y=n-1;
for(j=0;j<n;j++)
{
if(arr[x]>arr[j])
{
int swap;
swap=arr[x];arr[x]=arr[j];arr[j]=swap;
}
}
for(j=n-1;j>0;j--)
{
if(arr[y]<arr[j])
{
int temp;
temp=arr[y];arr[y]=arr[j];arr[j]=temp;
}
}
}
void output(int *arr,int n)
{
int k=0;
for(k=0;k<n;k++)
{
printf("%3d",arr[k]);
}
}
b.流程图
定义函数,本题其实就是三个小函数的集合,每一个函数都是在比较大小然后按照题意交换位置,小的数换到前面大的数换到后面,循环,输出。
c.这道题是通过其他同学的帮助完成的。
6.指针选择法排序
a.代码
void sort(int *x,int n)
{
int i,j;
int a;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++)
{
if(*(x+i)<*(x+j))
{
a = *(x+i);
*(x+i) = *(x+j);
*(x+j) = a;
}
}
}
return 0;
}
7.判断回文字符串
a.代码
bool palindrome(char *s)
{ int a[4]={true};
int b[5]={false};
int length;
int mark=0;
int i,j;
int n,m,flag=0;
length=strlen(s);
n=length-1;
for(i=0;i<length/2;i++,n--)
{
if(*(s+i)!=*(s+n))
{ flag=1;
break;
}
}
if(flag==1)
{return *b;
}
else if(flag==0)
{ return *a;
}
}
b.流程图
通过strlen函数得到实参的字符长度,根据其判断可能是哪种回文类型,通过for循环依次比较第一个与最后一个,第二个与倒数第二个,依次往下,根据是否是回文返回不同的字符串。
c.未出现问题
8.使用函数实现字符串部分复制
a.代码
void strmcpy(char *t,int m,char*s)
{
int count=0;
int i;
for(i=0;;i++)
{
if(*(t+i)==\'\\0\')
{break;
}
else
{count++;
}
}
if(count<m)
{*s=\'\\0\';
}
else
{
for(i=0;*(t+i)!=\'\\0\';i++)
{
*(s+i)=*(t+m-1+i);
}
*(s+i)=\'\\0\';
}
}