第一題:
删除字元串中數字字元
設計思路:
1:看題目:主函數與函數聲明,知道它要你幹什麼
2:了解與分析:在main中,給你一個字元串,要你删除指針 s所指的字元串中的所有數字字元
3:解答:第一步:定義i=0,n,j=0,i位a[]下标,j為s[]下标,調用函數strlen(s),n用于記錄字元串的長度
第二步:定義一個字元數組a[81],調用函數strcpy(a,s)
第三步:利用一個for循環,如果(a[i]>'9'或a[i]<'0'),則s[j]=a[i]; j++;
第四步:循環結束後,s[j]=‘\0’,表示字元串結束
流程圖:

實驗代碼:
#include<string.h>
void delnum(char *s)
{
int i=0,n,j=0;
n=strlen(s);
char a[81];
strcpy(a,s);
for(i=0;i<n;i++)
{
if(a[i]<'0'||a[i]>'9')
{
s[j]=a[i];
j++;
}
}
s[j]='\0';
}
錯誤資訊:
a[i]<'0'&&a[i]>'9'
改正方式:
a[i]<'0'||a[i]>'9'
第二題:
統計子串在母串出現的次數
1:看題目:主函數與函數聲明,知道它要你幹什麼
2:了解與分析:在main中,給你兩個字元串,一個是長度為3的字元串,要你統計一個長度為3的字元串在另一個字元串中出現的次數
3:解答:第一步:定義i=0,n,k=0;i為str[]的下标,k統計substr[]在str[]中出現的次數
第二步:調用函數strlen( str),利用n用于記錄字元串的長度
第三步:利用for函數,如果(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])成立,k++
第四步:傳回k
流程圖:
int fun(char *str,char *substr)
{
int i=0,n,k=0;
n=strlen( str);
for(i=0;i<n;i++)
{
if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])
k++;
}
return k;
}
無
第三題:
字元串中除首尾字元外的其餘字元按降序排列
1:看題目:主函數與函數聲明,知道它要你幹什麼
2:了解與分析:在main中,給你一個字元串,要你對字元串中除首、尾字元外的其餘字元按降序排列
3:解答:第一步:定義i=1,k,j=1,n=1;在冒泡循環中,i用于外層for循環,表示跑了第幾輪了,j用于内層for循環,為s[]的下标,k為交換的中間量
第二步:在定義一個char max=s[1];暫時記錄最大值
第三步:利用冒泡排序法,讓字元串中除首尾字元外的其餘字元按降序排列
int fun(char *s,int num)
{
int i,k,j,n=1;
char max=s[1];
for(i=1;i<num-1;i++)
{
for(j=1;j<num-1-i;j++)
{
if(s[j]<s[j+1])
{
k=s[j];s[j]=s[j+1];s[j+1]=k;
}
}
}
}
int max=s[1];
char max=s[1];
第四題:
輸出學生成績
1:看題目:主函數,知道它要你幹什麼
2:了解與分析:給你N個學生的成績,讓你統計并輸出學生的平均成績、最高成績和最低成績
3:解答:第一步:定義整形n,i,*p;其中:n為學生個數,i用于表示*(p+i),*p表示p為指針
第二步:定義浮點型average,max=0,min=0,sum=0;分别表示平均成績、最高成績、最低成績、所有成績和
第三步:輸入n,再利用動态記憶體配置設定
第四步:輸入n個成績,并将第一個元素指派給max,min,再求和、找最大值及最小值,最後求average
第五步:輸出學生的平均成績、最高成績和最低成績
#include<stdio.h>
int main()
{
int n,i=0,*p;
float average,max=0,min=0,sum=0;
scanf("%d",&n);
if((p=(int*)calloc(n,sizeof(int)))==NULL){
printf("Not able to allocate memory.\n");
exit(1);
}
for(i=0;i<n;i++)
{
scanf("%d",p+i);
if(i==0)
{
max=*(p+i);min=*(p+i);
}
sum=sum+*(p+i);
if(max<*(p+i))
max=*(p+i);
if(min>*(p+i))
min=*(p+i);
}
printf("average = %.2f\n",sum*1.0/n);
printf("max = %.2f\n",max);
printf("min = %.2f\n",min);
free(p);
}
無
第五題:
計算職工工資
1:看題目:主函數,知道它要你幹什麼
2:構造結構:struct worker,并且在裡面定義每個職工:姓名、基本工資、浮動工資和支出;名字為字元數組,其它都為float型;最後再用一個數組s[]記錄這樣的worker有多少
3:在主函數中:
第一步:定義N,i=0;N為有多少職工,i為s[]的下标;
第二步:輸入N,在利用一個for循環,将s[i]中元素全都輸入,再s[i].w=s[i].bgong+s[i].fgong-s[i].x;最後輸出s[i].name,s[i].w;
#include<stdio.h>
struct student{
char num[10],name[15];
int x;
}s[15];
int main()
{
int i,n,sum=0;
float average;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);
sum=sum+s[i].x;
}
average=sum*1.0/n;
printf("%.2f\n",average);
for(i=0;i<n;i++)
{
if(s[i].x<average)
printf("%s %s\n",s[i].name,s[i].num);
}
}
第六題:
計算平均成績
1:看題目:主函數,知道它要你幹什麼
2:構造結構:struct student,并在裡面定義學号,姓名,成績;其中學号與姓名為字元數組,成績為整形;最後再用一個數組s[]記錄有多少學生
3:在主函數中:
第一步:定義i=0,n,sum=0;average;其中整形:i為s[]的下标,n為有多少學生,sum為求和;浮點型:平均數average
第二步:輸入n;再利用一個for循環,将s[]中元素全都輸入scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);sum=sum+s[i].x;
第三步:求出平均數并輸出它:average=sum*1.0/n;printf("%.2f\n",average);
第四步:再利用一個for循環,輸出每位平均線以下的學生的姓名和學号:printf("%s %s\n",s[i].name,s[i].num);
#include<stdio.h>
struct student{
char num[10],name[15];
int x;
}s[15];
int main()
{
int i,n,sum=0;
float average;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%s%s%d",&s[i].num,&s[i].name,&s[i].x);
sum=sum+s[i].x;
}
average=sum*1.0/n;
printf("%.2f\n",average);
for(i=0;i<n;i++)
{
if(s[i].x<average)
printf("%s %s\n",s[i].name,s[i].num);
}
}
第七題:
按等級統計學生成績
1:看題目:主函數,知道它要你幹什麼——實作一個根據學生成績設定其等級,并統計不及格人數的簡單函數
2在set_grade中:
第一步:定義i,count=0;其中i為p[]的下标,count用于記錄不及格人數
第二步:利用一個for循環,判斷p[i].score屬于哪個範圍,并指派給相應的p[i].grade,最後在小于60分的條件中加入count++;
第三步:傳回count—— return count;
int set_grade( struct student *p, int n )
{
int i,count=0;
for(i=0;i<n;i++)
{
if((p[i].score)>=85)
{
p[i].grade='A';
}else if((p[i].score)>=70)
{
p[i].grade='B';
}else if((p[i].score)>=60)
{
p[i].grade='C';
}else
{
p[i].grade='D';
count++;
}
}
return count;
錯誤1:我将p[i].grade='A'寫成了p[i].score=‘A’;其它也同理
改正方式:将它改回來
第八題:
結構體數組按總分排序
1:看題目:主函數,知道它要你幹什麼——編寫函數calc求出每名學生的總分。 編寫函數sort按每名學生的總分從高到低對這組資料進行排序
2在calc中:
第一步:定義i;它作為p[]的下标
第二步:利用一個for循環:求n個p[i].sum——p[i].sum=p[i].score[0]+p[i].score[1]+p[i].score[2];
3在sort中:第一步:定義整形i,j;在定義一個struct student x;其中i用于内層for循環,j用于外層for循環,而x為交換的中間量
第二步:利用一個冒泡排序法,将它們按每名學生的總分從高到低對這組資料進行排序
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 x;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(p[i].sum<p[i+1].sum)
{
x=p[i];p[i]=p[i+1];p[i+1]=x;
}
}
}
}
我的代碼:
https://gitee.com/yuanzhong19990808/my_code/upload/master
我評論的人:
李新華:http://www.cnblogs.com/Lixinhua18/p/8671886.html
陳天胤:http://www.cnblogs.com/cty-1/
馬钰娟:http://www.cnblogs.com/dfgfds/p/8662097.html
姜健:http://www.cnblogs.com/jj990519/
李伍壹:http://www.cnblogs.com/Lixinhua18/p/8671886.html
辛靜瑤:http://www.cnblogs.com/X-JY/p/8652592.html
評論我的人:
陳天胤
邱冠華
姜健
李伍壹
辛靜瑤
我的進度:
我的總結:
删除字元串中數字字元:調用函數解決問題,還有用for循環
統計子串在母串出現的次數:調用函數,再用一個簡單條件判斷解決問題
字元串中除首尾字元外的其餘字元按降序排列:用冒泡排序法進行排序
輸出學生成績:要用兩個for循環分别找最大值與最小值
計算職工工資:利用結構解決問題
計算平均成績:利用結構解決問題
按等級統計學生成績:利用結構解決問題,還有多個if的條件判斷
結構體數組按總分排序:利用結構解決問題,還有排序