zoukankan      html  css  js  c++  java
  • C语言博客05--指针

    1.本章学习总结

    1.1 思维导图

    1.2 本章学习体会及代码量学习体会

    1.2.1 学习体会

    在本周的学习中,我学到了

    1.数组各元素的地址与数组名的关系,以及指针在数组中的应用
    2.字符串的储存方式,以及众多的字符串处理函数
    3.动态内存的分配
    

    1.2.2 代码累计

    代码量(行)
    15 412

    2.PTA总分

    2.1截图PTA中函数题目集的排名得分

    2.2 我的总分:110

    3.PTA实验作业

    3.1 PTA题目1

    • 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

    3.1.1 算法分析

    定义字符指针怕,字符数组a[500001]
    定义整型变量i,j,flag,其中flag=0
    gets(a);//输入字符串 
    j = strlen(a);
    p = a + j - 1;//p指向字符串的最后一个字符 
    while *p == ' ' do //跳过字符串末尾的空格 
    	*p = 0;
    	p--;
    	j--;
    end while
    for j= j to 1 do
    	if j == 1 then//若p指向字符串的首元素 
    		if p != 0 then
    			  if flag==1 then
    		      	printf(" ");
    		      end if
    			printf("%s", p);
    		end if	
    	else if *(p-- - 1) == ' ' then//若p指向字符的前一个字符为空格 
    		  if flag==1 then
    		    printf(" ");
    		   end if
    		printf("%s", p+1);
    		flag=1;
    		while *p == ' ' do//跳过所有空格 
    			*p = 0;
    			p--;
    			j--;
    		end while
    	end if
    end for 
    

    3.1.2 代码截图


    3.1.3 PTA提交列表及说明

    • 这道题在一开始的时候我并没有考虑到多空格的问题,因此我也几个点上卡了一会了,直到之后注意的了可能有多个空格之后这个问题之后才过了全部的测试点

    4.大作业

    4.1.改造函数介绍

    1.函数1

    定义变量 flag;
    srand(time(0));
    定义整型数组_num[3],字符数组_op[3] 
    num = _num, op = _op; /*全局指针num和op分别指向两个数组*/ 
    定义变量 i, m, j;
    m = pow(10, level);
    exit:
    for i = 0 to 3 do
    	_num[i] = rand() % m;
    	j = rand() % 4;
    	switch j then
    		case 0:_op[i] = '+'; break;
    		case 1:_op[i] = '-'; break;
    		case 2:_op[i] = '*'; break;
    		case 3:_op[i] = '/'; break;
    	end switch
    end for
    flag = IsExp(); /*判断生成的题目是否合法*/
    if flag == 0 then /*若不合法则重新执行上述过程*/ 
    	goto exit;
    end if 
    if level == 1 then /*将题目写入exp中*/ 
    	sprintf(exp, "%d%c%d", num[0], op[0], num[1]);
    else
    	sprintf(exp, "%d%c%d%c%d", num[0], op[0], num[1], op[1], num[2]);
    end if 
    

    最终代码:

    2.函数2

    定义变量 p;
    if op[0] == '/' then
    	if num[1] == 0 then return 0;/*若除数为0*/ 
    	end if
    	if num[0] % num[1] == 0 thrn return 1;/*判断是否能整除*/ 
    	else return 0;
    	end if
    end if
    if op[1] == '/' then
    	if num[2] == 0 then return 0;/*若除数为0*/ 
    	end if
    	if op[0] == '+' || op[0] == '-' then/*判断是否能整除*/ 
    		if num[1] % num[2] == 0 then return 1;
    		else return 0;
    		end if
    	else
    		if op[0] == '*' then p = num[0] * num[1] % num[2];
    		else p = num[0] / num[1] % num[2];
    		end if
    		if p == 0 then return 1;
    		else return 0;
    		end if
    	end if
    end if
    

    最终代码:


    3.函数3

    定义整型变量 i, j, k, m, answer 
    定义整型数组 num[10];
    定义字符数组 op[10];
    i = 0, m = 0, j = -1, k = -1;
    do
    	if exp[i]<='9'&&exp[i]>='0' then 
    		m = m * 10 + exp[i] - '0';
    	else
    		op[++k] = exp[i];
    		num[++j] = m;
    		m = 0;
    	end if
    	if k >= 1 then /*先计算算式优先级较高的乘除法*/ 
    		if  op[k-1] == '*' || op[k-1] == '/' then
    			if op[k - 1] == '*' then
    				num[k] = num[k - 1] * num[k];
    			else if op[k - 1] == '/' then
    					num[k] = num[k - 1] / num[k];
    			end if
    			num[k - 1] = 0;
    			if k - 2 >= 0 then
    				op[k - 1] = op[k - 2];
    			else
    				op[k - 1] = '+';
    			end if
    		end if
    	end if
    while exp[i++] != '='  do 
    answer = 0;
    char _op = '+';
    j = 0, k = 0;
    while 1 do /*计算算式中剩下的加减法*/ 
    	if _op == '+' then answer += num[j++];
    	else if _op == '-' then answer -= num[j++];
    	else if _op == '=' break;
    	end if
    	_op = op[k++];
    end while
    return answer;
    


    4.2 与原有函数代码比较

    1.函数1

    • 函数1相较于我原本的代码来说,它是我原本几个函数合并之后的函数,整体思路并没有太多变化,只不过我借助合并删除了原本的一些多余的代码,使得代码看上去更加的简短一些

    2.函数2

    • 函数2的功能是我原本没有的,是这次改动新增的,所以就不多说了

    6.函数3

    • 函数3相较于我原来代码来说会更好,原来的代码只能计算一步或两部的运算,而新的代码已经不局限于一步或两步的运算了,可以计算更多步的算式

    4.3 改进大作业总结

    这次改进大作业我并没有进行太多的改动,只是合并了一些函数,并新增了以个原本没有的函数,其余的地方几乎还是原代码,不过这只是我初步的改进,并不是我最终的改进,但由于时间关系,本次博客我只能先用我初步的改进来写了。我现在已经开始着手于大作业的最后一次改进了,本次改进的最终改动将与大作业的最后一次改进一同完成。

  • 相关阅读:
    实验七:类的多态性
    实验六:类的封装(P105 3-35)
    实验五:任意输入10个int类型数据,排序输出,再找出素数
    第三周学习总结
    hbase对Java的简单操作
    hbase的shell命令
    需求工程3
    需求工程2
    软件需求1
    认识软件需求
  • 原文地址:https://www.cnblogs.com/xycm/p/10124533.html
Copyright © 2011-2022 走看看