2009春江苏省计算机二级C语言上机(编程)

第一篇:2009春江苏省计算机二级C语言上机(编程)
2009春上机试题1(编程)
程序功能:找出7个默森尼数。法国数学家默森尼曾提出下列公式:Mp=2^p-1。当p是素数并且Mp也是素数时,称Mp为默森尼数,例如,p=5, Mp=2^5-1=31,5和31都是素数,因此31是默森尼数;而Mp=2^11-1=2047,11是素数,2047不是素数,因此2047不是默森尼数.【编程要求】
1.编写函数void Mersenne(long a[ ],int m),其功能是求出前m个默森尼数并以此将它们保存到a指向的数组中,2.编写main函数,调用Mersenne函数并保存前7个默森尼数,将运行结果输出到屏幕及结果文件myf2.out中,最后将考生的考号也保存到结果文件myf2.out中
【测试数据与运行结果】
37311278191***7
2009春上机试题2(编程)
用一组整数验证命题,任意一个百位数字与个位数字不同的三位正整数n1在经过以下操作后一定会变换到1089:将n1的百位数与个位数字交换得到n2,求n1和n2差的绝对值得到n3,将n3的百位数字与个位数字交换得到n4;求n3与n4的和得到n5,n5一定是1089,若n1、n3是一位数或两位数,则在高位补0使其成为三位数
例如:n1:123,n2:321,n3:198(321,-123),n4:891,n5:1089(198+891)
【编程要求】
1.编写函数int fun(int a[ ],int b[ ], int n),其功能是用n指向数组的前n个整数验证上述命题,将所有符合命题的整数所在数组元素的下标依次保存到b指向的数组中,函数返回b数组中数据的个数
2.编写main函数,声明a数组并用测试数据初始化,用a数组作为实参调用fun函数,将a数组中所有符合命题的整数输出到屏幕及结果文件myf2.out中,最后将考生本人的准考证号字符串也保存到结果文件myf2.out中
【测试数据与运行结果】
测试数据:123765***31676963589
运行结果:12376514567
第二篇:计算机二级C语言上机题型总结
全国计算机二级C语言考试上机题型总汇
(一)关于“******”问题
1、将字符串中的前导*号全部删除,中间和后面的*号不删除。void fun(char *a){ char *p=a;while(*p= =’*’)p++;for(;*p!=’’;p++,a++)*a=*p;*a=’’;}
2、只删中间* int i;for(i=0;a[i]= =’*’;i++)for(;h
3、只删尾* while(*a!=’’)a++;a--;while(*a= =’*’)a--;*(a+1)=’’;
4、只留前* int i , j=0;for(i=0;a=’*’;i++);j=i;for(;a;i++)if(a!=’*’)a[j++]=a[i];a[j]=’’;
5、只留中间* int i,j=0;for(i=h;i 6、只留尾* char *t=a;for(;t<=p;t++)if(*t!=’*’)*(a++)=*t;for(;t!=’’;t++)*(a++)=*t;*a=’’; 7、*个数>n个,删多余的*;*个数<=n个,不做任何处理。int i=0, k=0;char *p,*t;p=t=a;while(*t= =’*’){ k++;t++;} if(k>n){ while(*p){a[i]=*(p+k-n);i++;p++} a[i]=’’;} (二)移动问题 1、若一维数组中有n个整数,要求把下标从p到n-1(p<=n-1)的元素平移到数组前面。int i,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)的元素平移到数组最后。int i,j,t;for(i=0;i<=p;i++){ t=w[0];for(j=1;j 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到后移到前。void fun(char *w, int m){ int i, j;char t;for(i=1,i<=m;i++){ t=w[0];for(j=1;w[j]!=’’;j++)w[j-1]=w[j];w[j-1]=t;} } (三)排序法 1、冒泡法 for(i=1;i 2、选择法 for(i=0;i 3、插入法 for(i=1;i (四)Fibonacci问题 1、求Fibonacci数列中小于t的最大的一个数,结果由函数返回。int fun(int t){ int a=1,b=1,c=0,i;do { c=a+b;a=b;b=c;}while(c 2、用递归算法计算数列中第n项的值。long fun(int g){ swich(g){ case 0:return 0;switch(g)case1:case2:return 1;} return(fun(g-1)+fun(g-2));}(五)素数问题 1、将大于整数m且紧靠m的k个非素数存入所指的数组中。void fun(int m,int k,int xx[]){ int i,j,n;for(i=m+1,n=0;n 2、小于或等于lim的所有素数放在aa数组中,该函数返回所求出的素数个数。int fun(int lim, int aa[MAX]){ int i,j,k=0;for(i=2;i<=lim;i++){ for(j=2;j=i)aa[k++]=i;} return k;} 3、将所有大于1小于整数m的非素数存入xx数组中,个数通过k传回。void fun(int m,int *k,int xx[]){ int i,j,n=0;for(i=4;i {int i, j,t,n=0;for(i=2;i (六)删除相同数 int fun(int a[],int n){ int i, j=1;for(i=1;i { int i,t,j=0;t=a[0];for(i=1;i (七)统计字符个数,单词个数。 1、按‘0’到‘9’统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。 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’)bb[*p-‘0’]++;p++;} for(i=1,j=0;i<10;i=i+2,j++)num[j]==bb[i];} 2、str全部由小写字母和空格字符组成的字符串,num传入字符串长度。统计单词个数。void fun(char *s, int *num){ int I, 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中。void fun(char *tt, int alf[]){ int i;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字符长度和其下标。void fun(char *str, int *m, int *k){ int i, j=0;int bb[N];char *p=str;*m=0;*k=0;for(i=0;i 5、统计在tt字符串中”a”到”z”26个字母各自出现的次数,并依次放在pp所指数组中。void fun(char *tt,int pp[]){ int i;for(i=0;i<26;i++)pp[i]=0;for(;*tt!=’’;tt++)if(;*tt>=’a’&&*tt<=’z’)pp[*tt-’a’]++;} 6、统计一个长度为n的字符串在另一个字符串中出现的次数。int fun(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==’’)n++;str++;} return n;} 7、求出ss所指字符串中指定字符的个数,并返回此值。int fun(char *ss, char c){ int i=0;for(;*ss!=’’;ss++)if(*ss==c)i++;return i;} 8、统计一个长度为2的字符串在另一个字符串中出现的次数。int fun(char *str, char *substr){ int i,j=0;for(i=0;str[i+1]!=’’;i++)if(str[i]==substr[0]&&str[i+1]==substr[1])j++;return j;} (八)进制转换 1、把str字符串转换成任意进制的数。int fun(char *str, int x, int y){ int sum;int i=0;char *p=str;for(i=0;i :原进制;y:要转换成的进制。x while(sum!=0){ xx[i]=sum%y;sum=sum/y;i++;} return i;} 注: (1)将x转换成10进制:sum=sum*x+*p-‘0’;(2)将10进制转换成y: sum%y 得到y进制数的最低位。sum/y 得到y进制数的次低位。 2、str字符串由‘0’和‘1’组成。转换成十进制数。int fun(char *str){ int n;char *p=str;n=*p-‘0’;p++;while(*p){ n=n*2+*p-‘0’;p++;} return n;} (九)比较字符串长度 1、比较两个字符串的长度,函数返回较短的字符串。char *fun(char *s, char *t){int i,j;for(i=0;s[i]!=’’;i++);for(j=0;t[j]!=’’;j++);if(i<=j)return s;else return t;} 2、从传入的num个字符中找出最长的一个字符串,通过形参指针max传回该串地址。fun(char(*a)[81], int num,char *max){ int i=0;max=a[0];for(i=0;i (十)最大公约数,最小公倍数 1、int fun(int a, int b){ int r,t;if(a 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)最小公倍数:两数乘积除以最大公约数。 班级:姓名:学号: 第一题 一、题目要求(11题) #include STRECfun(STREC*a, char *b){ int i; STREC str={“”,-1};/*若没找到指定的学号,在结构体变量中给学号置空串,给成绩置-1*/ for(i=0;i if(strcmp(a[i].num,b)==0)/*找到指定学号的学生数据*/ str=a[i]; str=a[i]; return str;/*返回学生记录*/ }} main(){STREC s[N]={{“GA005”,85},{“GA003”,76},{“GA002”,69},{“GA004”,85},{“GA001”,91},{“GA007”,72},{“GA008”,64},{“GA006”,87},{“GA015”,85},{“GA013”,91},{“GA012”,64},{“GA014”,91},{“GA011”,77},{“GA017”,64},{“GA018”,64},{“GA016”,72}};STRECh;charm[10]; inti;FILE *out; printf(“The original data:n”);for(i=0;i {if(i%4==0)printf(“n”); printf(“%s %3d”,s[i].num,s[i].s);} printf(“nnEnter the number:”);gets(m);h=fun(s,m); printf(“The data :”); printf(“n%s%4dn”,h.num,h.s);printf(“n”); out = fopen(“out.dat”,“w”);h=fun(s,“GA013”); fprintf(out,“%s%4dn”,h.num,h.s);fclose(out);} 第二题 编写函数fun,它的功能是:利用以下所示的简单迭代方法求方程COS(x)-x=O的一个实根。Xn+1=COS(Xn)。迭代步骤如下:(1)取x1初值为0.0; (2)xO=xl,把xl的值赋给xO:(3)x1=COS(x0),求出一个新的x1;(4)若x0-xl的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2); (5)所求x1就是方程COS(x)-x=0的一个实根,作为函数值返回。程序将输出结果 Root=0.739085。#include printf(“Root=%fn”,fun());} 第三题 一、题目要求 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符 串中的前导*号全部移到字符串的尾部。例如,若字符串中的内容为*******A*BC*DEF*G**** 移动后,字符串中的内容应当是A*BC*DEF*G***********。在编写函数时,不得使用C语言提供的字符串函数。 #include { char s[81],*p;int n=0; printf(“enter a string:n”);gets(s);fun(s); printf(“the string after moving:n”);puts(s);} 一、做题分析 【参考答案】 voidfun(char *a){ int i=0,n=0;char *p;p=a; while(*p=='*')/*判断*p是否是*号,并统计*号的个数*/{ n++;p++;} while(*p)/*将前导*号后的字符传递给a*/{ a[i]=*p;i++;p++;} while(n!=0){ a[i]='*';i++;n--;} a[i]='';} 二、做题分析 【考点分析】 本题考查:移动字符串中指定字符的位置,一般采用while循环语句,通过指针型变量来完成。 【解题思路】 函数fun的功能:将字符串中的前导*号全部移到字符串的尾部。本题解题思路:(1)定义一个指针并指向字符串的首地址;(2)利用循环语句找出字符串的前导*号的个数n;(3)利用循环语句把剩余的字符拷贝到另一个字符串中;(4)在字符串的末尾接上n个*号。 第四题 题目要求 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不只一个,函数返回分数最高的学生的人数。 #include int fun(STREC *a, STREC *b){ } main(){STREC s[N]={{“GA05”,85},{“GA03”,76},{“GA02”,69},{“GA04”,85},{“GA01”,91},{“GA07”,72},{“GA08”,64},{“G A06”,87},{“GA015”,85},{“GA013”,91},{“GA012”,64}, {“GA014”,91},{“GA011”,77},{“GA017”,64}, {“GA018”,64},{“GA016”,72}}; STREC h[N];int i,n;FILE *out;n=fun(s,h); printf(“the %d highest score :n”,n);for(i=0;i printf(“%s%4dn”,h[i].num,h[i].s);printf(“n”); out=fopen(“out15.dat”,“w”);fprintf(out, “%dn”,n);for(i=0;i 二、做题分析 1、应该先用for循环找出这些学生中成绩最高的然后再利用for循环结构把和最高成绩一样的找出来并用j记录最高成绩的个数。注:本题主要考察结构体的应用。故函数如下intfun(STREC*a, STREC *b){ int i,j=0,max=a[0].s;/*找出最大值*/for(i=0;i if(max for(i=0;i if(max==a[i].s)b[j++]=a[i]; /*找出成绩与max相等的学生的记录,存入结构体b中*/return j; /*返回最高成绩的学生人数*/} 第五题 一、题目要求 #in假定输入的字符串中只包含字母和*号。 请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不得使用c语言提供的字符串函数。例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是****ABCDEFG。 #include printf(“enter astring:n”);gets(s);fun(s); printf(“the string after deleted:n”);puts(s);} 二、做题分析 1、首先判断*p前几个字符中中是否含有*,记录*截止的位置,然后再判断字符数组中其他的英文字符。故函数程序如下 Int i=0; char *p=a; while(*p&&*p==’*’){a[i]=*p;i++;p++;} while(*p){if(*p!=’*’){a[i]=*p;i++;} p++;} 第六题 一、题目要求(18) 请编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中“a”到“z”26个字母各自出现的次数,并依次放在pp所指数组中。例如,当输入字符串abcdefgabcdeabc后,程序的输出结果应该是:3 3 3 2 2 1 1 0 0O 0 0 O O 0 0 0 0 0 0 0 0 0 0 0 O #include void fun(char *tt, int pp[]){} main() {char aa[1000];intbb[26], k, n;clrscr(); printf(“nPlease entera char string:”);scanf(“%s”, aa);fun(aa, bb); for(k = 0;k < 26;k++)printf(“%d ”, bb[k]); printf(“n”);} 一、做题分析 本题考查:for循环语句,注意循环变量取值范围以及循环体语句作用。数组元素初始化和赋值操作。if语句条件表达式,需注意条件表达式的逻辑运算。字符串结束标识 要求统计在tt所指字符串中'a'到'z'26个小写字母各自出现的次数,并依次放在pp所指数组中。首先for循环语句体中初始化pp数组中分别用来统计26个字母的个数。再使用循环判断语句对tt所指字符串中的字符进行逐一比较操作,同时存入相对应的pp数组中。故程序如下 void fun(char *tt, int pp[]){ int i; for(i=0;i<26;i++)pp[i]=0; for(;*tt!='';tt++) if(*tt>='a'&&*tt<='z')pp[*tt-'a']++;} #include(stdio.h) main() { int question[4]={-1,-1,-1,-1},i=0,j=0,k=0,A=0,B=0,answer[4]={0}; char again='y'; while(again=='y'){ srand((int)time(0)); while(i4){ k=(int)rand()%10; for(j=0;ji;j++)if(k==question[j]){ k=-1;break;} if(k==-1)continue;question[i]=k;i++;}/*while i*/ for(i=8;i0;i--)/*还有8次机会*/ { A=0;B=0;printf(“n你还剩下%d次机会。”,i); printf(“n请输入四个0-9之间的数字,中间用空格隔开n”);for(j=0;j4;j++)scanf(“%d”,&answer[j]); for(j=0;j4;j++) for(k=0;k4;k++) { if(answer[j]==question[k]){ if(j==k)A++;else B++;} }/*for*/ if(A==4){ again='0'; printf(“n你赢了,还继续猜吗?(y/n)”); while(again!='y'&&again!='n') scanf(“...%c”,&again);break;}/*if*/ printf(“n%dA%dB”,A,B);if(i==1){ again='0'; printf(“n你输了,正确答案是”); for(j=0;j4;j++) printf(“%dt”,question[j]); printf(“n还继续吗?(y/n)”); while(again!='y'&&again!='n')scanf(“%c”,&again); printf(“%c”,again);break;}/*if*/ }/*for changce*/ }/*while again*/ printf(“感谢您玩这个游戏。”);} 计算机等级考试二级C语言上机改错题考点汇总 青年人网站小编发现很多考生对上机考试存在很大的问题,现在小编将在教学当中对二级C语言上机考试题库总结的经验和大家分享,希望能对我们考生的考试有所帮助,顺利通过考试!以下是对上机考试改错题的做题方法和总结,改错题的错误主要分为以下几类: 1、if或while语句 若错误行是if或者while语句,则要注意以下点: 1)首先判断是否正确书写if或while关键字; 2)然后看有没有用小括号把整个表达式括起来,若没有则加上小括号; 3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符; 4)若if条件表达式中只有一个等于号即数学等号(=),则要改写成两个等于号即逻辑等号(= =); 5)若if条件表达式为其他的比较运算符,则一般是进行逆转或加一个等于号; 2、for语句 若错误行是for语句,则要注意以下几点: 1)首先判断for有没有书写正确; 2)然后看for中的表达式是不是用分号(;)隔开,若不是则改为分号。 记住是分号(;),不是逗号(,)! 3)再者,分析for中的三个表达式,是否符合题意; 第一个表达式表示起始条件,第二个表达式表示终止条件,第三个表达式表示循环变量的变化。 3、return语句 若错误行为return语句,则要注意以下几点: 1)首先看是不是正确书写return关键字; 2)然后看是不是缺少分号,若是则加上分号即可; 3)再者判断return后的变量或表达式是否正确; 这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。 4、赋值语句 若错误行是赋值语句,则要看赋值是否正确,然后看赋值运算符是否写正确。 5、定义语句 若错误行是定义语句,则要注意: 1)首先分析变量类型名是否写对; 2)然后分析给变量赋初值是否正确; 3)若以上均不是,则看是不是少定义了某个变量或少了花括号;第三篇:c语言上机实习编程题
第四篇:C语言编程
第五篇:计算机等级考试二级C语言上机改错题考点汇总
2009春江苏省计算机二级C语言上机(编程)
本文2025-01-28 19:40:30发表“合同范文”栏目。
本文链接:https://www.wnwk.com/article/146701.html
- 二年级数学下册其中检测卷二年级数学下册其中检测卷附答案#期中测试卷.pdf
- 二年级数学下册期末质检卷(苏教版)二年级数学下册期末质检卷(苏教版)#期末复习 #期末测试卷 #二年级数学 #二年级数学下册#关注我持续更新小学知识.pdf
- 二年级数学下册期末混合运算专项练习二年级数学下册期末混合运算专项练习#二年级#二年级数学下册#关注我持续更新小学知识 #知识分享 #家长收藏孩子受益.pdf
- 二年级数学下册年月日三类周期问题解题方法二年级数学下册年月日三类周期问题解题方法#二年级#二年级数学下册#知识分享 #关注我持续更新小学知识 #家长收藏孩子受益.pdf
- 二年级数学下册解决问题专项训练二年级数学下册解决问题专项训练#专项训练#解决问题#二年级#二年级数学下册#知识分享.pdf
- 二年级数学下册还原问题二年级数学下册还原问题#二年级#二年级数学#关注我持续更新小学知识 #知识分享 #家长收藏孩子受益.pdf
- 二年级数学下册第六单元考试卷家长打印出来给孩子测试测试争取拿到高分!#小学二年级试卷分享 #二年级第六单考试数学 #第六单考试#二年级数学下册.pdf
- 二年级数学下册必背顺口溜口诀汇总二年级数学下册必背顺口溜口诀汇总#二年级#二年级数学下册 #知识分享 #家长收藏孩子受益 #关注我持续更新小学知识.pdf
- 二年级数学下册《重点难点思维题》两大问题解决技巧和方法巧算星期几解决周期问题还原问题强化思维训练老师精心整理家长可以打印出来给孩子练习#家长收藏孩子受益 #学霸秘籍 #思维训练 #二年级 #知识点总结.pdf
- 二年级数学下册 必背公式大全寒假提前背一背开学更轻松#二年级 #二年级数学 #二年级数学下册 #寒假充电计划 #公式.pdf


