实验报告(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("请输入年、月、日\n");
    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("请输入候选人名字\n");
        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\n",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("\n");
    printf("编号    姓名    职业    班级/职务\n");
    for(i=0;i<2;i++)
    {
    if(person[i].job=='s')
    printf ("%s   %d     %c      %d\n", person[i].name, person[i].number, person[i].job, person[i].category.classes);
    else
    printf ("%s   %d     %c      %s\n", 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循环一起使用要精确到结构体中的每项变量。

原文地址:https://www.cnblogs.com/1hzq/p/11106378.html

时间: 2024-10-13 03:20:09

实验报告(2019年6月26日)的相关文章

实验报告(2019年4月17日)

c程序实验报告 姓名:黄志乾????实验地点:教学楼514教室????实验时间:4月17日 实验项目: ???1.用for语句实现循环 ???2.用while循环语句实现循环 ???3.用do-while语句实现循环 ???4.用while语句和for语句配合实现循环 ???5.用for语句嵌套实现循环 一.实验目的与要求 1.用for语句实现循环 ● 掌握c语言逻辑运算和关系运算的规则 ● 掌握for语句实现循环的方法 ● 循环嵌套的使用 2.用while循环语句实现循环 ● 掌握while语

实验报告(2019年4月3日)

c程序实验报告 姓名:黄志乾????实验地点:教学楼514教室????实验时间:4月3日 实验项目: ???1.if语句的应用 ???2.switch/case语句的应用 ???3.switch/case语句嵌套if语句的应用 ???4.switch/case结构的嵌套应用 ???5.分析程序 一.实验目的与要求 1.if语句的应用 ● 掌握c语言逻辑运算和关系运算的规则 ● 学会正确地使用关系式和逻辑表达式 ● 掌握if-else语句的使用方法 2.switch/case语句的应用 ● 掌握算

实验报告(2019年4月31日)

c程序实验报告 姓名:黄志乾????实验地点:教学楼514教室????实验时间:4月30日 实验项目: ???1.编写由三角形三边求面积的函数 ???2.编写求N阶乘的函数 ???3.求两个整数的最大公约数 ???4.打印输出指定图形 ???5.求500以内所有亲密数对 ???6.利用复化梯形公式计算定积分 ???7.计算Ackerman函数 ???8.编写计算x的y次幂的递归函数getpower(int x,int y).并在主程序中实现输入输出. ???9.编写计算学生年龄的递归函数 ???

实验报告(2019年4月30日)下半部分

c程序实验报告 姓名:黄志乾????实验地点:教学楼514教室????实验时间:4月30日 实验项目: ???1.利用复化梯形公式计算定积分 ???2.计算Ackerman函数 ???3.编写计算x的y次幂的递归函数getpower(int x,int y).并在主程序中实现输入输出. ???4.编写计算学生年龄的递归函数 ???5.编写递归函数下hi先Ackerma函数 一.实验目的与要求 1.利用复化梯形公式计算定积分 ●掌握c语言中定义函数的方法 ●掌握通过"值传递"调用函数的方

实验报告(2019年6月12日)

c程序实验报告 姓名:黄志乾????实验地点:教学楼514教室????实验时间:4月30日 实验项目: ???1.指针基础及指针运算 ???2.数据交换 ???3.输出指定行数的杨辉三角形 ???4.数组元素奇偶排列 一.实验目的与要求 1.指针基础及指针运算 ● 本实验旨在及爱情学生对指针数据类型的理解,熟悉指针的定义.通过指针间接访问变量 2.数据交换 ● 本实验旨在加强学生对指针类型作为函数参数传递的理解,通常将实参传递给形参时,有两种方式,即按值传递和按地址传递,其中指针类型参数即是按地

2019年2月26日【整理物品,下载收集考研资料,明天正式开始复习】

2019年1月26日星期六 一:一句话木马重学习 1.网站安全狗网马查杀 http://download.safedog.cn/download/software/safedogwzApache.exe 2.D盾 Web 查杀 http://www.d99net.net/down/WebShellKill_V2.0.9.zip 3 深信服WebShellKillerTool http://edr.sangfor.com.cn/tool/WebShellKillerTool.zip 4 BugSc

【2019年4月26日】最新指数基金估值表(坚持定投终能胜利)

(本篇文章阅读时间约2分钟) 大家好,我是牛九老师,专注于研究指数基金领域很多年,欢迎来到[牛九老师的投资者大家庭]. 每天我会给大家分享投资心得,发布最新的指数基金估值. 每天只需五分钟,大家跟随老师一起坚持投资自己.实现财富增值,战胜通货膨胀,共同走向财务自由之路,过上自己真正想要的生活! 我们坚持在每周四(下午三点之前)进行指数基金的定投,届时会向大家推荐当期的定投组合,强烈推荐大家在支付宝中购买基金,方便安全有保障! 下面是我为大家精心制作的2019年4月26日[第106期]指数基金估值

2019年6月26日:日历问题、整数求和、奇数求和

题目描述: 假设 2012 年 1 月 1 日是星期日,请求出 n 天后是星期几 输入描述: 多组输入每组输入一个正整数 n (1 <= n <= 2000) 输出描述: 对于每组输入,输出 1 个整数 i (1 <= i <= 7),表示 n 天后是星期几 样例输入: 1 2 样例输出: 1 2 #include<iostream> using namespace std; int main(){ int n; while(cin>>n) cout<

2019年7月26日(数学、DP)

难受,爆零!! 哎--讲题吧 prob1:A 题目大意:两种操作:把某数二进制上某一位翻转或异或一个集合中的一个数,求从\(s\)变到\(t\)的最少步数 \(sb\)题,完完全全的水题,结果\(bfs\)的队列写萎了 第一种操作可以转成第二种,而每个数最多只被异或一次,一通\(bfs\)瞎搞就可以了.但最小步数更新需在入队时,并将是否更新作为入队条件,否则会\(T,RE\)炸掉(别问我怎么知道的) 贴代码: #include<iostream> #include<cstring>