c语言编程题

请各位高手用C语言编写下 下面的题 某学校有行政和教师两类职工,利用结构体变量记录每个职工的姓名,年龄,编号和性。两类职工不同之处在于行政人员的编号是一个5个字符(每一个字符都非空)的定长字符串,而教师的编号使用整数。要求仅使用一种类型的结构体变量来存放两类人员的信息,并实现下列操作;输入职工的信息并保存,用一个标志来确定是行政人员还是教师

/******程序功能:用联合体和结构体存放教师和行政人员的信息
联合体用于存放编号,教师编号用整型,行政人员编号用字符串*/
/***这里题目要求只能用结构体套联合体了。而flag是标志是教师或是
行政人员,这里规定1为教师,2为行政人员。这里假设一共有十个人多的自己改一下
相应的宏,具体多少教师多少行政人员由输入者决定***/
#define M 10
#include <stdio.h>
#include <string.h>
/**联合体****/
union twu
{
int tnumber;
char wnumber[5];
};
/****结构体***/
struct tws
{
int intage;
int flag;
char chname[20];
char chsex[10];
union twu twnumber;
};
/***输入教师信息***/
void inputteacher(struct tws *t)
{
int i;
char ch[100];
flushall();
printf("***************for teacher*********************:\n");
printf("Input the name:\n");
gets(ch);strcpy(t->chname, ch);
flushall();
printf("input sex\n");
gets(ch); strcpy(t->chsex, ch);
flushall();
printf("input numbers:\n");
scanf("%d", &i);t->twnumber.tnumber = i;
printf("input age(int):\n");
scanf("%d", &i);t->intage = i;
t->flag = 1;
}
/****输入行政人员信息*****/
void inputselectman(struct tws *s)
{
int i;
printf("***************for selectman*********************:\n");
printf("Input the name:\n");
scanf("%s", s->chname);
printf("input sex\n");
scanf("%s", s->chsex);
printf("input numbers:\n");
scanf("%s", s->twnumber.wnumber);
if (5 != strlen(s->twnumber.wnumber))
{
printf("input number error !\n");
}
flushall();flushall();flushall();flushall();
printf("input age(int):\n");
scanf("%d", &i);s->intage = i;
s->flag = 2;
printf("s->flag = %d", s->flag);
}
/*输出教师信息*/
void printt(struct tws t)
{
printf("teacher's informations:\n");
puts(t.chname);
puts(t.chsex);
printf("%d\n%d\n", t.twnumber.tnumber, t.intage);
}
/*输出行政人员信息*/
void prints(struct tws s)
{
printf("selectman's informations:\n");
puts(s.chname);
puts(s.chsex);
puts(s.twnumber.wnumber);
printf("%d\n", s.intage,);
}
void main()
{
int i;
int flg;
char ch = 'w';
struct tws twstruct[M];

for (i = 0; i < M; i++)
{
flg = 1;
while (1 == flg)
{
printf("input a to imput teacher informations and b is selectman:\n");
scanf("%c", &ch);
switch(ch)
{
case 'a':
{
inputteacher(&twstruct[i]);
flg = 0;
break;
}
case 'b':
{
inputselectman(&twstruct[i]);
flg = 0;
break;
}
default :flg = 0;printf("input error re_input please\n");
}
flushall();
}
}
for (i = 0; i < M; i++)
{
if (1 == twstruct[i].flag)
{
printt(twstruct[i]);
}
else if (2 == twstruct[i].flag)
{
prints(twstruct[i]);
}
}
getch();
}

由于我的编译器不好,有点东西是多余的,可以删去,不过不删一样正确.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-03-08
二楼正解。
random函数不是ANSI
C标准,不能在gcc,vc等编译器下编译通过。但在C语言中int
random(num)可以这样使用,它返回的是0至num-1的一个随机数。
可改用C++下的rand函数来实现。

1、C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。
随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)

2、C++中另一函数srand(),可以指定不同的数(无符号整数变元)为种子。但是如果种子相同,伪随机数列也相同。一个办法是让用户输入种子,但是仍然不理想。

3、
比较理想的是用变化的数,比如时间来作为随机数生成器的种子。 time的值每时每刻都不同。所以种子不同,所以,产生的随机数也不同。
第2个回答  2020-02-08
以下程序把一个由小到大的有序数列放在a[1]到a[n]中,a[0]用作工作单元,程序把读入的x值插入到a数组中,插入后,数组中的数仍然的序。请填空,完善程序。
#include<stdio.h>
{int
a[10]={0,12,17,20,25,28},x,i,n=5;
printf(“enter
a
number:”);
scanf(“%d”,&x);
a[0]=x;i=n;
while(a[i]>x)
{a[i+1]=a[i];
i--;
}
a[i+1]=x;n++;
for(i=1;i<=n;i++)
printf(“%4d”,a);
printf(“\n”);
}
你题目应该漏了几个东西吧,我试着补充了下。题目是很简单的,不用拿到这上面来问的。
第3个回答  2019-04-25
#include
"stdio.h"
int
main
()
{
char
A[3]={'a','b','c'};//A队人员名字叫
a,b,c
char
B[3]={'x','y','z'};//B队人员名字叫
x,y,z
char
A_B[3];//存储分配给A队人员对手的名字
//根据a,c的条件写,给A队的人员安排对手
for(int
i=0;i<3;i++)
{//c先选对手
if(B[i]!='x'&&B[i]!='z')
{
printf("
c

");
printf("%c",B[i]);
printf("对战\n");
A_B[2]=B[i];
}
}
for(i=0;i<3;i++)
{
if(B[i]!='x'&&B[i]!=A_B[2])
{
printf("
a

");
printf("%c",B[i]);
printf("对战\n");
A_B[0]=B[i];
}
}
for(i=0;i<3;i++)
{
if(B[i]!=A_B[0]&&B[i]!=A_B[2])
{
printf("
b

");
printf("%c",B[i]);
printf("对战\n");
A_B[1]=B[i];
}
}
return
0;
}
第4个回答  2019-02-15
#include
"stdio.h"
void
main()
{
float
a=5.2,b=3.1;
printf("和:%f",a+b);
printf("差:%f",a-b);
printf("积:%f",a*b);
printf("商:%f",a/b);
}
相似回答