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总算少了一点。