C++简单问题
写几个函数1、输入10个职工的姓名和工号2、按工号由小到大排序,姓名也随之调整3、要求输入一个工号,用折半发找出该职工,从主函数输入要查找的工号,输出该职工的姓名。问题补...
写几个函数
1、输入10个职工的姓名和工号
2、按工号由小到大排序,姓名也随之调整
3、要求输入一个工号,用折半发找出该职工,从主函数输入要查找的工号,输出该职工的姓名。
问题补充:就是一个程序,全部要用函数解决。通过main函数调用其它的
C++
看看下面哪里错了
编译没有错误
#include "iostream.h"
#include<stdio.h>
#include <string.h>
#define N 10
void put (int num[],char name[N][10])
{int i;
for (i=0;i<N;i++)
{cout<<"input No:"<<endl;
cin>>num[i];
cout<<"input the name:"<<endl;
gets(name[i]);
}
}
void sort(int num[], char name[N][10])
{int j,t,time;
for(time=1;time<N;time++)
for(j=0;j<N-time;time++)
if(num[j]>num[j+1])
{t=num[j];num[j]=num[j+1];num[j+1]=t;}
cout<<"从小到大"<<endl;
for(j=0;j<N;j++)
{
cout<<num[j]<<name[j]<<endl;
}
}
void search(int n,int num[],char name[N][10])
{
int top, bot, mid,t;
bot=0,t=0;
top=N-1;
int sign=1;
if((n<num[0])||(n>num[N-1]))
t=-1;
while((sign==1)&&(bot<=top))
{mid=(bot+top)/2;
if(n==num[mid])
{
t=mid;
cout<<n<<"the name is:"<<name[t]<<endl;
sign=0;
}
else if (n<num[mid])
top=mid-1;
else
bot =mid+1;
}
if(sign==1||t==0)
cout<<"not find"<<n<<endl;
}
void main()
{int num[N],number,a=1,c;
char name[N][10];
put(num,name);
while (a==1)
{
cout<<"input number to look for:"<<endl;
cin >>number;
search(number,num,name);
cout<<"continue or not(Y/N)?";
getchar();
c=getchar();
if(c=='n'||c=='N')
a=0;
}
}
题目是帮别人问的,我自己对C++一点不懂,所以现在不知道该给谁分,下午找他来看下,他说那个好就给哪个分 展开
1、输入10个职工的姓名和工号
2、按工号由小到大排序,姓名也随之调整
3、要求输入一个工号,用折半发找出该职工,从主函数输入要查找的工号,输出该职工的姓名。
问题补充:就是一个程序,全部要用函数解决。通过main函数调用其它的
C++
看看下面哪里错了
编译没有错误
#include "iostream.h"
#include<stdio.h>
#include <string.h>
#define N 10
void put (int num[],char name[N][10])
{int i;
for (i=0;i<N;i++)
{cout<<"input No:"<<endl;
cin>>num[i];
cout<<"input the name:"<<endl;
gets(name[i]);
}
}
void sort(int num[], char name[N][10])
{int j,t,time;
for(time=1;time<N;time++)
for(j=0;j<N-time;time++)
if(num[j]>num[j+1])
{t=num[j];num[j]=num[j+1];num[j+1]=t;}
cout<<"从小到大"<<endl;
for(j=0;j<N;j++)
{
cout<<num[j]<<name[j]<<endl;
}
}
void search(int n,int num[],char name[N][10])
{
int top, bot, mid,t;
bot=0,t=0;
top=N-1;
int sign=1;
if((n<num[0])||(n>num[N-1]))
t=-1;
while((sign==1)&&(bot<=top))
{mid=(bot+top)/2;
if(n==num[mid])
{
t=mid;
cout<<n<<"the name is:"<<name[t]<<endl;
sign=0;
}
else if (n<num[mid])
top=mid-1;
else
bot =mid+1;
}
if(sign==1||t==0)
cout<<"not find"<<n<<endl;
}
void main()
{int num[N],number,a=1,c;
char name[N][10];
put(num,name);
while (a==1)
{
cout<<"input number to look for:"<<endl;
cin >>number;
search(number,num,name);
cout<<"continue or not(Y/N)?";
getchar();
c=getchar();
if(c=='n'||c=='N')
a=0;
}
}
题目是帮别人问的,我自己对C++一点不懂,所以现在不知道该给谁分,下午找他来看下,他说那个好就给哪个分 展开
13个回答
展开全部
LS自己开个C++试一下
-语法错误:getchar();c=getchar();--- c把回车读的.导致一些混乱.把这两句改为cin>>c;同时前面声明改为char c;
-算法问题:函数put.应该先对输入的num进行判断是否为一个数字,否则若为其他字符,系统强制转为int,查找时当陆液然找不到.解决办法:
1.可以进行一个数字判断.
2.可以将num[N]声明为char*型.这样也可以接收字母或其他的.同时也可以以字符判断.
你的程序一点注释都没有,都不知道是干什么,估计要看明白都得花不少时间,谁还有这闲功夫帮你看啊。
输入之后没有调用排序函数
应该在put(num,name);之后调用sort(num,name);
因为你在search函数中有if((n<num[0])||(n>num[N-]))
t=-1;而且后面有if(sign==1||t==0)
cout<<"not find"<<n<<endl;
}
所以如果没有排序的话,有可能输入的工号正确,而且也显示出来了名字但后面还有"not find"显示出来.
然后主函数中输入输出要匹配,把"cout continue or not(Y/N)?"换成puts("continue or not(Y/N)?",输入只需要用一型数个c=getchar()就行了,把前面的getchar()去掉,不去掉的话要输入两次.
为什么用puts和getchar好呢?如果用cin和cout的话可能出现死循环.而前面用cout后面用getchar的话会使得getchar先执行而cout后面的内容会后面才显示出来.
rdjytf
你的错误有以下几点:
1.在函数search中,没有考虑到边界条件,比如当要找的数在num[0]中的时候,t=0,这样不论如何都会输出"not find"
2.在main中,象你这样getchar();c=getchar();会出现错误.
比如你按Y,第一个getchar会接收y,第二个则早租物是'ENTER'的值,而第一个你并没有赋给C,这样导致一直往下循环.
我对你的程序做了些修改和补充;
程序修改如下:
#include "iostream.h"
#include "stdio.h"
#include "string.h"
#define N 10
void put (int num[],char name[N][10])
{
int i;
for (i=0;i<N;i++)
{
cout<<"input No:"<<endl;
cin>>num[i];
cout<<"input the name:"<<endl;
gets(name[i]);
}
}
void sort(int num[], char name[N][10])
{
int j,t,time;
for(time=1;time<N;time++)
for(j=0;j<N-time;time++)
if(num[j]>num[j+1])
{t=num[j];num[j]=num[j+1];num[j+1]=t;}
cout<<"从小到大"<<endl;
for(j=0;j<N;j++)
{
cout<<num[j]<<name[j]<<endl;
}
}
void search(int n,int num[],char name[N][10])
{
int top, bot, mid,t;
bot=0,t=0;
top=N-1;
int sign;
sign=1;
if((n<num[0])||(n>num[N-1]))
t=-1;
while((sign==1)&&(bot<=top))
{
if(top==0)
{
t=top;
sign=0;
cout<<n<<"the name is:"<<name[t]<<endl;
t++;
break;
}
mid=(bot+top)/2;
if(n==num[mid])
{
t=mid;
cout<<n<<"the name is:"<<name[t]<<endl;
sign=0;
break;
}
else if (n<num[mid])
top=mid-1;
else
bot =mid+1;
}
if(sign==1||t==0)
cout<<"not find:"<<n<<endl;
}
void main()
{
int num[N],number,a=1,c;
char name[N][10];
put(num,name);
while (a==1)
{
lp2: cout<<"input number to look for:"<<endl;
cin >>number;
search(number,num,name);
lp1: cout<<"continue or not(Y/N)?"<<endl;
c=getchar();
getchar();
if(c=='n'||c=='N'||c=='y'||c=='Y')
{
if(c=='n'||c=='N')
{
a=0;
break;
}
else
goto lp2;
}
else
goto lp1;
}
}
//经VC++6.0测试通过,结果符合要求.
这是什么程序啊????? 连个注释也没有,还有问题出在哪也不说清楚,还有就是既然是c++为什么不把人的信息做成一个类啊?
输入之后没有调用排序函数
应该在put(num,name);之后调用sort(num,name);
没有排序的东西用折半不知道会是什么效果?找不到是正常的
找到了是运气。
getchar();
c=getchar(); 这两个啥意思?要过滤掉回车吗?
不知道输入一个字符后不回车程序会跳转吗?
解决外部符号错误:_main,_WinMain@16,__beginthreadex
在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
下面介绍解决的方法:
1. Windows子系统设置错误, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:windows改成/subsystem:console
3. 程序入口设置错误, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Output,
再在Entry-point symbol中填入wWinMainCRTStartup, 即可
4. 线程运行时库设置错误, 提示:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
这是因为MFC要使用多线程时库, 需要更改设置:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Code Generation,
再在Use run-time library中选择Debug Multithreaded或者multithreaded
其中,
Single-Threaded 单线程静态链接库(release版本)
Multithreaded 多线程静态链接库(release版本)
multithreaded DLL 多线程动态链接库(release版本)
Debug Single-Threaded 单线程静态链接库(debug版本)
Debug Multithreaded 多线程静态链接库(debug版本)
Debug Multithreaded DLL 多线程动态链接库(debug版本)
单线程: 不需要多线程调用时, 多用在DOS环境下
多线程: 可以并发运行
静态库: 直接将库与程序Link, 可以脱离MFC库运行
动态库: 需要相应的DLL动态库, 程序才能运行
release版本: 正式发布时使用
debug版本: 调试阶段使用
你的问题用第二个方法就可以解决!
-语法错误:getchar();c=getchar();--- c把回车读的.导致一些混乱.把这两句改为cin>>c;同时前面声明改为char c;
-算法问题:函数put.应该先对输入的num进行判断是否为一个数字,否则若为其他字符,系统强制转为int,查找时当陆液然找不到.解决办法:
1.可以进行一个数字判断.
2.可以将num[N]声明为char*型.这样也可以接收字母或其他的.同时也可以以字符判断.
你的程序一点注释都没有,都不知道是干什么,估计要看明白都得花不少时间,谁还有这闲功夫帮你看啊。
输入之后没有调用排序函数
应该在put(num,name);之后调用sort(num,name);
因为你在search函数中有if((n<num[0])||(n>num[N-]))
t=-1;而且后面有if(sign==1||t==0)
cout<<"not find"<<n<<endl;
}
所以如果没有排序的话,有可能输入的工号正确,而且也显示出来了名字但后面还有"not find"显示出来.
然后主函数中输入输出要匹配,把"cout continue or not(Y/N)?"换成puts("continue or not(Y/N)?",输入只需要用一型数个c=getchar()就行了,把前面的getchar()去掉,不去掉的话要输入两次.
为什么用puts和getchar好呢?如果用cin和cout的话可能出现死循环.而前面用cout后面用getchar的话会使得getchar先执行而cout后面的内容会后面才显示出来.
rdjytf
你的错误有以下几点:
1.在函数search中,没有考虑到边界条件,比如当要找的数在num[0]中的时候,t=0,这样不论如何都会输出"not find"
2.在main中,象你这样getchar();c=getchar();会出现错误.
比如你按Y,第一个getchar会接收y,第二个则早租物是'ENTER'的值,而第一个你并没有赋给C,这样导致一直往下循环.
我对你的程序做了些修改和补充;
程序修改如下:
#include "iostream.h"
#include "stdio.h"
#include "string.h"
#define N 10
void put (int num[],char name[N][10])
{
int i;
for (i=0;i<N;i++)
{
cout<<"input No:"<<endl;
cin>>num[i];
cout<<"input the name:"<<endl;
gets(name[i]);
}
}
void sort(int num[], char name[N][10])
{
int j,t,time;
for(time=1;time<N;time++)
for(j=0;j<N-time;time++)
if(num[j]>num[j+1])
{t=num[j];num[j]=num[j+1];num[j+1]=t;}
cout<<"从小到大"<<endl;
for(j=0;j<N;j++)
{
cout<<num[j]<<name[j]<<endl;
}
}
void search(int n,int num[],char name[N][10])
{
int top, bot, mid,t;
bot=0,t=0;
top=N-1;
int sign;
sign=1;
if((n<num[0])||(n>num[N-1]))
t=-1;
while((sign==1)&&(bot<=top))
{
if(top==0)
{
t=top;
sign=0;
cout<<n<<"the name is:"<<name[t]<<endl;
t++;
break;
}
mid=(bot+top)/2;
if(n==num[mid])
{
t=mid;
cout<<n<<"the name is:"<<name[t]<<endl;
sign=0;
break;
}
else if (n<num[mid])
top=mid-1;
else
bot =mid+1;
}
if(sign==1||t==0)
cout<<"not find:"<<n<<endl;
}
void main()
{
int num[N],number,a=1,c;
char name[N][10];
put(num,name);
while (a==1)
{
lp2: cout<<"input number to look for:"<<endl;
cin >>number;
search(number,num,name);
lp1: cout<<"continue or not(Y/N)?"<<endl;
c=getchar();
getchar();
if(c=='n'||c=='N'||c=='y'||c=='Y')
{
if(c=='n'||c=='N')
{
a=0;
break;
}
else
goto lp2;
}
else
goto lp1;
}
}
//经VC++6.0测试通过,结果符合要求.
这是什么程序啊????? 连个注释也没有,还有问题出在哪也不说清楚,还有就是既然是c++为什么不把人的信息做成一个类啊?
输入之后没有调用排序函数
应该在put(num,name);之后调用sort(num,name);
没有排序的东西用折半不知道会是什么效果?找不到是正常的
找到了是运气。
getchar();
c=getchar(); 这两个啥意思?要过滤掉回车吗?
不知道输入一个字符后不回车程序会跳转吗?
解决外部符号错误:_main,_WinMain@16,__beginthreadex
在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
下面介绍解决的方法:
1. Windows子系统设置错误, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:windows改成/subsystem:console
3. 程序入口设置错误, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Output,
再在Entry-point symbol中填入wWinMainCRTStartup, 即可
4. 线程运行时库设置错误, 提示:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
这是因为MFC要使用多线程时库, 需要更改设置:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Code Generation,
再在Use run-time library中选择Debug Multithreaded或者multithreaded
其中,
Single-Threaded 单线程静态链接库(release版本)
Multithreaded 多线程静态链接库(release版本)
multithreaded DLL 多线程动态链接库(release版本)
Debug Single-Threaded 单线程静态链接库(debug版本)
Debug Multithreaded 多线程静态链接库(debug版本)
Debug Multithreaded DLL 多线程动态链接库(debug版本)
单线程: 不需要多线程调用时, 多用在DOS环境下
多线程: 可以并发运行
静态库: 直接将库与程序Link, 可以脱离MFC库运行
动态库: 需要相应的DLL动态库, 程序才能运行
release版本: 正式发布时使用
debug版本: 调试阶段使用
你的问题用第二个方法就可以解决!
展开全部
在Windows XP + VC++6.0下编译通过并正常运行,直接复制,粘贴就行了
#include<iostream>
#include<cstdio>
using namespace std;
class Worker;
void Sort(Worker W[],int M);//给长度为M的Worker类对象数组W按工号从小到大排列
int BinarySearch(Worker W[],int M,int s);//找到工号为s的对象在数组W中歼颤大的位置
const int N1=30;//字符串长度的最大值
class Worker
{
private:
static int count;//计数器
char name[N1];//姓名
int serialnumber;//工号
public:
Worker(char *n="NULL",int s=0);//构造函数
Worker(const Worker &c);//拷贝构造函数,
int getSerialNumber() const;//返回工号,是排序及搜索的依据
void print() const;//打印信息
};
Worker::Worker(char *n,int s)//初始洞野化,并完成数据录入工作
{
strcpy(name,n);
serialnumber=s;
if(strcmp(name,"NULL")==0)//对象数组各成员只能用默认参数值初始化
{
count++;
cout<<"输入第"<<count<<"个职工的姓名,工号:";
cin>>name>>serialnumber;
}
}
Worker::Worker(const Worker &c)
{
strcpy(name,c.name);
serialnumber=c.serialnumber;
}
int Worker::getSerialNumber() const
{
return serialnumber;
}
void Worker::print() const
{
cout<<"姓名:"<<name<<"\t"<<"工号:"<<serialnumber<<endl;
}
int Worker::count=0;//静态数据初始化
void Sort(Worker W[],int M)//用插入法排序
{
int index;
Worker inserter("notNULL");//避免程序运行时,要求录入数据
for(int i=1;i<M;i++)
{
inserter=W[i];
index=i-1;
while(index>=0&&inserter.getSerialNumber()<W[index].getSerialNumber())
{
W[index+1]=W[index];
index--;
}
W[index+1]=inserter;
}
}
int BinarySearch(Worker W[],int M,int s)//二分查找法
{
int left=0;
int right=M-1;
int middle;
while(left<=right)
{
middle=(left+right)/2;
if(s==W[middle].getSerialNumber())
return middle;
if(s>W[middle].getSerialNumber())
left=middle+1;
else
right=middle-1;
}
return -1;//若搜索失败,返回-1
}
int main()
{
const int N2=10;
Worker W[N2];//对象数组各成员只氏竖能用默认参数值初始化
Sort(W,N2);
cout<<"排序之后:"<<endl;
for(int i=0;i<N2;i++)
W[i].print();
int num;
cout<<"输入您要查找的工号:";
cin>>num;
int result;
result=BinarySearch(W,N2,num);
if(result==-1)
cout<<"您输入的工号不存在!"<<endl;
else
W[result].print();
return 0;
}
/*运行结果
输入第1个职工的姓名,工号:a 2
输入第2个职工的姓名,工号:b 3
输入第3个职工的姓名,工号:c 5
输入第4个职工的姓名,工号:d 9
输入第5个职工的姓名,工号:e 7
输入第6个职工的姓名,工号:h 12
输入第7个职工的姓名,工号:i 4
输入第8个职工的姓名,工号:j 8
输入第9个职工的姓名,工号:k 1
输入第10个职工的姓名,工号:m 11
排序之后:
姓名:k 工号:1
姓名:a 工号:2
姓名:b 工号:3
姓名:i 工号:4
姓名:c 工号:5
姓名:e 工号:7
姓名:j 工号:8
姓名:d 工号:9
姓名:m 工号:11
姓名:h 工号:12
输入您要查找的工号:2
姓名:a 工号:2
*/
#include<iostream>
#include<cstdio>
using namespace std;
class Worker;
void Sort(Worker W[],int M);//给长度为M的Worker类对象数组W按工号从小到大排列
int BinarySearch(Worker W[],int M,int s);//找到工号为s的对象在数组W中歼颤大的位置
const int N1=30;//字符串长度的最大值
class Worker
{
private:
static int count;//计数器
char name[N1];//姓名
int serialnumber;//工号
public:
Worker(char *n="NULL",int s=0);//构造函数
Worker(const Worker &c);//拷贝构造函数,
int getSerialNumber() const;//返回工号,是排序及搜索的依据
void print() const;//打印信息
};
Worker::Worker(char *n,int s)//初始洞野化,并完成数据录入工作
{
strcpy(name,n);
serialnumber=s;
if(strcmp(name,"NULL")==0)//对象数组各成员只能用默认参数值初始化
{
count++;
cout<<"输入第"<<count<<"个职工的姓名,工号:";
cin>>name>>serialnumber;
}
}
Worker::Worker(const Worker &c)
{
strcpy(name,c.name);
serialnumber=c.serialnumber;
}
int Worker::getSerialNumber() const
{
return serialnumber;
}
void Worker::print() const
{
cout<<"姓名:"<<name<<"\t"<<"工号:"<<serialnumber<<endl;
}
int Worker::count=0;//静态数据初始化
void Sort(Worker W[],int M)//用插入法排序
{
int index;
Worker inserter("notNULL");//避免程序运行时,要求录入数据
for(int i=1;i<M;i++)
{
inserter=W[i];
index=i-1;
while(index>=0&&inserter.getSerialNumber()<W[index].getSerialNumber())
{
W[index+1]=W[index];
index--;
}
W[index+1]=inserter;
}
}
int BinarySearch(Worker W[],int M,int s)//二分查找法
{
int left=0;
int right=M-1;
int middle;
while(left<=right)
{
middle=(left+right)/2;
if(s==W[middle].getSerialNumber())
return middle;
if(s>W[middle].getSerialNumber())
left=middle+1;
else
right=middle-1;
}
return -1;//若搜索失败,返回-1
}
int main()
{
const int N2=10;
Worker W[N2];//对象数组各成员只氏竖能用默认参数值初始化
Sort(W,N2);
cout<<"排序之后:"<<endl;
for(int i=0;i<N2;i++)
W[i].print();
int num;
cout<<"输入您要查找的工号:";
cin>>num;
int result;
result=BinarySearch(W,N2,num);
if(result==-1)
cout<<"您输入的工号不存在!"<<endl;
else
W[result].print();
return 0;
}
/*运行结果
输入第1个职工的姓名,工号:a 2
输入第2个职工的姓名,工号:b 3
输入第3个职工的姓名,工号:c 5
输入第4个职工的姓名,工号:d 9
输入第5个职工的姓名,工号:e 7
输入第6个职工的姓名,工号:h 12
输入第7个职工的姓名,工号:i 4
输入第8个职工的姓名,工号:j 8
输入第9个职工的姓名,工号:k 1
输入第10个职工的姓名,工号:m 11
排序之后:
姓名:k 工号:1
姓名:a 工号:2
姓名:b 工号:3
姓名:i 工号:4
姓名:c 工号:5
姓名:e 工号:7
姓名:j 工号:8
姓名:d 工号:9
姓名:m 工号:11
姓名:h 工号:12
输入您要查找的工号:2
姓名:a 工号:2
*/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你好:
你的错误有以下几点:
1.在函数search中,没有考虑到边界条件,比如当要找的数在num[0]中的时候,t=0,这样不论如何都会输出"not find"
2.在纯锋main中,象你这样getchar();c=getchar();会出现错误.
比如你按Y,第一个getchar会接收y,第二个则是'ENTER'的值,而第一个你并没有赋给C,这样导致一直往下循环.
我对你的程序做了些修改和补充;
程序修改如下:
#include "iostream.h"
#include "stdio.h"
#include "string.h"
#define N 10
void put (int num[],char name[N][10])
{
int i;
for (i=0;i<N;i++)
{
cout<<"input No:"<<endl;
cin>>num[i];
cout<<"input the name:"<<endl;
gets(name[i]);
}
}
void sort(int num[], char name[N][10])
{
int j,t,time;
for(time=1;time<N;time++)
for(j=0;j<N-time;time++)
if(num[j]>num[j+1])
{t=num[j];num[j]=num[j+1];num[j+1]=t;}
cout<<誉帆"从小到大"<<endl;
for(j=0;j<N;j++)
{
cout<<num[j]<<name[j]<<endl;
}
}
void search(int n,int num[],char name[N][10])
{
int top, bot, mid,t;
bot=0,t=0;
top=N-1;
int sign;
sign=1;
if((n<num[0])||(n>num[N-1]))
t=-1;
while((sign==1)&&(bot<=top))
{
if(top==0)
{
t=top;
sign=0;
cout<<n<<"the name is:"<<name[t]<<endl;
t++;
break;
}
mid=(bot+top)/2;
if(n==num[mid])
{
t=mid;
cout<<n<<"the name is:"<<name[t]<<endl;
sign=0;
break;
}
else if (n<num[mid])
top=mid-1;
else
bot =mid+1;
}
if(sign==1||t==0)
cout<<"not find:"<<n<<endl;
}
void main()
{
int num[N],number,a=1,c;
char name[N][10];
put(num,name);
while (a==1)
{
lp2: cout<<"input number to look for:"<<endl;
cin >>number;
search(number,num,name);
lp1: cout<<庆裤雹"continue or not(Y/N)?"<<endl;
c=getchar();
getchar();
if(c=='n'||c=='N'||c=='y'||c=='Y')
{
if(c=='n'||c=='N')
{
a=0;
break;
}
else
goto lp2;
}
else
goto lp1;
}
}
//经VC++6.0测试通过,结果符合要求.
你的错误有以下几点:
1.在函数search中,没有考虑到边界条件,比如当要找的数在num[0]中的时候,t=0,这样不论如何都会输出"not find"
2.在纯锋main中,象你这样getchar();c=getchar();会出现错误.
比如你按Y,第一个getchar会接收y,第二个则是'ENTER'的值,而第一个你并没有赋给C,这样导致一直往下循环.
我对你的程序做了些修改和补充;
程序修改如下:
#include "iostream.h"
#include "stdio.h"
#include "string.h"
#define N 10
void put (int num[],char name[N][10])
{
int i;
for (i=0;i<N;i++)
{
cout<<"input No:"<<endl;
cin>>num[i];
cout<<"input the name:"<<endl;
gets(name[i]);
}
}
void sort(int num[], char name[N][10])
{
int j,t,time;
for(time=1;time<N;time++)
for(j=0;j<N-time;time++)
if(num[j]>num[j+1])
{t=num[j];num[j]=num[j+1];num[j+1]=t;}
cout<<誉帆"从小到大"<<endl;
for(j=0;j<N;j++)
{
cout<<num[j]<<name[j]<<endl;
}
}
void search(int n,int num[],char name[N][10])
{
int top, bot, mid,t;
bot=0,t=0;
top=N-1;
int sign;
sign=1;
if((n<num[0])||(n>num[N-1]))
t=-1;
while((sign==1)&&(bot<=top))
{
if(top==0)
{
t=top;
sign=0;
cout<<n<<"the name is:"<<name[t]<<endl;
t++;
break;
}
mid=(bot+top)/2;
if(n==num[mid])
{
t=mid;
cout<<n<<"the name is:"<<name[t]<<endl;
sign=0;
break;
}
else if (n<num[mid])
top=mid-1;
else
bot =mid+1;
}
if(sign==1||t==0)
cout<<"not find:"<<n<<endl;
}
void main()
{
int num[N],number,a=1,c;
char name[N][10];
put(num,name);
while (a==1)
{
lp2: cout<<"input number to look for:"<<endl;
cin >>number;
search(number,num,name);
lp1: cout<<庆裤雹"continue or not(Y/N)?"<<endl;
c=getchar();
getchar();
if(c=='n'||c=='N'||c=='y'||c=='Y')
{
if(c=='n'||c=='N')
{
a=0;
break;
}
else
goto lp2;
}
else
goto lp1;
}
}
//经VC++6.0测试通过,结果符合要求.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
解决外部符号错误:_main,_WinMain@16,__beginthreadex
在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
下面介绍解决的方法:
1. Windows子系统设置错误, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:
[Project] --> [Settings] --> 选择"Link"属性页碰宏,
在Project Options中将/祥吵首subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:windows改成/subsystem:console
3. 程序入口设置错误, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序谨数入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Output,
再在Entry-point symbol中填入wWinMainCRTStartup, 即可
4. 线程运行时库设置错误, 提示:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
这是因为MFC要使用多线程时库, 需要更改设置:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Code Generation,
再在Use run-time library中选择Debug Multithreaded或者multithreaded
其中,
Single-Threaded 单线程静态链接库(release版本)
Multithreaded 多线程静态链接库(release版本)
multithreaded DLL 多线程动态链接库(release版本)
Debug Single-Threaded 单线程静态链接库(debug版本)
Debug Multithreaded 多线程静态链接库(debug版本)
Debug Multithreaded DLL 多线程动态链接库(debug版本)
单线程: 不需要多线程调用时, 多用在DOS环境下
多线程: 可以并发运行
静态库: 直接将库与程序Link, 可以脱离MFC库运行
动态库: 需要相应的DLL动态库, 程序才能运行
release版本: 正式发布时使用
debug版本: 调试阶段使用
你的问题用第二个方法就可以解决!
在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
下面介绍解决的方法:
1. Windows子系统设置错误, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:
[Project] --> [Settings] --> 选择"Link"属性页碰宏,
在Project Options中将/祥吵首subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:windows改成/subsystem:console
3. 程序入口设置错误, 提示:
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序谨数入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Output,
再在Entry-point symbol中填入wWinMainCRTStartup, 即可
4. 线程运行时库设置错误, 提示:
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
这是因为MFC要使用多线程时库, 需要更改设置:
[Project] --> [Settings] --> 选择"C/C++"属性页,
在Category中选择Code Generation,
再在Use run-time library中选择Debug Multithreaded或者multithreaded
其中,
Single-Threaded 单线程静态链接库(release版本)
Multithreaded 多线程静态链接库(release版本)
multithreaded DLL 多线程动态链接库(release版本)
Debug Single-Threaded 单线程静态链接库(debug版本)
Debug Multithreaded 多线程静态链接库(debug版本)
Debug Multithreaded DLL 多线程动态链接库(debug版本)
单线程: 不需要多线程调用时, 多用在DOS环境下
多线程: 可以并发运行
静态库: 直接将库与程序Link, 可以脱离MFC库运行
动态库: 需要相应的DLL动态库, 程序才能运行
release版本: 正式发布时使用
debug版本: 调试阶段使用
你的问题用第二个方法就可以解决!
参考资料: http://bbs.anqn.com/simple/index.php?t1437.shtml和百度知道!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输丛族亮入之后没有调用排序函数
应该在put(num,name);之后调用sort(num,name);
因为你在search函数中有if((n<num[0])||(n>穗乎num[N-]))
t=-1;而且后面有if(sign==1||t==0)
cout<<"not find"<<n<<endl;
}
所以如果没有排序的话,有可能输入的工号正确,而且也显示出来了名字但后面还有"not find"显示出来.
然后主函数中输入输出要匹配,把"cout continue or not(Y/N)?"换成puts("continue or not(Y/N)?",输入只需要用一个c=getchar()就行了,把前面的getchar()去掉,不去掉的话要输入两次.
为什么用puts和getchar好呢?如果用cin和cout的话可能出现死循环.而前面用cout后面用getchar的话会使得getchar先执渗宽行而cout后面的内容会后面才显示出来.
应该在put(num,name);之后调用sort(num,name);
因为你在search函数中有if((n<num[0])||(n>穗乎num[N-]))
t=-1;而且后面有if(sign==1||t==0)
cout<<"not find"<<n<<endl;
}
所以如果没有排序的话,有可能输入的工号正确,而且也显示出来了名字但后面还有"not find"显示出来.
然后主函数中输入输出要匹配,把"cout continue or not(Y/N)?"换成puts("continue or not(Y/N)?",输入只需要用一个c=getchar()就行了,把前面的getchar()去掉,不去掉的话要输入两次.
为什么用puts和getchar好呢?如果用cin和cout的话可能出现死循环.而前面用cout后面用getchar的话会使得getchar先执渗宽行而cout后面的内容会后面才显示出来.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询