首页 > 技术文章 > C语言博客作业05--指针

lw123--- 2018-12-17 22:13 原文

1.本章学习总结

1.1 思维导图

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

1.2.1 学习体会

本周的学习内容主要是指针和结构体,这一块内容是难度比较大的一部分,也不容易掌握,主要是指针的指向方面需要很清晰的逻辑关系。首先就是指针的定义方面了,指针的定义不可以直接把一个之赋给指针,可以定义空指针,一般赋值的话都是给指针复制一个地址,如&cp=a,这样子就把指针的地址取到跟a相同的地方,也就是这个指针指向a。指针同时也是数组的一个帮助,他可以动态申请内存,不需要像数组一样定义一个具体的内存空间导致浪费内存。只针对于函数的好处在于不需要返回很多的值给主函数进行处理,可以直接把函数外面的值修改掉,不需要再次返回值。对于字符串,指针也有很多新的数组可以进行操作,比如strlen,stremp函数等等,都是以前没有学习过的函数。现在的主要问题还是对于这种语法的不熟练,需要尽快把题目做完整,然后从中进行整理和总结,找出指针的规律。

1.2.2 代码累计

2.PTA总分

3.PTA实验作业

3.1 PTA题目1

6-2 判断回文字符串 (20 分)

3.1.1 算法分析

3.1.2 代码截图

3.1.4 PTA提交列表及说明


·Q1:第一个遇到的问题就是没有看题目的要求,把输出都放进函数里
·A1:解决的办法就是改正代码,返回值改成true和false
·Q2:第二个遇到的问题就是定义了两个变量,分别从两边开始循环,导致有两个点错误
·A2:把两个变量改成一个,循环到中间时结束,定义一个开关变量来判断返回值

4.大作业

题目:实现小学四则运算。
题目要求:
题目有3个难度级别,分别为:
第一级是1位数的一步加减乘除计算
第二级是2位数的2步加减运算
第三级是3位数的2步加减运算

4.1.改造函数介绍

1.函数1

·函数伪代码

int main()
{
int degree;//等级变量定义
int g;
printf("\n");
printf("小盆友,准备好开始了吗(ˉ▽ˉ;)\n");
printf("请输入你需要的难度哟⊙ω⊙\n");
printf("1:简单一位数一步运算\n 2:中等两位数两步运算\n 3:高等三位数三步运算\n");
printf("你想做几题呢(O ^ ~ ^ O)\n");
printf("
");
srand( time( NULL ) );
int num;
int i;
int j;
scanf("%d",&num);
for(i=1;i<=num;i++)
{
do
{
scanf("%d",&degree);//输入需要的等级
getchar();
switch(degree)//等级分级
{
case 1: Degree1();break;
case 2: Degree2();break;
case 3: Degree3();break;
default:printf("小盆友,乖一点不要皮!"); i--;
}
}while(degree1&&degree2&&degree==3);
}
printf("%.0f",rights);//运行函数,输出话语
return 0;
}
·函数截图

函数2

·伪代码

void Degree1()
{
system("cls");//清屏函数
double x,y;
int n;//传递的输入等级degree
double answer;//输入自己的答案
char op;
double result;
x=rand()%10;//产生随机数
y=rand()%10;
n=rand()%4;
switch(n)
{
case 1:op='+';result=x+y;break;//加减乘除法
case 2:op='-';result=x-y;break;
case 3:op='';result=xy;break;
case 0:{
if(x>=y)//除法的情况
{
op='/';result=x/y;break;
}
else
{
break;
}
}
}
int intd=(int)result;
printf("%.0f%c%.0f=",x,op,y);//输出题目
scanf("%lf",&answer);//输入答案
if(answer==intd)//进行判断,是否符合题目要求
{
RightMessage();
rights++;
}else
{
WrongMessage();
printf("正确答案是%d\n",result);
}return;
}
·函数贴图

函数3

·伪代码

void Degree2()
{
system("cls");//清屏函数
int x,y,z;//三个变量
int n1,n2;//两个符号
int answer;//输入自己的答案
char op;
int result=0;
x=rand()%100;//产生随机数
y=rand()%100;
z=rand()%100;
n1=rand()%2;
n2=rand()%2;
switch(n1)//第一个符号的类型
{
case 1:op='+';printf("%d%c%d",x,op,y);result=+x+y;break;
case 0:op='-';printf("%d%c%d",x,op,y);result=+x-y;break;
}
switch(n2)//第二个符号的类型
{
case 1:op='+';printf("%c%d=",op,z);result=result+z;break;
case 0:op='-';printf("%c%d=",op,z);result=result-z;break;
}
scanf("%d",&answer);
if(answer==result)//判断输入正确或者是错误
{
rights++;
RightMessage();
}else
{
WrongMessage();
printf("正确答案是%d\n",result);
}return;
}
·代码贴图

4.2.与原有函数比较

整体来说,屏幕的优化提升,如果要把代码改成指针形式的话,还需要同学的指导和老师助教小哥哥的帮助

4.3 大作业总结

·问题:当我对插入清屏函数时,运行时正确率却消失不见;
·解决:首先是更换函数位置,发现依旧不管用
上述方法无法解决,便百度屏幕冻结函数来暂停,使正确率能够输出。
·总结:遇到的问题可以尝试自己解决,或者可以百度更多的方法、函数。记得曹老师的一句话:“平时可以不用一定要搞懂某些东西,用到的时候能懂就行。”

推荐阅读