第三次作业
题目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是一个指针常量,不允许改变.
学习进度: