• 实验报告(2019年6月26日)


    c程序实验报告

    姓名:黄志乾    实验地点:教学楼514教室    实验时间:4月30日

    一、本章要点

    1.通过实验理解结构体和共用体的数据结构
    2.结构体、共用体中数组的使用及变量的赋值
    3.结构体和共用体定义时的嵌套使用(嵌套使用的结构体必须先定义)

    二、实验内容

    1.实验练习:9.1

    问题描述:试利用结构体类型描述年、月、日,输入一个日期,统计该日期是本年度第多少天。

    流程图

    实验代码

    #include<stdio.h>
    main()
    {	
    	struct date
    	{
    		int year,month,days;
    	}a;
    	int i,days;
    	printf("请输入年、月、日
    ");
    	scanf("%d,%d,%d",&a.year,&a.month,&a.days);
    for(i=1;i<a.month;i++)
    	{
    		if(i==1||i==3||i==5||i==7||i==8||i==10)days+=31;
    		else if (i==4||i==6||i==9||i==11)days+=30;
    		else if (i%400==0)days+=29;
    		else days+=28; 
    	}	
    	days+=a.days;
    	printf("%d年%d月%d日是该年的第%d天",a.year,a.month,a.days,days);
     } 
    

    运行结果

    问题:

    2.实验练习9.2

    问题描述:在选举中,假设有6位候选人,有10个人参加投票(只能对一位候选人投票)。用结构体数组统计各候选人的得票数。

    流程图

    实验代码:

    #include<stdio.h>
    #include<string.h>
    struct person
    {
    	char name[20];
    	int count;
     };
     struct person a[6]={"zhang",0,"li",0,"wang",0,"zhao",0,"liu",0,"zhu",0};
    main()
     {
     	int i,j;
    	 char abc[20];
    	 for(i=1;i<=10;i++)
    	 {
    	 	printf("请输入候选人名字
    ");
    		scanf("%s",abc);
    		for(j=0;j<6;j++)
    		if(strcmp(abc,a[j].name)==0)
    		a[j].count++;
    	 }
    	 for(j=0;j<6;j++)
    	 printf("%s,%d
    ",a[j].name,a[j].count);
      } 
     
    

    运行结果

    问题:

    3.实验练习:9.3

    问题描述:

    编写程序填写表格,从键盘输入学生和教师的信息,若是学生,则班级/职称栏填入班级;若是教师,则班级/职称栏填入职称。

    流程图

    实验代码

    # include <stdio.h>
    #include<stdlib.h>
    struct 
    {
        int number;
        char name[20];
        char job;
        union
    	{
    		int classes;
    		char position[10];
    	}category;
    }person[2];
    main()
    {
        int i;
        for (i=0; i<2; i++)
        {	
        	printf("请输入姓名、学号、职位:");
            scanf ("%s%d %c", person[i].name, &person[i].number, &person[i].job);
        	if(person[i].job=='s')
        	{
        		printf("请输入班级:");
    			scanf("%d",&person[i].category.classes); 
    		}
    		else if(person[i].job=='t')
    		{
    			printf("请输入职位:");
    			scanf("%s",&person[i].category.position);
    		}
    		else
    		{
    			printf("input error!");
    			abort();
    		 } 
        }
        printf("
    ");
    	printf("编号    姓名    职业    班级/职务
    ");
    	for(i=0;i<2;i++) 
    	{
    	if(person[i].job=='s')
    	printf ("%s   %d     %c      %d
    ", person[i].name, person[i].number, person[i].job, person[i].category.classes);
    	else
    	printf ("%s   %d     %c      %s
    ", person[i].name, person[i].number, person[i].job, person[i].category.position);
    	}
    }
    
    

    运行结果

    问题:在做这个实验的时候,因为看到书上的示例输入和输出,我以为名字,编号,职位,班级是一起输入进去的,但是代码里的scanf有先后顺序,主要还是缺乏理解,还有在输出的时候没有填正确对应的输出类型,导致程序一输出就会崩溃后来检查才改回正确的。

    4.实验练习:9.4

    问题描述:

    n个人围成一圈,从第s个人开始按顺时针1,2,3,……,m的顺序报数,数到m的人出圈,然后从出圈的下一个人开始重复此过程,输出所有出圈人的顺序。n,s,m从键盘输入。

    流程图

    实验代码

    #include<stdio.h>
    #define N 10
    struct child
    {
    	int no;
    	int next;
    };
    struct child link[30];
    main()
    {
    	int i,n,m,s,count,h;
    	printf("输入围圈人数:出圈报数,开始报数位置:");
    	scanf("%d%d%d",&n,&m,&s);
    	for (i=1;i<=n;i++)
    	{
    		if(i==n)
    		link[i].next=1;
    		else
    		link[i].next=i+1;
    		link[i].no=i;
    	}
    	count=0;
    	if(s==1)h=n;else h=s-1;
    	printf("出圈顺序为:");
    	while(count<n-1)
    	{
    		i=0;
    		while(i!=m)
    		{
    			h=link[h].next;
    			if(link[h].no) 
    			i++;
    		}
    		printf("%d,",link[h].no);
    		link[h].no=0;
    		count++;
    	 } 
    	 for(i=1;i<=n;i++)
    	 if(link[i].no!=0)
    	 printf("%d",link[i].no);
    }
    

    运行结果

    问题:

    三、实验小结

    1、结构体中数组变量的输入可以不使用‘&’取地址运算符
    2、结构体中函数定义的嵌套使用,在输出的时候要明确好结构体名字逐级输入
    3、结构体名称为数组时,与for循环一起使用要精确到结构体中的每项变量。

  • 相关阅读:
    laravel
    composer lavarel 安装
    phpstudy 500 Internal Server Error 解决办法
    阿里云php-7.2.12 安装
    mysql索引
    服务器配置-双机热备
    layui动态数据表格-分页
    layui 笔记
    Thinkphp5.1 模板路径报错
    window/linux composer安装/卸载
  • 原文地址:https://www.cnblogs.com/1hzq/p/11106378.html
Copyright © 2020-2023  润新知