作业要求一
1.讨论查阅分析 struct sk{int a; char str)}p; p->str++ 中的++ 加向________?
答:-> 的优先级高于++ 的优先级。因此先计算p->str。str为指针,str的内容是某个数组的首地址。因此,p->str所指的是数组首地址,所以,p->str++ 是数组的第二个元素的地址。
作业要求二
题目1查找书籍中最高价及最低价
1 设计思路
答:见代码注释!
2.流程图
3.实验代码
#include<stdio.h>
struct book{//定义结构体
char name[30];
double price;
};
int main()
{
int N;
scanf("%d",&N);//定义并输入书的数量
getchar();//由于上面输入由换行结束,为了不影响下面
//书名字符串的输入因此用getchar消除该影响
struct book Book[N];//定义结构体数组
struct book *p;//定义结构体指针
p=Book;//将指针p指向数组Book
int i=0;
for(i=0;i<N;i++,p++)//循环输入成员变量的值
{
gets(p->name);
scanf("%lf",&p->price);
getchar();//与上面getchar功能相同
}
p=Book;//上面循环p++导致p不在指向Book,因此从新指向
double num1=0,num2=Book[0].price;
int j=0,k=0;
for(i=0;i<N;i++,p++)
{
if(p->price>num1)//循环比较,得到价格最大的,并用j记录其下标
{
j=i;
num1=p->price;
}
if(p->price<num2)//循环比较,得到价格最小的,并用k记录其下标
{
k=i;
num2=p->price;
}
printf("%.2lf, %s\n",Book[j].price,Book[j].name);//输出结果
printf("%.2lf, %s",Book[k].price,Book[k].name);
}
}
4.gets与scanf结束标志的不同
答:gets输入字符串的结束标志只有换行符号,也就是键盘上的Enter键。而scanf的结束标志是空格 换行符,tab键等字符。本题中书名具有空格,因此不变使用scanf,所以使用gets,但是上一次的换行符会影响本次的输入,因此我们需要加茹getcahr来消除影响。
题目2 计算平均成绩
1 设计思路
答:见代码注释!
2.流程图
3.实验代码
#include<stdio.h>
struct student{//定义结构体
int num;
char name[10];
int grade;
};
int main()
{
int N,i=0,Num=0;//定义与人数,总成绩,计数器有关变量
float aver=0;//定义平均成绩
scanf("%d",&N);//输入人数值
struct student s[N],*p;//定义结构体数组,指针
p=s;//指针p指向数组s
for(i=0;i<N;i++,p++)//循环输入成员变量的值,并累加成绩
{
scanf("%d%s%d",&p->num,p->name,&p->grade);
Num=Num+p->grade;
}
if(N==0)//如果人数为0,则aver=0,否则进行计算
aver=0;
else
aver=Num/(N*1.0);
printf("%.2f\n",aver);//输出平均成绩
p=s;//上面循环导致p不在指向是s,因此在此重新指向
for(i=0;i<N;i++,p++)//循环输出成绩小于平均成绩的学生,学好与成绩
{
if(p->grade<aver)
printf("%s %.5d\n",p->name,p->num);
}
}
4.输出格式
答:(1).printf("%md",num);如果数据位数小于m则左端补以空格,若大于m则按原数据输出。(%mo:八进制;%mx十六进制;同理)(2).printf("%mc",num);%c用于输出一个字符,%mc使输出字符占m位其中左边m-1位为空格。(3).printf("%ms",num);%s用于输出一个字符串, 如果字符串位数小于m则左端补以空格,若大于m则按原数据输出 。(4).printf("%-ms",num); 如果字符串位数小于m,则在m列范围内,字符串向左靠,右补空格。(5).printf("%m.ns",num); 输出占m列,但只取字符串左端n个字符。这n个字符输出m列的右侧,左侧补空格。(6).printf("%-m.ns",num); 输出占m列,但只取字符串左端n个字符。这n个字符输出m列的左侧,右侧补空格。如果n>m,则m自动取n的值,即保证n个字符正常输出。
git截图