第二次作業


題目6-7刪除字符串中數字字符
1.設計思路
(1)本次題目的算法
第一步:閱讀題目 理解主函數與函數聲明
第二步:定義調用函數delnum,定義整形變量i,j
第三步:定義指針s,通過s,在函數for和函數if中的應用
第四步:通過
(s+j)=‘\0’,返回值
(2)流程圖

2.實驗代碼

    {
		    int i,j=0;
		    for(i=0;*(s+i)!='\0';i++)
		    {
			    if(*(s+i)>='0'&&*(s+i)<='9')
			    {
			    }else
			    {
				    *(s+j)=*(s+i);
				    j++;
			    }
		    }
		    *(s+j)='\0';
	    }```
3.調試過程碰到問題及解決辦法
   錯誤信息1:*s出錯
       錯誤原因:調用函數指針使用出錯
       改正方法:多次編譯
   錯誤信息2:‘\0’
       錯誤原因:*(s+j)='\0','\0'沒加‘’
       改正方法:觀看錯誤提示后改正
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234902994-1868603066.png)



題目6-8統計子串在母串出現的次數
1.設計思路
   (1)本次題目的算法
        第一步:閱讀題目 理解主函數與函數聲明
        第二步:定義函數fun(),在fun()中*star,*substr,i,count
        第三步:使用for函數和函數if,在*(str+i)!='\0'的范圍內,如果*(str+i)==*(substr),*(str+i+1)==*(substr+1),*(str+i+2)==*(substr+2),所以count++
        第四步:回歸count
   (2)流程圖
        ![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083156288-998874975.png)
2.實驗代碼
```int fun(char *str,char *substr)
	{
		int i,count=0;
		for(i=0;*(str+i)!='\0';i++)
		{
			if(*(str+i)==*(substr))
			{
				if(*(str+i+1)==*(substr+1))
				{
					if(*(str+i+2)==*(substr+2))
					{
						count++;
					}
				}
			}
		}
		return count;
	}```
3.調試過程碰到問題及解決辦法
   錯誤信息1:count出錯
       錯誤原因:count返回的值出錯,編譯出現問題
       改正方法:將{}括號重新梳理對齊,編譯成功
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234936669-2056473653.png)



題目6-9字符串中除首尾字符外的其余字符按降序排列
1.設計思路
   (1)本次題目的算法
        第一步:閱讀題目 理解主函數與函數聲明
        第二步:定義調用函數fun(),定義*s,整形變量sum,I,j,k,temp
        第三步:在for循環中,在i<num-2范圍內循環j<num-1,int)(*(s+k))<(int)(*(s+j))得k=j,如果k!=i,則temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp來互換改變順序
        第四步:輸出排列好的字符串
   (2)流程圖 
   ![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083223939-199648699.png)
2.實驗代碼
```int fun(char *s,int num)
 	{
 		int i,j,k,temp;
 		for(i=1;i<num-2;i++)
 		{
 			k=i;
 			for(j=i+1;j<num-1;j++)
 			{
 				if((int)(*(s+k))<(int)(*(s+j)))
 				{
 					k=j;
				}
			}
			if(k!=i)
			{
		 	     temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp;
		 	}
	  }
		 return 0;
	}```
3.調試過程碰到問題及解決辦法
   錯誤信息1:代碼錯誤
       錯誤原因:排序的代碼打印錯誤
       改正方法:temp=*(s+i);*(s+i)=*(s+k);*(s+k)=temp,深刻理解排序代碼后,改正
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234948568-847437345.png)



題目7-1輸出學生成績
1.設計思路
   (1)本次題目的算法
        第一步:閱讀題目 理解主函數與函數聲明
        第二步:定義整形變量i,n,定義單精度浮點型變量sum=0,average,max,min,輸入n,對*p使用malloc函數
        第三步:使用for函數,輸入n個數據,得到sum,使用for與if函數找出最大數據和最小數據
        第四步:輸出平均值,最高成績,最低成績
   (2)流程圖
        
2.實驗代碼
```#include <stdio.h>
 #include <stdlib.h>
