一、PTA實驗作業 題目1:查驗身份證 1. 本題PTA提交列表 2. 設計思路 3.代碼截圖 4.本題調試過程碰到問題及PTA提交列表情況說明。 部分正確 :將x改為大寫x 題目2:藏頭詩 1. 本題PTA提交列表 2. 設計思路 3.代碼截圖 4.本題調試過程碰到問題及PTA提交列表情況說明。 ...
一、PTA實驗作業
題目1:查驗身份證
1. 本題PTA提交列表
2. 設計思路
定義i,flag=1,z,m[11],a[19]
輸入次數n
for i=1 to n+1
gets(a)
加權求和在取餘計算z
switch(z)
對應查看a[17]與校驗碼是否一致
若不一致,flag=0,輸出錯誤身份證
若flag=1,則說明全對
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明。
- 部分正確 :將x改為大寫x
題目2:藏頭詩
1. 本題PTA提交列表
2. 設計思路
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明。
本題題目很好理解,在DEV上寫的時候發現了自己兩個問題
1.對一個漢字占兩個位元組沒理解。存儲一個漢字需要兩個位元組,而char類型是一個位元組,所以一個中文字占用2個位元組來存儲及輸出。
- 調試過程:
本想通過調試看變數,但發現調試看不出毛病在哪裡。再瀏覽了一遍發現自己只在定義時保證了儲存空間足夠,而在對新詩賦值時卻沒有意識到要兩個位元組來表示一個漢字。
pome_[2*i]=pome[i][0];//對新詩賦值
pome_[2*i+1]=pome[i][1];
2.忽略了字元數組結束標誌
- 調試過程:
pome_[2*i]='\0';//標誌結束
題目2:輔音大寫字母
1. 本題PTA提交列表
2. 設計思路
定義i,num=0,a[80]
輸入字元串,接收到\n以\0結尾
for i=0 to a[i]='\0'
if a[i]是大寫字母
if a[i]不是A,E,I,O,U num++
輸出num
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明。
沒什麼大問題,題目沒看清
二、截圖本周題目集的PTA最後排名。
三、同學代碼結對互評
1.互評同學名稱
王宵瑩
2.我的代碼、互評同學代碼截圖
我的代碼
宵瑩的代碼
3.我和同學代碼不同在哪裡?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪裡出問題。
四、本周學習總結
1.你學會了什麼?
1.1指針變數如何定義(設計代碼可以用markdown代碼符號渲染)?
int *p1 *p2;
p1=&a;
p2=p1;
1.2 指針加法運算運用在哪種情況,2個指針變數能否相加?
指針+常數=常數*指針所指類型大小
指針相當於一個地址,兩個指針求和無意義。
1.3 指針不賦初值,直接使用,會出現什麼情況,請用DEVC驗證,並截圖展示?
- 指針的初始值必須是一個地址,決不允許賦予任何其他數據,通常是一個數據的地址或地址變數或空指針。未初始化的指針,它指向的記憶體的值是不可預知的,很多時候程式崩潰都因為指針未被初始化或指向了錯誤的地方。
1.4 課堂派上關於分離浮點數的整數部分和小數部分那題,請用DEVC驗證實現,併在此貼圖展示,同時說明哪句是指針變數做函數形參,函數實參應該怎麼表示。指針變數做函數形參有什麼用處?
#include<Stdio.h>
void splitfloat (float x, int *intpart,float *fracpart);
int main()
{
float x,fracpart;//定義拆分數,小數
int intpart;//定義整數
scanf("%f",&x);//輸入拆分數
splitfloat (x,&intpart,&fracpart);//調用函數
printf("該實數的整數部分為:%d\n",intpart);//輸出
printf("該實數的小數部分為:%f\n",fracpart);
return 0;
}
void splitfloat (float x, int *intpart,float *fracpart)
{
float k;
k=x-(int)x;
*intpart=(int)x;
*fracpart=k;
}
void splitfloat (float x, int *intpart,float *fracpart)
這句是指針變數做函數形參,函數實參為地址(指針變數)。
- 用指針變數作函數參數可以將函數外部的地址傳遞到函數內部,使得在函數內部可以操作函數外部的數據,並且這些數據不會隨著函數的結束而被銷毀。利用它也可以使函數返回多個值。並且像數組、字元串、動態分配的記憶體等都是一系列數據的集合,沒有辦法通過一個參數全部傳入函數內部,只能傳遞它們的指針,在函數內部通過指針來影響這些數據集合。
1.5 請把課本的冒泡排序的函數改成指針變數做形參格式,並把代碼寫在底下,註意用markdown語法渲染。
void bubble (int *p ,int n)
{
int i,j,t;
for(i=0;i<n;i++)
for(j=0;j<n-i;j++)
{
if(*p>*(p+1))
{
t=*p;
*p=*(p+1);
*(p+1)=t;
}
}
for(i=0;i<n;i++)
printf("%d",*(p+i));
}
1.6 如何定義一個指針變數指向數組,如何用指針變數表示數組元素?
int a[],*p;
p=a<=>p=&a[0];//指針變數指向數組第一個元素的地址
a[99]<=>*(p+99)<=>p[99]//三者等價
1.7 如何定義字元指針指向字元串?指針指向字元串後,初始位置在哪裡?
char *sp="point";
指針會指向該字元串的首字元
1.8 利用字元指針操作字元串,如設計函數實現字元串連接,請在此貼圖展示代碼。說明指針表示字元的方法好處是什麼?
void line(char *p1, char *p2)
{
while(*p1)
{
p1++;
}
while(*p2)
{
*p1 = *p2;
p1++;
p2++;
}
*p1='\0';
}
- 通過指針能實現所謂的“傳引用”而不是“傳值”,本質上節約了數據傳輸性能
2.本周你不會內容有什麼?
2.1 課堂派錯題羅列及如何訂正。
2.2 其他不會的?打算怎麼解決
3.數組上機考試小結
3.1 那題錯了,請羅列?
前兩個函數題沒做出來,剛開始看第一題沒什麼思路,就開始倒著寫,等寫到倒數第2題那個輸出字元間字元子串時,一直卡在那裡,後來打算先放下繼續做,等做到函數題時時間已經沒剩下多少了。