首页 > 代码库 > 例题作业(9.1-9.7)

例题作业(9.1-9.7)

例题9.1

#include<stdio.h>
struct student 
{
    int num;
    char *name;
    char sex;
    char *address;
}stu_1={521,"ghfgh",M,"hgghgf"};



int main()
{printf("%d,%s,%c,%s",stu_1.num,stu_1.name,stu_1.sex,stu_1.address);
return 0; 
 } 
521,ghfgh,M,hgghgf
--------------------------------
Process exited after 0.2441 seconds with return value 0
请按任意键继续. . .

总结:
这个程序是个普通的定义结构体并初始化,再输出,运行时没用啥错误

例题9.2

#include<stdio.h>
struct Student 
{
    int num;
    char name[20];
    int score;
}stu_1,stu_2;



int main()
{
    printf("请输入学生1的信息:\n");
    scanf("%d %s %d",&stu_1.num,stu_1.name,&stu_1.score);
    printf("%d,%s,%d\n",stu_1.num,stu_1.name,stu_1.score);
    printf("请输入学生2的信息:\n");
    scanf("%d %s %d",&stu_2.num,stu_2.name,&stu_2.score);
    printf("%d,%s,%d\n",stu_2.num,stu_2.name,stu_2.score);
    printf("成绩最高同学信息为;\n");
    
    
    
    if(stu_1.score<stu_2.score)
    printf("%d,%s,%d\n",stu_2.num,stu_2.name,stu_2.score);
    else
    {
        if(stu_1.score>stu_2.score)
        printf("%d,%s,%d\n",stu_1.num,stu_1.name,stu_1.score);
        else
        {
            printf("%d,%s,%d\n",stu_1.num,stu_1.name,stu_1.score);
            printf("%d,%s,%d\n",stu_2.num,stu_2.name,stu_2.score);
        }
    }
    return 0;
 } 
请输入学生1的信息:
123 nhj 456
123,nhj,456
请输入学生2的信息:
456 ggh 789
456,ggh,789
成绩最高同学信息为;
456,ggh,789

--------------------------------
Process exited after 33.86 seconds with return value 0
请按任意键继续. . .

总结:
定义名字类型为指针类型 ,但 程序不能直接给指针赋值,然后将指针类型换成数组类型;赋值的问题解决了
但是程序虽然编译正常,但是程序运行后在学生分数后面又多了个0;经过上网查询知道%s和%d连续用时不能
在中间加逗号,因为程序在读入%s类型时不读到空格或空行不会停止,%d读入整型数据就会停止,所以程序
运行时输入的姓名和成绩被当作一个字符串读入,然后学生成绩就被初始化为0,所以将逗号换成空格
程序运行成功

例题9.3

#include<stdio.h>
#include<string.h>
struct Person
{
    char name[20];
    int count;
    
}leader[3]={{"wang",0},{"xiang",0},{"tao",0}}; 
int main()
{
    char xuan[20];
    int i,m;
    for(i=0;i<5;i++)
    {
        printf("请输入姓名:\n");
        scanf("%s",xuan);
        for(m=0;m<3;m++)
        {
            if(strcmp(xuan,leader[m].name)==0)
            leader[m].count++;
            
            
       }
    }
printf("投票的结果为:\n");
for(i=0;i<3;i++)
printf("%s:%d\n",leader[i].name,leader[i].count);
    
return 0;    
    
}
请输入姓名:
wang
请输入姓名:
xiang
请输入姓名:
tao
请输入姓名:
tao
请输入姓名:
xiang
投票的结果为:
wang:1
xiang:2
tao:2

--------------------------------
Process exited after 31.64 seconds with return value 0
请按任意键继续. . .

总结:
一开始出现错误,输入候选人姓名,程序输出“无该候选人”两遍,一开始我的程序中
在if后面加了else{printf("无该候选人");} 想输出没有输入候选人的情况,结果无论输入
何姓名总会出现“无该候选人” ,但将else注释掉程序正常运行,后来想了想,for循环、
每循环一次都要执行一遍下面内容,所以我输入正确的姓名会输出两次 “无该候选人”
输入错误的候选人输出三次 “无该候选人”

例题9.4

#include<stdio.h>
struct Student
{
    int num;
    char name[20];
    int score;
}stu[6];


