作業要求一 (20分)
完成下列編程題目,每次上完課都會增加2-3道題目,並將編程過程記錄在博客里,一次PTA作業任選一道題目給出設計思路、流程圖、源代碼和錯誤記錄,其他題目可只給出設計思路、源代碼和錯誤記錄:
1)C高級第一次PTA作業(1)
2)C高級第一次PTA作業(2)
3)C高級第一次PTA作業(3)
4)C高級第一次PTA作業(4)
作業要求二(65分)
題目6-7 刪除字符串中數字字符
1.設計思路(6分)
(1)主要描述題目算法(2分)。
第一步:將所給字符串的每個字符的值進行比較,看其是否在0到9內。
第二步:如果不在0到9內則輸入至另一字符數組,否則略過,比較下一字符。
第三步:將新數組的字符串復制到原數組。
(2)流程圖(4分)
2.實驗代碼(2分)
void delnum(char *s)
{
int i,j;
char p[80];
for(i=0,j=0;;j++)
{if(*(s+j)=='\0')
{break;
}
if((*(s+j)<'0')||(*(s+j)>'9'))
{
p[i]=*(s+j);
i++;
}
}
p[i]='\0';
strcpy(s,p);
}
3.本題調試過程碰到問題及解決辦法(4分)
無
題目6-8 統計子串在母串出現的次數
1.設計思路(6分)
(1)主要描述題目算法(2分)。
第一步:以每個字母為起點進行比較看其與其后的2個字符是否為asd。
第二步:如是,則count進行一次計數。
第三步:返回count的值。
(2)流程圖(4分)
2.實驗代碼(2分)
int fun(char *str,char *substr)
{
int i;
int count=0;
for(i=0;;i++)
{
if(str[i]=='\0')
{break;
}
if(str[i]=='a')
{
if(str[i+1]=='s')
{if(str[i+2]=='d')
{count++;
}
}
}
}
return count;
}
3.本題調試過程碰到問題及解決辦法(4分)
無
題目6-9 字符串中除首尾字符外的其余字符按降序排列
1.設計思路(6分)
(1)主要描述題目算法(2分)。
第一步:在略過第一個字符和最后一個字符的基礎上,利用選擇排序的方法。
第二步:從第二個字符開始,每一輪選出最大值放在最前面。
第三步:之后每次循環略過已排好的字符,從還未排序的第一個字符進行如上排序操作。
(2)流程圖(4分)
2.實驗代碼(2分)
int fun(char *s,int num)
{ char max,c;
int i,j,mark;
for(i=1;i<num-1;i++)
{max=*(s+i);
mark=i;
for(j=i;j<num-1;j++)
{
if(*(s+j)>max)
{ mark=j;
max=*(s+j);
}
}
c=max;
*(s+mark)=*(s+i);
*(s+i)=c;
}
}
3.本題調試過程碰到問題及解決辦法(4分)
無
題目7-1 輸出學生成績
1.設計思路(6分)
(1)主要描述題目算法(2分)。
第一步:輸入學生成績數,並依次輸出其成績。
第二步:進行求和運算,求平均值運算,並選出其最值。
第三步:輸出均值,最值。
(2)流程圖(4分)
2.實驗代碼(2分)
#include<stdio.h>
#include<stdlib.h>
int main()
{int *p;
int n;
int i;
double ave=0,max=0,min=0,sum=0;
scanf("%d",&n);
p=(int*)calloc(n,sizeof(int));
for(i=0;i<n;i++)
{scanf("%d",(p+i));
}
min=*(p+0);
max=*(p+0);
for(i=0;i<n;i++)
{sum=sum+*(p+i);
if(*(p+i)<min)
{min=*(p+i);
}
if(*(p+i)>max)
{max=*(p+i);
}
}
ave=sum/n*1.0;
printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",ave,max,min);
free(p);
return 0;
}
3.本題調試過程碰到問題及解決辦法(4分)
錯誤原因:忽略了int除以double乘1.0的括號導致錯誤
提交列表
題目7-1 計算職工工資
1.設計思路(6分)
(1)主要描述題目算法(2分)。
第一步:涉及輸入多種類型數據,故先定義結構體
第二步:輸入人數,依次輸入其各項數據,同時進行求和計算
第三步:按輸入順序 輸出其姓名 及數據
(2)流程圖(4分)
2.實驗代碼(2分)
#include<stdio.h>
struct human
{
char name[10];
float a;
float b;
float c;
};
int main()
{
int n;
int i;
scanf("%d",&n);
struct human s[n];
float sum[n];
for(i=0;i<n;i++)
{scanf("%s %f %f %f",s[i].name,&s[i].a,&s[i].b,&s[i].c);
sum[i]=s[i].a+s[i].b-s[i].c;
}
for(i=0;i<n;i++)
{
printf("%s %.2f\n",s[i].name,sum[i]);
}
return 0;
}
3.本題調試過程碰到問題及解決辦法(4分)
無
7-2 計算平均成績
1.設計思路(6分)
(1)主要描述題目算法(2分)。
第一步:涉及多個類型數據,定義結構體
第二步:輸入人數,並依次輸入各項數據,同時進行求和計算
第三步:求出均值,並將每組的great值與其比較,輸出比其小的姓名及數值。
(2)流程圖(4分)
2.實驗代碼(2分)
#include<stdio.h>
struct student
{
char num[5];
char name[10];
int great;
};
int main()
{
int n;
int i;
scanf("%d",&n);
struct student s[n];
float ave=0;
for(i=0;i<n;i++)
{scanf("%s %s %d",s[i].num,s[i].name,&s[i].great);
ave=ave+s[i].great;
}
ave=ave*1.0/n;
printf("%.2f\n",ave);
for(i=0;i<n;i++)
{
if(s[i].great<ave)
{printf("%s %.5s\n",s[i].name,s[i].num);
}
}
return 0;
}
3.本題調試過程碰到問題及解決辦法(4分)
無
提交列表
6-1 按等級統計學生成績
1.設計思路(6分)
(1)主要描述題目算法(2分)。
第一步:根據每個人分數,給低於60的計一次數。
第二步:根據每個人的分數所在層次給其grade賦值。
第三步:返回所計次數。
(2)流程圖(4分)
2.實驗代碼(2分)
int set_grade( struct student *p, int n )
{
int m=0;
int i=0;
for(i=0;i<n;i++)
{if((p+i)->score<60)
{m=m+1;
}
if((p+i)->score>=0)
{ (p+i)->grade='D';
}
if((p+i)->score>59)
{(p+i)->grade='C';
}
if((p+i)->score>69)
{(p+i)->grade='B';
}
if((p+i)->score>84)
{(p+i)->grade='A';
}
}
return m;
}
3.本題調試過程碰到問題及解決辦法(4分)
無
6-2 結構體數組按總分排序
1.設計思路(6分)
(1)主要描述題目算法(2分)。
第一步:根據每一個結構體內各數據求和。
第二步:根據其和的值按照選擇排序法對結構體數組各元素排序。
第三步:輸出結構體數組各元素。
(2)流程圖(4分)
2.實驗代碼(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,mark;
float max;
struct student t;
for(i=0;i<n;i++)
{ mark=i;
max=(p+i)->sum;
for(j=i;j<n;j++)
{
if((p+j)->sum>max)
{
max=(p+j)->sum;
mark=j;
}
}
t=*(p+i);
*(p+i)=*(p+mark);
*(p+mark)=t;
}
}
3.本題調試過程碰到問題及解決辦法(4分)
無
提交列表
要求三、學習總結和進度(15分)
1、總結兩周里所學的知識點有哪些學會了?(可記錄每道作業題目所用的知識點)哪些還沒有學會?
學會了:1.結構數組的使用
2.結構體作為函數參數
3.結構體的定義與初始化
2、將PTA作業的源代碼使用git提交到托管平台上,要求給出上傳成功截圖和你的git地址。
地址:https://git.coding.net/Donahue_Xu/The-Second-Homework2.git
截圖:
3、點評3個同學的本周作業(在作業中給出被點評同學博客的鏈接),並邀請3名同學點評你的作業,無點評作業(你的作業未被3人點評)/或者沒有回復同學或老師的點評都倒扣該題分數。(4分)
劉煒旗:http://www.cnblogs.com/ryo-/p/8746826.html
趙寅勝:http://www.cnblogs.com/2017023960ZYS/p/8653086.html
史澤文:http://www.cnblogs.com/shilcz/p/8696341.html
4、請用表格和折線圖呈現你本周(3/26 8:00~4/9 8:00)的代碼行數和所用時間、博客字數和所用時間(3分)
表格:
折線圖: