第三次作业

题目2 计算平均成绩

1.设计思路

A,建立一个结构体,其中成员包括学号,姓名,成绩。

B,在主函数中,定义变量,然后输入学生人数,利用for循环依次输入学生学号,姓名,成绩。

C,再利用for循环求出学生成绩总和,然后求出平均成绩。

D,最后将低于平均成绩的学生姓名,学号输出。

2.流程图

 

3.实验代码

 

#include<stdio.h>
#include<string.h>
struct score
{
  char num[10];
  char name[10];
  int score;
};
 int main()
{
  int i,n,count=0;
  float average=0;
  scanf("%d",&n);
  struct score s[n];for(i=0;i<n;i++)
  scanf("%s %s %d",&s[i].num,s[i].name,&s[i].score);
  for(i=0;i<n;i++)
  {
    count+= s[i].score;
  }
  average = count / n;
  printf("%.2f\n",average);
  for(i = 0; i < n; i++)
  {
    if(s[i].score < average)
    {
      printf("%s %s\n",s[i].name,s[i].num);
      
    }
  }
return 0;
}

 

 

 

4.遇到的问题及解决方法:

pta提交总是部分正确,在dev上却可以运行,经过多次调试,后来在scanf("%d",&n);后加上一句struct score s[n];就好了。

错误截图:

正确截图:

题目2查找书籍中最高价及最低价

 

1.设计思路

 A,建立结构体,成员包括书名和价格。

 B,在主函数中定义变量,输入需要查找的书籍数量,名字,价格。

 C,利用循环结构找出书籍中的最高价和最低价,分别输出他们的名字和价格。

2.流程图

 

3.实验代码

 

#include<stdio.h>  
#include<string.h>  
struct book{  
    char name[31];  
    double price;     
}b[10];  
int main(){  
    int n,i,j,mini=0,maxi=0;  
    double min=1000000,max=-1;  
    scanf("%d",&n);  
    for(i=0;i<n;i++){  
        scanf("\n");    
        gets(b[i].name);  
        scanf("%lf",&b[i].price);  
        if(b[i].price>max){  
            max=b[i].price;  
            maxi=i;  
        }  
        if(b[i].price<min){  
            min=b[i].price;  
            mini=i;  
        }   
    }  
    printf("%.2lf, %s\n",b[maxi].price,b[maxi].name);  
    printf("%.2lf, %s\n",b[mini].price,b[mini].name);  
    return 0;  
}  

 

 

 

4.遇到的问题及解决方法:pta提交总是答案错误,在dev上却可以运行,多次调试并没有发现错误,上网百度得知gets遇到空格不返回,scanf遇空格返回,所以需在 gets(b[i].name);前加上scanf("\n");使gets进入缓冲区。

错误截图:

 

 

 

正确截图:

 

上传代码及截图

地址:https://git.coding.net/Hunjunxian/homework.git

           https://git.coding.net/Hunjunxian/PTA.git

 

学习总结及进度

总结:

 1.最普通的int型指针:

int a=5;

   int*p= &a;

p=&a;

所以*p=*(&a)=a=5;         *与&可以看作是一个逆运算

2.用一个初始化了的指针可以对新定义的指针进行初始化:

int a;

int*p=&a;

int*q=p;

3.指针的运算

int a=4;

int *p=&a;

int b=*p++;

* 与++优先级相同

结合规则都是又结合

所以*p++等效与*(p++)

p++等效与p+sizeof(int)

p+5等效于p+5×sizeof(int)

指针不能与一般数据进行关系运算,但可以和null(0)进行关系运算判断是否是一个空指针

4.指针在函数的调用

例如:定义一个交换a,b数据的函数

void swap(int*p_one,int *p_two){

 

int *temp

temp=p_one;

p_one=p_two;

p_two=temp;

 

}

以上并不能进行数据交换,它只是交换了形参的地址,a,b的值并没有发生变换

正确的写法为

void swap(int*p_one,int *p_two){

 

int *temp;

*temp=*p_one;

*p_one=*p_two;

*p_two=*temp;

 

}

5.数组与指针

定义一个数组

int a[5]={1,2,3,4,5}

其实a就是一个指针,因为a可以代表数组的首地址,

(1)定义一个指向数组元素的指针变量

int a[5]={1,2,3,4,5};

int*p=a;

(2)利用指针访问数组的几种方式

int a[i]

1.*(a+i)

2.*(p+i)

3.p[i]

主意:a++是错误的,因为a是一个指针常量,不允许改变.

 学习进度:

posted @ 2018-04-18 09:02  句号?  阅读(168)  评论(0编辑  收藏  举报