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);
}

大学福音经典编程题适用于专升本
24.给数组删除重复的元素 25.C语言编程题求1! + 2! + 3! + 4!...+N 26.C语言编程题求斐波那契数(循环法与递归法 27.C语言编程输入n,k求n的k次幂(递归与非递归)28.(递归)输入一个数,把他的每一位相加在输出出来;29,实现函数把字符数组的元素逆序 如“abc“,逆序成“cba“30.递归...

C语言问题编程问题?
int main(){ int i,j,n=-1;float scores[30],sum=0,temp;printf("请输入n的值(0~30):");while(n<0 || n>30) scanf("%d",&n);if(!n) return 0;for(i=0;i<n;scanf("%f",&scores[i]),sum+=scores[i],i++)printf("请输入学生%d分数:",i+1);printf("%d名学生的平...

用c语言编程---求100以内的奇数和?
1、解析题目首先,我们知道100以内的奇数为1、3、7……97、99,即从1开始依次增加2。本题要求的是奇数和,即为sum=1+3+7+……+97+99 将变量i从1开始,依次赋值每一个奇数,直到不符合条件(i<=100),即到i=99停止循环。将每一个i值依次累加,求得的和即为题目所求奇数和。2、设计程序框...

10道经典的C语言例题(含参考程序)
1.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153是一个“水仙花数”,因为153=1^3+5^3+3^3。include include int main(){ int bai_wei,shi_wei,ge_wei,i,sum=0;for(i=100;i<1000;i++){ bai_wei=i\/100;shi_wei=(i%100)\/...

C语言编程问题求解答
9题:include <stdio.h>int main(){int N=1;scanf("%d",&N);if(N<=0){N=1;}int numSpaceFirst=N-1;for(int row=0; row<N; row++,numSpaceFirst--){for(int i=0; i<numSpaceFirst; i++){printf(" ");}for(int i=0; i<2*row-1; i++){printf("*");}printf("\\n...

c语言编程100题,有没有大神帮帮忙
您好,c语言经典100题:【程序1】题目:有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数 都是多少 1.程序分析:可填在百位,十位,个位的数字都是1,2,3,4.组成所有的排列后再去 掉不满足条件的排列.2.程序源代码:main(){ int i,j,k;printf("\\n");for(i1;i<5;i++)\/*...

请用C语言帮我完成一道编程题
在进行编程题解答时,首先请根据说明输入一个整数。程序将提示您输入一个整数。请确保输入的整数大于1,以确保接下来的计算能够进行。接着,程序将检查输入的整数是否小于2。如果是,程序会输出一条提示信息,并立即终止。在确认输入的整数大于1之后,程序将开始对整数进行验证。它会从2开始,逐步递增到...

急!急!简单c语言编程题,求编写代码
\/\/第一题#include<stdio.h>void fun(int n){ int i,j,k,t;for(k=0;k<n;k++)\/\/控制总行数{ for(i=0;i<n-k-1;i++)\/\/控制输出空格,因为空格不好看见,就用*代替 printf("%c",'*'); for(j=0;j<2*k+1;j++)\/\/控制输出字母 { printf("%c",65+j)...

求大神C语言编程,题目要求在下面
下面是我的代码,三个函数分别对应三个问题。include<stdio.h> define MLEN 20\/\/字符串最大长度 char fun1();void fun2();void fun3();int main(void){ fun1();fun2();fun3();return 0;} char fun1(){ int nI;float nF;char c;char str[MLEN];printf("请分别输入1个整数,1个...

c语言编程
c语言编程 通过计算机随机产生10道加减运算题,两个操作数为1---10之间的随机数,运算类型为随机产生的加减运算中的一种,如果输入答案正确,则显示”正确!”,否则显示"错误!“,不给机会重做... 通过计算机随机产生10道加减运算题,两个操作数为1---10之间的随机数,运算类型为随机产生的加减运算中的一种,如果输入...

相似回答