C語言---字符數組


一、PTA實驗作業

題目1:7-2 統計一行文本的單詞個數

1. 本題PTA提交列表

2. 設計思路

定義循環變量i,j定義不為空格的字符數count,定義單詞數number,i,j,count,number賦初值0;
   定義字符數組a
	輸入字符數組a
	 遍歷數組
		每次進入循環,對count賦初值0
	fori=jtoa[i]=='\0'
		如果a[i]為空格   
		j=i+1
			跳出循環
		否則  
		    count++記錄非空格字符數
        end for
	如果count>=1
	number++記錄單詞個數
	如果a[i]=='\0',數組遍歷結束
	輸出單詞個數

3.代碼截圖

4.本題調試過程碰到問題及PTA提交列表情況說明。

沒有考慮好空格的問題,一開始使用的判斷方法是如果連續倆個數據,前一個是非空格,后一個是空格,就表示一個單詞。但是這種判斷就不適合末位是空格,單詞數會多一。還有就是出現連續空格如何跳過這些空格繼續數下去。最后發現利用一個循環可以解決多空格問題。通過判斷出的非空格字符來記錄單詞個數。

題目2:7-6 Jack cheng的煩惱2

1. 本題PTA提交列表

2. 設計思路

【考慮不完整】
定義字符數組a
  定義循環變量,括號數n
  定義變量flag,並賦初值0
  輸入n
  如果n不是偶數,一定不配對
		輸出False
  如果n是偶數
	for i=0 to i<n
		輸入字符元素
        end for
           for  i=0 to i<n
                flag=0;
            如果a[i]為(或{  a[n-i]對應
                flag=1
            end for   
          如果i為奇數
            for i=0 to i<=n/2
         	flag=0
    	       如果a[i]為(或{ a[i+1]為對應的)或}
    	       flag=1
           end for
    如果 flag==1
    	 輸出True
    如果flag==0
        輸出False

3.代碼截圖

4.本題調試過程碰到問題及PTA提交列表情況說明。

只考慮到像(){}或者(({}))這種配對排列情況,還有類似({}())這種樣子的就沒考慮到,找規律發現可以找(和{的配對,剩下沒有能配對左括號的就是配對錯誤了,但是還沒想好怎么寫代碼。
所以正確思路應該是:遍歷數組,找左括號的配對,配對成功就接着配下一對,如果最后有沒能配對的,這個字符串就括號配對錯誤

題目3:7-11 藏頭詩

1. 本題PTA提交列表

2. 設計思路

3.代碼截圖

4.本題調試過程碰到問題及PTA提交列表情況說明。

一開始直接輸出輸不出來,注意到題目中一個漢字倆個字節,將倆個元素賦給新數組中一個元素,實現輸出(借鑒了相關的代碼,如何實現一個漢字倆個字節)

二、截圖本周題目集的PTA最后排名

三、同學代碼結對互評

1.互評同學名稱 周炳輝

2.我的代碼、互評同學代碼截圖

我的代碼

周炳輝的代碼

3.我和同學代碼不同在哪里?有哪些各自優勢?你更喜歡哪種代碼風格?如果同學代碼有錯的也請幫忙指出來哪里出問題。

我將z值放在一個數組里,然后遍歷數組,找到與mo對應的z值,而炳輝直接把mo當做下標值,這樣少了一次循環,而且也好讀些。

PTA提交結果:

發現X沒大寫,改了還是不對。在炳輝大佬指點下,發現代碼有漏洞,因為每次輸入后,我都給flag賦0值。這樣的話,如果最后一組的身份證是正確的,我的flag沒改變,是0.就會執行flag==0這一語句,輸出全對。
解決辦法:增加了一個變量flag1,賦初值為1,只要身份證有誤,就執行flag1=0.判斷最后flag1,如果為1,輸出全對。

正確代碼:

四、本周學習總結

1.你學會了什么?

1.1指針變量如何定義

定義指針變量的一般形式: 類型名 *指針變量名
(1)必須是有效的數據類型:如int,float,char等
(2)指針變量名是指針變量的名稱,必須是一個合法標識符

1.2 指針加法運算運用在哪種情況,2個指針變量能否相加?

指針加法用在指針變量加一個常量,+n表示下移n個存儲單元,-n表示上移n個存儲單元。倆個指針變量相加就是地址相加,沒有什么意義

1.3 指針不賦初值,直接使用,會出現什么情況,請用DEVC驗證,並截圖展示?

會指向一個不確定的單元

1.4 課堂派上關於分離浮點數的整數部分和小數部分那題,請用DEVC驗證實現,並在此貼圖展示,同時說明哪句是指針變量做函數形參,函數實參應該怎么表示。指針變量做函數形參有什么用處?`#include<stdio.h>

void splitfloat(float x,int *intpart,float *fracpart);
int main(){
float x;
int intpart;
float fracpart;
scanf("%f",&x);//輸入實數
splitfloat( x,&intpart,&fracpart);//調用函數
printf("%d\n",intpart);
printf("%f",fracpart);
return 0;
}
void splitfloat(float x,int *intpart,float *fracpart){
*intpart=(int)x;//強制轉換,取整
*fracpart=x-*intpart;//小數部分
}

1.5 請把課本的冒泡排序的函數改成指針變量做形參格式,並把代碼寫在底下,注意用markdown語法渲染。

#include<stdio.h>
 void bubble (int a[],int n);
 int main(){
 	int n,a[8];
 	int *p;
 	p=a;
 	int i;
 	scanf("%d\n",&n);
 	for(i=0;i<n;i++){
 		scanf("%d",&a[i]);
 	}
 	bubble(a,n);
 	for(i=0;i<n;i++){
 		printf("%d",a[i]);
 	}
 	return 0;
 }
 void bubble(int a[],int n){
 	int i,j,t;
 	int *p=a;
 	int *pi,*pj,item;
 	for(i=1;i<n;i++){
 		for(j=0;j<n-i;j++){
 			pi=p+j;
                        p=p+j+1;j
 			if(*pi>*pj){
 			   item=*pi;
 			   *pi=*pj;
 			   *pj=item;
 			}
 		}
 	}
 }

1.6 如何定義一個指針變量指向數組,如何用指針變量表示數組元素?

int *p;
int a[80];
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",a[i]);

指針變量指向數組
(1)p=&a[0]
(2)p=a

用指針變量表示數組元素
(1)p=a+i
(2)p=&a[i]

1.7 如何定義字符指針指向字符串?指針指向字符串后,初始位置在哪里?

char *p;
char a[80];
int i,n;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%c",a[i]);

字符指針指向字符串
(1)p=&a[0]
(2)p=a

初始位置在字符串首地址

1.8 利用字符指針操作字符串,如設計函數實現字符串連接,請在此貼圖展示代碼。說明指針表示字符的方法好處是什么?

如果將某個變量的地址作為函數的實參,相應的形參是指針。通過改變指針常量的值,就改變了存儲單元中的內容,返回主調函數時,變量值也就改變了

2.本周你不會內容有什么?

2.1 課堂派錯題羅列及如何訂正。

循環結束后,指針p已經不再指向數組,而是未知的位置,指針指向內容不明確,輸出的會是隨機值
改正:在printf("\n")后加一句 p=a

a表示地址常量,常量不能使用自增符

2.2 其他不會的?打算怎么解決

刪除字符串中的子串,目前只會刪除一個字符還有計算字符串中子串個數。還不大有思路,項借大佬的代碼看看,再自個敲敲。幾種排序方法還是排的亂七八糟的,理論有了,實踐不夠吧。先理一遍偽代碼吧,再改成代碼。覺得這部分是考試重點,不能丟。

3.數組上機考試小結

3.1 那題錯了,請羅列?

6-1 數組循環右移
7-3 jmu-c-輸出字符間的字符子串
數組開始寫題就很慢了,尤其字符串學的太垃圾了,考試就試着寫了幾題,排序錯了還改好久改不出來

3.2 錯題如何訂正,為什么錯了?

6-1錯的很不應該,之前循環左移會,改成右移和調用函數就亂七八糟,輸出實現不了,改都不知道改哪。以為會這種方法的思路就會了,一操作全是問題,糟心
7-3遍歷數組,首先尋找起始字符,繼續向后找,如果找到終止字符,表示存在子串。如果存在子串,遍歷數組,把起始字符和終止字符以及之間的字符放在一個新的數組里,遍歷結束后,輸出這個子串。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM