第二次作业
第一题:
删除字符串中数字字符
设计思路:
描述方法:
第一步:调用函数delnum
第二步:利用for循环遍历数组并判断其中的数字字符与非数字字符
第三步:如果是数字字符 *s=a[i];s++
第四步:利用*s='\0'结束
流程图:
实验代码:
void delnum(char *s)
{
char *a=s;
int i;
for(i=0;a[i]!='\0';i++){
if((a[i]<'0') ||( a[i]>'9'))
{
*s=a[i];
s++;
}
}
*s='\0';
}
遇到的问题:
错误信息1:if判断忘记写()
改正方式:((a[i]<'0') ||( a[i]>'9'))
错误信息2:忘记结束字符数组
改正方式:*s='\0'
第二题:
统计子串在母串出现的次数
设计思路:
描述方法:
第一步:遍历数组
第二步:将子串的每一个跟母串进行比较
第三步:当一次比较结束后,次数加一并从后面的字符串中继续进行比较
流程图:
实验代码:
int fun(char *str,char *substr)
{
int i;
int n=0;
for(i=0;str[i]!='\0';i++){
if(str[i]==substr[0]&&str[i+1]==substr[1]&&str[i+2]==substr[2])
n++;
}
return n;
}
遇到的问题:
第三题:
字符串中除首尾字符外的其余字符按降序排列
设计思路:
描述方法:
第一步:找到字符串中首尾字符的位置
第二步:将中间的字符进行降序排列
实验代码:
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;
}
遇到的问题:
错误信息1:在for循环中的判断条件写成了n<num-1
改正方式:n<num-1→n<num-2
错误信息2:在进行交换的时候将角标写成了i
改正方式:i→j
第四题:
输出学生成绩
设计思路:
描述方法:
第一步:定义数组和浮点型的sum,average,max,min
第二步:利用for循环算出sum并求出average,同时找到max,min
实验代码:
#include <stdio.h>
int main()
{
int n,i;
float sum=0.0,average=0.0,max=0.0,min=0.0;
scanf("%d",&n);
int s[n];
for(i=0;i<n;i++){
scanf("%d",&s[i]);
sum=sum+s[i];
}
max=s[0],min=s[0];
for(i=0;i<n;i++){
if(max<s[i])
max=s[i];
}
for(i=0;i<n;i++){
if(min>s[i])
min=s[i];
}
average=sum/n;
printf("average = %.2f\n",average);
printf("max = %.2f\n",max);
printf("min = %.2f\n",min);
return 0;
}
遇到的问题:
错误信息:定义max,min时用了int 结果保留两位小数时忘记了小数点
改正方式:float max,min %2d→%.2d
第五题:
计算职工工资
设计思路:
描述方法:
第一步:定义一个结构体salary,里面得元素分别为name,basic,change,disbursement,real
第二步:定义结构体变量a[n],利用for循环将数据输入
第三步:利用for循环进行计算然后进行输出
流程图:
实验代码:
#include <stdio.h>
struct salary{
char name[10];
float basic;
float change;
float disbursement;
float real;
};
#include <stdio.h>
struct salary{
char name[10];
float basic;
float change;
float disbursement;
float real;
};
int main()
{
int n,i;
scanf("%d",&n);
struct salary a[n];
for(i=0;i<n;i++){
scanf("%s %f %f %f",a[i].name,&a[i].basic,&a[i].change,&a[i].disbursement);
}
for(i=0;i<n;i++){
a[i].real = a[i].basic + a[i].change - a[i].disbursement;
}
for(i=0;i<n;i++){
printf("%s %.2f\n",a[i].name,a[i].real);}
return 0;
}
遇到的问题:
错误信息1:没注意题目要求其他输入、输出保证在单精度范围内
改正方法:将int型改为float型
错误信息2:将printf放在了第二个for循环内,应该另建一个for循环进行输出,但是放在第二个for循环内依然答案正确
改正方法:重新用一个for循环将数据输出
第六题:
计算平均成绩
设计思路:
描述方法:
第一步:定义结构体student,其中元素分别为num,name,grade
第二步:定义结构体变量a[n],定义并初始i,n,sum=0
第三步:利用循环输入数据然后再求出并输出平均数
第四步:比较大小,输出成绩小于平均成绩的学生的姓名和学号
实验代码:
#include <stdio.h>
struct student{
char num[6];
char name[11];
int grade;
};
int main(){
int n, i,sum=0;
float average;
scanf("%d",&n);
struct student a[n];
for(i=0;i<n;i++){
scanf("%s %s %d",a[i].num,a[i].name,&a[i].grade);
}
for(i=0;i<n;i++){
sum+=a[i].grade;
}
average = sum/n;
printf("%.2f\n",average);
for(i=0;i<n;i++){
if(a[i].grade<average){
printf("%s %s\n",a[i].name,a[i].num);
}
}
return 0;
}
遇到的问题:
错误信息:虽然题中给出了字符串的长度但是却忘记了结尾的'\0'
改正方法:char num[6]; char name[11];
第七题:
按等级统计学生成绩
设计思路:
描述方法:
第一步:题中要求判断学生成绩的等级,还要求出不及格的人数
第二步:定义count来计数不及格的人数,利用for循环来判断成绩的等级
第三步:返回count
流程图:
实验代码:
int set_grade( struct student *p, int n )
{
int count=0,i=0;
for(i=0;i<n;i++){
if(p[i].score>=85 && p[i].score<=100){
p[i].grade = 'A';
}
else if(p[i].score>=70 && p[i].score<=84){
p[i].grade = 'B';
}
else if(p[i].score>=60 && p[i].score<=69){
p[i].grade = 'C';
}
else{
p[i].grade = 'D';
count ++;
}
}
return count;
}
遇到的问题:
错误信息1:指针不能改变某个元素,要想改变某个元素最好用数组
错误信息2:“==”是判断是否等于,“=”才是赋值
错误信息3: "||"是或,"&&"才是并且
第八题:
结构体数组按总分排序
设计思路:
描述方法:
第一步:题目要求求出总成绩并进行排序
第二步:调用calc函数利用循环分别求出没名学生的成绩
第三步:将temp定义成结构体变量的形式
第四步:调用sort函数利用降序冒泡排序法进行排序
实验代码:
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 temp;
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++){
if(p[j].sum<p[j+1].sum){
temp = p[j];
p[j] =p[j+1];
p[j+1] = temp;
}
}
}
}
遇到的问题:
错误信息1:计算总成绩是忘记了score的角标
错误信息2:调用sort函数时忘记将temp定义成结构体变量
改成方法:struct student temp
三、学习进度和总结
1、主要学习了结构体变量,我觉得这个还是比较简单的,但是指针到现在都不是太明白
2、
https://gitee.com/lhdsb666/zuoye/tree/master
3、我点评的人:陆文奇 马卿辉 刘传海
4、