本週的學習內容主要是指針和結構體,這一塊內容是難度比較大的一部分,也不容易掌握,主要是指針的指向方面須要很清晰的邏輯關係。首先就是指針的定義方面了,指針的定義不能夠直接把一個之賦給指針,能夠定義空指針,通常賦值的話都是給指針複製一個地址,如&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;
}
·代碼貼圖
字符串
總體來講,屏幕的優化提高,若是要把代碼改爲指針形式的話,還須要同窗的指導和老師助教小哥哥的幫助
·問題:當我對插入清屏函數時,運行時正確率卻消失不見; ·解決:首先是更換函數位置,發現依舊無論用 上述方法沒法解決,便百度屏幕凍結函數來暫停,使正確率可以輸出。 ·總結:遇到的問題能夠嘗試本身解決,或者能夠百度更多的方法、函數。記得曹老師的一句話:「平時能夠不用必定要搞懂某些東西,用到的時候能懂就行。」