中山市事业编计算机类专业知识题目,中山大学计算机历年复试面试考研试题合集(4)...

中山大学计算机历年复试面试考研试题合集(4)本站小编 免费考研网/2019-12-09

puts   (substr);

n=findStr(str,substr);

printf   ( "Substr   counted   is   %d ",   n);

getch();

}

int   findStr(char   *str,   char   *substr)

{

int   n=0,i=0,j=0;

while   (*(str+i)!= '\0 ')

{

if   (*(str+i)==*(substr+j))   {i++;   j++;}

else     {i=i-j+1;   j=0;}

if   (*(substr+j)== '\0 ')   {n++;   j=0;}

}

return   n;

}

串的模式匹配问题

int findStr(char *str,char *substr)

{ int  n;

char  *p , *r;

n=0;

while ( *str )

{  p=str;

r=substr;

while(*r)

if(*r==*p) {  r++;  p++;  }

else  break;

if(*r=='\0')

n++;

str++;   }

return  n;

采用顺序存储结构存储串,编写一个函数计算一个子串在一个字符串中出现的次数,如果该子串不出现则为0。(要求使用KMP算法)

最佳答案 #include

/*在此定义一个int型数组next[],next[j]对应于当子串在位置j比较失败时的下一次匹配时子串的开始位置,由子串决定。*/

int StrIndex(char *S,char *T)

{int i,j;

i=0;

j=0;

int Slen=strlen(S);

int Tlen=strlen(T);

while((j<=(Tlen-1))&&((Slen-1-i+1)>=(Tlen-1-j+1)))

{if(S[i]==T[j]) {i++;

j++;}

else {

j=next[j];

if(j==-1){i++;j++;}

}

}

if(j>(Tlen-1)) return (i-j+1);

else return 0;

}

如:

S="a b a b c a b a a b c a a b a a b a b c a a b"

T="a b a a b a b c"

定义

int next[8]={-1,0,0,1,0,0,3,2};

typedef char DataType; //假设结点的数据域类型为字符

typedef struct node{ //结点类型定义

DataType data; //结点的数据域

struct node *next;//结点的指针域

}ListNode

typedef ListNode *LinkList;

ListNode *p;

LinkList head;

注意:

①*LinkList和ListNode是不同名字的同一个指针类型(命名的不同是为了概念上更明确)

②*LinkList类型的指针变量head表示它是单链表的头指针

③ListNode类型的指针变量p表示它是指向某一结点的指针

6、指针变量和结点变量

┌────┬────────────┬─────────────┐

│ │ 指针变量 │ 结点变量 │

├────┼────────────┼─────────────┤

│ 定义 │在变量说明部分显式定义 │在程序执行时,通过标准 │

│ │ │函数malloc生成 │

├────┼────────────┼─────────────┤

│ 取值 │ 非空时,存放某类型结点 │实际存放结点各域内容 │

│ │的地址 │ │

├────┼────────────┼─────────────┤

│操作方式│ 通过指针变量名访问 │ 通过指针生成、访问和释放 │

└────┴────────────┴─────────────┘

①生成结点变量的标准函数

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

//函数malloc分配一个类型为ListNode的结点变量的空间,并将其首地址放入指针变量p中

②释放结点变量空间的标准函数

free(p);//释放p所指的结点变量空间

③结点分量的访问

利用结点变量的名字*p访问结点分量

方法一:(*p).data和(*p).next

方法二:p-﹥data和p-﹥next

④指针变量p和结点变量*p的关系

指针变量p的值——结点地址

结点变量*p的值——结点内容

(*p).data的值——p指针所指结点的data域的值

(*p).next的值——*p后继结点的地址

*((*p).next)——*p后继结点

注意:

① 若指针变量p的值为空(NULL),则它不指向任何结点。此时,若通过*p来访问结点就意味着访问一个不存在的变量,从而引起程序的错误。

② 有关指针类型的意义和说明方式的详细解释

可见,在链表中插入结点只需要修改指针。但同时,若要在第 i 个结点之前插入元素,修改的是第 i-1 个结点的指针。

因此,在单链表中第 i 个结点之前进行插入的基本操作为:

找到线性表中第i-1个结点,然后修改其指向后继的指针。

#include

#include

int Palindrome(char * s1)//判断是否是回文

{

char str[50];

int k,i,j;

k=strlen(s1);

for(i=k-1,j=0;i>=0;i--,j++)

{

str[j]=s1[i];

}

str[j]='\0';

if(strcmp(s1,str)==0)

return 1;

else

return 0;

}

void main()

{

char s[50];

printf("请输入一个字符串:\n");

scanf("%s",s);

int flag=Palindrome(s);

if(flag==1)

printf("字符串%s是回文\n",s);

else

printf("字符串%s不是回文\n",s);

}

测试:

请输入一个字符串:

jkasjdkf

字符串jkasjdkf不是回文

Press any key to continue

请输入一个字符串:

aabaa

字符串aabaa是回文

Press any key to continue

编写一个程序,将用户输入的一个字符串转换成一个整数

#include "stdio.h"

int cti(char s[])

{

int i,sign,n;

for(i=0;s[i]==' '||s[i]=='\n'||s[i]=='\t';i++){printf("ok");};//跳过前面空格

sign=1;

if(s[i]=='+'||s[i]=='-')

sign=(s[i++]=='+')?1:-1;

for(n=0;s[i]>='0'&&s[i]<='9';i++)

n=10*n+s[i]-'0';

return(sign*n);}

main()

{   char s[50];

int n;

scanf("%s",s);

n=cti(s);

printf("对应的整数:%d\n\n",n);

getch();

}

题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

2.程序源代码:

main()

{

int i,j,k,n;

printf("'water flower'number is:");

for(n=100;n<1000;n++)

{

i=n/100;/*分解出百位*/

j=n/10%10;/*分解出十位*/

k=n%10;/*分解出个位*/

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

{

printf("%-5d",n);

}

}

printf("\n");

}

c语言,输入一个字符串,将该字符串中从第m个字符开始的全部字符复制到另一个字符串,m由用户输入……

悬赏分:10 | 解决时间:2010-10-5 20:22 | 提问者:349633487  输入一个字符串,将该字符串中从第m个字符开始的全部字符复制到另一个字符串,m由用户输入,值小于字符串的长度,要求编写一个函数mcopy(char *s,int m)来完成

#include

#include  //支持strlen()的应用

#include  //支持exit(1)

char *mcopy(char*s ,int m);   //函数的定义

void main(void)

{

char str1[100];

char *str2;

int m;

printf("请输入你要输入的字符串\n");

gets(str1);

printf("请输入你要开始复制字符的位置m\n");

scanf("%d",&m);

if(m>=strlen(str1))    //若输入m值过大,结束程序

{

printf("输入值超出字符串长度...\n");

exit(1);

}

str2=mcopy(str1,m);  //程序的调用

for(int j=0;j

printf("字符串第%d个元素是%c\n",m++,str2[j]);   //字符的输出

}

char *mcopy(char*s ,int m)

{

static char array[100];

int count=0;

for(int i=m-1;i

{

array[count]=s[i];

count++;

}

return array;

}

一.   笔试 计算机。。

挺简单的。。  具体的忘记了。 。  有

1.关系的题目  还叫画 关系矩阵、

2.图的题目    画 邻接矩阵,可达矩阵, 画哈试图

3.图的证明题  好像是证明一个有 n-1 条边的简单图必定有一个点的度《=1

二。笔试C。

1.写程序。。   将一个 数字字串 如“123” 转换成相应的 数字  123

2. 两个读程序题, 写出结果

3.一个填空题  :

1

6   7

11 12 13

16 17 18 19

21 22 23 24

用一个一唯数组存储这组数据, 并用另一个指针(注,指针是2唯的好像。) 将他们这么打印出来。。

这题也不难。 可能我描述不好。 呵呵。

4.还有一题改错。是关于循环 以及循环中的判断的。  认真点就能检查出来。“物联网概念”是在“互联网概念”的基础上,将其用户端延伸和扩展到任何物品与物品之间,进行信息交换和通信的一种网络概念。

网格计算(grid conputing)

7. 迷宫问题

给一个20×20的迷宫、起点坐标和终点坐标,问从起点是否能到达终点。

输入数据:’.’表示空格;’X’表示墙。

程序如下:

#include

#include

void search(int,int);

int canplace(int,int);

void readdata();           //读入数据

void printresult();        //打印结果

int a[20][20];             //a数组存放迷宫

int s,t;

int main()

{

int row, col;

readdata();

row=s/20;

col=s%20;

search(row,col);        //递归搜索

printresult();

}

void search(int row, int col)

{

int r,c;

a[row][col]=1;

r=row;                  //左

c=col-1;

if(canplace(r,c))        //判断(r,c)位置是否已经走过

search(r,c);        //递归搜索(r,c)

r=row+1;                //下

c=col;

if(canplace(r,c))        //判断(r,c)位置是否已经走过

search(r,c);        //递归搜索(r,c)

r=row;                  //右

c=col+1;

if(canplace(r,c))        //判断(r,c)位置是否已经走过

search(r,c);        //递归搜索(r,c)

r=row-1;                //上

c=col;

if(canplace(r,c))        //判断(r,c)位置是否已经走过

search(r,c);        //递归搜索(r,c)

}

void printresult()

{

int i,j;

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

{

for(j=0;j<20;j++)

printf("%3d",a[i][j]);

printf("\n");

}

}

void readdata()

{

int i,j;

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

{

for(j=0;j<20;j++)

scanf("%d",&a[i][j]);

}

}

int canplace(int row, int col)

{

if(row>=0&&row<20&&col>=0&&col<20&&a[row][col]==0)

return 1;

else

return 0;

}

char *strRepl(char *s, char *s1, char *s2)

{

char *p,*sp,*dp,*pos;

int len,cnt;

for (pos=s;;) {

if ((p = strstr(pos, s1)) == NULL) {

return s;

}

len = strlen(s2) - strlen(s1);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值