


【6-7】 刪除字符串中數字字符
1.設計思路:定義函數,引入變量,通過for循環,在循環中判斷條件,刪除字符。
2.實驗代碼:
`
void delnum(char *s)
{
int i,j;
for(;*(s+i)!='\0';)
{
if('0'<=*(s+i)&&*(s+i)<='9')
{
for(j=i;*(s+j)!='\0';j++)
{
*(s+j)=*(s+j+1);
}
}else{i++;
}
}
`
3.本題調試過程碰到問題及解決辦法:無。
4.流程圖:
【6-8】 統計子串在母串出現的次數
1.設計思路:通過題目給出的字符串,使用雙重for循環,從循環中先找出相同的字符串,再判斷出現次數。
2.實驗代碼:
`
int fun(char *str,char *substr)
{
int n=0,i,j,count=0;
for(i=0;*(str+i)!='\0';i++)
{
for(j=0;*(substr+j)!='\0';j++)
{
if(*(substr+j)==*(str+i+j))
count=1;
else
count=0;
}
if(count)
{
n++;
count=0;
}
}
return n;
}
`
3.本題調試過程碰到問題及解決辦法:最開始寫代碼時只有思路,但不知從何下手,具體細節不會做,在同學講解幫助下寫出了代碼。
4.流程圖:

【 6-9 】字符串中除首尾字符外的其余字符按降序排列
1.設計思路:首先調用函數,然后定義變量,使用for循環在循環中判斷,進而輸出。
2.實驗代碼:
`
int fun(char *s,int num)
{
int i,m=(num-2),j;
for(i=1;i<=(num-2);i++)
{
if(*(s+m)>*(s+i))
{
j=*(s+m);*(s+m)=*(s+i);*(s+i)=j;
}
}
if(num>0)
{
num--;
fun(s,num);
}
}
`
3.本題調試過程碰到問題及解決辦法:無。
【7-1】 輸出學生成績
1.設計思路:定義變量,輸入人數,然后使用動態內存分配語句,使用循環,冒泡排序法,進行排序並輸出。
2.實驗代碼:
`
#include<stdio.h>
#include<stdlib.h>
int main()
{
double avg=0,max=0,min=999;
int i=0,*p,j;
scanf("%d",&j);
if((p=(int *)malloc(j*sizeof(int)))==NULL)
exit(1);
for(i=0;i<j;i++)
{
scanf("%d",p+i);
if(p[i]>max)
max=p[i];
if(p[i]<min)
min=p[i];
avg+=p[i];
}
avg=avg/j;
free(p);
printf("average = %.2lf\nmax = %.2lf\nmin = %.2lf",avg,max,min);
}
`
3.本題調試過程碰到問題及解決辦法:無。
【7-1】 計算職工工資
1.設計思路:首先定義結構體變量,然后輸入,引用結構體變量,使用循環輸出各項。
2.實驗代碼:
`
#include<stdio.h>
typedef struct work
{
char name[100];
float base;
float fdgz;
float expend;
float sum;
}WORK;
int main()
{
WORK s[10000];
int n, i,j;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s", &s[i].name);
scanf("%f", &s[i].base);
scanf("%f", &s[i].fdgz);
scanf("%f", &s[i].expend);
s[i].sum = (s[i].base + s[i].fdgz)-s[i].expend;
}
for (j = 0; j < n;j++)
{
printf("%s %.2f\n", s[j].name, s[j].sum);
}
return 0;
}
`
3.本題調試過程碰到問題及解決辦法:無。
【7-2】 計算平均成績
1.設計思路:先定義變量類型,使用其定義該類型數組,先使用for循環輸入,算出總成績(sum),讓后計算平均數,最后通過for循環在循環中判斷,進而輸出。
2.實驗代碼:
`
#include<stdio.h>
struct student{
char num[6];
char name[10];
double grade;
}s[1000];
int main()
{
int n;
scanf("%d\n",&n);
int i;
double sum=0;
double average;
for(i=0;i<n;i++)
{
scanf("%s %s %lf",&s[i].num,&s[i].name,&s[i].grade);
}
int j;
for(j=0;j<n;j++)
{
sum=sum+s[j].grade;
}
average=sum/n;
printf("%.2lf\n",average);
for(j=0;j<n;j++)
{
if(average>s[j].grade)
{
printf("%s %s\n",s[j].name,s[j].num);
}
}
return 0;
}
`
3.本題調試過程碰到問題及解決辦法:無。
4.流程圖:

【6-1】 按等級統計學生成績
1.設計思路:先定義函數,引入變量,在for循環中通過if語句進行多層判斷,將學生成績分出等級,然后使小於60分的單獨計算出其數目,最后返回其值(count)即可。
2.實驗代碼:
`
int set_grade( struct student *p, int n ){
int count = 0, i;
for(i = 0;i<n;i++,p++){
if(p->score<60){
p->grade = 'D';
count++;
}
else if((p->score<70)&&(p->score>=60)){
p->grade = 'C';
}
else if((p->score<85)&&(p->score>=70)){
p->grade = 'B';
}
else{
p->grade = 'A';
}
}
return count;
}
`
3.本題調試過程碰到問題及解決辦法:無。
4.流程圖:
【6-2】 結構體數組按總分排序
1.設計思路:調用calc函數,使用循環進行計算。然后調用sort函數,使用for循環,在循環中用if語句判斷,進而返回值。
2.實驗代碼:
`
void calc(struct student *p,int n)
{
int i=0;
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 j=0,min=0;
struct student a;
for(j=0;j<n;j++)
{
if((p+j)->sum<(p+min)->sum)
{
min=j;
}
}
a=*(p+min);
*(p+min)=*(p+n-1);
*(p+n-1)=a;
if(n>1)
{
n--;
sort(p,n);
}
}
`
3.本題調試過程碰到問題及解決辦法:無。
【圖表】:
【git地址】:https://git.coding.net/lfyyyy/seven
【截圖】:
點評同學:董欣:http://www.cnblogs.com/dx2017/p/8666072.html
高立彬: http://www.cnblogs.com/gao628526/p/8665187.html
董雅潔:http://www.cnblogs.com/exo123/p/8663311.html
總結:近兩周的學習讓我了解到了c語言中的許多新的知識,比如如何定義變量類型,還有如何使用已定義的變量類型定義變量,如何多變的使用指針等等,最開始還有些不太理解,兩周下來已經理解的差不多了,就是對待c語言的習題,有思路但無從下手,以后勤加練習,希望有所突破。
