收藏 分享(赏)

上机考试常有算法(不含计算问题).ppt

上传人:hwpkd79526 文档编号:7821343 上传时间:2019-05-26 格式:PPT 页数:36 大小:158KB
下载 相关 举报
上机考试常有算法(不含计算问题).ppt_第1页
第1页 / 共36页
上机考试常有算法(不含计算问题).ppt_第2页
第2页 / 共36页
上机考试常有算法(不含计算问题).ppt_第3页
第3页 / 共36页
上机考试常有算法(不含计算问题).ppt_第4页
第4页 / 共36页
上机考试常有算法(不含计算问题).ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、全国二级C语言,上机典型题型,运用/和%分离整数的各位,1:请编写函数fun,其功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数个位和十位上,b数的十位和个位数依次放在c数的百位和千位上。 例如,当a=16,b=35,调用该函数后,c=5361。 #include void fun(int a ,int b,long *c) *c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10; ,2:数组xxN保存着一组位数的无符号正整数,其元素的个数通过变量num传入函数fun()。请补充函数fun(),该函数的功能是:

2、从数组xx中找出个位和百位的数字相等的所有无符号整数,结果保存在数组yy中,其个数由函数fun()返回。 例如:当xx8=135,78,72,32,222,424,333,141,541时,bb6=787,232,222,424,333,141。 #include #define N 1000 int fun(int xx,int bb,int num) int i,n=0;int g,b;for(i=0;inum;i+)g=xxi%10;b=xxi/100;if(g=b) bbn+=xxi;return n; ,3:以下程序可把输入的十进制数以十六进制数的形式输出。69-2 main() c

3、har b17=“0123456789ABCDEF“; int c64,d,i=0,base=16; long n; printf(“Enter a number:n“); scanf(“%ld“, ,4:请补充函数fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组str中。例如:当n=13572468时,str=“86427531“。 #include #include #define N 80 char strN; void fun(long int n) int i=0;while(n0)stri=n%10+0;n/=10;i+;stri=0; ,数组特殊位置元素的

4、确定,1:下列程序定义了NN的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。 #define N 5 int fun (int wN) int i,j,k=0;int s=0;for(i=0;iN;i+) for(j=0;jN;j+)if(i=0|i=N-1|j=0|j=N-1) /*只要下标中有一个为0或N-1,则它一定是周边元素*/s=s+wij*wij; /*将周边元素求平方和*/return s; /*返回周边元素的平方和*/ ,2:下列程序定义了NN的二维数组,并在主函数中自动赋值。请编写函数fun(int a

5、N, int n),该函数的功能是:使数字右(左)上半三角元素中的值乘以m。#define N 5 int fun(int aN, int m) int i,j;for(i=0;iN;i+)for(j=i;jN;j+)aij=aij*m; ,最大公约数与最小公倍数,1:请补充main函数,该函数的功能是:输入两个正整数m和n,求这两个数的最大公约和最小公倍数。(题盘34-2 83-2) #include main() int a, b, n, m, t;printf(“nInput two numbers:n“);scanf (“%d,%d“, ,判断素数,1:请编写一个函数void fun(

6、int m, int k, int xx),该函数的功能是:将大于整数m且紧靠m的k个非素数存入所指的数组中。 例如,若输入15,5,则应输出16,18,20,21,22。void fun(int m, int k, int xx) int i,j,n;for(i=m+1,n=0;nk;i+) /*找大于m的非素数,循环k次,即找出紧靠m的k个非素数*/for(j=2;ji;j+) /*判断一个数是否为素数*/if(i%j=0) xxn+=i; /*如果不是素数,放入数组xx中*/break; /*并跳出本层循环,判断下一个数*/ ,求串长(指针数组存储串),char a80; int n=0

7、; while (an!=0)/*(an)或an!=0*/n+; /*n 即为串长*/,char a80; int n=0; for (;an;n+); /*(an)或an!=0*/ /*n 即为串长*/,求串长(指针变量指向串),char *a; int n=0;gets(a); while (*a!=0)/* (*a)或*a!=0 */n+; a+;/*n 即为串长*/,char *a; int n=0;gets(a); for (;*a;a+)n+; /* *a!=0或*a!=0*/ /*n 即为串长*/,字符串逆序存放,1:请补充函数fun(),该函数的功能是:把从主函数中输入的字符串

8、str2倒置后接在字符串str1后面。 例如:str1=“How do“,str2=“?od uoy“,结果输出:“How do you do?“。 #define N 40 void fun(char *str1,char *str2) int i=0,j=0,k=0,n; char ch;char *p1=str1; char *p2=str2;while(*(p1+i)i+;while(*(p2+j)j+;n= j-;for(;k=j/2;k+,j-) ch=*(p2+k);*(p2+k)=*(p2+j);*(p2+j)=ch;*(p2+n)=0;for(;*p2;i+) *(p1+i)

