C语言博客05--指针

1.本章学习总结(2分)

1.1 思维导图

 

1.2.1 学习体会

 

指针的理解很抽象,对于指针的运用不太熟练,特别是指针很多时候是运用在函数里面,和函数混合起来运用,指针为参数时,就特别的乱,不知道怎么传参到函数,然后函数的传参也没学好。所以导致指针传参时不知道怎么传,传什么东西进去。

 

1.2.2 代码累计

2.PTA总分(2分)

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

2.2 我的总分:

 100

3.PTA实验作业(1分)

3.1 PTA题目1

N个字符串按从小到大排序的冒泡排序法

3.1.1 算法分析

char a[100][12];      定义数组长度

getchar();         读取下一个字符

int b;           定义中间变量 

b=strcmp(a[j],a[j+1]);    比较字符串大小长度

if(b>0)          a【j】的长度长于a【j+1】

a【j】<——>a【j+1】   对换

for(i=0;i<n;i++)
puts(a[i]);          输出变换后的数组

3.1.2 代码截图

3.1.4 PTA提交列表及说明

 

在devc上调试对了才提交的,后面提交的时候把百度来的一个语句也复制上去了,后面编译错误。首先是定义的时候遇到问题,我一开始想的比较简单,就是把这个题目当做一维数组来处理,我觉得行是变量,然后每行有一串字符串,后面发现这样出来的结果乱七八糟,后面去百度找答案,才用了二维数组去做。自己用的输入是scanf(“%s”,a[i])这样的,后面看百度的答案用的是gets(a[i]),了解了gets函数,可以无限读取,不会判断上限,以回车结束读取,我就用上去了。还有后面的输出,我一开始就是用的普通的printf,这样还要自己打回车符。后面用了puts解决了这个问题。有了解到puts(a)==printf("a\n")

4.大作业(5分)

题目:实现小学四则运算

 

1.伪代码介绍函数思路


void mathcaculate 函数
各种int 各种 double
printf                输出选择界面
scanf("%d",level)            读者输入等级选择
if(level!=1&&level!=2&&level!=3)   判断等级选择是否出错
printf(" 你的输入有误,结束计算");  错误输入提示
return 错误输入之后结束计算
printf("\n");
printf(" 误差允许在0.01之内\n\n");     给予友好提示
CreateExp(level);         调用函数,但是我不太会使用exp参数,所以这里只用了level
scanf("%d",&response)      读者输入答案
if if(s-response<=0.01)       答案符合要求
rightMessage( );         进入正确提示函数
                否则进入错误提示函数
s=0;              初始化系统随机生成的算式的结果
system("pause");
system("cls");           清屏+暂停函数
if(i==n)
break;                当i=n时直接跳出循环
printf(" 1:继续 2:退出 请选择:");      友好提示
printf(" \n ");
scanf("%d",&flag);        输入是否继续
printf("\n");
if(flag==1)           继续
continue;
else
{
printf("系统结束运算\n\n");        系统结束运算
break;
}
}
percent=right*1.00/((right+wrong)*1.00)*100;    正确率计算
printf(" 你的正确率为%.2f\n\n",percent);

2.函数截图

2.函数2

  • 伪代码介绍函数思路
    • void rightMessage( )函数 
      switch ( rand() % 4 )                                     随机生成鼓励语句
      {
      case 0:
      printf( " 你可真是个小机灵鬼!\n" ); break;
      case 1:
      printf( " 你真优秀!\n" );break;
      case 2:
      printf( " 真棒的回答!\n" );break;
      case 3:
      printf( " 这题对了别骄傲,还有下一题!\n" );break;
      void wrongMessage( void )  提示错误语句
      {
      switch ( rand() % 4 )
      {
      case 0:
      printf( "\n 答案是%.2f\n\n 这题错了,继续努力吧!\n" ,s); break;
      case 1:
      printf( "\n 答案是%.2f\n\n 错了,你能再做一题吗?\n",s );break;
      case 2:
      printf( "\n 答案是%.2f\n\n 这题错了别沮丧,还有下一题!\n",s );break;
      case 3:
      printf( "\n 答案是%.2f\n\n 你做错了哦!\n",s );break;
      }
      }

  • 截图函数代码。
  •  

3.函数3

void createExp(int level)函数

各种int定义

switch (level)                判断等级

case 1: m=10;n=4;k=3;break;                                m用于产生随机数

case 2:m=100;n=2;k=5;break;         n用于产生运算符

case 3: m=1000;n=2;k=5;break;         k用于控制循环

然后循环产生随机数放入数组str

y=rand()%n;

switch(y)

{

case 0:printf("+");s=s+str[j-1];break;

case 1:printf("-");s=s+str[j-1];break;

case 2:printf("*");s=str[j-1]*str[j+1];break;

case 3:printf("/");s=str[j-1]/str[j+1];break;

}

 这个有bug。但是不知道怎么改。。

 

4.3 与原有函数代码比较

改造前函数1和改造后的函数1

等级函数,改造前用了三个函数来区分三个等级,改造之后只用了一个函数就包含了三个等级的运算。其他好像没什么变动。。。

4.4 改进大作业总结

上一次的作业主要是卡在各种非法输入上,然后解决了大部分,一些非法输入还是没解决,这一次是卡在了三个等级封装在一个等级函数上,每次要不多输出了一个运算符,还有就是改动之后呢,运算符是不会多出来,但是算式的随机数每次都出来的是0,而且计算也不太对,之前的话虽然多出来一个运算符,但是结果还是对的,之前出来的是1+5/=这样的答案是6。改了好多次bug总算少了一点。

posted @ 2018-12-17 22:42  做作业做作业  阅读(228)  评论(1编辑  收藏  举报