计算机二级C语言上机题型总结新.docx
- 文档编号:24488322
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:13
- 大小:17.49KB
计算机二级C语言上机题型总结新.docx
《计算机二级C语言上机题型总结新.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言上机题型总结新.docx(13页珍藏版)》请在冰豆网上搜索。
计算机二级C语言上机题型总结新
计算机二级C语言上机题型总结
(一)“******”问题
1、将字符串中的前导*号全部删除,中间和后面的*号不删除。
voidfun(char*a)
{char*p=a;
while(*p==’*’) p++;
for(;*p!
=’\0’;p++,a++)
*a=*p;
*a=’\0’;
}
2、只删中间*
#include
voidmain()
{chara[81]="*****plpkj**123****mmkk***lkj***";
puts(a);
inti=0;char*h=a,*p=a;
while(*p!
='\0')p++;
do
{p--;
}
while(*p=='*');
for(i=0;a[i]=='*';i++)h++;
for(;h
if(*h!
='*')a[i++]=*h;
for(;*p;p++)
a[i++]=*p;
a[i]='\0';
puts(a);
}
3、只删尾*
#include
voidmain()
{chara[81]="*****plpkj**123****mmkk***lkj***";
puts(a);
char*p=a;
while(*p!
='\0')p++;
p--;
while(*p=='*')p--;
*(p+1)='\0';
puts(a);
}
(二)移动问题
1、若一维数组中有n个整数,要求把下标从p到n-1(p<=n-1)的元素平移到数组前面。
inti,j,t;
for(i=p;i<=n-1;i++)
{t=w[n-1];
for(j=n-2;j>=0;j--)
w[j+1]=w[j];
w[0]=t;
}
2、把下标从0到p(p<=n-1)的元素平移到数组最后。
inti,j,t;
for(i=0;i<=p;i++)
{t=w[0];
for(j=1;j w[j-1]=w[j]; w[j-1]=t; } 3、把字符串str中的字符向前移动,原来第1个字符放串尾,结果仍保存在原串中。 ch=str[0]; for(i=0;str[i+1];i++) str[i]=str[i+1]; str[i]=ch; 4、移动字符串中的内容,把第1到第m个字符平移到串后,把第m+1到后移到前。 voidfun(char*w,intm) {inti,j; chart; for(i=1,i<=m;i++) {t=w[0]; for(j=1;w[j]! =’\0’;j++) w[j-1]=w[j]; w[j-1]=t; } } (三)Fibonacci问题 1、求Fibonacci数列中小于t的最大的一个数,结果由函数返回。 intfun(intt) { inta=1,b=1,c=0,i; do {c=a+b;a=b;b=c;} while(c c=a; returnc; } 2、用递归算法计算数列中第n项的值。 longfun(intg) { if(g==1)return1; if(g==2)return1; if(g>2)return(fun(g-1)+fun(g-2)); } (四)素数问题 1、将大于整数m且紧靠m的k个非素数存入所指的数组中。 voidfun(intm,intk,intxx[]) {inti,j,n; for(i=m+1,n=0;n for(j=2;j if(i%j==0) {xx[n++]=i;break;} } 2、小于或等于lim的所有素数放在aa数组中,该函数返回所求出的素数个数。 intfun(intlim,intaa[MAX]) { inti,j,k=0; for(i=2;i<=lim;i++) {for(j=2;j if(i%j==0)break; if(j>=i) aa[k++]=i; } returnk; } 3、将所有大于1小于整数m的非素数存入xx数组中,个数通过k传回。 voidfun(intm,int*k,intxx[]) {inti,j,n=0; for(i=4;i {for(j=2;j if(i%j==0)break; if(j } *k=n; } 或 {inti,j,t,n=0; for(i=2;i {t=1; for(j=2;j if(i%j==0) {t=0;break;} if(t==1)xx[n++]=I;} *k=n; } (五)删除相同数 intfun(inta[],intn) {inti,j=1; for(i=1;i if(a[j-1]! =a[i]) a[j++]=a[i]; returnj; } 或 {inti,t,j=0; t=a[0]; for(i=1;i if(t==a[i]) ; else { a[j++]=t; t=a[i]; } a[j++]=t; returnj; } (七)统计字符个数,单词个数。 1、按‘0’到‘9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。 voidfun(char*tt,intnum[]) {inti,j; intbb[10]; char*p=tt; for(i=0;i<10;i++) {num[i]=0; bb[i]=0;} while(*p) {if(*p>=’0’&&*p<=’9’) bb[*p-‘0’]++; p++;} for(i=1,j=0;i<10;i=i+2,j++) num[j]==bb[i]; } 2、str全部由小写字母和空格字符组成的字符串,num传入字符串长度。 统计单词个数。 voidfun(char*s,int*num) {intI,n=0; for(i=0;i<*num;i++) { if(s[i]>=’a’&&ss[i]<=’z’&&(s[i+1]==’’||s[i+1]==’0’)) n++; } *num=n; } 3、从’a’到’z’统计一个字符串中所有字母字符各自出现的次数,结果存在数组alf中。 voidfun(char*tt,intalf[]) {inti; char*p=tt; for(i=0;i<26;i++) alf[i]=0; while(*p) { if(*p>=’A’&&*p<=’Z’) *p+=32; if(*p>=’a’&&*p<=’z’) alf[*p-‘a’]++; p++; } } 4、str字符序列由字符0和1组成。 查找0字符连续出现的最长长度,若有几个0字符长度相同,只记录最后1个0字符串相关信息,通过m和k返回最长0字符长度和其下标。 voidfun(char*str,int*m,int*k) {inti,j=0; intbb[N]; char*p=str; *m=0; *k=0; for(i=0;i bb[i]=0; i=0; while(*(p+i)) { if(*(p+i)==’0’) {bb[j]++;i++;} else{j++;i++;} if(*m<=bb[j]) {*m=bb[j];*k=i-1;} } } 5、统计在tt字符串中”a”到”z”26个字母各自出现的次数,并依次放在pp所指数组中。 voidfun(char*tt,intpp[]) { inti; for(i=0;i<26;i++) pp[i]=0; for(;*tt! =’\0’;tt++) if(;*tt>=’a’&&*tt<=’z’) pp[*tt-’a’]++; } 6、统计一个长度为n的字符串在另一个字符串中出现的次数。 intfun(char*str,char*substr) { intn; char*p,*r; n=0; while(*str) {p=str; r=substr; while(*r) if(*r==*p) {r++;p++;} elsebreak; if(*r==’\0’) n++; str++; } returnn; } 7、求出ss所指字符串中指定字符的个数,并返回此值。 intfun(char*ss,charc) {inti=0; for(;*ss! =’\0’;ss++) if(*ss==c) i++; returni; } 8、统计一个长度为2的字符串在另一个字符串中出现的次数。 intfun(char*str,char*substr) {inti,j=0; for(i=0;str[i+1]! =’\0’;i++) if(str[i]==substr[0]&&str[i+1]==substr[1]) j++; returnj; } (七)进制转换 1、把str字符串转换成任意进制的数。 x: 原进制;y: 要转换成的进制。 intfun(char*str,intx,inty) {intsum; inti=0; char*p=str; for(i=0;i xx[i]=0; sum=*p-‘\0’; p++; while(*p) {sum=sum*x+*p-‘0’; p++; } i=0; while(sum! =0) {xx[i]=sum%y; sum=sum/y; i++;} returni; } 注: (1) 将x转换成10进制: sum=sum*x+*p-‘0’; (2) 将10进制转换成y: sum%y得到y进制数的最低位。 sum/y 得到y进制数的次低位。 2、str字符串由‘0’和‘1’组成。 转换成十进制数。 intfun(char*str) {intn; char*p=str; n=*p-‘0’; p++; while(*p) {n=n*2+*p-‘0’; p++;} returnn; } (八)比较字符串长度 1、比较两个字符串的长度,函数返回较短的字符串。 char*fun(char*s,char*t) {inti,j; for(i=0;s[i]! =’\0’;i++); for(j=0;t[j]! =’\0’;j++); if(i<=j) returns; else returnt; } 2、从传入的num个字符中找出最长的一个字符串,通过形参指针max传回该串地址。 fun(char(*a)[81],intnum,char*max) {inti=0; max=a[0]; for(i=0;i if(strlen(max) max=a[i]; returnmax; } (九)最大公约数,最小公倍数 1、intfun(inta,intb) {intr,t; if(a {t=a;a=b;b=t;} r=a%b; while(r! =0) {a=b;b=r;r=a%b} return(b); } 2、输入两整数m和n,求最大公约数,最小公倍数。 while(b! =0) {t=a%b;a=b;b=t;} printf(“%d”,”%d”,a,n*m/a); 注: (1)最大公约数: 若b/a的非零余数能整除a。 (2)最小公倍数: 两数乘积除以最大公约数。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 语言 上机 题型 总结