第八周作业

作业要求一

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地址:https://git.coding.net/guozhikang/www.git

git截图

猜你喜欢

转载自www.cnblogs.com/gzk08-20/p/8906653.html