第二次作業


pta第二次作業(1)題目6-7 刪除字符串中數字字符

1.設計思路

(1)主要描述題目算法

第一步:通讀題意,仔細理解
第二步:定義 i,j,指針變量b;
第三步:利用for循環遍歷數組,直到出現空格為止
第四步:判斷如果
(s+i)是滿足條件的就將該值賦給(b+j),直到(b+j)='\0'結束

(2)流程圖

2.實驗代碼

void delnum(char *s)
{
    int i,j=0;
    char *b=s;
    for(i=0;*(s+i)!='\0';i++){
	    if(*(s+i)<'0'||*(s+i)>'9'){
         *(b+j)=*(s+i);
         j++;
     }
    }
	    *(b+j)='\0';
}

3.錯誤及解決辦法

錯誤信息:沒有char b=s,因為題目最中返回的還是(s+i)
改正方法:初始將*b指向s

題目pta第二次作業(1)6-8 統計子串在母串出現的次數

1.設計思路

(1)主要描述題目算法

第一步:通讀題目,理解題意
第二步:定義i,j=0,count;
第三步:利用for循環遍歷數組,直到出現回車換行為止,如果str[i]substr[j]&&str[i+1]substr[j+1]&&str[i+2]==substr[j+2],則計數+1
第四步:返回count

(2)流程圖

2.實驗代碼

int fun(char *str,char *substr)
{
  int i,j=0,count=0;
for(i=0;str[i]!='\0';i++){
    if(str[i]==substr[j]&&str[i+1]==substr[j+1]&&str[i+2]==substr[j+2])
    count++; 
}
return count; 
}

3.錯誤信息及改正方法

錯誤1:多加了一個關於j的for循環
改正:去掉這個for循環 ,因為j是有范圍的
錯誤2:沒有返回count
改正:返回

6-9 字符串中除首尾字符外的其余字符按降序排列

1.設計思路

(1)主要描述題目算法

第一步:通讀題目,理解題意
第二步:調用函數,定義整型i,j,t
第三步:利用for循環遍歷數組,除去第一個和最后一個數

2.實驗代碼

int fun(char *s,int num)
{
    int i,j,t;
    for(i=1;i<num-1;i++)
    {
        for(j=num-2;j>i;j--)
        {
            if(*(s+j)>*(s+j-1))
            {
                t=*(s+j);*(s+j)=*(s+j-1);*(s+j-1)=t;
         }
        }
    }
}

3.錯誤信息

沒有錯誤

7-1 輸出學生成績

1.設計思路

(1).主要描述基本算法

第一步:通讀題目,理解題意
第二步:定義整型i,n,p,float型 average,max,min,sum,讀入n
第三步:動態分配數組
第四步:將
p分別賦給最大值,最小值
第五步:利用for循環遍歷數組,讀入p+i,進行判斷,找到數組中的最大值與最小值
第六步:輸出平均值和最值,釋放

2.實驗代碼

#include <stdio.h>
#include <stdlib.h>
int main()
{
   int n,i=0,*p;
   float average,max,min,sum=0;
  scanf("%d",&n);
  if((p=(int*)calloc(n,sizeof(int)))==NULL){
    printf("Not able to allocate memory.\n");
    exit(1);
  }
  for(i=0;i<n;i++)
  {
    scanf("%d",p+i);
    sum=sum+*(p+i);
  }
  max=*p;
  min=*p;
  for(i=0;i<n;i++)
  {
    if(max<*(p+i))
    {
  	    max=*(p+i);
    }
    if(min>*(p+i))
    {
	    min=*(p+i);
    }	
  }
  printf("average = %.2f\n",sum*1.0/n);
  printf("max = %.2f\n",max);
  printf("min = %.2f\n",min);
  free(p);
}

3.錯誤信息及改正方法

錯誤信息:沒有錯誤

pta第二次作業(2)7-1 計算職工工資

1.設計思路

(1)主要描述題目算法

第一步:通讀題目,理解題意
第二步:定義一個結構體變量student ,里面定義char name[11],double c1,double c2,double c3
第三步:引用這個結構體,定義一個較大的數據1000,定義整型i,n,double 型p來表表示最終的工資,讀入一個整數n
第四步:利用for循環遍歷數組,讀入姓名和c1,c2,c3,用p表示出最終基本工資的計算結果,輸出這個結果,並使p重新歸零

(2)流程圖

2.實驗代碼

