第二次作業(第二學期)


作業要求一 (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分)
表格:

折線圖:


免責聲明!

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



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