c语言编程题目求教---输入员工姓名工号进行排序和查找

作者&投稿:冉劳 (若有异议请与网页底部的电邮联系)
c语言编程题目求教---输入员工姓名工号进行排序~

好几种方法可以实现,要代码吗?

#include
#include
#define M 100
int main()
{
void sort(int num[10],char name[][M],int n);//声明排序函数;
int search(int num[10],int n); //声明寻找函数;
int num[10];
char name[10][100];
int i,n,z;
for(i=0;i<10;i++)
{
printf("输入第%d位职工的号码:",i+1);
scanf("%d",&num[i]);
printf("输入第%d位职工的名字:",i+1);
getchar();
gets(name[i]);
} //输入员工信息;
sort(num,name,10); //调用排序函数;
for(i=0;i<10;i++)
{printf("%d",num[i]);puts(name[i]); //输出排序后的职工信息;
printf("
");}
printf("
");
printf("input n:
");
scanf("%d",&n);
z=search(num,n); //调用查找函数;
puts(name[z]);
return 0;
}

void sort(int* num,char name[][M],int n) //函数定义;
{
int i,j,t;
char k[M];
for(i=0;i<=n-1;i++)
{
for(j=0;j<n-i-1;j++) //冒泡;
if(num[j]>num[j+1])
{
t=num[j];num[j]=num[j+1];num[j+1]=t;
strcpy(k,name[j]);strcpy(name[j],name[j+1]);strcpy(name[j+1],k);
}
}
}


int search(int num[10],int n) //查找定义;
{
int h,l,i;
h=0; //折半法?(不太会,不知道对了没。。- -);
l=9;
while(1)
{
i=(h+l)/2;
if(num[i]==n || i+1>=h)break;
if(num[i]>n) l=i;
else h=i;
}
if(num[i]==n)
return (i);
printf("error!!");
return -1;
}

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define EMPCNT 10

struct employee
{
    int id;
    char name[16];
};

void sort( struct employee *e )
{
    int i,j;
    struct employee temp;
    for( i=0; i<EMPCNT; i++ )
    {
        for( j=i+1;j<EMPCNT;j++ )
        {
            if ( e[j].id < e[i].id )
            {
                /* swap*/
                temp = e[i];
                e[i] = e[j];
                e[j] = temp;
            }
        }
    }
}

int search( struct employee *e, int id )
{
    int low, high, mid;
    low = 0; 
    high = EMPCNT - 1;
    while( low <= high )
    {
        mid = ( low+high ) / 2;
        if ( id < e[mid].id )
            high = mid - 1;
        else if ( id > e[mid].id )
            low = mid + 1;
        else
            return mid;
    }
    return -1;
}

void main()
{
    struct employee e[EMPCNT];
    int i, id=0, m=-1;
    for( i=0; i<EMPCNT; i++ )
    {
        printf( "输入第 %d 员工的员工号,姓名:", i+1 );
        scanf( "%d %s", &e[i].id, e[i].name );
        fflush( stdin );
    }
    sort( e );
    for( i=0; i<EMPCNT; i++ )
        printf( "%d %s
", e[i].id, e[i].name );

    printf("要查找的员工号:" );
    scanf( "%d", &id );
    fflush( stdin );
    m = search( e, id );
    if ( m < 0 )
        printf( "%d 未找到
", id );
    else
        printf( "%d %s
", e[m].id, e[m].name );
    
    getchar();
}


这个我没有测试过,大概的轮廓我写好了
#include<stdio.h>
#include<string.h>

void sort(char name[][20], int number[])
{
int i, j, temp;
char *index=NULL;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
{
if(number[j]<number[j+1])
{
strcpy(index, *name);
strcpy(*name, *name+1);
strcpy(*name, index);
temp=number[j];
number[j]=number[j+1];
number[j+1]=temp;
}
}
}

void search(int num, char name[][20], int number[])
{
int n=10;
while(number[n/2]!=num)
{
n=number[n/2]>num?(n+n/2+1):(n/2-1);
}
printf("%d %s\n", n/2, *name+n/2);
}

int main(void)
{
int i, num;
int number[10];
char name[10][20];
for(i=0;i<10;i++)
scanf("%s%d", name[i], &number[i]);
sort(name, number);
scanf("%d", &num);
search(num, name, number);
return 0;
}


C语言编程题求教大神
include <stdio.h>int main(void){ int a, b, c[10]; int i, j, t, s, f = 0; scanf("%d%d", &a, &b); for(i=a;i<=b;i++) { s = 0; t = i; for(j=0;t;j++) { c[j]=t%10; s+=c[j]; t\/=10; } for(j...

大一期末考试复习题,求教C语言编程高手
2、A吧。这个不太确定。c语言中不允许出现A=B=C形式的赋值。C中没有**这个东西,D中,强制转换为y=(float)i;3、B 所谓保留字,一般是指C语言留作关键字了,比如int,我们不能定义一个变量名叫int的。4、8 参照题目一,依次计算各个表达式,取最后一个表达式的值,结果为8。参考资料:me ...

C语言上机题。菜鸟求教。我自己写的,什么地方不对啊。答案好像运行不起...
i]='\\0';做二级的上机题,一定要主意细节,碰到char的数组一定不能忘记 结束符,同样研究一下给你的答案,因为答案一般都是用最少的语句,最可靠的思想编程的,二级的编程题里删星号算是难的了,还有删后面的星号和删中间的星号的题型,其实就是一个思路。一定不能忘了结束符,不然会有乱码的。

求教C语言编程题
首先,你第一个问题中,少了给n赋值的语句!include<stdio.h> include<math.h> void main(){ double p=1307560000,s,n;scanf("%f",&n);s=1307560000*pow((1+0.01),n);if(s>=1500000000)printf("\\nyear:%lf\\n",n+2005);} 修改如上;第二题中,你有一个语句写错了,不过我估计应该...

一道C语言编程题:编写的程序在Dev-C可以正常运行,但网上提交时出现了RE...
有可能系统测试时没有换行, 而是用的EOF.输入部分 改成 for(o=0;o<1000;o++) { if(scanf("%c",&s)==EOF || s=='\\n') break; a[i++]=s; }

求教,C语言函数问题
include <stdio.h> float no_name(float s[], int n){ int i,c;printf("不及格学生名单:");for(i=0;i<n;i++){ if(s[i]<60){ c++;printf("成绩:%.1f ",s[i]);} } return c;} float average_name(float s[], int n){ float sum=0,average;int i,c1;for(i=0;i<...

C语言编程(求教)
不知道你用的是什么语言 下面是段你看下吧 function getChchar(char)tmp=65536+asc(char)if(tmp>=45217 and tmp<=45252) then getChchar= "A"elseif(tmp>=45253 and tmp<=45760) then getChchar= "B"elseif(tmp>=45761 and tmp<=46317) then getChchar= "C"elseif(tmp>=46318 and tmp...

C语言求教
TF0 不是RAM标志位,是中断时间到了的时间标志位,在寄存器内。TF0 置1 一次,就是一秒,然后就将i减1,当减了 100次后(100秒后),i变成0,就退出while循环了。 我看到很多编程题目都有高手回答了,可看上面的答案,竟然便是错的.这样的简单不用编程的程式我就来回答了。呵呵。

C语言完全新手求教,让3个数字倒着输出
根据你写的算法:a=123,b=3,c=120,d=2,e=10,f=1,所以g=1+2*10+3+100=124。之前的b,c,d,e,f都是没问题的,你拿到了三个数字:b是个位,d是十位,f是百位,现在你要的结果是变成b是百位,d是十位,f是个位。所以g应该是这样表示:g=f+10*d+100*b了。(我也没想明白你最初...

急!求教C语言问题
define M 10 define N 20 include<stdio.h> include<string.h> void main(){ char str[N][M]; \/*定义二维数组*\/ char max[M]; \/*定义最长字符串*\/ int k,i=0; \/*定义循环变量*\/ printf("Please input the strings:\\n");do \/*输入字符串,以stop结束*\/ { gets(str[i...

安源区17664304730: 用C语言解决这一道题: 编写一个程序,首先要求用户输入名字,然后要求用户输入姓氏.在一行打印输入的 -
庞喻巴利: 1、首先在Ubuntu的终端写出百要实现的内容步骤,注释步骤可以帮助书写者理清思路. 2、接下来我们运用Input方法,提示用户输入信息,input中的参数就是提示文字.度 3、接下来接收好用户输入的内容后,我们就可以运用用户输入的内容进行逻辑处理. 4、下面我们运行程序,你会在界面中看到,终内端提示你输入名字,不输入的话不能往下进行. 5、输入信息回车以后,终端就容会把你输出的内容打印出来. 6、python2和python3在用户输入的处理上有区别的,python2里面还有raw_input供使用.

安源区17664304730: 用C语言写几个函数 要求输入姓名时可用中文 -
庞喻巴利: 用结构体就行 struct staff { char[10] name; int num; }; 声明 staff st[10]; 调用staff内部成员变量时用"."操作符 如输入 void intput() { for(i=0;i<=9;i++) { cout<<"输入第"<<i+1<<"个员工的姓名\n"; cin>>st[i].name; cout<<"输入第"<<i+1<<"...

安源区17664304730: 急~~~帮忙用C语言编写几个函数①输入10个职工的姓名和职工号②按职工号从小到大排列,姓名顺序也随之调整 -
庞喻巴利: #include "stdio.h"struct worker {int num;char name[20]; }; void main() {void paixu(struct worker a[],int n);int i;struct worker wk[10];for(i=0;i<10;i++){printf("请输入第%d个职工的工号和姓名,用“,”号隔开:\n",i+1);scanf("%d,%s"...

安源区17664304730: C语言结构体编程题,求大神! -
庞喻巴利: #include <stdlib.h> typedef struct tagEmployeeRecord { char szNum[32]; //职工的工作证号 char szName[32]; //姓名 int age; //年龄 char szJobTime[32]; //工作时间 char szDegree[32]; //文化程度 double payment; //工资 }EmployeeRecord; int ...

安源区17664304730: C语言 输入员工姓名和职工号. 问题是char name[N][8];这个8哪来的? -
庞喻巴利: void input (int [],char name[][8]); 函数原形声明,参数2是2维数组,第2维大小规定为8. void input (int num[],char name[N][8]){...} 函数定义,参数2是2维数组,第2维大小规定为8,第1维大小规定为N (宏定义N=10). char name[N][8]; 为能用于函数input调用, 与函数定义相配.程序员自己定的,name 有10个字符串,每个字符串长度在8以内.职工名字长度在8以内.

安源区17664304730: C语言从键盘上输入10个职员的姓名和电话号码,当用户输入一个职员的姓名时,要求将 -
庞喻巴利: #include<iostream> using namespace std; class Worker { public: char name[20]; int tel; }; void main() { Worker worker[10]; for(int i=0;i<10;i++)//输入信息 { cout<<"请输入第"<<i+1<<"个员工的信息:(姓名 电话号码)"<<endl; cin>>worker[i]....

安源区17664304730: (c语言编程)从键盘上输入10个职员的信息 -
庞喻巴利: #include<stdio.h> #include<string.h> struct people { char name[10]; int y; int pray; }a[11];/*多一个用来交换*/ void main() { int i,j; char b; printf("请输入职员信息\n"); for(i=0;i<10;i++) { gets(a[i].name); scanf("%d%d",&a[i].y,&a[i].pray); } ...

安源区17664304730: 求一道C语言编程题(职工信息管理程序) -
庞喻巴利: //写这个程序花了我2.5小时写代码//再花了1个小时测试,全部正确了//所以一定要给我加分哦,要求100分以上,哈哈//不然下次就没信心帮你写了//职工管理系统//职工号,姓名,性别,年龄,学历,工资,住址,电话等/*1、录入职工信息,若录...

安源区17664304730: 一道简单C语言:请编写一个程序,从键盘输入100名职工的职工号、姓名和工资, -
庞喻巴利: #include<stdio.h>#define NUM 100//把此处的宏定义成100就是你想要的100个职工了 struct WorkerInfo { char Number[10]; char name[10]; float wage; }; float arg,*point=&arg;//为了正确使用浮点数,此处务必如此定义 void main() { struct ...

安源区17664304730: C语言编程,从键盘上输入10个职员的姓名和电话号码,当用户输入一个职员的姓名时,要求将其电话号码输出 -
庞喻巴利: 思路很简单 2个char二维数组a和b分别存放姓名和电话 输入的时候信息分别存放再2个数组里,按%s字符串读入当查找的时候,strcmp(m,n)可以对比m,n两个字符串是否一样,一样好像是返回0 用这个命令循环比较a数组的所有字符串,如果有一样的,比如是a[i],那么输出b[i],就可以了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网