• 第一次作业(第二学期)


    作业要求一 (20分)

    完成下列编程题目,每次上完课都会增加2-3道题目,并将编程过程记录在博客里:

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

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

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

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

    额外加题3:为了防止信息被别人轻易盗取,需要把电码明文通过加密方式变换成为密文。变换规则如下:小写字母y变换为a,小写字母z变换为b,其他字母变换成为该字母ASCII码顺序后2为字幕,比如o变换成q。要求给出你的姓名全拼加密后的结果。

    作业要求二(60分)

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

    题目6-1 计算两数的和与差
    1 设计思路(6分)
    (1)主要描述题目算法(1分)
    第一步:两数相加求和。
    第二步:两数相减求差。
    第三步:通过指针返回多个值。
    (2)流程图(4分)

    2.实验代码(2分)

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

    3.本题调试过程碰到问题及解决办法(12分)

    题目6-2 拆分实数的整数与小数部分
    1 设计思路(6分)
    (1)主要描述题目算法(1分)
    第一步:通过转换数据类型去掉小数部分得到整数部分。
    第二步:原来的数减去整数部分得到小数部分。
    第三步:通过指针返回多个值。
    (2)流程图(4分)

    2.实验代码(2分)

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

    3.本题调试过程碰到问题及解决办法(12分)

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

    题目6-1 在数组中查找指定元素
    1 设计思路(6分)
    (1)主要描述题目算法(1分)
    第一步:通过for循环将所给值与数组中每个元素进行比较。
    第二步:若在数组中找到与所给值相等的数则用mark=1来标记。
    第三步:根据mark的值决定返回值。

    (2)流程图(4分)

    2.实验代码(2分)

     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;
     }
     }  
    

    3.本题调试过程碰到问题及解决办法(12分)

    题目6-2 找最大值及其下标
    1 设计思路(6分)
    (1)主要描述题目算法(1分)
    第一步:通过for循环找到数组中的最大值。
    第二步:返回最大值。

    (2)流程图(4分)

    2.实验代码(2分)

    int fun(int *a,int *b,int n)
    {
    	int j;
    	int zuida=*a;
    	for(j=1;j<N;j++)
    	{
    		if(*(a+j)>*a)
    		{
    			*b=j;
    			zuida=*(a+j);
    		}
    	}
    	return zuida;	
    }
    

    3.本题调试过程碰到问题及解决办法(12分)

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

    题目6-1 最小数放前最大数放后
    1 设计思路(6分)
    (1)主要描述题目算法(1分)
    第一步:通过input函数对数组初始化。
    第二步:在max_min函数中对每个元素依次比较,找出其中最大值与最小值并记录并用mark,flag记录其角标。
    第三步:通过中间变量c1将最小值与数组第一个元素交换。
    第四步:通过中间变量c2将最大值与数组最后一个元素交换。
    第五步:通过for循环依次输出该数组各元素。
    (2)流程图(4分)



    2.实验代码(2分)

    void input(int *arr,int n)
    {
    int i;
    for(i=0;i<10;i++)
    {
    scanf("%d",&*(arr+i));
    }
    } 
    void max_min(int *arr,int n)
    { int mark=0,flag=0;
      int j=0;
      int c1,c2;
      int max=*arr,min=*arr;
      for(j=0;j<10;j++)
      { if(*(arr+j)>max)
      {max=*(arr+j);
       mark=j;
      }
      if(*(arr+j)<min)
      {min=*(arr+j);
       flag=j;
      }
      	
      }
      c1=*arr;
      *(arr)=min;
      *(arr+flag)=c1;
      c2=*(arr+9);
      *(arr+9)=max;
      *(arr+mark)=c2; 
    
    } 
    void output(int *arr,int n)
    {
      int k=0;
      for(k=0;k<10;k++)
      {printf("%3d",*(arr+k));
      }
    } 
    

    3.本题调试过程碰到问题及解决办法(12分)

    题目6-2 指针选择法排序
    1 设计思路(6分)
    (1)主要描述题目算法(1分)
    第一步:通过for循环内嵌for循环找出最外层循环对应的每一个组数中的最大值,并记录其角标。
    第二步:通过中间变量c1将其与外层循环对应的数据中的第一个数进行交换。
    第三步:待循环结束后,输出数组中各元素。

    (2)流程图(4分)

    2.实验代码(2分)

     void sort(int *x,int n)
     {
     	int i,j,k,mark,c1;
     	int max;
     for(i=0;i<10;i++)
     {  max=*(x+i);
     	for(j=i;j<10;j++)
     	{ if(*(x+j)>max)
     	{max=*(x+j);
     	mark=j;
    	 }
    	 }
    	c1=*(x+i); 
        *(x+i)=*(x+mark);
        *(x+mark)=c1;
     }
    	
     }
    

    3.本题调试过程碰到问题及解决办法(12分)

      

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

    题目6-1 判断回文字符串
    1 设计思路(6分)
    (1)主要描述题目算法(1分)
    第一步:通过strlen函数得到实参的字符长度,根据其判断可能是哪种回文类型。
    第二步:通过for循环依次比较第一个与最后一个,第二个与倒数第二个,依次往下......
    第三步:根据是否是回文返回不同的字符串。

    (2)流程图(4分)

    2.实验代码(2分)

     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;
              }
         }
    

    3.本题调试过程碰到问题及解决办法(12分)

    6-2 使用函数实现字符串部分复制
    1 设计思路(6分)
    (1)主要描述题目算法(1分)
    第一步:通过for循环得到数组t的长度。
    第二步:判断t的长度与m的大小来决定是否能够复制。
    第三步:若否,s为空字符串。若是,用for循环依次将t中字符复制至s。
    第四步:在字符串s的最后手动加上。

    (2)流程图(4分)

    2.实验代码(2分)

    void strmcpy(char *t,int m,char*s)
    {
        int count=0;
        int i;
        for(i=0;;i++)
        {
    	 if(*(t+i)=='')
    	 {break;
    	 }
    	 else
    	 {count++;
    	 }
    	}
    	if(count<m)
    	{*s='';
    	}
    	else
    	{
    	for(i=0;*(t+i)!='';i++)
    	{
    	*(s+i)=*(t+m-1+i);
    	}
    	*(s+i)='';	
    	}
    }
    

    3.本题调试过程碰到问题及解决办法(12分)
    问题:在写题过程中,误将打成 导致段错误。其次,疏忽了在s数组后手动添加。
    解决方法:将该题改为编程题,在主函数达到题目要求后,对比排查问题所在。在肯定思路的情况下,尝试不同写法。

    额外加题3:
    为了防止信息被别人轻易盗取,需要把电码明文通过加密方式变换成为密文。变换规则如下:小写字母y变换为a,小写字母z变换为b,其他字母变换成为该字母ASCII码顺序后2为字幕,比如o变换成q。要求给出你的姓名全拼加密后的结果。
    1 设计思路(6分)
    (1)主要描述题目算法(1分)
    第一步:通过for循环依次输入名字的各个字符。
    第二步:判断各字符范围,进行变换。
    第三步:输出加密后的名字。

    (2)流程图(4分)

    大量使用选择语句导致流程图横向宽度大
    2.实验代码(2分)

    #include <stdio.h>
    int main()
    {
        char name[20];
        int i;
        for(i=0;;i++)
        {
        scanf("%c",&name[i]);	
        if(name[i]=='
    ')
    	{break;
    		}	
        if('A'<=name[i]&&name[i]<='Z')
    	{name[i]=name[i]+2;
    		}	
        if(name[i]>='a'&&name[i]<='z')	
        {if(name[i]=='y')
        {name[i]='a';
    	}
    	if(name[i]=='z')
    	{name[i]='b';
    	}
    	else
    	{name[i]=name[i]+2;
    	}
    		}		
    	}
    	printf("%s",name);
        return 0;
    }
    
    

    3.本题调试过程碰到问题及解决办法(12分)

    结果


    要求三、学习总结和进度(20分)

    1、总结两周里所学的知识点有哪些学会了?哪些还没有学会?(5分)
    学会了:1. 使用指针在函数中返回多个值。
    2. 数组与指针的等价替换。
    3.指针字符串与字符串数组的区别。

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

    git地址:https://git.coding.net/Donahue_Xu/The-First-Homework2.git

    上传截图:

    3、点评3个同学的本周作业
    赵寅胜:http://www.cnblogs.com/2017023960ZYS/p/8604534.html
    刘炜旗:http://www.cnblogs.com/ryo-/p/8644256.html
    于耀淞:http://www.cnblogs.com/jsjyys/p/8589997.html

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

    折线图:

  • 相关阅读:
    ubuntu安装Elasticsearch
    PHP如何计算脚本执行时间
    MVC+EF中返回JSON的性能和安全问题
    博客园最新的一个模板样式有问题
    Entity Framework 批量插入很慢吗?我自己测试下
    用 Raphaël 绘制中国地图 + 显示数据
    博客园的手机版(非官方) MVC+jQuery.Mobile
    BitCovert,与移位,加法性能比较
    探讨微软ASP.NET AJAX控件开发技术(客户端)
    (十三)树【C++刷题】
  • 原文地址:https://www.cnblogs.com/xmb1547828350/p/8597402.html
Copyright © 2020-2023  润新知