C語言第九次博客作業---指針
一、PTA實驗作業
題目1.統計大於等於平均分人數
1. 本題PTA提交列表
2. 設計思路
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明
①第一次代碼驗證對後貼到pta上顯示答案錯誤。
②加兩個0分的成績,發現人數變多,平均分不變。
③嘗試改條件,發現答案更加離譜。
④在同學的幫助下循環條件修改,最後正確。
題目2.判斷回文字符串
1. 本題PTA提交列表
2. 設計思路
定義i,j為循環變量,n存放字符串長度,flag為是否回文的標誌 for i=0 to s[i]=‘\0‘ 字符串長度n++; end for for i=0,j=n-1 to i>j if 是回文字符串 flag=1; else flag=0;跳出循環; end for if flag為1 是回文字符串 else 不是回文字符串
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明
①初步代碼,答案錯誤。
②驗證發現問題。只要有一組字符相等,就有flag=1,因此判斷到中間如果發現不是回文字符串應該令flag=0。
題目3.使用函數實現字符串部分復制
1. 本題PTA提交列表
2. 設計思路
定義循環變量i;
for i=1 to m
開始的位置t++;
end for
while(*t)
字符復制到字符串s中;
t遞增;
結束符*s=‘\0‘;
3.代碼截圖
4.本題調試過程碰到問題及PTA提交列表情況說明
①尋找開始復制的位置時,循環裏的條件使用錯誤,導致輸出答案錯誤。
①把i=0改為i=1後正確。
二、截圖本周題目集的PTA最後排名。
PTA排名
PTA提交列表
三、閱讀代碼
1.刪除字符串中的子串
分析:這段代碼中采用了四種字符串操作函數:strcpy, strcat,strstr,strlen;利用strstr在字符串a中查找字符串b首次出現的地址,利用strcpy得到刪除b字符串後得到的後面的字符串賦值到數組c中,再利用strcat把字符串c連接到a使a成為包含c和a的結果串。循環以上步驟。
優點:巧妙地運用了字符串操作函數,使原本復雜的代碼變得較簡單。
2.字符串的冒泡排序
分析:通過strcmp函數比較前後兩個字符串,利用了strcpy函數的復制功能做到了字符串冒泡的效果,輸出掃描完第K遍後的中間結果序列。
優點:運用字符串操作函數來表現字符串冒泡的效果,比較巧妙。
四、本周學習總結
1.自己總結本周學習內容。
1.什麽是結構?結構與數組有什麽差別?
- 結構是C語言中一種新的構造數據類型,它能夠把有內在聯系的不同類型的數據統一成一個整體,使它們相互關聯;又是一個變量的集合,可以按照對基本數據類型的操作方法 單獨使用其成員變量。
- 結構與數組的比較:①都是構造類型,是多個變量的集合;②數組成員類型相同,結構成員類型不同。
2.結構類型的定義形式
2.1結構類型定義的一般形式
struct 結構名{
類型名 結構成員名 1 ;
類型名 結構成員名 2 ;
…
類型名 結構成員名 n ;
};
註:
①struct是定義結構類型的關鍵字。
②結構名是一個合法的C標識符。
③關鍵字和結構名組成結構類型名。
④大括號內的內容是結構所包括的結構成員,也叫結構分量。
⑤結構的定義以分號結束。
2.2結構的嵌套定義
struct address{ //定義地址結構
char city[10];
char street[20];
int code;
int zip;
};
struct nest_student{
int num;
char name[10];
struct address addr; //定義通信地址成員
int computer,english,math;
double average;
};
註:定義嵌套的結構類型時,必須先定義成員的結構類型,再定義主結構類型。
2.3.用typedef定義類型
方法一:先定義結構體類型,再使用typedef為之取一個別名。
struct student{ int num; char name[10]; struct address addr; int computer,english,math; double average; }; typedef struct student STU;
方法二:定義結構體類型的同時使用typedef為之取一個別名,並且不省略結構體標識名。
typedef struct student{ int num; char name[10]; struct address addr; int computer,english,math; double average; }STU;
方法三:定義結構體類型的同時使用typedef為之取一個別名,並且省略結構體標識名。
typedef struct { int num; char name[10]; struct address addr; int computer,english,math; double average; }STU;
3.結構變量的定義
1.單獨定義:先定義一個結構類型,再定義這種結構類型的變量。
struct 結構名{ 類型名 結構成員名 1 ; 類型名 結構成員名 2 ; … 類型名 結構成員名 n ; };
2.混合定義:在定義結構類型的同時定義結構變量。
struct 結構名{ 類型名 結構成員名 1 ; 類型名 結構成員名 2 ; … 類型名 結構成員名 n ; }結構變量名表;
3.無類型名定義:在定義結構變量時省略結構名。
struct { 類型名 結構成員名 1 ; 類型名 結構成員名 2 ; … 類型名 結構成員名 n ; }結構變量名表;
4.結構變量的使用
4.1.結構變量的成員的引用
- 格式:
結構變量名.結構成員名
例:
①strcpy(s1.name,"zhang");
②嵌套結構:nest_s1.add.zip=310015;//表示學生的通信地址的郵編
註:
①嵌套定義的結構變量中,每個成員按從左到右,從外到內的方式引用。
②結構成員成員運算符的優先級屬最高級別,所以一般情況下都是優先執行,即和一般運算符混合運算時,結構成員運算符優先。
4.2.結構變量的整體賦值
註:只有相同結構類型的變量之間才可以直接賦值。
例:s2=s1;
等效於
s2.num=s1.sum;
strcpy(s2.name,s1.name);//數組
s2.math=s1.math;
s2.english=s1.english;
s2.computer=s1.computer;
s2.average=s1.average;
4.3.結構變量作為函數的參數特點
- 特點:可以傳遞多個數據且參數形式較簡單。但是,對於成員較多的大型結構,參數傳遞時所進行的結構數據復制使得效率較低。、
5.結構數組操作
- 結構數組的每個數組元素都是一個結構類型的數據。
- 定義:
struct student students[50];
- 初始化:
struct student students[50]={{101,"zhang",76,85,78},{102,"wang",83,92,86} };
- 引用:
結構數組名 [下標].結構成員名
例:字符型數組:strcpy(students[i].name,"zhang");
6.結構指針概念
- 結構指針就是指向結構類型變量的指針。
結構指針的值實際上時結構變量的首地址,即第一個成員的地址。
struct student s1={101;"zhang",78,87,85},*p; p=&s1;
訪問結構成員
(1)用*p訪問結構成員
(*p).num=101;
註:括號不能少。因為“.”優先級高於“*”,若沒有括號,*p.num等價於*(p.num),含義發生變化,會產生錯誤。
(2)用指向運算符->訪問指針指向的結構成員
p->num=101;
註:在使用結構指針訪問結構成員時,通常使用指向運算符->。
2.羅列本周一些錯題。
應該在sum+=*s後加上‘0’才能將字符串中的數字字符轉換成對應數值
圖中圈出來的一處表示的應該是n所指向的內容遞增,而不是地址自增,應該是(*n)++
C語言第九次博客作業---指針