本周的学习内容主要是指针和结构体,这一块内容是难度比较大的一部分,也不容易掌握,主要是指针的指向方面须要很清晰的逻辑关系。首先就是指针的定义方面了,指针的定义不能够直接把一个之赋给指针,能够定义空指针,通常赋值的话都是给指针复制一个地址,如&cp=a,这样子就把指针的地址取到跟a相同的地方,也就是这个指针指向a。指针同时也是数组的一个帮助,他能够动态申请内存,不须要像数组同样定义一个具体的内存空间致使浪费内存。只针对于函数的好处在于不须要返回不少的值给主函数进行处理,能够直接把函数外面的值修改掉,不须要再次返回值。对于字符串,指针也有不少新的数组能够进行操做,好比strlen,stremp函数等等,都是之前没有学习过的函数。如今的主要问题仍是对于这种语法的不熟练,须要尽快把题目作完整,而后从中进行整理和总结,找出指针的规律。算法
6-2 判断回文字符串 (20 分)数组
·Q1:第一个遇到的问题就是没有看题目的要求,把输出都放进函数里
·A1:解决的办法就是改正代码,返回值改为true和false
·Q2:第二个遇到的问题就是定义了两个变量,分别从两边开始循环,致使有两个点错误
·A2:把两个变量改为一个,循环到中间时结束,定义一个开关变量来判断返回值函数
题目:实现小学四则运算。
题目要求:
题目有3个难度级别,分别为:
第一级是1位数的一步加减乘除计算
第二级是2位数的2步加减运算
第三级是3位数的2步加减运算学习
·函数伪代码优化
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",°ree);//输入须要的等级
getchar();
switch(degree)//等级分级
{
case 1: Degree1();break;
case 2: Degree2();break;
case 3: Degree3();break;
default:printf("小盆友,乖一点不要皮!"); i--;
}
}while(degree==1&°ree==2&°ree==3);
}
printf("%.0f",rights);//运行函数,输出话语
return 0;
}
·函数截图
指针
·伪代码blog
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;
}
·函数贴图
内存
·伪代码rem
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;
}
·代码贴图
字符串
总体来讲,屏幕的优化提高,若是要把代码改为指针形式的话,还须要同窗的指导和老师助教小哥哥的帮助
·问题:当我对插入清屏函数时,运行时正确率却消失不见; ·解决:首先是更换函数位置,发现依旧无论用 上述方法没法解决,便百度屏幕冻结函数来暂停,使正确率可以输出。 ·总结:遇到的问题能够尝试本身解决,或者能够百度更多的方法、函数。记得曹老师的一句话:“平时能够不用必定要搞懂某些东西,用到的时候能懂就行。”