int main()
{
	int i,n;
	float sum=0,average,max,min;
	scanf("%d",&n);
	float *p=(float *)malloc(n);
	for(i=0;i<n;i++)
	{
		scanf("%f",(p+i));
		sum+=*(p+i);
	}
	min=*(p+0);max=*(p+0);
	for(i=0;i<n;i++)
	{
		if(min>*(p+i))
		{
			min=*(p+i);
		}
		if(max<*(p+i))
		{
			max=*(p+i);
		}
	}
	printf("average = %.2f\n",sum/n*1.0);
	printf("max = %.2f\n",max);
	printf("min = %.2f\n",min);
	return 0;
}```
3.調試過程碰到問題及解決辦法
   錯誤信息1:無
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408234959353-1112028153.png)



題目7-1計算職工工資
1.設計思路
   (1)本次題目的算法
        第一步:閱讀題目 理解主函數與函數聲明
        第二步:定義一個結構體變量wage,在其中定義name,actual_wage,basic_wage,floating_wage,expenditure,
        第三步:在主函數中定義整形變量N,i,利用for函數,引用結構體,計算
        第四步:輸出
   (2)流程圖
        ![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083352746-442209476.png)
2.實驗代碼
```#include<stdio.h>
 #include<stdlib.h>
struct wage
{
  int num;
  char name[10];
  float actual_wage;
  float basic_wage;
  float floating_wage;
  float expenditure;
};
int main()
{
  int N,i;
  scanf("%d",&N);
  struct wage wage[N];
  for(i=0;i<N;i++)
  {
    scanf("%s %f %f %f",wage[i].name,&wage[i].basic_wage,&wage[i].floating_wage,&wage[i].expenditure);
    wage[i].actual_wage=wage[i].basic_wage+wage[i].floating_wage-wage[i].expenditure*1.0;
  }
  for(i=0;i<N;i++)
  {
    printf("%s %.2f\n",wage[i].name,wage[i].actual_wage);
  }
  return 0;
}```
3.調試過程碰到問題及解決辦法
   錯誤信息1:for函數
       錯誤原因:for(i=1;i<=N;i++)
       改正方法:for(i=0;i<N;i++)
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408235008808-928874077.png)



題目7-2 計算平均成績
1.設計思路
   (1)本次題目的算法
        第一步:閱讀題目 理解主函數與函數聲明
        第二步:定義一個結構體變量student,在其中定義student_id,name,grade
        第三步:在主函數中定義整形變量N,i,sum,浮點型變量average,多次利用for和if函數,引用結構體student,計算
        第四步:輸出
   (2)流程圖
        ![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180406083434681-1233859386.png)
2.實驗代碼
```#include<stdio.h>
 #include<stdlib.h>
struct student
{
  int num;
  char student_id[6];
  char name[11];
  int grade;
};
int main()
{
  int N,i,sum=0;
  float average=0;
  scanf("%d",&N);
  struct student student[N];
  if(N>0&&N<=10)
  {
    for(i=0;i<N;i++)
    {
      scanf("%s %s %d",student[i].student_id,student[i].name,&student[i].grade);
      sum=sum+student[i].grade;
    }
    average=sum*1.0/N;
    printf("%.2f\n",average);
    for(i=0;i<N;i++)
    {
      if(average>student[i].grade)
      {
        printf("%s %s\n",student[i].name,student[i].student_id);
      }
    }
  }
  return 0;
}```
3.調試過程碰到問題及解決辦法
   錯誤信息1:數組
       錯誤原因:student_id[5],name[10]
       改正方法:student_id[6],name[11]
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180408235018093-1985472171.png)


學習總結和進度
1.學會的知識點
   指針和排序方法
   for函數的使用
   結構體的應用
2.未完全掌握的知識點
   結構體的使用還是不太明確
3.學習進度表格和折線圖
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180409001239331-65015124.png)
![](https://images2018.cnblogs.com/blog/1341589/201804/1341589-20180409001245376-683786166.png)


免責聲明!

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



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