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為結構體變量