9、=*p2+;*(p1+i)=0; ,2:补充函数fun(char *s),该函数的功能是把字符串中的内容逆置。 例如:字符串中原有的字符串为abcde,则调用该函数后,串中的内容变为edcba。 #include #include #include #define N 81 void fun(char*s) int i=0, n=strlen(s);char t;for(; in/2 ;i+) t=*(s+i);*(s+i)=*(s+n-1-i); *(s+n-1-i)=t; ,字符串中特定字符或字符串的统计,1:请补充函数fun(),该函数的功能是:按0到9统计一个字符串中的奇数数字字符各自

10、出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。 例如:输入“x=112385713.456+0.909*bc“,结果为:13,32,52,71,92。 #include #define N 1000 void fun(char *tt,int num) int i,j;int bb10;char *p=tt;for(i=0;i=0 ,2:str是全部由小写字母字符和空格字符组成的字符串,由num传入字符串的长度。请补充函数fun(),该函数的功能是:统计字符串str中的单词个数,结果由变量num传回。每个单词之间都由空格隔开,并且字符串str开始不存在空格。 例如:str=“

11、how do you do“,结果为:num=4。 #define N 80 void fun(char *s,int *num) int i,n=0;for(i=0; i=a ,3:请补充函数fun(),该函数可以统计一个长度为n的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为:asd ascasdfg asd as asd mlosd,子字符串为asd,则应输出4。20-3 算法1: int fun(char *str,char *substr) int n; char *p,*r; n=0; while(*str)p=str; r=substr;while(*r)if(*r=

12、*p) r+; p+;elsebreak;if(*r=0)n+;str+; return n;,算法2: (好理解) int i=0,k=0,j=0,n; n=strlen(str); while(in) if (stri=substrj) j+;if (substrj=0)k+;j=0; i+; return k;,字符串移动,1:下列给定程序中,函数fun()的功能是:在字符串str中找出ASC码值最小的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用fun()函数之前给字符串输入fagAgBDh,调用后字符串中的内容为AfaggBDh。 void fun(char

13、 *p) char min, *q; int i=0; min=pi;while (pi!=0) if (minpi) q=p+i; min=pi; i+;while(qp)*q=*(q-1); q-; p0=min; ,循环左移算法,1:请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(pn-1)的数组元素平移到数组的最后。 例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,p的值为3。移动后,一维数组中的内容应为5,6,7,8,9,10,11,12,13,14,15,1,2,3,4。#inc

14、lude #define N 80 void fun(int *w, int p, int n) int i,j,t;for(i=0;i=p;i+) /*循环左移p+1次*/t=w0; for(j=1;jn;j+) /*实现循环左移*/wj-1=wj;wj-1=t; ,2:请编写函数fun(),该函数的功能是:移动字符串中的内容,移动的规则是把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。 例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后,字符串中的内容应该是DEFGHIJKABC。 #define N 80 void fun (char *

