第一次作业

PTA作业
计算两个数的和与差:

1.设计思路
在主函数中先定义四个浮点型的标识符a,b,sum,diff,对a,b分别赋值,通过单向值传递把a和b传给op1和op2,sum的地址传递给指针psum,diff的地址传递给指针pdiff;最后输出和与差。sum等于a+b,diff等于a-b;所以在函数调用时,psum等于op1+op2,diff等于op1-op2;

2.代码验证

‘‘‘void sum_diff( float op1, float op2, float *psum, float *pdiff ){
         *psum=op1+op2;
         *pdiff=op1-op2;
     }’’’
拆分实数的整数与小数部分:

1.设计思路

在主函数中,定义两个浮点数x.fracpart,和整型数inpart;输入一个浮点数赋值给x;调用splitfloat函数;把x的值传递给被调函数中的形参x,将intpart和fracpart的地址传递给形参指针变量inpart和fracpart;最后输出是熟的整数和小数部分。 x的整数部分就是对x进行整取,强制将x转化为整型舍去小数部分;x的小数部分就是减去整数部分。

2.代码验证

‘‘‘void splitfloat( float x, int *intpart, float *fracpart ){
        *intpart=(int)x;
        *fracpart=x-*intpart;    
    }’’’
在数组中查找指定元素

1.设计思路

定义名为a的数组,循环变量i,找的数x,和数组元素的个数n。读入n和要查询数x,并对数组各元素进行赋值。在函数中进行查找。输出所查找数的在数组中的位置。

2.代码验证

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

3.流程图

最大值数及其下标

1.设计思路

定义名为a的数组、循环变量i、最大值max、和数组中最大数的下标p。对数组进行赋值。在函数中找到最大值及其对应的下标。输出数组元素的最大值及其下标。

2.代码验证

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

3.流程图

最小数放前最大数放后

1.设计思路:

定义数组。对数组赋值。定义最大值max和最小值min和两个变量q,w,max和min为数组首元素的值,q和w为0,查找出最大值和最小值以及对应的下标。将最大值和数组最后一个元素交换,最小值和首元素交换。遍历数组输出数组的每一个元素。

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

3.流程图

指针选择法排序

1.设计思路:

定义指针变量p循环变量i和数组。将首元素的地址赋值给指针变量p。对数组的各个元素赋值。使用选择排序法对数组从大到小的排序。遍历数组输出数组的各个元素。

2.代码验证

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

3.流程图

判断回文字符串

1.设计思路

定义字符数组,输入字符串给s;调用函数palindrome,在函数palindrome中,定义循环变量i=0,q,q=count/2;判断字符数组第i个元素和第count-i-1个元素是否相等,如果不相等返回false,相等的话返回true。如果返回值是true就输出Yes,否则输出No。

2.代码验证

bool palindrome( char *s ){
        int i,count=0,q;
        count=strlen(s);
        q=count/2;
        for(i=0;i<q;i++){
            if((*(s+i))!=(*(s+count-i-1))){
                return(false);
            }
        }
        if(i==q){
            return(true);
        }
    }

3.流程图

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

1.设计思路

用for循环将第m个字符开始的全部字符复制到字符串s中,在s字符串后加上\0

2.代码验证

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

3.流程图

三 学习总结和进度

1.学会的内容

(1)怎样定义指针变量和引用指针变量

(2)通过指针引用数组元素

(3)字符串的引用,使用字符串变量和字符数组的比较

没有学会的内容

(1)通过指针引用多维数组

(2)多重指针

posted @ 2018-03-25 15:16  刘传海  阅读(227)  评论(7编辑  收藏  举报