第二次做業

PTA第二次做業
C高級第二次做業(1)
第一題:刪除字符串中數字字符
1 設計思路
(1)主要描述題目算法
第一步:讀清題目,看清楚要求
第二步:看出函數中的實參和形參
第三步:定義一個指針變量p,對s中的字符進行遍歷。
第四步:若s[]中的字符不在‘0’到‘9’中,則將字符儲存在p[]中。算法

(2)流程圖數組

(3)代碼函數

void delnum(char *s)
{
  char *p=s;
  int i;
  for(i=0;p[i]!= '\0';i++)
  {
    if((p[i]<'0') ||( p[i]>'9'))
    {
      *s=p[i]; 
      s++;
  }
  
}
*s='\0';

(4)本題調試過程碰到問題及解決辦法學習

無錯誤.net

第二題:統計子串在母串出現的次數設計

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

第一步:閱讀題目並瞭解函數及其定義
第二步:找到對應函數中的實參和形參並寫出函數接口。
第三步:遍歷一次母串,把母串的遍歷的每個字符都與子串的第一個字符比較,假如同樣的話這時候母串和字串開始同時遍歷。
第四步:當字符串遍歷到‘0'的時候,進行num++;調試

(2)流程圖
code

(3)代碼orm

int fun(char *str,char *substr)
{
  int i;
int a=0;
for(i=0;str[i]!='\0';i++){
  if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])
  a++;
}
return a;
}

(4)本題調試過程碰到問題及解決辦法
答案錯誤
緣由是字符串結束時須要加上'\0'

第三題:字符串中除首尾字符外的其他字符按降序排列

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

第一步:閱讀題目並瞭解函數及其定義。

第二步:找到字符串中首尾字符串的位置

第三步:而後把中間的字符降序排列

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

(3)本題調試過程碰到問題及解決辦法
循環時條件設定錯誤
把num-1改爲num-2

第四題:輸出學生成績

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

第一步:閱讀題目並瞭解函數及其定義。

第二步:先定義數組和浮點型的sum,average,max,min

第三步:而後使用for循環算出sum而後輸出average,最後找出max,min

int fun(char *str,char *substr)
{
  int i;
int a=0;
for(i=0;str[i]!='\0';i++){
  if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])
  a++;
}
return a;
}

(3)本題調試過程碰到問題及解決辦法

C高級第二次做業(2)
第一題:計算職工工資

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

第一步:定義結構體salary,裏面的元素分別爲real name basic change disbursement real
第二步:而後把定義結構體a[n]使用for循環輸入
第三步:用for循環計算並輸出代碼

#include <stdio.h>
#include <stdlib.h>
struct wage{
    char name[10];
    float base_pay;
    float floating_wage;
    float expend;
    float net_payroll;
}; 
int main()
{
    int N,i;
    scanf("%d",&N);
    struct wage salary[N];
    for(i=0;i<N;i++){
        scanf("%s %f %f %f",salary[i].name,&salary[i].base_pay,&salary[i].floating_wage,&salary[i].expend);
        salary[i].net_payroll=salary[i].base_pay+salary[i].floating_wage-salary[i].expend*1.0;
    }
    for(i=0;i<N;i++){
        printf("%s %.2f\n",salary[i].name,salary[i].net_payroll);
    }
    return 0;
}

(3)本題調試過程碰到問題及解決辦法

第二題:計算平均成績

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

第一步:閱讀題目並瞭解函數及其定義。

第二步:找到對應函數中的實參和形參。

第三步:

(2)流程圖

(3)代碼

#include <stdio.h>
#include <stdlib.h>
struct information{
    char num[6];
    char name[11];
    int grade;
}; 
int main()
{
    int i,N;
    float average=0;
    int sum=0;
    scanf("%d",&N);
    struct information massage[N];
    if(N>0&&N<=10){
    for(i=0;i<N;i++){
        scanf("%s %s %d",massage[i].num,massage[i].name,&massage[i].grade);
        sum=sum+massage[i].grade;
    }
    average=sum*1.0/N;
    printf("%.2f\n",average);
    for(i=0;i<N;i++){
        if(average>massage[i].grade){
            printf("%s %s\n",massage[i].name,massage[i].num);
        }
    }
    }
    return 0;
}

(4)本題調試過程碰到問題及解決辦法

C高級第二次做業(3)
第一題:按等級統計學生成績

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

第一步:閱讀題目並瞭解調用函數函數及其定義。

第二步:把count,i初始爲0

第三步:而後設置分數在85-100以內爲A,70-84以內爲B,60-69以內爲C,0-59以內爲D。

(2)流程圖

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

(4)本題調試過程碰到問題及解決辦法

a,b,c,d缺乏單引號加上單引號

第二題:結構體數組按總分排序

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

第一步:定義一個函數,而後求出三個成績的和。
第二步:定義一個結構t
第三步:用選擇排序比出相鄰兩個數的大小而後調換位置,用函數t執行

(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;
    struct student t;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1;j++)
        {
            if(p[j].sum<p[j+1].sum)
            {
                t=p[j];
                p[j]=p[j+1];
                p[j+1]=t;
            }
        }
    }
}

(3)本題調試過程碰到問題及解決辦法
循環時條件設置錯誤
j<n-1等於j<=n

學習進度和總結 一、最近學習的字符串和指針沒弄太懂,

相關文章
相關標籤/搜索