第三次作业
一要求:
2 课上疑点:讨论查阅分析 struct sk{int a; char str)}p; p->str++ 中的++ 加向________?
答:加向str。
二要求:
第一题:
#include<stdio.h> #include<string.h> #include<stdlib.h> struct book { char name[31]; double cost; }; main() { struct book s[10]; int i,n; scanf("%d",&n); for(i=0;i<n;i++) { scanf("\n"); gets(s[i].name); scanf("%lf",&s[i].cost); } int max=0,min=0; for(i=1;i<n;i++) { if(s[i].cost>s[max].cost){max=i;} if(s[i].cost<s[min].cost){min=i;} } printf("%.2f, %s\n",s[max].cost,s[max].name); printf("%.2f, %s",s[min].cost,s[min].name);
设计思路:
第一步:先编译一个结构体,定义字符型name数组和双精度cost。
第二步:在主函数中引用,定义i和n,在循环语句中输入n,再输入name数组,最后输入花费的价格。
第三步:定义最大值和最小值都为零。再用一个循环,利用if条件句判断出最大值和最小值。
第四步:分别输出所要的答案。
错误信息:
错误原因:没有引用结构体里的信息
改正方法:在DEVC++中利用调试才发现的。
第二题:
#include<stdio.h> #include<stdlib.h> #include<string.h> struct student{ char num[20]; char name[20]; int score; }s[1000],*p; int main(){ int N; int i=0,count; scanf("%d",&N); for(i=0;i<N;i++){ scanf("%s %s %d",&s[i].num,s[i].name,&s[i].score); } int sum; for(i=0;i<N;i++){ sum=sum+s[i].score; } float ave; ave=sum/N; printf("%.2f\n",ave); for(i=0;i<N;i++){ if(s[i].score<ave) printf("%s %s\n",s[i].name,s[i].num); } system("pause"); }
设计思路:
第一步:填写基本结构,基础函数。
第二步:对平均数赋初值,并输入人的个数以及对应的学号,姓名,成绩,并把每一个学生的成绩累加。
第三步:利用循环结构相加。
第四步:输出结果。
三要求:
1、指针与结构作业中题目所使用的知识点。
2.结构体的正确使用和输出定义的变量。
3.使用指针可以代替类似&s[i]的输入,在用到p->时,有明确的分层指向时,不必要写出两个界限,就如结构二中的题目一样。
4:定义指针时需要在前面加一个*,而且指针是用来指向一个变量的地址的。
5:结构体中,如果在主函数内引用结构体里面的内容,需要用该结构体的函数名加, 数组名。