int main()
{
    int  i,m;
    struct Student stu[6]={{123,"fgh",455},{789,"gdfg",456},{147,"bfh",558},{214,"jgj",369},{587,"gdf",568},{0,"",0}};
    for(m=0;m<4;m++)
    {
        for(i=0;i<4-m;i++)
        {
        if(stu[i].score<stu[i+1].score)
        {
            stu[5]=stu[i];
            stu[i]=stu[i+1];
            stu[i+1]=stu[5];
        }
        }
        
    }
    printf("成绩由高到低:\n");
  for(i=0;i<5;i++)
  //stu[1]=stu[2];
    printf("%d\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].score); 

    
    return 0;
}
成绩由高到低:
587     gdf     568
147     bfh     558
789     gdfg    456
123     fgh     455
214     jgj     369

--------------------------------
Process exited after 0.3383 seconds with return value 0
请按任意键继续. . .

总结:
编写程序时需要用到起泡法,我复习了一遍起泡法后编的程序,开始的时候犯了
一个非常低级的错误,我定义了结构体数组有6个元素,下面循环体中第六个元素
竟然用stu[6]表示,导致程序运行时被系统阻止,请教同学才看出这个错误
感觉这种错误编译时程序发现不了,自己很难检查到,所以一定要细心

例题9.5

#include<stdio.h>
struct Student
{
    int num;
    char name[20];
    char sex;
    int score;    
}stu_1={456,"fghh",M,789};
int main()
{
    struct Student *p;
    p=&stu_1;
    printf("学生信息:%d,%s,%c,%d\n",stu_1.num,stu_1.name,stu_1.sex,stu_1.score);
    printf("学生信息:%d,%s,%c,%d\n",(*p).num,(*p).name,(*p).sex,(*p).score);
    printf("学生信息:%d,%s,%c,%d\n",p->num,p->name,p->sex,p->score);
    
    return 0;
 } 
学生信息:456,fghh,M,789
学生信息:456,fghh,M,789
学生信息:456,fghh,M,789

--------------------------------
Process exited after 0.3013 seconds with return value 0
请按任意键继续. . .

总结:
刚写程序还有点蒙,直接用*p输出学生信息,用*p.stu_1,就想输出学生的信息
输出一堆乱东西,一直感觉不对,但还是看了好一会才看到错误的地方

例题9.6

#include<stdio.h>
struct Student
{
    int num;
    char name[20];
    char sex;
    int score;    
}stu[3]={{456,"fghh",M,789},{258,"gggh",N,369},{147,"cde",R,357}};
int main()
{
    int i;
    struct Student *p;
    for(i=0;i<3;i++)
    printf("学生信息1:%d\t%s\t%c\t%d\n",stu[i].num,stu[i].name,stu[i].sex,stu[i].score);
    for(p=stu;p<stu+3;p++)
    printf("学生信息2:%d\t%s\t%c\t%d\n",(*p).num,(*p).name,(*p).sex,(*p).score);
    for(p=stu;p<stu+3;p++)
    printf("学生信息3:%d\t%s\t%c\t%d\n",p->num,p->name,p->sex,p->score);
    
    
    return 0;
}
学生信息1:456  fghh    M       789
学生信息1:258  gggh    N       369
学生信息1:147  cde     R       357
学生信息2:456  fghh    M       789
学生信息2:258  gggh    N       369
学生信息2:147  cde     R       357
学生信息3:456  fghh    M       789
学生信息3:258  gggh    N       369
学生信息3:147  cde     R       357

--------------------------------
Process exited after 0.2881 seconds with return value 0
请按任意键继续. . .

总结:
这个例题属于基本的定义结构体并初始化,输出变量信息,用三种方法输出,程序没有错误

例题9.7

#include<stdio.h>
int main()
{
    void input();
    input();
    return 0;
 } 
 
 void input()
 {
     
     int  max(int *p,int y);
     int i,sum,k;
     int aver[5];
     struct Student
     {
     
         int num;
        char name[20];
        int Cscore;
        int Escore;
        int Mscore;
        
      }stu[5];
    printf("请输入学生信息:\n");
    for(i=0;i<5;i++)
    {
    scanf("%d %s %d %d %d",&stu[i].num,stu[i].name,&stu[i].Cscore,&stu[i].Escore,&stu[i].Mscore);
    printf("%d\t%s\t%d\t%d\t%d\n",stu[i].num,stu[i].name,stu[i].Cscore,stu[i].Escore,stu[i].Mscore);
    printf("该学生各科平均数\n");
    sum=stu[i].Cscore+stu[i].Escore+stu[i].Mscore;
    printf("%d\n",sum/3);
    aver[i]=(sum/3);
    }
   for(i=0;i<5;i++)
   printf("%d,",aver[i]);
   printf("\n");
   k=max(aver,5);
   printf("k=%d\n",k);
   printf("成绩最高的学生信息为:\n");
   printf("%d\t%s\t%d\t%d\t%d\n",stu[k].num,stu[k].name,stu[k].Cscore,stu[k].Escore,stu[k].Mscore);
 }
 int  max(int *p,int y)
 {
     int t,f;
     f=(*p);
     for(t=0;t<y;t++)
     {
    if(*(p+t)>f)
     f=*(p+t);
    }
    printf("%d\n",f);
    for(t=0;t<y;t++)
    {
        if(f==*(p+t))
        break;  
    }
    printf("%d\n",t);
    return t;
     
 }
 
请输入学生信息:
123 jhj 1 2 3
123     jhj     1       2       3
该学生各科平均数
2
456 njj 4 5 6
456     njj     4       5       6
该学生各科平均数
5
789 juii 7 8 9
789     juii    7       8       9
该学生各科平均数
8
147 jkl 1 4 7
147     jkl     1       4       7
该学生各科平均数
4
258 jhh 2 5 8
258     jhh     2       5       8
该学生各科平均数
5
2,5,8,4,5,
8
2
k=2
成绩最高的学生信息为:
789     juii    7       8       9

--------------------------------
Process exited after 36.06 seconds with return value 0
请按任意键继续. . .

总结:
这个程序是将三名学生的信息输入,求出个学生的平均数,
找出最大值 ,并输出成绩最高的信息我为找出成绩最高的
同学,将所有同学的平均数放到一个数组中,通过for循环
将最大值赋值给变量f再通过for循环找出最大值是哪个同学
(即是返回值t)然后在调用函数中输出成绩最高同学信息
调用函数max时调用函数input的调用函数,即调用函数的调
用函数 ,编程时将if(f==*(p+t)) 中少写了一个等于号导致
没输出想要的结果,编译不报错,找出这个错误还是花了不
少力气的

例题作业(9.1-9.7)