2018第二次作業
阿新 • • 發佈:2018-04-09
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第二次作業