1. 程式人生 > >2018第二次作業

2018第二次作業

tdi 刪除 sco turn define del odin pri 數組

一.PTA

作業1:技術分享圖片

1.刪除字符串中數字字符

1).設計思路

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

第一步:定義主函數
第二步:定義數組,用do while語句判斷字符是否為數字,不是則s[j]=s[i];j++;循環後將最後一位賦值‘\0’

(2).流程圖

技術分享圖片

2).實驗代碼

、
#include<stdio.h>


void delnum(char *s)
{
int i=0,j=0;  
do

{  

    if(!(s[i]>=‘0‘&&s[i]<=‘9‘))
    {  
       s[j]=s[i];
       j++;
        
              
        
       
    }  
    i++;  
}  
while(s[i]!=‘\0‘);
s[j]=‘\0‘;
}  
、

3).遇到的問題及解決方法

開始出現思路錯誤,換一種思路後沒有遇到問題。

2. 統計子串在母串出現的次數

1).設計思路

主要描述題目算法

第一步:定義主函數
第二步:定義指針,循環變量i和總數num,當字符不為空字符時,如果字符為‘a‘,‘s‘,‘d‘的一種,則num++,統計出num的值,最後返回num

2).實驗代碼

、
#include<stdio.h>

int fun(char *str,char *substr)
{
int i=0,num=0;

while(*(str+i)!=‘\0‘)
{
    if(*(str+i)==‘a‘&&*(str+i+1)==‘s‘&&*(str+i+2)==‘d‘)
    {
        num++;
    }
    i++;
}
return num;

} 

3).遇到的問題及解決方法

本題沒有問題。

3.字符串中除首尾字符外的其余字符按降序排列

1).設計思路

主要描述題目算法

第一步:定義主函數
第二步:定義指針,循環變量i,j,置換字符temp,用for循環判斷兩個字符數值大小,將數值大的字符置換至前面,再用一個for循環排除首末位,輸出字符串。

2).實驗代碼

、
#include <stdio.h>


int fun(char *s,int num)
{
int i,j;
char temp;
for(i=0;i<num;i++)
   for(j=1;j<num-2;j++)
   {
    if(s[j]<s[j+1])
   {temp=s[j]; s[j]=s[j+1]; s[j+1]=temp;}
}    
}
、

3).遇到的問題及解決方法

在第二個for循環去掉首末位時出現幾次錯誤,嘗試幾次後錯誤排除。

4.輸出學生成績

1).設計思路

主要描述題目算法

第一步:定義變量,輸入學生人數
第二步:for循環判斷成績的大小,得出最大最小值和總和
第三步:輸出最高成績,最低成績,平均成績

2).實驗代碼

、
#include<stdio.h> 
int main()
{
int n,i;
float max,min=200,sum=0,cj;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%f ",&cj);
if(cj>max)
{
    max=cj;
}
if(cj<min)
{
    min=cj;
}
sum=sum+cj;
}
printf("average = %.2f\n",sum/n);
printf("max = %.2f\n",max);
printf("min = %.2f",min);
return 0;
}
、

作業2:技術分享圖片

5.計算職工工資

1).設計思路

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

第一步:定義結構體,數組,變量
第二步:輸入人數,引用結構體
第三步:用for循環輸入數據,輸出結果

(2).流程圖

技術分享圖片

2).實驗代碼

、
#include<stdio.h>
struct work
{
char name[10];
float jiben;
float fudong;
float zhichu;
float sum;
};
int main()
{
int n,i;
scanf("%d",&n);
struct work a[n];
for(i=0;i<n;i++)
{
    scanf("%s %f %f %f",&a[i].name,&a[i].jiben,&a[i].fudong,&a[i].zhichu);
    a[i].sum=(a[i].jiben+a[i].fudong)-a[i].zhichu;
    printf("%s %.2f\n",a[i].name,a[i].sum);
}


}
、

3).遇到的問題及解決方法

本題沒有問題。

6.計算平均成績

1).設計思路

主要描述題目算法

第一步:定義結構體,數組,變量
第二步:輸入人數,引用結構體
第三步:for循環輸入數據,計算平均成績並輸出,另一個for循環比較成績與平均數成績的大小,如果成績小於平均成績則輸出姓名學號

2).實驗代碼

、
#include<stdio.h>
struct student
{
char xuehao[6];
char name[10];


int grade;
};
int main()
{
int n,i,sum=0;
float average;
scanf("%d",&n);
struct student a[n];
for(i=0;i<n;i++)
{
    scanf("%s %s %d",a[i].xuehao,a[i].name,&a[i].grade);
    sum=sum+a[i].grade;
    average=1.0*(sum/n);
}
    
    printf("%.2f\n",average);
    for(i=0;i<n;i++)
    {
    if(a[i].grade<average)
    {
        printf("%s %s\n",a[i].name,a[i].xuehao);
        }
    }
}
、

3).遇到的問題及解決方法

開始將學號的字符串定義為5位導致無法結束字符串,修改位數後輸出正常。

作業3:技術分享圖片

7.按等級統計學生成績

1).設計思路

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

第一步:觀察主函數定義
第二步:定義循環變量,不及格人數,for循環判斷是否不及格,不及格則num++,另一個for循環判斷分數等級

(2).流程圖

技術分享圖片

2).實驗代碼

、
#include <stdio.h>
#define MAXN 10


int set_grade( struct student *p, int n )
{
int j=0,num=0;
for(j=0;j<n;j++)
{
if(p[j].score<60)
{
    num++;
}
}
for(j=0;j<n;j++)
{
if((p[j].score)>=85&&(p[j].score)<=100)
{
    (p[j].grade)=‘A‘;
}else if((p[j].score)>=70&&(p[j].score)<=84)
{
    (p[j].grade)=‘B‘;
}else if((p[j].score)>=60&&(p[j].score)<=69)
{
    (p[j].grade)=‘C‘;
}else if((p[j].score)>=0&&(p[j].score)<=59)
{
    (p[j].grade)=‘D‘;
}
}
return num;
 } 

3).遇到的問題及解決方法

本題沒有問題。

8.結構體數組按總分排序

1).設計思路

主要描述題目算法
第一步:觀察主函數定義
第二步:第一個函數for循環求出分數總和,第二個函數for循環比較兩人分數總和,分數高的置換到前面。

2).實驗代碼

、

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

}
、

3).遇到的問題及解決方法

第二個函數的for循環j的初始值最初出現錯誤,修改後正確。

二.學習總結

1.這兩周學習了指針及結構,主要學習了結構數組,結構指針等知識,在結構指針方面須加強。

2.git地址:https://coding.net/u/q807443119/p/zuoye/git/tree/master/?public=true

技術分享圖片

3.點評

4.學習進度

技術分享圖片

2018第二次作業