《C primer plus》一个有问题的Chapter 14.5

本文介绍了一个使用C语言实现的学生信息管理系统。该系统通过姓名匹配来更新学生的成绩,并计算平均分。文章详细展示了如何定义结构体以组织学生姓名和成绩数据,并提供了完整的代码示例及运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*编写一个程序满足下面需求。
 a.外部定义一个有两个成员的结构模板name:一个字符串储存名,一个字符串储存姓
 b.外部定义一个有3个成员的结构模板student:一个name类型的结构,一个grade数组储存3个浮点型分数,一个变量储存3个分数的平均数
 C.在main()函数中声明一个内涵CSIZE=4个student类型的结构数组,并初始化这些结构的名字部分。用函数执行g,e,f和g中描述的任务
 d.以交互的方式获取每个学生的成绩,提示用户输入学生的姓名和分数。把分数储存到grade数组相应的结构中。可以再main()中其他函数中用循环完成。 
 e.计算每个结构的平均分,并把计算后的值赋给合适的成员
 f.打印每个结构的信息
 g.打印班级的平均分,及所有结构的数值成员的平均值*/
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# define CSIZE 4
# define LEN 10
char s_gets(char *st,int n);
struct name
{
    char fname[LEN];
    char lname[LEN];
};
struct student
{
    struct name boy;
    float grade[3];
    float ave;
};
int main(void)
{
    struct student guy[CSIZE]=
    {
        {.boy.fname="Jason",.boy.lname="Bourne"},
        {.boy.fname="LeBorn",.boy.lname="James"},
        {.boy.fname="Kevin",.boy.lname="Durant"},
        {.boy.fname="Kyre",.boy.lname="Ivring"}
    };
    int i,j,n;
    for(i=0; i<CSIZE; i++)
    {
        char person[LEN];
        puts("Please enter your first name:");
        //共有四次循环,但第二次与第四次只执行到这,不知为何
        s_gets(person,LEN);
        
        for(j=0; j<CSIZE; j++)
        {
            float sum=0;
            if(strcmp(guy[j].boy.fname,person)==0)//输入的firstname依次与其结构内对比,若相同则键入此学生的成绩并计算平均分
            {
                printf("Please enter your score:\n");
                for(n=0; n<3; n++)
                {
                    scanf("%f",&guy[j].grade[n]);//输入成绩
                    sum+=guy[j].grade[n];
                }
                guy[j].ave=sum/3.0;//计算平均值
                //printf("%.2f %d\n",guy[j].ave,j);
            }
        }
    }
    for(i=0; i<CSIZE; i++)
    {
        printf("%s %s,your scores of three course are :%.1f %.1f %.1f.And your averge is %.1f.\n",
               guy[i].boy.fname,guy[i].boy.lname,guy[i].grade[0],guy[i].grade[1],guy[i].grade[2],guy[i].ave);//输出
    }
    return 0;
}
char s_gets(char *st,int n)
{
    char *find;
    char *ret_val;
    ret_val=fgets(st,n,stdin);
    if(ret_val)
    {
        find=strchr(st,'\n');
        if(find)
            *find='\0';
        else
            while(getchar()!='\n')
                continue;
    }
    return ret_val;
}

看了许多博客都是直接输入分数然后直接计算,按照顺序来的,个人想通过名称匹配后再输入相应的分数然后进行平均处理,可在第一次和第三次输入内容完成后,第二次和第四次没有执行内循环,不知为何,先存疑。

输出内容如下:

Please enter your first name:
Jason

Please enter yout score:

33 44 55
Please enter your firstname:

Please enter your firstname:
Kevin

Please enter your score:
33 22 11

Please enter your firstname:
Jason Bourne,your scores of three course are :33.0 44.0 55.0.And your averge is 44.0.
LeBorn James,your scores of three course are :0.0 0.0 0.0.And your averge is 0.0.
Kevin Durant,your scores of three course are :22.0 33.0 44.0.And your averge is 33.0.
Kyre Ivring,your scores of three course are :0.0 0.0 0.0.And your averge is 0.0.

可以看到第二次和第四次并没有被输入值,直接打出一次Please enter your firstname就完事了。。

内容概要:本文详细介绍了扫描单分子定位显微镜(scanSMLM)技术及其在三维超分辨体积成像中的应用。scanSMLM通过电调透镜(ETL)实现快速轴向扫描,结合4f检测系统将不同焦平面的荧光信号聚焦到固定成像面,从而实现快速、大视场的三维超分辨成像。文章不仅涵盖了系统硬件的设计与实现,还提供了详细的软件代码实现,包括ETL控制、3D样本模拟、体积扫描、单分子定位、3D重建和分子聚类分析等功能。此外,文章还比较了循环扫描与常规扫描模式,展示了前者在光漂白效应上的优势,并通过荧光珠校准、肌动蛋白丝、线粒体网络和流感A病毒血凝素(HA)蛋白聚类的三维成像实验,验证了系统的性能和应用潜力。最后,文章深入探讨了HA蛋白聚类与病毒感染的关系,模拟了24小时内HA聚类的动态变化,提供了从分子到细胞尺度的多尺度分析能力。 适合人群:具备生物学、物理学或工程学背景,对超分辨显微成像技术感兴趣的科研人员,尤其是从事细胞生物学、病毒学或光学成像研究的科学家和技术人员。 使用场景及目标:①理解和掌握scanSMLM技术的工作原理及其在三维超分辨成像中的应用;②学习如何通过Python代码实现完整的scanSMLM系统,包括硬件控制、图像采集、3D重建和数据分析;③应用于单分子水平研究细胞内结构和动态过程,如病毒入侵机制、蛋白质聚类等。 其他说明:本文提供的代码不仅实现了scanSMLM系统的完整工作流程,还涵盖了多种超分辨成像技术的模拟和比较,如STED、GSDIM等。此外,文章还强调了系统在硬件改动小、成像速度快等方面的优势,为研究人员提供了从理论到实践的全面指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值