#include <stdio.h>
struct student {
  char name[11];
 double c1;
double c2;
 double c3;
};
int main()
{
 struct student s[1000];
 int n,i;
 double  p;
 scanf("%d\n",&n);
 for(i=0;i<n;i++){
  scanf("%s %lf %lf %lf",s[i].name,&s[i].c1,&s[i].c2,&s[i].c3);
  p=s[i].c1+s[i].c2-s[i].c3;
  printf ("%s %.2lf\n",s[i].name,p); 
  p=0;
 }

 return 0;
}

3.錯誤及解決辦法

錯誤信息:沒有錯誤

pta第二次作業(2)7-2 計算平均成績

1.設計思路

(1)主要描述題目算法

第一步:通讀全文,理解題意
第二步:定義一個結構體student里面包括的定義char num[6],char name[11],float grade
第三步:定義整型i,n,利用for循環遍歷數組,輸入結構體里的學號,姓名,成績,並計算平均值並輸出
第四步:利用for循環進行對比將小於平均值的信息輸出

2.實驗代碼

#include <stdio.h>
struct student {
    char num[6];
    char name[11];
    float grade;
};
int main()
{
    struct student s[1000];
    int N,i;
    float grade;
    float average=0;
     scanf("%d\n",&N);
    for(i=0;i<N;i++){
	   scanf("%s %s %f",s[i].num,s[i].name,&s[i].grade);
	   average=average+s[i].grade;
    }
    average=average/N*1.0;
    printf("%.2f\n",average);
    for(i=0;i<N;i++){
	    if(s[i].grade<average){
		    printf("%s %s\n",s[i].name,s[i].num);
	    }
    }

 }

3.錯誤信息及改正

錯誤信息:

改正方法:num是字符數組,用char定義,s[i].name即表示首地址嗎,不用加&,注意字符數組里要包括一個\0結束符,多定義一個

pta第二次作業(3)6-1 按等級統計學生成績

1.設計思路

(1).主要描述題目算法

第一步:通讀題目,找到需要定義的變量,因為需要記錄不及格人數故需要定義變量count,需要通過for循環找到不及格的人,所以定義變量i來遍歷數組
第二步:利用if語句判斷等級,進行划分
第三步:返回所求的變量

(2).流程圖

2.實驗代碼

int set_grade( struct student *p, int n ){
    int count = 0, i;
    for(i = 0;i<n;i++,p++){
	    if(p->score<60){
		    p->grade = 'D';
		    count++;
	    }
	    else if((p->score<70)&&(p->score>=60)){
		    p->grade = 'C';
	    }
	    else if((p->score<85)&&(p->score>=70)){
		    p->grade = 'B';
	    }
	    else{
		    p->grade = 'A';
	    }
    }
    return count;
}

3.錯誤及改正方法

錯誤一:
改正方法:指針沒有下移需要下移指針

pta第二次作業(3)6-2 結構體數組按總分排序

1.設計思路

(1).主要描述題目算法

第一步:通讀題意,先調用一個計算總分函數,需要利用for循環來遍歷數組,求出每個人的總分,所以定義變量i
第二步:調用第二個函數來排序,排序思路冒泡排序法

2.實驗代碼

void calc(struct student *p,int n)
{
   int i;
   for(i=0;i<n;i++){
	    p->sum=p->score[0]+p->score[1]+p->score[2];
         p++;
}
  }
void sort(struct student *p,int n)
{
    struct student t;
    int i,j;
    for(i=0;i<n-1;i++){
	    for(j=0;j<n-1-i;j++){
	    if((p+j)->sum<(p+j+1)->sum){
		    t=*(p+j+1);*(p+j+1)=*(p+j);*(p+j)=t; 
	    }
    }
    }
} 

3.錯誤信息及改正方法

錯誤信息1:
改正方法:定義t為int型,它是不能和結構體類型進行交換的,應該定義為結構體類型
錯誤信息2:又定義了sum[]數組
改正方法:取消定義,根據指針的移動,變量也會移動,不需要通過再次定義數組來遍歷

1.總結知識點

1>字符串的使用,指針與排序法的組合
2>結構體變量的應用
3>通過指針下移變量,函數與指針的組合,交換結構體里的變量要定義t為結構體變量

2.代碼托管

托管界面

3.點評作業

馬鈺娟
李伍壹
申怡苗
楊金坤
4.本周學習情況


免責聲明!

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



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