华为机试题目总结(程序篇)(合集5篇)

时间:2019-05-13 18:10:21下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《华为机试题目总结(程序篇)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《华为机试题目总结(程序篇)》。

第一篇:华为机试题目总结(程序篇)

自己写的,水平很挫,仅供参考

目录

1.语言识别问题

2.销售网络问题(未完成)3.股票投资问题

4.判断手机号码合法性 5.元音字母复制 6.验证身份证号 7.选秀节目打分

8.数组最大值放中间,其他依次放其左右(规律未找着,未完成)

9.任务调度(解题关键,需要一个容器来承载下标跟值的一一对应关系,最好就是定义一个结构体)10.将某字符变成小写后的某个字符 11.链表的逆序 12.单词统计

13.字符串进行转换,转换成相应的数字已知:yi er san si wu liu qi ba jiu 分别对应,对一段只含有这几种字符的字符串进行转换,转换成相应的数字 14.一个数组中比平均数大的个数 15.求一个数组中第一大和第二大数 16.字符变成整数 17.整数变字符 18.判断素数问题

19(1).约瑟夫环(循环列表)19(2).约瑟夫环(数学方法只能求出最后的胜利者的序号)19(3).约瑟夫环(容器实现)20.判断某个整数是回文。即这样的,反过来还是 21.判断一个字符串是不是回文

22.求一个字符串中的最大回文子串,就是从n个字符开始检查是不是回文,知道m个字符符合回文,那么这个就是最大回文 23.找出^n的数

24.统计一个数二进制表达中的个数

25.镜像反转二进制表达式,并输出十进制值 26.连续字符统计

27.判断一个字符串中()是否配对 28.查找子字符串个数

29(1).找出一个字符串中是否包含相同(包括连续的)的子字符串(要求子串长度大于等于)并输出出现频率最高的子字符串

29(2)找出一个字符串中是否包含连续相同的子字符串,并输出出现频率最高的子字符串 30.删除字符窜中字符数最少的字符

31.关于数组的循环移位,左移为负,右移为正 32.求一个二维数组每列的最小值 33.两个字符串,求最长公共子串

34.超大整数加法运算,大整数会用字符串或者数组来存,不过注意低位存字符前面几位,高位存后面,存到字符中应该存“”。这边我用的是数组 35.排序总结

36.将一个字符串空格分隔,并倒序输出 37.删除一个字符串中的某个字符串

38.取出一个字符串中所有的数字,并取出所有字母 39,简单的字符统计

40.查找字符串中空格分隔的单词的最大长度 41.二叉树的操作 42.分块查找

1.语言识别问题

#include

