zoukankan      html  css  js  c++  java
  • 第1次作业

    作业要求二

    1)C高级第一次PTA作业(1)

    6-1 计算两数的和与差

    本题要求实现一个计算输入的两数的和与差的简单函数。

    代码如下:

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

    指针在题目中的作用:

        op1代表a,op2代表b,*psum代表sum,*pdiff代表diff。
    

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

    本题要求实现一个拆分实数的整数与小数部分的简单函数。

    代码如下:

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

    指针在题目中的作用:

        x为输入数,*intpart取x整数部分,*fracpart取输入数减整数的部分(也就是小数部分)。
    

    2)C高级第一次PTA作业(2)

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

    本题要求实现一个在数组中查找指定元素的简单函数。

    代码如下:

    `int search(int list[], int n, int x ){
    int i,index;
    for(i=0;i<n;i++)
    {
        if(list[i]==x){
    	    index = i;
    	    break;
        }else{
          index = -1;
        }
    } 
     return index;
    }`
    

    (1)主要描述题目算法

         第一步:声明函数
         第二步:定义两个变量
         第三步:规划循环判断数组中有无指定函数
         第四步:返回原函数
    

    (2)流程图

    错误信息:

       错误原因:一开始找到相等函数的时候忘记在index=i之后加入break导致循环继续答案错误。
       改正方法:在index=i;之后加入break。

    6-2 找最大值及其下标

    在一维整型数组中找出其中最大的数及其下标。

    代码如下:

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

    (1)主要描述题目算法

         第一步:声明函数
         第二步:定义一个变量
         第三步:规划循环判断数组中前一个数是否比后一个大
         第四步:是就交换然后记下下标
         第五步:返回原函数
    

    (2)流程图

    错误信息:

       错误原因:最初的时候不知道输出什么好,所以写了return *a和return *b,结果答案错误。
       改正方法:咨询了室友之后,室友告诉我只需要输出return *a就行,我问了室友原因室友也不知道,希望老师解答一下。

    3)C高级第一次PTA作业(3)

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

    为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。

    代码如下:

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

    (1)主要描述题目算法

         第一步:声明第一个函数
         第二步:输入数组中所有的数
         第三步:返回原函数
         第四步:声明第二个函数
         第五步:找出最小的数并记下下标
         第六步:交换最小数
         第七步:找出最大的数并记下下标
         第八步:交换最大数
         第九步:返回原函数
         第十步:声明第三个函数
         第十一步:输出数组中所有的数
         第十二步:返回原函数
    

    (2)流程图

    错误信息:

       错误原因:一开始我写成了 min=*(arr+i); *arr=min; 只是一开始的值变成了最小值或最大值,并没有交换,结果答案错误。
       改正方法:经过的DEV C++运行之后我发现了问题定义了新的变量来表示指针,然后进行了交换的三行代码,答案正确。

    6-2 指针选择法排序

    指针选择法对10个数进行由大到小的排序。

    代码如下:

    `void sort(int *x,int n){
      int i,j,t;
      for(j=1;j<10;j++)
      for(i=0;i<10-j;i++)
      {
      if(*(x+i)<*(x+i+1))
        {
          t=*(x+i);
          *(x+i)=*(x+i+1);
          *(x+i+1)=t;
        }  
      }
    }`
    

    (1)主要描述题目算法

         第一步:声明第一个函数
         第二步:定义三个变量
         第三步:确定一共循环几次
         第四步:第一个数与后面的数比较排序然后第二个数依此循环
         第五步:返回原函数
    

    (2)流程图

    4)C高级第一次PTA作业(4)

    6-1 判断回文字符串

    本题要求编写函数,判断给定的一串字符是否为“回文”。

    代码如下:

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

    (1)主要描述题目算法

         第一步:声明第一个函数
         第二步:定义两个变量
         第三步:数清楚一共几个字符
         第四步:判断第一个数与最后一个数是否一样
         第五步:循环
         第六步:返回原函数
    

    (2)流程图

    错误信息(1):

       错误原因:忘记了strlen函数导致忘记取字符串字符的数量。
       改正方法:写入strlen函数。

    错误信息(2):

       错误原因:开始我写的是
    if(s[i]!=s[j]) break; if(i>j) return ture; return no;
    造成的错误就是忽略了只有两个字符的情况。
       改正方法:
    if(*(s+i)!=*(s+j)) { return false; } if(i>=j) return true;
    对于这种情况进行了分别的讨论。

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

    本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。

    代码如下:

    `void strmcpy( char *t, int m, char *s ){
      int n;
      n=strlen(t);
      int i;
      int a=0;
      if(m<=n){
        for(i=m;t[i-m]!='';i++)
        {
          *(s+a)=t[i-1];
          a++;
        }*(s + n) = '';
      }else{
        *s='';
      }
    }`
    

    (1)主要描述题目算法

         第一步:声明第一个函数
         第二步:数清楚一共几个字符
         第三步:判断是否有意义
         第四步:如果有意义让字符串t从第m个字符开始的全部字符复制到字符串s
         第五步:最后加入''
         第七步:如果没意义直接让字符串s变为''
         第八步:返回原函数
    

    流程图

    错误信息:

       错误原因:一开始写的是 t[i]!='' 忘记了i的取值一开始是m结果编译错误。
       改正方法:改为 t[i-m]!=''

    附加题

    小写字母y变换为a,小写字母z变换为b,其他字母变换成为该字母ASCII码顺序后2为字母

    代码如下:

    `#include<stdio.h>
    void mima( char *s );
    int main ()
    {
        char a[20];
        gets(a);
        mima(a);
        printf("%s",a);
        return 0;
    } 
    
    void mima( char *s ){
        int i;
        for(i=0;*(s+i)!='';i++)
        {
    	    if(*(s+i)=='y'){
    		    *(s+i)='a';
    	    }else if(*(s+i)=='z'){
    		    *(s+i)='b';
    	    }else{
    		    *(s+i)=*(s+i)+2;
    	    }
        }
    } `
    

    (1)主要描述题目算法

         第一步:输入字符串
         第二步:声明函数
         第三步:循环判断是否为y,z
         第四步:如果为y则变为a,如果为z则变为b,如果都不是则加2
         第五步:返回原函数
         第七步:输出字符串
    

    结果图

    流程图

    作业要求三

    1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?

    在所在的两个周,我们主要先复习了上半学期的主要知识,然后对于指针以及针对于一般变量、数组与字符变量代替,和指针在函数中的应用。更是学习了指针的理论知识和它所注意的事情。
    主要没有搞清楚还有三点,一是对于字符变量还是略有生疏经常忘记 t[i]!='' 需要 i=0 要让初始量为零;二是对于"strcpy"、"strcat"、"strcmp"的应用还是不太明白:三是希望老师解答一下C高级第一次PTA作业(2)6-2 找最大值及其下标中我的错误。

    2、将PTA作业的源代码使用git提交到托管平台上,要求给出上传成功截图和你的git地址。

    git地址:https://git.coding.net/wuyaole/dayixiagxueqi01.git
    截图

    3、点评作业

    高立彬
    丰大为
    于耀淞

    4、用表格和折线图呈现本周(3/12 8:00~3/26 8:00)的代码行数和所用时间、博客字数和所用时间


  • 相关阅读:
    学习C++的第一天
    2016.12.28
    无主之地
    一种排序
    街区最短问题
    配对类问题
    蛇形填数
    c#unity
    贪心
    台阶
  • 原文地址:https://www.cnblogs.com/wsbqz/p/8641741.html
Copyright © 2011-2022 走看看