计算机二级上机考试常有算法(不含计算问题)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如:str="how do you do",结果为:num=4。
#define N 80
void fun(char *s,int *num)
{
int i,n=0;
for(i=0; i<*num ;i++)
{if(s[i]>='a'&&s[i]<='z'&&(s[i+1]==' '||s[i+1]=='\0'))
void fun (char *w,int m)
{ int i,j; char t;
for(i=1;i<=m;i++) /*进行m次的循环左移*/
{t=w[0];
for(j=1;w[j]!='\0';j++) /*从第2个字符开始以后的每个字符都依次前移一个字符*/
w[j-1]=w[j];
w[j-1]=t;
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;}
字符串移动
1:下列给定程序中,函数fun()的功能是:在字符串str中找出ASCⅡ码值最小的字 符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。例如,调用 fun()函数之前给字符串输入fagAgBDh,调用后字符串中的内容为AfaggBDh。 void fun(char *p) { char min, *q; int i=0; min=p[i]; while (p[i]!=0)
}
字符串逆序存放
1:请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2倒置后
接在字符串str1后面。
例如:str1="How do",str2="?od uoy",结果输出:"How do you do?"。
#define N 40
void fun(char *str1,char *str2)
#define N 5
int fun (int w[][N])
{
int i,j,k=0;
int s=0;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(i==0||i==N-1||j==0||j==N-1) /*只要下标中有一个为0或N-1,则它一定是周边元素*/
{s=s+w[i][j]*w[i][j];
}
*(p2+n)='\0';
for(;*p2;i++) *(p1+i)=*p2++;
*(p1+i)='\0';
}
2:补充函数fun(char *s),该函数的功能是把字符串中的内容逆置。
例如:字符串中原有的字符串为abcde,则调用该函数后,串中的内容变
为edcba。
#include<string.h>
#include<stdio.h>
#define N 1000
void fun(char *tt,int num[])
{
int i,j;
int bb[10];
char *p=tt;
for(i=0;i<10;i++)
{
num[i]=0;
bb[i]=0; }
while(*p)
{if(*p>='0'&&*p<='9')
n++;}
*num=n;
}
3:请补充函数fun(),该函数可以统计一个长度为n的字符串在另一个字符串 中出现的次数。例如,假定输入的字符串为:asd ascasdfg asd as asd mlosd, 子字符串为asd,则应输出4。
int fun(char *str,char *substr)
{
#include <stdio.h> #define N 80 void fun(int *w, int p, int n) { int i,j,t;
for(i=0;i<=p;i++) /*循环左移p+1次*/ {t=w[0]; for(j=1;j<n;j++) /*实现循环左移*/
w[j-1]=w[j]; w[j-1]=t; } }
/*将周边元素求平方和*/
}
return s;
/*返回周边元素的平方和*/
}
2:下列程序定义了N×N的二维数组,并在主函数中自动赋值。 请编写函数fun(int a[][N], int n),该函数的功能是:使数 字右(左)上半三角元素中的值乘以m。
#define N 5 int fun(int a[][N], int m) {
#include<conio.h>
#include<stdio.h>
#define N 81
void fun(char*s)
{
int i=0, n=strlen(s);char t;
for(; i<n/2 ;i++)
{
t=*(s+i);
*(s+i)=*(s+n-1-i);
*(s+n-1-i)=t;
}
void fun(int m, int k, int xx[]) { int i,j,n; for(i=m+1,n=0;n<k;i++) /*找大于m的非素数,循环k次,即找出紧靠 m的k个非素数*/
for(j=2;j<i;j++) /*判断一个数是否为素数*/ if(i%j==0) { xx[n++]=i; /*如果不是素数,放入数组xx中*/ break; /*并跳出本层循环,判断下一个数*/ }
main()
{
int a, b, n, m, t;
printf("\nInput two numbers:\n");
scanf ("%d,%d",&n,&m);
if(n<m){a=m; b=n; }
else
{a=n; b=m;}
while(b!=0)
{t=a%b; a=b;b=t; }
printf("greatest common divisor:%d\n",a);
}
字符串中特定字符或字符串的统计
1:请补充函数fun(),该函数的功能是:按‘0’到‘9’统计一个字符串中的奇数 数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函 数。 例如:输入"x=112385713.456+0.909*bc",结果为:1=3,3=2,5=2,7 =1,9=2。
/*将第1个字符放到最后一个字符中*/
}
}
数据的折半查找算法
1:N个有序整数数列已放在一维数组中,给定下列程序中,函数fun() 的功能是: 利用折半查找算法查找整数m在数组中的位置。若找到,则返回其下标值;反之, 则返回-1。 折半查找的基本算法是:每次查找前先确定数组中待查的范围:low和 high(low<high),然后把m与中间位置(mid)中元素的值进行比较。如果m的值大 于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之, 下次查找范围落在中间位置之前的元素中。直到low>high,查找结束。(题盘332)
int i,n=0; int g,b; for(i=0;i<num;i++) {
g=xx[i]%10; b=xx[i]/100; if(g==b) bb[n++]=xx[i]; } return n; }
3:以下程序可把输入的十进制数以十六进制数的形式输出。69-2 main() { char b[17]={"0123456789ABCDEF"}; int c[64],d,i=0,base=16; long n; printf("Enter a number:\n"); scanf("%ld",&n); do { c[i]=n%base; i++; n=n/base;} while(n!=0); printf("Transmite new base:\n"); for(--i;i>=0;--i) { d=c[i];printf("%c",b[d]);} printf("\n"); }
bb[*p-'0']++;
p++;}
for(i=1,j=0;i<10;i=i+2,j++) num[j]=bb[i];
}
2:str是全部由小写字母字符和空格字符组成的字符串,由num传入字 符串的长度。请补充函数fun(),该函数的功能是:统计字符串str中的单 词个数,结果由变量num传回。每个单词之间都由空格隔开,并且字符 串str开始不存在空格。
4:请补充函数fun(),该函数的功能是:把一个整数转换成字符串,并倒序保存 在字符数组str中。例如:当n=13572468时,str="86427531"。 #include<stdio.h> #include<conio.h> #define N 80 char str[N]; void fun(long int n) {
{
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;
{ if (min>p[i]) { q=p+i; min=p[i]; } i++;
} while(q>p)
{*q=*(q-1); q--; } p[0]=min; }
循环左移算法
1:请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要 求把下标从0到p(p≤n-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。
全国二级C语言
上机典型题型
运用/和%分离整数的各位
1:请编写函数fun,其功能是:将两个两位数的正整数a、b 合并形成一个整数放在c中。合并的方式是:将a数的十位和 个位数依次放在c数个位和十位上,b数的十位和个位数依次 放在c数的百位和千位上。 例如,当a=16,b=35,调用该函数后,c=5361。 #include<stdio.h> void fun(int a ,int b,long *c) { *c=(b%10)*1000+(b/10)*100+(a%10)*10+a/10; }
2:数组xx[N]保存着一组3位数的无符号正整数,其元素的个数通过变量num传入函数 fun()。请补充函数fun(),该函数的功能是:从数组xx中找出个位和百位的数字相等的所有 无符号整数,结果保存在数组yy中,其个数由函数fun()返回。 例如:当xx[8]={135,78,72,32,222,424,333,141,541}时,bb[6]={787,232,222,424,333,141}。 #include<conio.h> #define N 1000 int fun(int xx[],int bb[],int num) {
2:请编写函数fun(),该函数的功能是:移动字符串中的内容,移动的 规则是把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字 符移到字符串的前部。
例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后, 字符串中的内容应该是DEFGHIJKABC。
#define N 80
printf("least common multiple:%d\n",n*m/a);
}
判断素数
1:请编写一个函数void fun(int m, int k, int xx[]),该函数的功能是: 将大于整数m且紧靠m的k个非素数存入所指的数组中。 例如,若输入15,5,则应输出16,18,20,21,22。
int i,j; for(i=0;i<N;i++)
for(j=i;j<N;j++) a[i][j]=a[i][j]*m;
}
最大公约数与最小公倍数
1:请补充main函数,该函数的功能是:输入两个正整数m
和n,求这两个数的最大公约和最小公倍数。(题盘34-2 83-2)
#include <stdio.h>
int i=0; while(n>0) {
str[i]=n%10+'0'; n/=10; i++; } str[i]='\0'; }
数组特殊位置元素的确定
1:下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun(),函数的功能 是:求出数组周边元素的平方和并作为函数值返回给主函数中的s。