using namespace std;void main(){

int n,S_num=0,T_num=0,m=0;

cin>>n;

char ch;

getchar();

for(int i=0;i

// m=0;

while(1)

{

ch=getchar();

/* m++;

if((m>3)&&(ch=='n'))

{

m=0;

break;

}*/

if(ch=='n')break;

if(ch=='s'||ch=='S')S_num++;

if(ch=='t'||ch=='T')T_num++;

}

}

if(S_num

else cout<<“Deutschn”;

}

2.销售网络问题(未完成)

#include

using namespace std;void main(){

int n,S_num=0;

cin>>n;

int a[n];for(int i=0;i

cin>>a[i];if(a[])for(int i=0;i

// m=0;

while(1)

{

ch=getchar();

/* m++;

if((m>3)&&(ch=='n'))

{

m=0;

break;

}*/

if(ch=='n')break;

if(ch=='s'||ch=='S')S_num++;

if(ch=='t'||ch=='T')T_num++;

}

}

if(S_num

else cout<<“Deutschn”;

}

3.股票投资问题

#include

using namespace std;void main(){

int B,C=0,D=0,E=0,i,j,k,l,n,m;

int A;

int a[12];//未来天得股价

int b[12][12];

cin>>B;//测试数

memset(b,0,sizeof(b));

//for(i=0;i

cin>>A;for(j=0;j<12;j++)

cin>>a[j];

int temp=0;for(k=0;k<11;k++)

for(l=k+1;l<12;l++)

{

temp=A/a[k];b[k][l]=temp*(a[l]-a[k]);if(b[k][l]<0)

b[k][l]=0;

}

int max=b[0][1];m=0;n=1;

for(k=0;k<11;k++)

for(l=k+1;l<12;l++)

{

if(b[k][l]>max)

{ max=b[k][l];

m=k;

n=l;

}

if(b[k][l]==max)//相等的取购价低的 { if(a[k]

{ max=b[k][l];

m=k;

n=l;

}

}

}

if(max==0)

{cout<<“IMPOSSIBLE”<

}

else{

C=m+1;

D=n+1;

E=max;

cout<

}

}

4.判断手机号码合法性

#include

using namespace std;

int verifyMsisdn(char* inMsisdn){ int n=0;int i=0;int j=0;char *p;p=inMsisdn;

while(p[i]!='')

{

i++;

n++;

}

if(n!=13)

return 1;

else

{

while(p[j]!='')

{

if(!((p[j]>='0' && p[j]<='9')))

{return 2;

break;

}

j++;

} if(!(p[0]=='8'&& p[1]=='6'))return 3;else return 0;

}

}

void main(){

char a[20];cin>>a;int m=verifyMsisdn(a);

cout<

}

5.元音字母复制

#include

using namespace std;

void sortVowel(char* input){ int j=0;char output[50]={0};

for(int i=0;input[i]!='';i++)

{ if(input[i]=='a' || input[i]=='e'|| input[i]=='i'|| input[i]=='o'|| input[i]=='u')

{

output[j]=input[i];

j++;

}

}

int w=j;char temp;for(int k=0;k

if(output[l]>output[l+1])

{

temp=output[l];

output[l]=output[l+1];

output[l+1]=temp;

} }

for(int i=0;input[i]!=0;i++)

{ if(input[i]=='A'|| input[i]=='E'|| input[i]=='I'|| input[i]=='O'|| input[i]=='U')

{

output[j]=input[i];

j++;

}

}

char temp2;for(int m=w;m

if(output[n]>output[n+1])

{

temp2=output[n];

output[n]=output[n+1];

output[n+1]=temp2;

} }

cout<

char a[50];cin.get(a,50);

sortVowel(a);

}

6.验证身份证号

#include

using namespace std;

int verifyIDCard(char* input){ int n=0;int i=0;int j=0;char *p;p=input;

while(p[i]!='')

{

i++;

n++;

}

if(n!=18)

return 1;

else

{

while(j<17)

{

if(!((p[j]>='0' && p[j]<='9')))

{return 2;

break;

}

j++;

} if(!(p[17]=='x'||(p[17]>='0' && p[17]<='9')))return 3;else

{

int year=(p[6]-'0')*1000+(p[7]-'0')*100+(p[8]-'0')*10+(p[9]-'0');

int month=(p[10]-'0')*10+(p[11]-'0');

int day=(p[12]-'0')*10+(p[13]-'0');

if(!(year>=1900 && year<=2100))

return 4;else{

if(!(month>=1 && month<=12))

return 5;else{

//能被整除且不能被整除或能被整除的年份

bool ryear=(year%4==0 && year%100!=0)||(year%400==0);

if(!((!ryear && day>0 && day<29)||(ryear && day>0 && day<=29)))

return 6;

else{

return 0;

}

}

}

}

}

}

void main(){

for(int c=0;c<10;c++){char a[20];cin>>a;int m=verifyIDCard(a);

cout<

7.选秀节目打分

#include

using namespace std;#define N 5 int total(int score[],int judge_type[],int cn)

{ int sum1=0,sum2=0,m=0,n=0,aver=0,totalscore=0;

for(int i=0;i

{sum1+=score[i];

m++;

} else {

sum2+=score[i];

n++;}

}

if(n==0)

totalscore=sum1/m;

else

{ totalscore=(int)(sum1/m * 0.6+sum2/n * 0.4);}

return totalscore;

}

void main(){

int score[N];int judge_type[N];for(int i=0;i

cin>>judge_type[i];

cout<<“输入第”<

cin>>score[i];} int totalscore= total(score,judge_type,N);cout<

8.数组最大值放中间,其他依次放其左右(规律未找着,未完成)

#include using namespace std;

void sort(int input[], int n, int output[]){

int i,j;

int temp =0;

for(i =0;i

for(j =0;j

{

if(input[j]>input[j+1])

{

temp = input[j];

input[j] = input[j+1];

input[j+1] = temp;

}

}

if(n%2 ==0){

for(i =0;i

{

output[i] = input[2*i];

}

for(i =0;i

{

output[n/2+i] = input[n-1-2*i];

} } else {

for(i=0;i<(n-1)/2;i++)

{

output[i] = input[2*i+1];

}

output[(n-1)/2]= input[n-1];

for(i = 0;i<(n-1)/2;i++)

{

output[(n-1)/2+1+i] = input[n-3-2*i];

} }

for(i = 0;i

printf(“%d”, output[i]);} printf(“n”);}

int main(){ int input1[] = {3, 6, 1, 9, 7};int input2[] = {3, 6, 1, 9, 7, 8};

int output1[5] = {0};

int output2[6] = {0};

sort(input1, 5,output1);

sort(input2, 6, output2);} 9.任务调度

(解题关键,需要一个容器来承载下标跟值的一一对应关系,最好就是定义一个结构体)#include using namespace std;struct table { int number;

int value;};

void scheduler(int task[], int system_task[], int user_task[],int n){

struct table *sb=(struct table *)malloc(n*sizeof(struct table));

for(int i=0;i

sb[i].number=i;sb[i].value=task[i];

}

struct table temp;for(int k=0;k

for(int j=0;j

{

if(sb[j].value>sb[j+1].value)

{

temp=sb[j];

sb[j]= sb[j+1];

sb[j+1] = temp;

}

}

int cs=0,cu=0;for(int l=0;l

if(sb[l].value<50)

{system_task[cs]=sb[l].number;

cs++;

}

else if(sb[l].value<=255)

{user_task[cu]=sb[l].number;

cu++;

}

else

continue;

} system_task[cs]=-1;user_task[cu]=-1;

free(sb);

for(int m=0;m<=cs;m++)

{

cout<

}

printf(“n”);

for(int n=0;n<=cu;n++)

{

cout<

}

}

int main(){ int task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99};

int n=9;

int count_sys=0,count_user=0;for(int i=0;i<9;i++){

if(task[i]<50)

count_sys++;

else if(task[i]<=255)

count_user++;

else

continue;}

int *system_task=(int *)malloc(count_sys*sizeof(int)+4);int *user_task=(int *)malloc(count_user*sizeof(int)+4);

scheduler(task, system_task, user_task,9);//int *p = system_task;//int *q = user_task;//

////printf(“%d%dn”, count_sys,count_user);// for(int i=0;i

} // } // printf(“n”);// //

for(int i=0;i

free(system_task);

free(user_task);10.将某字符变成小写后的某个字符

#include using namespace std;void TransferString(const char * pInputStr, long lInputLen, char * pOutputStr){

for(int i=0;i

{

if(pInputStr[i]>='V'&& pInputStr[i]<='Z')

pOutputStr[i]=pInputStr[i]+11;//('a''A');

else if(pInputStr[i]>='A'&& pInputStr[i]<='U')

pOutputStr[i]=pInputStr[i]+37;//('a''A');

else{pOutputStr[i]=pInputStr[i];}

}

cout<

}

void main(){ char *pInputStr=“Axs3mWss”;int n=0;while(pInputStr[n]!='')

n++;

long

lInputLen=n+1;

char *pOutputStr=(char *)malloc(sizeof(char)*(n+1));

TransferString(pInputStr,lInputLen,pOutputStr);

}

11.链表的逆序

#include using namespace std;typedef struct tagListNode {

int value;

struct tagListNode *next;

}ListNode;

//要求实现函数:

void converse(ListNode *head){

ListNode *p1,*p2,*p3;

p1=head;

p2=p1->next;

while(p2){

p3=p2->next;

p2->next=p1;

p1=p2;

p2=p3;} head->next=NULL;head=p1;while(p1!=NULL)

{

cout<

value<<“->”;

p1=p1->next;

} }

void main(){

ListNode *p,*head,*s;

head=(ListNode*)malloc(sizeof(ListNode));

p=head;

int n=0,m=0;

while(n<5)

{

cin>>m;

s=(ListNode*)malloc(sizeof(ListNode));s->value=m;

p->next=s;

p=s;

n++;

}

head=head->next;p->next=NULL;

converse(head);//p=head;//while(p!=NULL)//

{ //

cout<

value<<“->”;// p=p->next;//

//

}

}

12.单词统计

#include #include using namespace std;struct node { //int number;

int count;char a[10];};void WordStat(const char * pInputStr, char * pOutputHotWord, char * pOutputColdWord){

//cout<

if(pInputStr1[i]>='A' && pInputStr1[i]<='Z')

pInputStr1[i]+=32;

i++;} const char * split = “,.”;

struct node sb[10]={0};//*sb=(struct node *)malloc(10*sizeof(struct node));char *p={0};

p=strtok(pInputStr1,split);int j=0;while(p!=NULL)

{ //sb[j].number=j;

strcpy(sb[j].a,p);

sb[j].count=0;

j++;

p=strtok(NULL,split);

}

for(int k=0;k<10;k++)

for(int l=0;l<10;l++)

{

if(strcmp(sb[k].a,sb[l].a)==0)

sb[k].count+=1;

}

struct node max;

struct node min;

int dex1=0,dex2=0;

max=sb[0];

min=sb[0];

for(int m=0;m

{

if(sb[m].count>max.count)

{ max=sb[m];

dex1=m;}

else if((sb[m].count

{

min=sb[m];

dex2=m;}

}

/*for(int m=0;m

{

cout<

cout<

}*/

strcpy(pOutputHotWord,sb[dex1].a);strcpy(pOutputColdWord,sb[dex2].a);cout<<“最高”<

}

void main(){ char

pInputStr[100]={0};cin.get(pInputStr,100);

char * pOutputHotWord=(char *)malloc(sizeof(char *)*100);

char * pOutputColdWord=(char *)malloc(sizeof(char *)*100);

memset(pOutputHotWord, 0, sizeof(pOutputHotWord));

memset(pOutputColdWord, 0, sizeof(pOutputHotWord));WordStat(pInputStr, pOutputHotWord,pOutputColdWord);}

13.字符串转换成规定数字

转换成相应的数字已知:yi er san si wu liu qi ba jiu 分别对应,对一段只含有这几种字符的字符串进行转换,转换成相应的数字

如:yiersansan:

#include #include using namespace std;

int WordStat(const char * pInputStr, char * pOutputWord){

int i=0,d=0,k=0,sum=0;char *pInputStr1=(char *)malloc(100*sizeof(char));strcpy(pInputStr1,pInputStr);//(char *)char* sss[9] = {“yi”, “er”, “san”, “si”, “wu”, “liu”, “qi”, “ba”, “jiu”};while(pInputStr1[i]!=''){

if(pInputStr1[i]=='y' || pInputStr1[i]=='e'|| pInputStr1[i]=='w'|| pInputStr1[i]=='q'|| pInputStr1[i]=='b')

d=2;

if(pInputStr1[i]=='l' || pInputStr1[i]=='j')

d=3;

if(pInputStr1[i]=='s')

{ if(pInputStr1[i+1]=='a')

d=3;

if(pInputStr1[i+1]=='i')

d=2;

}

for(int j=0;j<9;j++)

{

if(strncmp(pInputStr1+i,sss[j],d)==0)

k=j+1;

} sum=sum*10+k;

i+=d;} return sum;

}

void main(){ char

pInputStr[100]={0};cin.get(pInputStr,100);

char * pOutputWord=(char *)malloc(sizeof(char *)*100);

memset(pOutputWord, 0, sizeof(pOutputWord));

int transver= WordStat(pInputStr, pOutputWord);cout<

}

14.一个数组中比平均数大的个数

#include #include using namespace std;

int count(int p[], int n){

int sum=0,m=0;for(int i=0;i

sum+=p[i];} int aver=sum/n;for(int j=0;j

if(p[j]>aver)

m++;} return m;}

void main(){ cout<<“输入个数n”<>n;int *a=(int*)malloc(sizeof(int)*n);for(int i=0;i>a[i];}

int m=count(a,n);

cout<

}

15.求一个数组中第一大和第二大数

#include #include using namespace std;

void count(int p[], int n){

int max=0,smax=0,k=0;for(int i=0;i

if(p[i]>max)

{ max=p[i];

k=i;

} }

for(int j=0;j

if(p[j]>smax)

smax=p[j];} cout<<“最大”<

void main(){ cout<<“输入个数n”<>n;int *a=(int*)malloc(sizeof(int)*n);for(int i=0;i>a[i];

}

count(a,n);

}

16.字符变成整数

#include #include using namespace std;

int chartoint(const char * pInputStr){

int i=0,d=0,k=0,sum=0;

while(pInputStr[i]!='')

{

d=pInputStr[i]-'0';

sum=sum*10+d;

i++;

}

return sum;

}

void main(){ char

pInputStr[100]={0};cin.get(pInputStr,100);

int transver= chartoint(pInputStr);cout<

}

17.整数变字符

#include using namespace std;

void main(){ int n,i=0;cin>>n;//int m=(int)sqrt(n);char p[50]={0},s[50]={0};while(n){

p[i]=n%10+'0';

i++;

n/=10;} p[i]='';int m=strlen(p);//char *s=(char *)malloc(sizeof(char)*(m+1));

for(int j = 0;j < m;j ++)

s[j]=p[m-1-j];

s[m]='';

cout<

#include #include using namespace std;

void main(){ int n,i=0;cin>>n;//int m=(int)sqrt(n);for(i=2;i

if(n%i==0)

break;

} if(i==n)

cout<<“sushu”<

}

19.1约瑟夫环

#include using namespace std;typedef struct LNode {

int data;

struct LNode*link;}LNode;

void jos(int n,int k,int m){

LNode *p,*curr,*r;

p=(LNode*)malloc(sizeof(LNode));

p->data=1;//注意我是从开始的奥

p->link=p;

curr=p;

for(int i=2;i<=n;i++){

LNode *s=(LNode*)malloc(sizeof(LNode));s->data=i;

s->link=curr->link;curr->link=s;curr=s;}//循环链表的建立

while(--k){ r=p;p=p->link;

}//======================p指向序号为k的位置

int w=m;while(n--){

while(--m)

{r=p;

p=p->link;

}//======================p指向序号为k的之后的m位置上

cout<

data<<“->”;

r->link=p->link;

p=r->link;

m=w;

}

}

void main(){

jos(9,1,5);} //5->1->7->4->3->6->9->2->8-> 19.2约瑟夫环(数学方法只能求出最后的胜利者的序号)

#include int main(){

int n,m,i,s = 0;

printf(“N M =”);

scanf(“%d%d”,&n,&m);

for(i = 2;i <= n;i++)

{

s =(s + m)% i;

}

printf(“n The winner is %dn”,s+1);}

19.3约瑟夫环(容器实现)#include

#include using namespace std;

const int N = 9;

const int M = 5;

const int k = 1;

int main(int argc, char* argv[])

{

vector ring;

for(int i=0;i

ring.push_back(i+1);

vector::iterator iBegin = ring.begin();

vector::iterator iEnd;

while(!ring.empty())

{

iEnd = ring.end();

if(iBegin == iEnd)

iBegin = ring.begin();

for(int i=1;i

{

iBegin++;

if(iBegin >= iEnd)

iBegin = ring.begin();

}

cout<<*iBegin<

iBegin = ring.erase(iBegin);

}

}

20.判断某个整数是回文。即这样的,反过来还是

#include using namespace std;

bool func(int m);void main(){ int m;cout<<“enter a number:”<>m;cout<

int i,n=0;i=m;

while(i)

{

n=n*10+i%10;

i/=10;

}

if(m==n)

return true;

return false;}

21.判断一个字符串是不是回文

#include using namespace std;#include bool is_huiwen(char a[],int length){

const char *src=a;

const char *end;

end=src+length-1;

while(src

{ if(*src==*end)

{ src++;end--;}

else return false;

}

return true;

}

int main(){ int len;

char c[10];

cout<<“enter:”<

cin>>c;

len=strlen(c);

bool h;

h=is_huiwen(c,len);

if(h)cout<<“hui_wen”<

else cout<<“non_hui_wen”<

return 0;}

22.求一个字符串中的最大回文子串

就是从n个字符开始检查是不是回文,知道m个字符符合回文,那么这个就是最大回文

#include using namespace std;#include char * maxhuiwen(char a[],int length,char b[]){ int i=0,j=0,k=0;for(i=length;i>0;i--)//回文的长度

for(j=0;j<=length-i;j++)//这个其实假设的回文开始字符位置

{

for(k=0;j+k

{

if(a[j+k]==a[j+i-1-k])

continue;

else{break;}

}

if(j+k>=j+i-1-k)

{

int n1=i;//长度

int n2=j;//起始位置

cout<

cout<

memcpy(b,a+j,i);

b[i]='';

return b;

}

}

}

void main(){ int len;

char c[50];

cout<<“enter:”<

cin>>c;

len=strlen(c);

char * output={0};output =(char *)malloc(sizeof(char)*(len+1));char *s={0};

s=maxhuiwen(c,len,output);cout<

23.找出^n的数

#include using namespace std;

void func(int a[],int n){

for(int i=0;i

if(0==(a[i]&(a[i]-1)))

cout<

} void main(){ int a[5];for(int i=0;i<5;i++)

cin>>a[i];int n=sizeof(a)/sizeof(int);cout<

24.统计一个数二进制表达中的个数

#include using namespace std;

int func(int a){

int c=0,i=0;while(a){

if((a & 1)==0)

{c++;} /* i++;*/

a=a>>1;

} return c;

} void main(){ int a;

cin>>a;int m=func(a);cout<

25.镜像反转二进制表达式,并输出十进制值#include using namespace std;int func(int a){

int c=0,i=0;int b[32];while(a){

b[i]=(a & 1);

i++;

a=a>>1;

} for(int j=0;j

c=c*2+b[j];

return c;

} void main(){ int a;

cin>>a;int m=func(a);cout<

26.连续字符统计

#include using namespace std;#include #include using namespace std;#include char * maxcommonchar(char a[],int length){ int n=1;char *p=(char *)malloc(sizeof(char)*(length*2));memset(p,0,sizeof(p));//需要初始化

for(int i=0;i

if(a[i]==a[i+1])

{n++;}

else

{

sprintf(p+strlen(p),“%c%d”,a[i],n);

n=1;

}

}

return p;

}

void main(){

char *a=“assddff”;

int n=strlen(a);cout<

} 27.判断一个字符串中()是否配对

#include using namespace std;bool match(char a[],int length);int main(){

char b[100];

int len;

bool m;

cout<<“enter:”<

gets(b);

len=strlen(b);

m=match(b,len);

if(m)cout<<“match”<

else cout<<“nonmatch”<

return 0;}

bool match(char a[],int length){

char *p=a;

int count1=0;

int count2=0;

while(*p!='')

{

if(*p=='(')count1++;

if(*p==')')count2++;

if(count2>count1)

return false;

p++;

}

if(count1==count2)

return true;

else

return false;} 28.查找子字符串个数

#include using namespace std;

int fun(char a[],char b[]){

int n=0;

int n1=strlen(a);int n2=strlen(b);

for(int i=0;i<=n1-n2;i++){if(strncmp(a+i,b,n2)==0){ n++;}

}

return n;}

void main(){

char a[100],b[100];

cin>>a;

cin>>b;

int n=fun(a, b);

cout<

29.1找出一个字符串中是否包含相同(不管是不是连续的)的子字符串

(要求子串长度大于等于)并输出出现频率最高的子字符串

#include using namespace std;void fun(char a[]){

int n=strlen(a);int m=0;char b[100];

int p=0;

int s1[10],s2[10],s3[10];for(int i=2;i<=n/2;i++)for(int j=0;j<=n-i;j++)

{ strncpy(b,a+j,i);

b[i]='';

for(int k=0;k

{ if(strncmp(b,a+j+k,i)==0)

{

m++;

}

} if(m>=2){s1[p]=m;s2[p]=j;s3[p]=i;p++;} m=0;}

int max=0;

int l=0;

for(int q=0;q

if(s1[q]>max)

{ max=s1[q];

l=q;

}

for(int o=0;o

void main(){

char a[100];

cin>>a;

fun(a);/*if(fun(a)){cout<<“you”;} else{cout<<“meiyou”;}*/

}

29.2找出一个字符串中是否包含相同并且连续的子字符串,并输出出现频率最高的子字符串

#include #include using namespace std;void fun(char a[]){

int n=strlen(a);

char *s[100];for(int n3=0;n3<100;n3++){

s[n3]=(char *)malloc(20*sizeof(char));}

for(int n1=0;n1

strcpy(s[n1],a+n1);

/*for(int n2=0;n2

cout<

int c=1;

int max=0;

int m=0;

int p;

for(int i=0;i

for(int j=i+1;j

{ if(strncmp(s[i],s[j],j-i)==0)

{ c++;

for(int k=j+j-i;k

{ if(strncmp(s[i],s[k],j-i)==0)

{

c++;} else{break;}

}

if(c>max)

{ max=c;

m=i;

p=j;

}

}

}

for(int o=0;o

void main(){

char a[100];

cin>>a;

fun(a);/*if(fun(a)){cout<<“you”;} else{cout<<“meiyou”;}*/

}

30.1删除字符窜中字符数最少的字符

#include #include using namespace std;struct node { int count;char a;};char *minWorddelete(char * pInputStr, char * pOutputWord){ int n=strlen(pInputStr);

struct node sb[100]={0};//*sb=(struct node *)malloc(10*sizeof(struct node));

for(int i=0;i

{

sb[i].a=pInputStr[i];

sb[i].count=0;

} for(int k=0;k

for(int l=0;l

{

if(sb[k].a==sb[l].a)

sb[k].count+=1;

}

struct node min;

int dex1=0;

min=sb[0];

int m=0;for(m=0;m

{

if(sb[m].count

{

min=sb[m];

dex1=m;

}

} cout<<“删除的字符是”<

{

if(sb[p].a!=sb[dex1].a)

{

pOutputWord[q]=sb[p].a;

q++;

}

} pOutputWord[q]='';

return pOutputWord;

}

void main(){ char

pInputStr[100]={0};cin.get(pInputStr,100);

char * pOutputWord=(char *)malloc(sizeof(char *)*100);

memset(pOutputWord, 0, sizeof(pOutputWord));char *s=minWorddelete(pInputStr, pOutputWord);cout<

30.2简单的字符统计的,但是效率比较低

#include #include #include using namespace std;void main(){int a[128];memset(a,0,sizeof(a));string s=“gdssdsgs”;int n=s.size();

int i = 0;

for(i = 0;i

int p=s[i];a[p]+=1;} for(int j = 0;j<128;j++){if(a[j]>0)

cout<<(char)j<<“:”<

#include using namespace std;void cycleDisplacement(int *a, int n, int k){

int temp=0;

if(k>0)

{while(k)

{temp=a[n-1];

for(int j=n-1;j>0;j--)//注意右移覆盖要从大的那边开始覆盖,即j--

{a[j]=a[j-1];

}

a[0]=temp;

k--;

}

}

else if(k<0){while(k)

{temp=a[0];

for(int j=0;j

{a[j]=a[j+1];

}

a[n-1]=temp;

k++;

}

}

}

void main(){ int a[]={1,2,3,4,5};int n=5;

cycleDisplacement(a,5,-2);

for(int i=0;i<5;i++)

{

cout<

}

}

32.求一个二维数组每列的最小值

#include using namespace std;void arraymin(int input[][4],int n1,int n2,int output[]){

for(int i=0;i

{

output[i]=input[0][i];

for(int j=0;j

{

if(input[j][i]

output[i]=input[j][i];

}

} } void main(){

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};int n1=3;int n2=4;int *output=(int *)malloc(sizeof(int)*n2);arraymin(a,n1,n2,output);cout<<“原二维数组是:”<

for(int i=0;i<3;i++){

for(int j=0;j<4;j++)

{

cout<

}

cout<

cout<<“每列最小值是:”<

for(int k=0;k

cout<

}

33.1两个字符串,求最长公共子串

#include using namespace std;#include char * maxcommonchar(char a[],char b[],char c[]){ int n1=strlen(a);

int n2=strlen(b);int n=(n1>=n2)? n2:n1;//cout<

int i=0,j=0,k=0,l=0;

for(i=n;i>=2;i--)//最大子串长度

for(j=0;j

for(k=0;k

{

if(strncmp(a+j,b+k,i)==0)

{

for(l=0;l

{

c[l]=a[j+l];

}

c[l]='';

// cout<

return c;

}

}

}

void main(){

/*char *a=“fdfdsfdsf”;

char *b=“sdfdf”;*/

char a[100];char b[100];cin>>a;cin>>b;

char

output[100]={0};char *s={0};

s=maxcommonchar(a,b,output);cout<

}

从网上拷过来的程序,如下所示,他的复杂度比我的低。

#include #define M 100

//LCS问题就是求两个字符串最长公共子串的问题 char* LCS(char left[],char right[]){

//获取左子串的长度,获取右子串的长度

int lenLeft=strlen(left),lenRight=strlen(right),k;

//注意这里要写成char型,而不是int型,否则输入整型数据时会产生错误。

//矩阵c纪录两串的匹配情况

//char *c=(char *)malloc(lenRight);char *p;

int c[M][M]={0};//当将c申明为一个二维数组时

int start,end,len,i,j;//start表明最长公共子串的起始点,end表明最长公共子串的终止点

end=len=0;//len表示最长公共子串的长度

for(i=0;i

{

//串从后向前比较,为什么要从后向前呢?是把一维数组c[ ]当二维数组来用,//如果要从前向后,可以将c申明为一个二维数组c[M][M].但程序要做相应调整.for(j=0;j

//for(j=lenRight-1;j>=0;j--)

{

if(left[i] == right[j])//元素相等时

{

if(i==0||j==0)

//c[j]=1;

c[i][j]=1;//这边是是因为若是i,j有一个为,说明是从某一个字符串的开头开始的,这个是公共字符串的起点

else

{

//c[j]=c[j-1]+1;

c[i][j]=c[i-1][j-1]+1;//只有前面的字符也是相等的,这边的计数器才会加一,}

}

else

//c[j] = 0;

c[i][j]=0;

//if(c[j] > len)

if(c[i][j]>len)

{

//len=c[j];

len=c[i][j];

end=j;

}

}

}

start=end-len+1;

//数组p纪录最长公共子串

p =(char*)malloc(len+1);

for(i=start;i<=end;i++)

{

p[i-start] = right[i];

}

p[len]='';

return p;}

void main(){

char str1[M],str2[M];

printf(“请输入字符串:”);

gets(str1);

printf(“请输入字符串:”);

gets(str2);

printf(“最长子串为:”);

printf(“%sn”,LCS(str1,str2));

}

33.2 n个字符串的最大公共子串

需要调用子函数的 #include using namespace std;

char * maxchar(const char * s[],char * p,int n){ int j=0,k=0,l=0,m=0;

for(j=strlen(s[0]);j>0;j--)//最大字符串的长度

for(k=0;k+j-1

for(l=1;l

{int flags2=0;

for(m=0;m+j-1

{

if(strncmp(s[0]+k,s[l]+m,j)==0)

{//cout<<“我是大笨蛋”;

flags2=1;

break;

}

}

if(!flags2)//如果循环到这个地方有某个字符串中没有s[0]中挑出的那个字符串,说明这个字符串不是最大的,将代表最大字符串的标志位设为

{//cout<<“我是大笨蛋”;

flags1=0;

break;

}

}

if(flags1)

{// cout<<“我是大笨蛋”;

strncpy(p,s[0]+k,j);

// p[j]='';

return p;

}

}

}

// void main(){ const char *p1[]={“fsdfsdf”,“gsgssfsd”,“ryrghgjgfsd”};

char *q=(char *)malloc(sizeof(char)*20);memset(q,0,sizeof(q));

cout<

不需要调用子函数的

#include using namespace std;void main(){

const int n=3;char *s[]={“fsdfsdf”,“gsgssfsd”,“ryrghgjgfsd”};

char *p=(char *)malloc(sizeof(char)*20);memset(p,0,sizeof(p));int j=0,k=0,l=0,m=0;for(j=strlen(s[0]);j>0;j--)//最大字符串的长度

for(k=0;k+j-1

{int flags1=1;

for(l=1;l

{int flags2=0;

for(m=0;m+j-1

{

if(strncmp(s[0]+k,s[l]+m,j)==0)

{cout<<“我是大笨蛋”;

flags2=1;

break;

}

}

if(!flags2)//如果循环到这个地方有某个字符串中没有s[0]中挑出的那个字符串,说明这个字符串不是最大的,将代表最大字符串的标志位设为

{//cout<<“我是大笨蛋”;

flags1=0;

break;

}

}

if(flags1)

{// cout<<“我是大笨蛋”;

strncpy(p,s[0]+k,j);

goto L;

}

}

L:cout<

} 34.超大整数加法运算

大整数会用字符串或者数组来存,不过注意低位存字符前面几位,高位存后面,存到字符中应该存“”。这边我用的是数组 #include #include using namespace std;#define ln 100 //数字长度

void bigint(char a[],char b[]){

int la = 0, lb = 0;int A[ln]={0};int B[ln]={0};

la =strlen(a);

for(int i=0;i

{

A[i] = int(a[la-1-i])-48;

}

lb =strlen(b);

for(int i=0;i

{

B[i] = int(b[lb-1-i])-48;

}

int n=(la>lb)?la:lb;

for(int i=0;i

{

A[i]=A[i]+B[i];

A[i+1]=A[i+1]+A[i]/10;//将进位加到A对应位shang

A[i]=A[i]%10;//进位后原位只留下个位

}

cout << “相加结果:” << endl;

for(int j=n;j>=0;j--)

{

cout << A[j];

}

cout << endl;} void main(){

char a[ln];

cout << “输入一个高精度数(小于位)作被加数:” << endl;

cin.getline(a, ln);

char b[ln];

cout << “输入另一个高精度数(小于位)作加数:” << endl;

cin.getline(b, ln);

bigint(a,b);

} 35.排序总结

//交换排序1:冒泡法 #include using namespace std;

void BubbleSort(int a[],int length){ int temp=0;

for(int i=0;i

for(int j=0;j

{

if(a[j]>a[j+1])

{temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

} } //交换排序2: 鸡尾酒排序: 鸡尾酒排序,又被称作双向冒泡排序,是一种从冒泡算法演变成的稳定排序算法,不同于冒泡算法重复的从头到尾比较,鸡尾酒算法交替的从头到尾再从尾到头比较关键字。该算法的性能比标准的冒泡算法稍高。

注意:鸡尾酒算法可以看作是选择算法的一种变体。

void CocktailSort(int *array, int length){ int i;int temp;

int left = 0, right = length;

int finished;

do

{

finished = 1;

--right;

for(i = left;i < right;i++)

{

if(array[i] > array[i+1])

{

temp = array[i];

array[i] = array[i+1];

array[i+1] = temp;

finished = 0;

}

}

if(finished)

{

return;

}

finished = 1;

for(i = right1);

_QuickSort(array, pivot_loc + 1, high);} }

void QuickSort(int *array, int length){ _QuickSort(array, 0, length1;j >= 0 && temp < a[j];j--)//这边之所以从i-1以后--是避免数据被覆盖丢失

{

a[j+1] = a[j];

}

a[j+1] = temp;//在合适位置安放a[i]

} }

//插入排序2: 二分法查找插入排序

如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的树目。该算法可以认为是插入排序的一个变种,称为二分查找排序。折半插入排序所需附加存储空间和直接插入排序相同,从时间上比较,折半插入排序仅减少了关键字间的比较次数,而记录的移动次数不变。

其实就是二分法查找与插入排序的一个结合,在已排好的字符串中用二分法查找出那个最合适的插入位置(找到的一般是比a[i]小的,即将离其最近的一个下标n),插入位置就是n+1 //void BinaryInsertionSort(int *array, int length)//{ // int i, j;// int temp;// int low, high, mid;

第二篇:程序员机试题目

开发环境:VS2010、SQL Server2008

开发语言:C#

使用框架:ASP.NET、ADO.NET

一、使用经典三层架构完成web页面的用户登录,数据库、页面自行设计实现(30分钟)

要求:

(1)提供多个账号可以登录

(2)用户录入错误信息时能够进行提示

(3)能对以后的其他业务功能提供用户身份的验证

二、使用dotNet4.0中的ListView、DataPager控件完成数据库端的分页查询,数据库端自行设计实现(1小时)

要求:

(1)数据表结构可以使用

(一)中的用户信息

(2)分页必须使用数据库端分页

(3)使用的控件必须是ASP.NET 4.0提供的ListView、DataPager

控件

(4)页面只完成数据查询显示即可

(5)可上网查找相关的资料

第三篇:华为校招2013-2016年机试题目-个人整理

2016校招机试题

第一题

输入一串用空格隔开的数字串,对于数字串的奇数位按升序排序,偶数位按降序排序 示例输入:4 6 2 3 7 8 1 处理过程:

奇数位:4268升序排序结果:2468 偶数位:6371 降序排序结果:7631 结果输出:2 7 4 6 6 3 8 1 #include #include #include void sort(char input[], int n, char output[]);void main(){ char input1[]=“4 6 2 3 6 7 8 1”;char output1[16];int m=15;sort(input1,m,output1);for(int i=0;i

printf(“%c ”,output1[i]);printf(“n”);}

void sort(char input[],int n,char output[]){ int i,j,t1,t2,t=0;int *b=(int *)malloc(sizeof(int)*n);int *c=(int *)malloc(sizeof(int)*n);

b[0]=input[0]-'0';for(i=4,t1=1;i

for(j=t1-1;((input[i]-'0')=0);j--)

{

b[j+1]=b[j];

}

b[j+1]=input[i]-'0';}

c[0]=input[2]-'0';for(i=6,t2=1;i

for(j=t2-1;((input[i]-'0')>c[j])&&(j>=0);j--)

{

c[j+1]=c[j];

}

c[j+1]=input[i]-'0';}

for(i=0,j=0;i

output[i]=b[j]+'0';

output[i+1]=' ';

output[i+2]=c[j]+'0';

output[i+3]=' ';} } 2.精灵王子爱好冒险,在一次探险历程中,他进入了一个神秘的山洞。在洞穴深处,精灵王子不小心触动了洞穴内暗藏的机关,整个洞穴将很快塌陷,精灵王子必须尽快逃离洞穴。精灵王子的跑步速度为17m/s,以这样的速度可能是无法逃出洞穴的。庆幸的是精灵王子拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗法值10点。精灵王子的魔法值恢复的速度为4点/s,只能在原地休息状态时才能恢复。

现在已知精灵王子的魔法初值M,他所在洞穴中的位置与洞穴出口之间的距离S,距离洞穴塌陷的时间T.你的任务是写一个程序帮助精灵王子计算如何在最短时间内逃离洞穴。若能逃出,输出“Yes”,并输出逃出所用的最短时间;若不能逃出,则输出”No“,同时输出精灵王子在剩下的时间内能走的最远距离。注意字母大小写。注意精灵王子跑步,闪烁或休息活动均以秒(s)为单位。且每次活动的持续时间为整数秒。距离的单位为米(m)。

注:M,S,T均是大于等于0的整数。由输入保证取值合法性,考生不用检查。提醒:

如果输入的S为0,则说明本身已经在出口,输出应为:Yes 0 如果输入的T为0(且S不为0),则说明已经没有时间了,输出应为:No 0 输入格式: M S T 输出格式:

Yes 逃出洞穴所用时间 或

No在洞穴塌陷前能逃跑的最远距离 10 #include void main(){ int M,S,T;int de1=0,de2=0;int start=T;scanf(“%d %d %d”,&M,&S,&T);if(S==0)

printf(“Yes 0n”);else {

}

} if(T==0)printf(“No 0n”);else { while(T){

T--;

if(M>=10)

{

M-=10;

de1+=60;

}

else

{

M+=4;

}

de2+=17;

if(de2

de2=de1;

if(de2>S)

{

printf(“Yes %dn”,start-T);

break;

}

else

{

printf(“No %dn”,de2);

break;

} }

}

2015校招机试题

第一题(60分):

按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8,“abc”,“123456789”,则输出为“abc00000”,“12345678“,”90000000” #include #include void main(){ int m,n,i,j,p=0;char str[1024];int a[10];scanf(“%d%d”,&m,&n);printf(“please input %d string:n”,m);for(i=0;i

scanf(“%s”,&str[p]);

a[i]=strlen(str+p);

p=p+a[i];

} p=0;for(i=0;i

if(a[i]

{

for(j=p;j

printf(“%c”,str[j]);

for(j=a[i];j

printf(“0”);

printf(“n”);

}

else if(a[i]==n)

{

for(j=p;j

printf(“%c”,str[j]);

printf(“n”);

}

else

{

for(j=p;j

printf(“%c”,str[j]);

printf(“n”);

for(j=n+p;j

printf(“%c”,str[j]);

for(j=0;j<(2*n-a[i]);j++)

printf(“0”);

printf(“n”);

}

p=p+a[i];

} } 第一题:拼音转数字

输入是一个只包含拼音的字符串,请输出对应的数字序列。转换关系如下: 描述: 拼音 yi er san si wu liu qi ba jiu

阿拉伯数字 1 2 3 4 5 6 7 8 9 输入字符只包含小写字母,所有字符都可以正好匹配 运行时间限制:无限制 内存限制:

无限制

输入:

一行字符串,长度小于1000 输出:

一行字符(数字)串 样例输入:

yiersansi 样例输出:

1234 #include #include void main(){ int i,j;char str[1000];char ch;scanf(“%s”,str);int len=strlen(str);for(i=0;i

switch(str[i])

{

case 'y':

printf(“1”);

i=i+2;

break;

case 'e':

printf(“2”);

i=i+2;

break;

case 's':

if(str[i+1]=='a')

{

printf(“3”);

i=i+3;

}

else

{

printf(“4”);

i=i+2;

}

break;

case 'w':

printf(“5”);

i=i+2;

break;

case 'l':

printf(“6”);

i=i+3;

break;

case 'q':

printf(“7”);

i=i+2;

break;

case 'b':

printf(“8”);

i=i+2;

break;

case 'j':

printf(“9”);

i=i+3;

break;

default:

break;

} } }

第二题:去除重复字符并排序

运行时间限制:无限制 内容限制:

无限制 输入:

字符串

输出:

去除重复字符并排序的字符串 样例输入:

aabcdefff 样例输出:

abcdef #include #include #include void solve(char *str , int len){

int i,hash[256];

memset(hash,0,sizeof(hash));

for(i=0;i

{

if(0==hash[str[i]])

hash[str[i]]=1;

}

for(i=0;i<256;++i)

{

if(0!=hash[i])

putchar(i);

} printf(“n”);} int main(void){

int len;

char str[1000];

while(scanf(“%s” , str)!= EOF)

{

len = strlen(str);

solve(str , len);

}

return 0;} 第三题:等式变换

输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。1 2 3 4 5 6 7 8 9 = X 比如:

12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数。输入:

正整数,等式右边的数字 输出:

使该等式成立的个数 样例输入:5 样例输出:21 #include #include

int ops[21];const char sym[3]={'+','-',' '};int result,num;

void dfs(int layer,int currentResult,int lastOp,int lastSum){ lastSum*=(layer>9)?100:10;

lastSum+=layer;

if(layer==9){

currentResult+=(lastOp)?(-1*lastSum):lastSum;

if(currentResult==result)

{

++num;

printf(“1”);

for(int i=2;i<=9;++i)

{

if(sym[ops[i-1]]!=' ')

printf(“ %c ”, sym[ops[i-1]]);

printf(“%d”,i);

}

printf(“=%dn”,result);

}

return;} ops[layer]=2;dfs(layer+1,currentResult,lastOp,lastSum);//Continue currentResult+=(lastOp)?(-1*lastSum):lastSum;ops[layer]=0;dfs(layer+1,currentResult,0,0);//Plus ops[layer]=1;dfs(layer+1,currentResult,1,0);//Minus } void main(){ while(scanf(“%d”, &result)!=EOF){

num=0;

dfs(1,0,0,0);

printf(“%dn”,num);} }

2014校招机试题

一、题目描述(60分):

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。

要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);#include #include void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);void main(){ char str[100];char sr[100];scanf(“%s”,str);int len=strlen(str);stringFilter(str,len,sr);

printf(“%sn”,sr);} void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr){ int i,j;int m=0;char hash[256];memset(hash,0,256);for(i=0;i

if(hash[pInputStr[i]]==0)

{

hash[pInputStr[i]]=1;

pOutputStr[m]=pInputStr[i];

m++;

}

} pOutputStr[m]='';}

二、题目描述(40分):

通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串压缩程序,将字符串中连续出席的重复字母进行压缩,并输出压缩后的字符串。压缩规则:

1、仅压缩连续重复出现的字符。比如字符串“abcbc”由于无连续重复字符,压缩后的字符串还是“abcbc”。

2、压缩字段的格式为“字符重复的次数+字符”。例如:字符串“xxxyyyyyyz”压缩后就成为“3x6yz”。

要求实现函数:

void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度

【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 示例

输入:“cccddecc” 输出:“3c2de2c” 输入:“adef” 输出:“adef” 输入:“pppppppp” 输出:“8p” #include #include void stringZip(const char *pInputStr,long lInputLen,char *pOutputStr);void main(){ int i,j;char str[256];char sr[256];scanf(“%s”,str);int len=strlen(str);stringZip(str,len,sr);printf(“%sn”,sr);} void stringZip(const char *pInputStr,long lInputLen,char *pOutputStr){ int i=0,j;int m,z=0;while(i

m=0;

for(j=i+1;j

{

if(pInputStr[i]==pInputStr[j])

m++;

else

break;

}

pOutputStr[z]=m+1+48;

pOutputStr[z+1]=pInputStr[i];

z=z+2;

i=i+m+1;} pOutputStr[z]='';}

三、题目描述(50分):

通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。补充说明:

1、操作数为正整数,不需要考虑计算结果溢出的情况。

2、若输入算式格式错误,输出结果为“0”。要求实现函数:

void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 pInputStr: 输入字符串

lInputLen: 输入字符串长度

【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 示例

输入:“4 + 7” 输出:“11” 输入:“4-7” 输出:“-3”

输入:“9 ++ 7” 输出:“0” 注:格式错误 #include #include #include void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr);void main(){ char str[256];char sr[256];//scanf(“%s”,str);gets(str);printf(“n%sn”,str);int len=strlen(str);arithmetic(str,len,sr);printf(“%sn”,sr);} void arithmetic(const char* pInputStr,long lInputLen,char* pOutputStr)

{

int i,j,num1,num2,result,num_space;

char buffer[4];

bool add,sub;

add=sub=false;

for(i=0,num_space=0;i

{

if(pInputStr[i]==' ')

++num_space;

}

if(2!=num_space)

//空格数非法

{

pOutputStr[0] = '0';

pOutputStr[1] = '';

return;

}

num1=num2=0;

for(i=0;pInputStr[i]!=' ';++i)

{

if(pInputStr[i]>='0'&&pInputStr[i]<='9')

num1=num1*10+pInputStr[i]-'0';

else

//第一个操作数中有非法字符

{

pOutputStr[0]='0';

pOutputStr[1]='';

return;

}

}

for(j=i+1;pInputStr[j]!=' ';++j);

if(1!=j-i-1)

//运算符长度不合法

{

pOutputStr[0]='0';

pOutputStr[1]='';

return;

}

else

//操作符的长度为1

{

if('+'!=pInputStr[i+1]&&'-'!=pInputStr[i+1])

//操作符号非法

{

pOutputStr[0]='0';

pOutputStr[1]='';

return;

}

else

{

if('+'==pInputStr[i+1])

add=true;

if('-'==pInputStr[i+1])

sub=true;

for(i=j+1;i

{

if(pInputStr[i]>='0'&&pInputStr[i]<='9')

num2=num2*10+pInputStr[i]-'0';

else

//第二个操作数中有非法字符

{

pOutputStr[0]='0';

pOutputStr[1]='';

return;

}

}//for

if(add)

result=num1+num2;

else if(sub)

result=num1-num2;

memset(buffer,0,sizeof(buffer));

//itoa(result,buffer,10);

//将整数按10进制转换为字符串

sprintf(pOutputStr,“%d”,result);

//strcpy(pOutputStr,buffer);

}//esle

}//else

}

2013校招机试题

1、删除子串,只要是原串中有相同的子串就删掉,不管有多少个,返回子串个数。#include #include #include

int delete_sub_str(const char *str,const char *sub_str,char *result){

char *temp;

int n,count=0;

n=strlen(sub_str);

temp=(char *)malloc(n+1);

memset(temp,0,n+1);

while(*str)

{

// memcpy(temp,str,n);

strncpy(temp,str,n);

if(strcmp(temp,sub_str)==0)

{

count++;

memset(temp,0,n+1);

str=str+n;

}

else

{

*result=*str;

str++;

result++;

memset(temp,0,n+1);

}

}

free(temp);

return count;}

void main(){

char s[100]={''};

int num=delete_sub_str(“123abc12de234fg1hi34j123k”,“123”,s);

printf(“The number of sub_str is %drn”,num);

printf(“The result string is %srn”,s);}

2、约瑟夫环是一个数学的应用问题:已知 n 个人(以编号1,2,3...n 分别表示)围坐在一张圆桌周围。从编号为 k 的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到m 的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。#include #include typedef struct Node {

int num;

struct Node *next;}LinkList;

LinkList * creat(int n){

LinkList *p,*q,*head;

int i;

p=(LinkList *)malloc(sizeof(LinkList));

p->num=1;head=p;

for(i=2;i<=n;i++)

{

q=(LinkList *)malloc(sizeof(LinkList));

q->num=i;

p->next=q;

p=q;

}

p->next=head;

/*使链表尾指向链表头 形成循环链表*/

return head;}

void fun(LinkList *L,int m){

int i;

LinkList *p,*s,*q;

p=L;

printf(“出列顺序为:”);

while(p->next!=p)

{

for(i=1;i

{

q=p;

p=p->next;

}

printf(“%5d”,p->num);

s=p;

q->next=p->next;

p=p->next;

free(s);

}

printf(“%5dn”,p->num);}

void main(){

LinkList *L;

int n,m;

n=9;m=5;

L=creat(n);

fun(L,m);

} 3.比较一个数组的元素

是否为回文数组 1234321 123 4 321 这个就是回文.“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。

设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。例如,若n=1234321,则称n为一回文数;但若n=1234567,则n不是回文数。注意:

1.偶数个的数字也有回文数124421 2.小数没有回文数 #include #include void main(){ int i=0,j;char str[100];gets(str);int len=strlen(str);while(i

if(str[i]==str[len-i-1])

{

i++;

}

else

break;} if(i==len/2)

printf(“The %s is huiwen arrayn”,str);else

printf(“The %s is not huiwen arrayn”,str);}

4数组比较(20 分)

• 问题描述:

比较两个数组,要求从数组最后一个元素开始逐个元素向前比较,如果2个数组长度不等,则只比较较短长度数组个数元素。请编程实现上述比较,并返回比较中发现的不相等元素的个数 比如:

数组{1,3,5}和数组{77,21,1,3,5}按题述要求比较,不相等元素个数为 0 数组{1,3,5}和数组{77,21,1,3,5,7}按题述要求比较,不相等元素个数为 3 • 要求实现函数:

int array_compare(int len1, int array1[], int len2, int array2[])【输入】 int len1:输入被比较数组 1 的元素个数;

int array1[]:输入被比较数组 1;

int len2:输入被比较数组 2的元素个数;

int array2[]:输入被比较数组 2;

【输出】 无

【返回】 不相等元素的个数,类型为 int • 示例

1)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5},int len2 = 5 函数返回:0

2)输入:int array1[] = {1,3,5},int len1 = 3,int array2[] = {77,21,1,3,5,7},int len2 = 6 函数返回:3 #include #include int array_compare(int len1,int array1[],int len2,int array2[]);void main(){ int n;int a1[]={3,4,5};int len1=3;//int a2[]={1,2,4,5,7};int a2[]={1,2,3,4,5};int len2=5;n=array_compare(len1,a1,len2,a2);printf(“%dn”,n);} int array_compare(int len1, int array1[],int len2,int array2[]){ int i=len1-1,j=len2-1;int m=0;while(i>=0&&j>=0){

if(array1[i]==array2[j])

{

i--;

j--;

}

else

{

i--;

j--;

m++;

}

} return m;}

5、约瑟夫问题

•问题描述:

输入一个由随机数组成的数列(数列中每个数均是大于0的整数,长度已知),和初始计数值 m。从数列首位置开始计数,计数到 m后,将数列该位置数值替换计数值 m,并将数列该位置数值出列,然后从下一位置从新开始计数,直到数列所有数值出列为止。如果计数到达数列尾段,则返回数列首位置继续计数。请编程实现上述计数过程,同时输出数值出列的顺序.比如:输入的随机数列为:3,1,2,4,初始计数值 m=7,从数列首 位置开始计数(数值 3 所在位置)

第一轮计数出列数字为 2,计数值更新 m=2,出列后数列为 3,1,4,从数值4所在位置从新开始计数

第二轮计数出列数字为 3,计数值更新 m=3,出列后数列为1,4,从数值1所在位置开始计数

第三轮计数出列数字为 1,计数值更新 m=1,出列后数列为4,从数值4所在位置开始计数

最后一轮计数出列数字为 4,计数过程完成。输出数值出列顺序为:2,3,1,4。

• 要求实现函数:

void array_iterate(int len, int input_array[], int m, int output_array[])【输入】int len:输入数列的长度;

int intput_array[]:输入的初始数列

int m:初始计数值

【输出】int output_array[]:输出的数值出列顺序

【返回】无

• 示例

输入:int input_array[] = {3,1,2,4},int len = 4,m=7

输出:output_array[] = {2,3,1,4} #include #include #include typedef struct Node { int num;struct Node *next;}Linklist;void array_iterate(int len,int input_array[],int m,int output_array[]);Linklist *creatL(int a[],int w);void main(){ int n=4;int array[]={3,1,2,4};int array1[4];int z=7;array_iterate(n,array,z,array1);for(int i=0;i

printf(“%d ”,array1[i]);} printf(“n”);} void array_iterate(int len,int input_array[],int m,int output_array[]){ int i,j=0,t;t=m;Linklist *head,*p,*q,*s;head=creatL(input_array,len);p=head;while(p->next!=p){

for(i=0;i

{

q=p;

p=p->next;

}

output_array[j++]=p->num;

t=p->num;

s=p;

q->next=p->next;

p=q->next;} output_array[j]=p->num;} Linklist *creatL(int a[],int w){ int i;Linklist *p,*q,*L;L=(Linklist *)malloc(sizeof(Linklist));L->num=a[0];p=L;for(i=1;i

q=(Linklist *)malloc(sizeof(Linklist));

q->num=a[i];

p->next=q;

p=q;} p->next=L;return L;}

6、手机号码合法性判断(20分)

问题描述: 我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:86***。特点如下:

1、长度 13 位;

2、以 86 的国家码打头;

3、手机号码的每一位都是数字。

请实现手机号码合法性判断的函数要求:

1)如果手机号码合法,返回 0;

2)如果手机号码长度不合法,返回1

3)如果手机号码中包含非数字的字符,返回 2;

4)如果手机号码不是以 86打头的,返回 3;

【注】除成功的情况外,以上其他合法性判断的优先级依次降低。也就是说,如果判断出长度不合法,直接返回1即可,不需要再做其他合法性判断。要求实现函数:

Int verifyMsisdn(char * inMsisdn)

【输入】char* inMsisdn,表示输入的手机号码字符串。

【输出】 无

【返回】 判断的结果,类型为 int。

示例

输入:inMsisdn =“869123456789“

输出:无

返回:1 输入:inMsisdn =“88***9“

输出:无

返回:3 输入:inMsisdn = “86***9“

输出:无

返回:0 #include #include int verifyMsisdn(char * inMsisdn);void main(){ int n;char str[100];gets(str);n=verifyMsisdn(str);printf(“%dn”,n);} int verifyMsisdn(char * inMsisdn){ int len;len=strlen(inMsisdn);if(len!=13){

return 1;} else {

for(int i=0;i

{

if((inMsisdn[i]<'0')||(inMsisdn[i]>'9'))

return 2;

}

if((inMsisdn[0]!='8')||(inMsisdn[1]!='6'))

return 3;

else

return 0;} }

7、使用C语言实现字符串中子字符串的替换描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace),strSrc为原字符串,strFind 是待替换的字符串,strReplace 为替换字符串。举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:ABCDEFGHIJKLMNOPQgggUVWXYZ #include #include void StrReplace(char* strSrc,char* strFind,char* strReplace);void main(){ char str[]=“ABCDEFGHIJKLMN”;char str1[]=“HIJ”;char str2[]=“ggg”;StrReplace(str,str1,str2);printf(“%sn”,str);} void StrReplace(char* strSrc,char* strFind,char* strReplace){ int len1,len2,z,i,j,p;len1=strlen(strSrc);len2=strlen(strFind);

for(i=0;i

p=z=i;j=0;

while(strSrc[p++]==strFind[j++])

{

if(j==len2)

{

for(p=0;p

strSrc[p+z]=strReplace[p];

}

} } }

8.算分数的问题,去掉一个最高分一个最低分,求平均分 #include int average(int a[],int n);void main(){ int m;int b[5]={2,1,4,7,3};m=average(b,5);printf(“%dn”,m);} int average(int a[],int n){ int i,j,temp;int sum=0;for(i=0;i

for(j=0;j

{

if(a[j]>a[j+1])

{

temp=a[j];

a[j]=a[j+1];

a[j+1]=temp;

}

} } for(i=1;i

sum+=a[i];return(sum/(n-2));}

9、简单四则运算

• 问题描述:输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值 注:

1、表达式只含

+,-, *, / 四则运算符,不含括号

2、表达式数值只包含个位整数(0-9),且不会出现0 作为除数的情况

3、要考虑加减乘除按通常四则运算规定的计算优先级

4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无 0 作为除数情况发生

5、输入字符串一定是符合题意合法的表达式,其中只包括数字字符和四则运算符字符,除此之外不含其它任何字符,不会出现计算溢出情况

• 要求实现函数:int calculate(int len,char *expStr)

【输入】int len: 字符串长度;char *expStr: 表达式字符串;

【输出】无

【返回】计算结果

• 示例

1)输入:char *expStr = “1+4*5-8/3”

函数返回:19

2)输入:char *expStr = “8/3*3”

函数返回:6

#include #include int calculate(int len,char *expStr);void main(){ int n;char str[]=“1+4*5-8/3”;//char *str=“1+4*5-8/3”;//注意此处不正确,因为函数calculate中要用指针str对字符串常量进行改变,这是不能改变的,//因为指针str只能代表字符串常量的首地址,没有分配数组空间;

n=calculate(9,str);printf(“%d n”,n);} int calculate(int len,char *expStr){ //先从中缀表达式“1+4*5-8/3”转换为后缀表达式“145*+83/-”

struct

{

char opdata[200];

int top;

}opstack;//定义操作符栈

opstack.top=-1;

int i=0;//遍历字符串的下标

int t=0;//当前后缀表达式的长度

char ch=expStr[i];

while(i

//while(ch!='')

{

switch(ch)

{

case '+':

case '-':

while(opstack.top!=-1)

{

expStr[t]=opstack.opdata[opstack.top];

opstack.top--;

t++;

}

opstack.top++;

opstack.opdata[opstack.top]=ch;

break;

case '*':

case '/':

while(opstack.top!=-1&&(opstack.opdata[opstack.top]=='*'||opstack.opdata[opstack.top]=='/'))

{

expStr[t]=opstack.opdata[opstack.top];

opstack.top--;

t++;

}

opstack.top++;

opstack.opdata[opstack.top]=ch;

break;

default:

expStr[t]=ch;

t++;

break;

}

i++;

ch=expStr[i];

}

while(opstack.top!=-1)//将栈中所有的剩余的运算符出栈

{

expStr[t]=opstack.opdata[opstack.top];

opstack.top--;

t++;

}

expStr[t]='';

printf(“%sn”,expStr);

//根据后最表达式计算结果

struct

{

int numeric[200];

int top;

}data;

data.top=-1;

i=0;

ch=expStr[i];

while(ch!='')

{

if(ch>='0'&&ch<='9')

{

data.top++;

data.numeric[data.top]=ch-'0';

}

else if('+'==ch)

{

int tmp=data.numeric[data.top-1]+data.numeric[data.top];

data.top--;

data.numeric[data.top]=tmp;

}

else if('-'==ch)

{

int tmp=data.numeric[data.top-1]-data.numeric[data.top];

data.top--;

data.numeric[data.top]=tmp;

}

else if('*'==ch)

{

int tmp=data.numeric[data.top-1]*data.numeric[data.top];

data.top--;

data.numeric[data.top]=tmp;

}

else if('/'==ch)

{

if(data.numeric[data.top]==0)

{

printf(“cannot be zero of the dividen”);

exit(1);

}

int tmp=data.numeric[data.top-1]/data.numeric[data.top];

data.top--;

data.numeric[data.top]=tmp;

}

i++;

ch=expStr[i];

}

return data.numeric[data.top];}

10、选秀节目打分,分为专家评委和大众评委,score[] 数组里面存储每个评委打的分数,judge_type[] 里存储与 score[] 数组对应的评委类别,judge_type[i] == 1,表示专家评委,judge_type[i] == 2,表示大众评委,n 表示评委总数。打分规则如下:专家评委和大众评委的分数先分别取一个平均分(平均分取整),然后,总分=专家评委平均分

* 0.6 +大众评委 * 0.4,总分取整。如果没有大众评委,则总分=专家评委平均分,总分取整。函数最终返回选手得分。

函数接口 int cal_score(int score[], int judge_type[], int n)

#include int cal_score(int score[],int judge_type[],int n);void main(){ int s[5]={4,6,3,5,4};int type[5]={1,1,1,1,1};int m=cal_score(s,type,5);printf(“%dn”,m);} int cal_score(int score[],int judge_type[],int n){ int sum1=0,sum2=0;int i,j,p=0,q=0;int average;for(i=0;i

if(judge_type[i]==1)

{

p++;

sum1+=score[i];

}

else

{

q++;

sum2+=score[i];

}

} if(q==0){

average=sum1/p;} else {

average=sum1/p*0.6+sum2/q*0.4;} return average;}

11、给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到output[] 数组最中间的位置,如果数组长度 n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置 的两边,按照一左一右的顺序,依次存放剩下的数。

例如:input[] = {3, 6, 1, 9, 7}

output[] = {3, 7, 9, 6, 1};

input[] = {3, 6, 1, 9, 7, 8}

output[] = {1, 6, 8, 9, 7, 3} #include #include

void sort(int input[], int n, int output[]);void main(){ int input1[]={3,6,1,9,7,8};int output1[6];int m=6;sort(input1,m,output1);for(int i=0;i

printf(“%d ”,output1[i]);printf(“n”);}

//先用简单选择排序

void sort(int input[], int n, int output[]){ int i,j,min,temp;for(i=0;i

min=i;

for(j=i+1;j<=n;j++)

{

if(input[j]

min=j;

}

if(min!=i)

{

temp=input[i];

input[i]=input[min];

input[min]=temp;

} } for(i=0;i

printf(“%d ”,input[i]);printf(“n”);output[n/2]=input[n-1];for(i=n-2,j=1;i>=0;i-=2,j++){

output[n/2-j]=input[i];

output[n/2+j]=input[i-1];} }

12、操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于 255 的为非法任务,应予以剔除。现有一任务队列 task[],长度为n,task 中的元素值表示任务的优先级,数值越小,优先级越高。函数 scheduler 实现如下功能,将 task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在 task[] 数组中的下标),并且优先级高的任务排在前面,数组元素为-1表示结束。例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99}

system_task[] = {0, 3, 1, 7,-1}

user_task[] = {4, 8, 2, 6,-1}

函数接口

void scheduler(int task[], int n, int system_task[], int user_task[])

第四篇:二级Access 机试小总结

基本操作

1.设置“年龄”字段的“有效性规则”属性为:大于等于17且小于等于55;

“有效性规则”框中直接输入“>=17 And <=55”;大于等于18;“有效性规则”框中直接输入“>=18”

2.设置“聘用时间”字段的默认值为:系统当前日期;

默认值“框中直接输入”=date()“;

3.删除表中编号为”000024“和”000028“的两条记录;

打开表,选中编号为”000024“的记录,然后点击工具栏上的”删除记录“按钮,或者单击鼠标右键,在弹出的下拉菜单中选择”删除记录“,再弹出的对话框中选择”是“;

4.设置”姓名“字段为”必填“字段;

把该字段的”必填字段“属性设置为”是“;

5.设置”年龄“字段的”有效性文本“属性为:”输入的年龄应在10岁到60岁之间,请重新输入;

在那个“有效性规则”框中直接输入“>=10 And <=60”,然后在“有效性文本”右边的框中直接输入“输入的年龄应在10岁到60岁之间,请重新输入。

6.将”exam.mdb“数据库文件中的表对象”tLine“导入到”samp1.mdb“数据库文件内,表名不变。

选择”文件“菜单下的”获取外部数据“中的”导入“,或者右击鼠标,在弹出的下拉菜单中选择”导入“,然后在”导入“对话框中选择考生文件夹下的”exam.mdb“,再选择该库中的”tLine“,点击”确定“进行导入。7.删除表结构中的”xx“字段;

选中”xx“字段行,再点击工具栏上的”删除行“按钮或者在鼠标右击后弹出的菜单中选择”删除行“,在弹出的对话框中选择”是“;

8.将考生文件夹下文本文件tStud.txt中的数据导入并追加保存在表”tStud“中。

选择”文件“菜单下的”获取外部数据“中的”导入“,或者右击鼠标,在弹出的下拉菜单中选择”导入“,然后在”导入“对话框中选择考生文件夹下的”tStud.txt“(注意选择文件类型),点击”导入“后再点击”下一步“,选中”第一行包含字段名“的复选框,点击”下一步“,选中现有的表tStud,点击”下一步“、”完成“即可。

9.设置”xx时间“字段的默认值为:2005-8-2;

选中”xx时间“字段,在”默认值“属性右边的文本框中输入”#2005-8-2#“;

10.在”samp1.mdb“数据库文件中做一个表对象”tEmp“的备份,命名为”tEL“。

选中表对象”tEmp“,选择”文件“菜单下的”另存为“,将表”tEmp“另存为:tEL,点击”确定“即可。

11.将”年代“字段的”有效性规则“设置为:输入的日期必须满足在1980年以后(含1980年)的作曲家,并设置”有效性文本“为:”年代日期必须为1980年以后的作曲家“(不包括双引号);

打开数据库菜单选择”新建(N)“,在弹出的”新建表“对话框中,点击”设计视图“按钮,在弹出的表设计器中按题面要求依次输入各字段的定义;选中”作曲家“行,点击工具栏上的”主键“按钮,在”标题“字段属性中输入”作曲家编号“;选中”作曲家名称“字段,再选中下面的”必填字段“,在右边的框中输入”是“;选中”年代“字段,在”格式“字段属性中选择”长日期“,再选中下面的”有效性规则“,在右边的框中输入”>=#1980-01-01#“,选中下面的”有效性文本“,在右边的框中输入”年代日期必须为1980年以后的作曲家“。

12.打开”xx“表,冻结”xx“字段,隐藏”xxx“字段,并保存显示布局。

打开表,选中”xx“列,选择”格式“菜单下的”冻结列“;再选中”xxx“列,选择”格式“菜单下的”隐藏列“。完成上述操作后,建立表对象”tEmp“和”tSalary“的表间一对多关系,并实施参照完整性;

13.将考生文件夹下”samp0.mdb“数据库文件中的表对象”tTest“链接到”samp1.mdb“数据库文件中,要求链接表对象重命名为tTemp。

单击”文件“菜单下”获取外部数据“下的”链接表“菜单,在弹出的对话框中选择考生文件夹中的”samp0.mdb“数据库,点击”链接“按钮,再选择”tTest“表,单击”确定“按钮,在数据库窗口的表对象中已经有了一个名字为”tTest“的表了,选中”tTest“表,选择”编辑“菜单下的”重命名“,修改为tTemp。

14.将”tSell“"表中”数量“字段的有效性规则属性设置为大于等于0,并在输入数据出现错误时,提示”数据输入有误,请重新输入“的信息;

点击”设计视图“,选中”数量“字段,再选中下面的”有效性规则“,在右边的框中输入”>=0“,选中下面的”有效性文本“,在右边的框中输入”数据输入有误,请重新输入“。

15.将宏”mTest“删除。

选中宏”mTest“,选择”编辑“菜单中的”删除“,在弹出的提示中选择”是“。

16.将”xx时间“字段的显示设置为”××月××日×××ד形式;

打开”设计视图“,选择”xx时间“字段,在”格式“下输入”mm月dd日yyyy“。

简单应用

1.查找并显示所有姓李并且年龄大于25岁学生的”姓名“、”年龄“字段内容,所建查询命名为”学生查询2“。

在年龄字段的条件中输入”>25“,在姓名字段的条件中输入”Like “李*“,以”学生查询2“保存。

2.创建一个删除查询,删除表对象”tTemp“中所有姓”李“的记录,所建查询命名为”qT4“。

然后点击”查询“菜单中的”删除查询“菜单(或点击右键,选择查询类型中的”删除查询“),在字段中选择”姓名“,并在”条件“中输入”Like “李*”“,最后以”qT4“保存查询。

3.设置窗体的”导航按钮“属性为”否“,并将窗体”标题“属性设为”信息浏览“;在窗体的主体节区添加两个命令按钮,分别命名为”comR1“和”comR2“,按钮标题为”浏览“和”退出“。

打开窗体“设计”视图,单击工具栏上的”属性“按钮,设置窗体的”标题“和”导航按钮“属性;在工具箱中选择命令按钮,添加到主体中,单击工具栏上的”属性“按钮,设置这两个命令按钮的”名称“和”标题“属性。最后以”窗体1“保存窗体。

4.创建一个追加查询,从表”tTeacher1“里检索出年龄小于等于45的党员教授或年龄小于等于35的党员副教授记录,将其追加到空白表”tTeacher2“的相应五个字段中,所建查询命名为”qT3“;

选择”新建(N)“,在弹出的”新建查询“窗体上选择”设计视图“,然后在弹出的”显示表“窗体上选择”tTeacher1“表,选择”查询“菜单中的”追加查询“菜单(或者右击鼠标,在弹出的菜单中选择”追加查询“),然后从”tEmployee“选择”编号“、”姓名“、”性别“、”年龄“和”职称“五个字段,在”年龄“字段的”条件“中输入”<=45“并在”或“中输入”<=35“,在”职称“字段的”条件“中输入”教授“并在”或“中输入”副教授“,在”字段“中选择”政治面目“,在该字段的”条件“和”或“中输入”党员“,最后以”qT3“保存查询。

5.创建一个窗体,命名为”fTest“。将窗体”标题“属性设置为”测试窗体“;在窗体的主体节区添加一个命令按钮,命名为”btnR“,按钮标题为”测试“;设置该命令按钮的单击事件属性为给定的宏对象”mTest“。点击”窗体“,选择”新建(N)“,在弹出的”新建查询“窗体上选择”设计视图“,在窗体的设计试图中选择工具栏上的”属性“按钮,在窗体属性的”标题“属性中输入”测试窗体“;从”工具箱“中选择”命令按钮“添加到窗体的”主体“中,点击”属性“按钮,在属性对话框中把”名称“属性设置为”btnR“,”标题“属性设置为”测试“,”单击“属性中选择”mTest“,最后以”fTest“保存窗体。

6.查找并显示旅游”天数“在五到十天之间(包括五天和十天)的”天数“,所建查询名为”qT2“;

然后在”天数“字段的”条件“中输入”>=5 And <=10“,最后以”qT2“保存查询。

7.创建一个选择查询,显示表的所有字段内容,并添加一个计算字段”优惠后价格“,计算公式为:优惠后价格=费用*(1-10%),所建查询名为”qT3“;

选择表中的全部字段,然后在第五个字段中输入”优惠后价格:([费用]*(.9))“(”或优惠后价格:([费用]*(1-.1))“),最后以”qT3“保存查询。

8.创建一个交叉表查询,统计并显示每种产品不同规格的平均单价,显示时行标题为产品名称,列标题为规格,计算字段为单价,所建查询名为”qT4“。注意:交叉表查询不做各行小计。

打开“设计”视图,然后点击”查询“菜单中的”交叉表查询“菜单(或点击右键,选择查询类型中的”交叉表查询“)。在字段中选择”产品名称“,”交叉表“中选择”行标题“;选择”规格“字段,在”交叉表“中选择”列标题“;选择”单价“字段,”交叉表“中选择”值“,并在”总计“中选择”平均值“。最后以”qT4“保存查询。

9.创建一个参数查询,按出版社名称查找某出版社的图书信息,并显示图书的”书名“、”类别“、”作者名“和”出版社名称“等四个字段的内容。当运行该查询时,提示框中应显示”请输入出版社名称:“,所建查询名为qT3”。

然后在“出版社名称”字段的“条件”中输入“[请输入出版社名称:]”,最后以“qT3”保存查询。10.创建一个选择查询,统计所有图书的平均单价,并将显示的字段设为“平均单价”,所建查询名为“qT4”。

在弹出的“新建查询”窗体上选择“设计视图”,然后在弹出的“显示表”窗体上选择“tBook”表,然后在“字段”中输入“平均单价:(Avg([单价]))”(或“平均单价:(Sum([单价])/Count([图书编号]))”),最后以“qT4”保存查询。

11.以表“tTeacher1”为数据源创建一个选择查询,查找并显示教师的“编号”、“姓名”和“工龄”三个字段内容。其中,标题为“工龄”的显示字段为计算字段,所建查询命名为“qT3”;

先选择“编号”和“姓名”字段,然后在第三个字段中输入“工龄: Year(Date())-Year([工作时间])”,最后以“qT3”保存查询。

12.以表对象“tStaff”为数据源创建一个参数查询,查找教师的“编号”、“姓名”、“性别”和“职称”四个字段内容。其中“性别”字段的条件为参数,要求引用窗体对象“fTest”上控件“tSex”的值,所建查询命名为“qT3”;

选择题目上所说的四个字段,再在“性别”字段的“条件”中输入“[Forms]![fTest]![tSex]”,最后以“qT3”保存查询。

13.以表“tTeacher1”为数据源创建一个选择查询,查找教师的“编号”、“姓名”和“联系电话”三个字段内容,然后将其中的“编号”与“姓名”两个字段合二为一,这样,查询的三个字段内容以两列形式显示,标题分别为“编号姓名”和“联系电话”,所建查询命名为“qT2”;

在选择了“tTeacher1”表后,然后在“字段”中输入“编号姓名:([编号]+[姓名])”,并选择“显示”中的钩,再把“联系电话”字段加到“字段”中,最后以“qT2”保存查询。

14.创建一个更新查询,将表“tBmp”中“年龄”字段值加1,所建查询命名为“qT4”。

打开“设计视图”,然后在弹出的“显示表”窗体上选择“tBmp”表,选择“查询”菜单中的“更新查询”菜单。然后从“tBmp”选择“年龄”字段,在“年龄”字段的“更新到”中输入“[年龄]+1”,运行查询,最后以“qT4”保存查询。

15.以表“tScore”和“tStud”为数据源创建一个总计查询,查找学生的成绩信息,并显示为“学号”、“姓名”和“平均成绩”三列内容,其中“平均成绩”一列数据为计算字段,由计算得到,选择“固定”格式并保留两位小数显示,所建查询命名为“qT2”;

然后选择“学号”、“姓名”字段,再点击工具栏上的“总计”按钮(或选择右击鼠标的下拉菜单中的“总计”),然后在第三个字段中输入“平均成绩:成绩”,“总计”中选择“平均值”,再选择“视图”菜单下的“属性”菜单,“格式”为“固定”,小数位数为2,最后以“qT2”保存查询。。

综合应用

1.分别设置复选框选项按钮opt1和opt2的“默认值”属性为假值;

默认值属性为“=False”;

2.在报表对象rTeacher的报表页脚节区位置添加一个计算控件,计算并显示教师的平均年龄。计算控件放置在距上边0.3厘米、距左侧3.6厘米,命名为“tAvg” 选择一个文本框,放到报表页脚中,选择工具栏上的“属性”按钮,在弹出的属性框中设置名称、上边距和左边距属性,并在控件来源属性中设置“=Avg(年龄)” 3.设置报表主体节区内文本框“tDept”的控件来源属性为计算控件。要求该控件可以根据报表数据源里的“所属部门”字段值,从非数据源表对象“tGroup”中检索出对应的部门名称并显示输出。(提示:考虑Dlookup函数的使用。)注意:不允许修改数据库中表对象“tEmployee”和“tGroup”及查询对象“qEmployee”;不允许修改报表对象“qEmployee”中未涉及的控件和属性。

选择“所属部门”下面的“tDept”文本框,在控件来源属性中输入=DLookUp(“名称”,“tGroup”,“部门编号='” & 所属部门 & “'”)。

DLookUp函数中,第一个参数为需要返回其值的字段,第二个参数为第一个参数所属表或查询的名称,第三个参数为第一个字段值的查找范围,即查询条件,相当于查询语句中的WHERE子句。

4.在报表的报表页脚区添加一个计算控件,要求依据“团队ID”来计算并显示团队的个数。计算控件放置在“团队数:”标签的右侧,计算控件命名为名称为“bCount”;

选择一个文本框,放到报表页脚中“团队数”标签的右侧,设置它的名称为“bCount”,并在控件来源属性中输入“=Count([团队ID])”。

5.设置报表“rEmp”的主体节区内“tSex”文本框控件显示“性别”字段数据为男或女;

选中“性别”标签下面的文本框,并点击工具栏上的“属性”按钮,设置文本框的控件来源属性为“=IIf([性别]=1,”男“,”女“)” 6.将考生文件夹下的图像文件“test.bmp”设置为窗体“fEmp”的背景。同时,将窗体按钮“btnP”的单击事件属性设置为宏“mEmp”,以完成按钮单击打开报表的操作。

打开窗体fEmp的设计视图,并点击工具栏上的“属性”按钮,设置窗体的图片属性为“test.bmp”;再选中“btnP”命令按钮,设置单击属性为“mEmp”。

7.设计报表“rEmp”的主体节区内“tOpt”复选框控件依据报表记录源的“性别”字段和“年龄”字段的值来显示状态信息:性别为“男”且年龄小于20时显示为选中的打钩状态,否则显示为不选中的空白状态;

打开“设计”,选中“tOpt”复选框,并点击工具栏上的“属性”按钮,设置文本框的控件来源属性为“=IIf([年龄]<20 And [性别]=”男“,True,False)”; 8.将“fEmp”窗体上名为“bTitle”的标签文本颜色改为红色显示。

打开窗体fEmp的设计视图,选中“bTitle”的标签,设置“前景色”属性为红色

9.将报表“rEmp”的主体节区内“tAge”文本框控件改名为“tYear”,同时依据报表记录源的“年龄”字段值计算并显示出学生的出生年信息;

选中报表“rEmp”,点击“设计(D)”按钮,选中“tAge”文本框,并点击工具栏上的“属性”按钮,设置文本框的名称属性为“tYear”,控件来源属性为“=Year(Now())-[年龄]”;

10.设置所建命令按钮bC的单击事件,使用户单击该命令按钮后,CDID标签的显示颜色改为红色。要求用VBA代码实现。

在工具箱中选择一个命令按钮控件,放到窗体页脚中,放到窗体页脚中之后会出现一个提示框,点击“取消”按钮,设置这个命令按钮的名称为“bC”,标题属性为“改变颜色”,点击“单击”属性右边的“„”打开代码生成器,输入“CDID_标签.ForeColor = 255”,保存窗体。

第五篇:华为2013北京软件工程师 上机 机测 编程题目

华为2013年校招机测题目

华为2013年,在北京的软研工程师,需要参加机测,机测通过后,进入面试。

机测时间是30分钟,分批进行。在线提交系统,服务器会编译,给出结果。语言可以选择C,C++,Java.系统给出编译结果,大概分为:编译错误,答案错误,正确这几类。

北京机测一共2个编程题,没有其他题。任意选一个答题,2个都做更好。

【提示】:

1、系统有时提交会出问题,建议编完之后,保存在txt文档里,万一提交失败,可以直接粘贴,重新提交;

2、有任何问题,马上找考官,不然很浪费时间。

3、答对了,时间越短,分数越高。据考官说“答案错误”,他们会看程序,给分。没说编译错误会不会。反正答题的人很多,编译错误的一大堆,估计他们不会管了。答案错误那种,估计他们也来不及细看。所以,还是尽量做到正确吧,不然很难有机会。

4、超出30分钟后,修改也行,不过超时会影响分数。30分钟前,一定要提交1次,不要写了半天,没提交。答案没对的话,建议超时了也要修改,不然,就没戏了。

以下是题目,不是原文,但是要点没错:

1、判断比整数N小的数里,有多少个与7相关的数。与7相关指:7的倍数或者带有7的数(比如7、14、17、27)。只需要给出总的个数,不需要输出它们。N小于30000.2、给一个数组,输出数组里超出所有元素平均值的元素的个数。比如:1、2、3、4、5,输出3.int get(intiArray[],intiLen).

下载华为机试题目总结(程序篇)(合集5篇)word格式文档
下载华为机试题目总结(程序篇)(合集5篇).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    北京理工大学机试

    鲤鱼网() 计算机系2000年研究生入学复试上机试题: ---------------- 1、输入任意4个字符(如:abcd),并按反序输出(如:dcba) 2、设a、b、c均是 0 到 9 之间的数字,abc、bcc是两个三......

    华为面试题目总结[优秀范文五篇]

    应聘华为各类工程师通信基础题库以及答案-知己知彼、百战不殆 电信基础知识题库 (以下题目可以按填空、判断或简答方式出题,也可以经过变化成为选择题) 1、语音信号数字化过程中......

    心理健康辅导员机试答案

    注:显示答案,绿色加粗字体的选项是正确答案! 1. ( )指一个人的独立决策、主宰自己情绪和不依赖外界的帮助, 在任何情况下都能努力成(0.0分/0.0分) 就自己目标的能力 A. 自主 B. 自......

    龙门吊机试吊总结报告

    龙门吊机试吊总结报告 为保障我合同段T梁预制生产工作能安全有序进行,2010年9月5日,项目部在T梁预制现场组织龙门吊机自检试吊工作,对预制场内两台吊机进行试吊自检,对配合生产3......

    企业文化试题目2

    企业文化管理理念试题一、填空题(每空1分)1、诚信、责任、创新、奉献是国网公司的(核心价值)观。2、国网公司的发展战略是建设( “一强三优“)的现代公司。3、严抓严管、诚信廉洁......

    企业文化试题目1

    企业文化管理理念试题一、填空题(每空1分)1、诚信、责任、创新、奉献是国网公司的(核心价值)观。2、国网公司的发展战略是建设(一强三优)的现代公司。3、严抓严管、诚信廉洁、忠诚......

    人力资源部主管试题目

    人力資源部主管試題目1. 簡述個人管理風格.2. 常用的招聘面試方法有哪些?如何實現人才與企業的無縫對接?如何開發儲備人才?3. 內部員工培訓的組織形式有哪些?如何踴躍驗証......

    中特考试题目

    1、谈谈你对党的十八届六中全会精神的认识 党的十八大以来,我们党先后召开十八届三中、四中、五中全会,对全面深化改革、全面依法治国、全面建成小康社会作了部署,这次全会专题......