15、w,int m) int i,j; char t;for(i=1;i=m;i+) /*进行m次的循环左移*/t=w0;for(j=1;wj!=0;j+) /*从第2个字符开始以后的每个字符都依次前移一个字符*/wj-1=wj;wj-1=t; /*将第1个字符放到最后一个字符中*/ ,数据的折半查找算法,1:N个有序整数数列已放在一维数组中,给定下列程序中,函数fun() 的功能是:利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值;反之,则返回-1。 折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和high(lowhigh,查找结束。(题盘33-2) #defin

16、e N 10 int fun(int a,int m) int low=0,high=N-1,mid;while(lowamid)low=mid+1;else return(mid);return(-1);,数据的插入,1:请补充main函数,该函数的功能是:把一个整数插入到一个已经按从小到大排序的数组中。插入后,数组仍然有序。#define N 10 main() int i,j; int n; int bbN+1=12,23,31,44,51,63,71,79,85,95;scanf(“%d“, ,字符串前(后)加入n个*号,99-2:下列给定程序中函数fun()的功能是:在字符串的最前端

17、加入n个*号,形成新串,并且覆盖原串。 注意:字符串的长度最长允许79。 void fun (char *s, int n) char a80,*p; int i;p=s; for(i=0;in;i+) ai= *; /首先在数组a中放入n个*,注意该循环结束后i的值为ndo ai=*p;i+;p+;while(*p); /将原来的串接到后面即可ai=0;strcpy(s,a); ,字符串的删除操作,1:请编写函数fun(),其功能是:将s所指字符串中除了下标为奇数、同时ASCII值为偶数的字符外,其余的全部删除,串中剩余字符所形成的一个新串放在t所指的数组中。(一大类题目,解题时只要将符合条

18、件的重新赋值即可) 例如,若s所指字符串中的内容为edB2A4Dsdg,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为偶数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是d24。 void fun(char*s, char t) int i,j=0;for(i=0;si!=0;i+)if(i%2!=0 /*在字符串最后加上结束标志位*/ ,2:请补充函数fun(),该函数的功能是:只保留字符串中的大写字母,删除其他字符,结果仍保存在原来的字符串中,由全局变量

19、m对删除后字符串的长度进行保存。 int m; void fun(char *s) int i=0,j=0;char *p=s;while(*(p+i) if(*(p+i)=A ,3:请补充函数fun(),该函数的功能是:依次取出字符串中所有的小写字母以形成新的字符串,并取代原字符串。 void fun(char *s) int i=0; char *p=s;while( *p ) if(*p=a ,34-3:假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言中提供的字符串函数。 例如,若字符串中的内容为*A*BC*DEF

20、*G*,删除后,字符串中的内容则应当是ABCDEFG。 void fun(char *a) int i,j=0;for(i=0;ai!=0;i+)if(ai!=*) aj+=ai; /*若不是要删除的字符*则留下*/aj=0; /*最后加上字符串结束符0*/ ,31-3:假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:将字符串中的前导*号全部删除,中间和后面的*号不删除。 例如,若字符串中的内容为*A*BC*DEF*G*,删除后,字符串中的内容则应当是A*BC*DEF*G*。 void fun (char *a) int j=0;char *p=a;while(*p=*)

21、 p+; /*指针p指向字符串第一个字母*/while (*p)aj+=*p; p+; /*从第一个字母开始,其后的字符都放入指针a所指的字符串中*/aj=0; /*在字符串最后加上结束标记符*/ ,81-3:假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:将字符串尾部的*号全部删除,前面和中间的*号不删除。 例如,若字符串中的内容为*A*BC*DEF*G*,删除后,字符串中的内容则应当是*A*BC*DEF*G。void fun(char *a) char *p; p=a; while (*p)p+; /将指针p后移至串尾 p-; /让其指向最后一个字符 while(*p

22、=*) p-; /从后向前找第一个不是*的 p+; *p=0; /在其后面加结束标志即可 ,32-3: 假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:除了尾部的*号之外,将字符串中其他*号全部删除。形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言的字符串函数。 例如,若字符串中的内容为*A*BC*DEF*G*,删除后,字符串中的内容应当是ABCDEFG*。 void fun(char *a, char *p) char *q=a; int j=0; while (*q!=0 /*在字符串最后加上结束标记位*/,83-3:假定输入的字符串中只包含字母和*号。

23、请编写函数fun(),它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言提供的字符串函数。 例如,若字符串中的内容为*A*BC*DEF*G*,删除后,字符串中的内容则应当是A*BC*DEF*G。 void fun (char *a,int n ,int h , int e) int i,j=0;for(i=h;in-e;i+) aj+=ai; /*第一个字母和最后一个字母之间的字符保留下来*/aj=0; /*在字符串最后加上结束标记*/ ,33-3.

24、假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:除了串的前导和尾部的*号之外,将字符串中其他*号全部删除。形参r已指向字符串中第一个字母,形参v已经指向串的最后一个字母。在编写函数时,不得使用C语言的字符串函数。void fun(char *s,char *r,char *v) char *p; int i=0; p=s; while (pr)si+=*p;p+; /*复制第一个字母之前的所有*/ while (pv)if (*p!=*)si+=*p;p+; /*将中间不是*的字符复制到s中*/ while (*p!=0)si+=*p;p+; /*将尾部的*复制到s中*/

25、 si=0; ,35-3 假定输入的字符串中只包含字母和*号,编写函数fun,功能是:使字符串中尾部的*号不得多于n个,若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做;串中间和前面的*号不删除。 void fun(char *a,int n) int i=0,k=0;char *p; while (ai!=0)i+; /*第一步:计算串长; i为串长*/ p=a+i-1; /*p指向最后一个字符*/ while (*p=*)k+;p-; /*第二步:计算尾部*的个数,用k计数*/ if (kn)ai-k+n=0; /*第三步:截掉多于的*,用加结束标志 的方式实现*/ ,84-3

26、 假定输入的字符串中只包含字母和*号,编写函数fun,功能是:使字符串中前导*号不得多于m个,若多于m个,则删除多余的*号;若少于或等于m个,则什么也不做;串中间和尾部的*号不删除。解题思路: 首先计算串的前导*的个数,计数; 根据计数结果判断对*的截取; 将剩余字符(从第一个字母开始)复制到字符串中,最后加结束标志0.,void fun(char *s,int m) int k=0,i=0;char *p=s; while (*p=*)k+;p+; /*第1步:计算前导*的个数,用k计数*/p=s; /* 重新确定p指针的位置*/ if (km)p=s+k-m; /*第2步:如果多于m,p向

27、后移动k-m位置*/ while (*p!=0)si=*p; i+; p+; /*第3步:从p开始复制*/si=0; /*最后加结束标志即可*/,题盘(11道),前导或后续及中间*题目: 31-3、32-3、33-3、34-3、35-3、81-3、 82-3、83-3、84-3、85-3、99-2,题盘分布,第2讲:8道题 第4讲:选择 5道 第5讲:循环 70道 第6讲:数组 63道 第7讲:函数 12道 第8讲:2道 第9讲:指针 77道 第10讲:结构体 21道 第12讲:文件 9道 第13讲:链表 15道 删除“*”:11道 共293道题目。 剩余7道题目比较简单。10-2,23-1,25-3,51-2,61-2,93-2; 69-2,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报