华科02年计算机考研复试机试

【1】编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。(凡是以一个或多个空格隔开的部分就为一个单词)。

参考代码:

#include<stdio.h> #include<string.h> int main(){ char s[1000]; int len,a[1000]={0},i,cnt; gets(s); len=strlen(s); printf("len=%d/n",len); cnt=0;//记录单词数; i=0; while(i<len-1&&s[i]==' '){//去掉开头的空格; i++; } while(i<len-1){ if(s[i]!=' '){//遇到字符; a[cnt]+=1; i++; } else{//遇到空格; cnt++;//下一个单词; while(i<len-1&&s[i]==' '){//去掉中间的连续空格; i++; } } } printf("单词个数:%d./n",cnt+1); printf("每个单词所含有的字符数是:/n"); for(i=0;i<cnt+1;i++){ printf("%d ",a[i]); } }

数据测试:

华科02年计算机考研复试机试_第1张图片

华科02年计算机考研复试机试_第2张图片

【2】守形数是这样一种整数,它的平方的低位部分等于它本身。比如25的平方是625,低位部分是25,因此25是一个守形数。编一个程序,找出2--100之间所有的守形数。

关于这个题,开头把题目意思也想不明白。他说的这个地位部分到底指除了最高位的一位以外的部分还是从最低位往高位的x位(即n的位数)?查了一些资料总算搞明白了。大家可以参考一下。

这个实际上应该是n与其平方数的低x位(n的位数)相等。

有证据如下:

兰州交通大学ACM Online Judge 1124 守型数:

http://pjo.lzjtu.edu.cn/showproblem?problem_id=1124

华科02年计算机考研复试机试_第3张图片

我的AC代码:

#include<stdio.h> #include<stdlib.h> int shouxingshu(int n){ int num,count,temp,a; a=n; num=n*n;//n的平方 ; count=0;//记录n的位数; while(n>0){ count++; n=n/10; } //printf("num=%d/n",num); //printf("count=%d/n",count); temp=1; while(count>0){ temp*=10; count--; } //printf("temp=%d/n",temp); //printf("num%%temp=%d/n",num%temp); if(num%temp==a){ return 1; } else{ return 0; } } int main(){ int i; //printf("2-100的所有守型数:/n"); for(i=1;i<=100000;i++){ if(shouxingshu(i)==1){ printf("%d/n",i); } } //system("pause"); }

数据测试:

华科02年计算机考研复试机试_第4张图片

所以这个题目的参考代码:

#include<stdio.h> #include<stdlib.h> int shouxingshu(int n){ int num,count,temp,a; a=n; num=n*n;//n的平方 ; count=0;//记录n的位数; while(n>0){ count++; n=n/10; } temp=1; while(count>0){ temp*=10; count--; } if(num%temp==a){ return 1; } else{ return 0; } } int main(){ int i; for(i=2;i<=100;i++){ if(shouxingshu(i)==1){ printf("%d/n",i); } } //system("pause"); }

数据测试:

华科02年计算机考研复试机试_第5张图片

【3】

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:

ABC##DE#G##F###

其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

参考代码:

#include<stdio.h> #include<stdlib.h> typedef struct node{//二叉树结点数据结构定义; char data; struct node *lchild,*rchild; }BTNode,*BTree; void createBTree(BTree &T){ char c; scanf("%c",&c); if(c=='#'){ T=NULL; } else{ BTree t; t=(BTree)malloc(sizeof(BTNode)); t->data=c; t->lchild=NULL; t->rchild=NULL; T=t; createBTree(T->lchild); createBTree(T->rchild); } } void inOrderTra(BTree T){ if(T!=NULL){ inOrderTra(T->lchild); printf("%c ",T->data); inOrderTra(T->rchild); } } int main(){ BTree T; printf("请输入二叉树的先序遍历序列:/n"); createBTree(T); printf("中序遍历二叉树序列:/n"); inOrderTra(T); printf("/n"); }

数据测试:

华科02年计算机考研复试机试_第6张图片

 

 

你可能感兴趣的:(数据结构,struct,测试,null,存储,交通)