计算机二级C语言上机题型总结
- 格式:doc
- 大小:51.00 KB
- 文档页数:16
【上机题命题及答题要点】1、近年来江苏省高校上机题目难度有所下降。
本轮上机命题的难度系数及全国计算机等级考试二级C语言接近。
2、改错题通常有3~4个错误。
错误分为两大类,一类是语法出错,这类错误比较查错和容易修改,即在编译时报的错误。
另一类是结果出错,即程序的算法出错,这类错误需认真审题。
3、编程题必须掌握C语言的文件,应熟悉文件指针的定义,文件的打开及文件的输入输出。
编程题的固定框架。
必须记忆。
以C01的编程为例。
#include <stdlib.h> /*库函数exit(0)需要*/#include <stdio.h> /*定义文件指针时需要的头文件*/…………..{}void main(){ FILE *fp;所有数据类型的说明和定义if((fp=fopen("t:\\myf2.out","w"))==NULL){ printf("\nCan't open the file!"); exit (0);}函数调用(具体问题具体分析)结果输出printf("\nMy number is:120992340\n");fprintf(fp,"\nMy number is:1292340\n");fclose(fp);}4、必须熟悉常用算法。
5、江苏省高校计算机二级C语言上机编程题常考问题:字符串相关问题、素数相关问题、回文数相关问题、矩阵(二维数组)相关问题、特殊数问题(如,合数、真因子或质因子之和、水仙花数、亲密数、完数、数制转换、哥德巴赫猜想等)。
6、掌握文件输出操作标准形式。
【2013年3月江苏省等考上机真题解析】江苏省高等学校非计算机专业学生(C01)计算机基础知识和应用能力等级考试上机试卷二级C语言(试卷代号C01)(本试卷完成时间70分钟)一、改错题(16分)【程序功能】判断一个N×N方阵(N为奇数)是否为魔方阵。
二级C语言上机考试总结一、程序填空题填空题是计算机等级考试中的难点,占有的分值为30 分。
做填空题时注意掌握答题技巧。
填空题的分类:(一)、数学题目6、13 、2 5、2 9、36 、37 、38、44 、46解题方法:1、如果在函数中定义变量,但是没有定义成静态存储变量,即变量前面没有static ,应给变量赋初值,如果以后用到的是加减运算,则赋初0或值者为是0.0;如果以后用到的是乘除运算,则赋初值为1或者是1.0;2、循环条件的填空,分析表达式的规律,看表达式中的最后一项的值是否到了第m项或者是第n项,如果到了第m或者第n项,则在循环中的第二个表达式中用到的是i<=m或者是i<=n;3、循环条件中如果用的是while语句,则循环变量的初值应该在while的外面定义和赋初值,在循环语句中必须给变量自加或者是自减。
如果没有则一般填的是i++;4、看表达式中的每一项的运算规则,按照运算的规则把每一项中的n值替换为i,特殊情况例外。
如果是表达式中用到的是间隔相加减的运算时,注意给中间变量赋初值为1或者是1.0;在后面的运算中给变量乘以一个-1,以改变中间变量的符号。
(二)、字符串题目8、10、11、12、14、18、19、21、3 5、45、4 8、49解题方法:1、循环的条件是判断该字符是否和结束符相等,如果相等,说明该字符串结束,否则说明没有结束,继续循环。
2、把一个数字字符转变成对应的数值的格式是:ch=ch-…0‟;把大写字母转变为小写字母的格式:ch=ch+32;把小写字母转变为大写字母的格式为:ch=ch-32 ;3、区分好字符数组中的指针和指针所指的值的关系。
在循环语句中,当指针往后走一个位置的时候,用的是指针的自加,而不是指针所指的值的自加。
4、掌握字符数组中的函数的使用的格式。
即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。
注意里面的格式中使用的都是和指针。
二级C语言上机考试100套真题答案(背诵版)被二级上机考试困扰,本人归纳出来的索引小抄(怕被逮,拿来背也是可以的),本人就此过了二级。
归纳简单易懂,抄时查看方便。
重点:你放心,别担心里边的题错啥的,本人细心总结的,共100题,每题都是准确的!!检索方法:共三题(填空,改错,程序),按每题的第一个字来检索,一定是第一个字,所以三题就是三个字。
重点是但这里的每套题里面才两个字,那是为了方便(因为程序题答案太长),适合要求低分的同学。
三字的我也会上传在我的文档里面。
重点:一定要下载检索表,按首字来查找,方便快速找题!!第一套1将1 struct student2 n-13 a[i].name,a[j].name 2在1 q=p+i; 2 while(q>p)第二套1删1q 2 next 3 next2用1 p=j; 2 p=i;第三套1逆1 n/2 2 i 3 a[n-i-1]2将1 n=*p-'0'; 2 n=n*8+*p-'0';第四套1在1 NULL 2 n 3 head,ch2删1. for(i=0,t=0;p[i];i++)2. c[t]='\0';第五套1.计(1) 0 (2) n (3) (t*t)2统(1)for(i=0;str[i];i++) (2) if(substr[k+1]= ='\0')第六套1.将1 s[i] 2 k 3 02.将1 while(*w) 2 if(*r = =*p)第七套1 程序1 struct student *2 a->score[i]3 a2.从1 char *fun(char (*sq)[M])2 return sp;第八套1.将1 1 2 i 3 a[p+i]2.把1 float k; 2 if(*a<*c)第九套1.计1 x[i]/N 2 j++ 3 i++2.统1 num[k]=0; 2 switch(*s)第十套1程序 1 struct student 2 /doc/177712401.html, 3 a.score[i] 2删1 if(p= =n) return-1; 2 a[i]=a[i+1];第十一套1.计1 s/N 2 j++ 3 -12.读 1 #include 2 void upfst (char *p)第十二套1.将1 fp 2 fclose(fp) 3 fname2.将1 for(i=j+1;i<="">1.找1 a[0][i] 2 < 3 x,y2.交 1 void fun(int *x,int *y) 2t=*x;*x=*y;*y=t;第十四套1. 函数1 && 2 'A' 3 ch2给1 void fun(int *a) 2 a[j]=a[j-1]; 第十五套1.把1 1 2 s[k] 3 c2.求1 long s=0,t=0; 2 t=t/10;第十六套1.找1 STU 2 std[i].num 3 std[i]2.从1 if(*r==*p){r++;p++;}2 if(*r= ='\0')第十七套1.统1 s[i] 2 '9' 3 *t = n;2.通1 t=*x;*x=y; 2 return(t);第十八套1.有1 i++ 2 m 3 m2.计 1 while((high >= 2)&&(n<10)) 2 yes=0;break;第十九套1.将1 k 2 N-1 3 temp2根1 void fun(int a[][M],int m)2 a[j][k]=(k+1)*(j+1);第二十套1.对1 t=i 2 i 3 02.用1 while(fabs(t)>=num) 2 t=s/n; 第二十一套1.在1 [M] 2 N 3 '\0'2.根1 t=1.0; 2 return(s*2);第二十二套1.将1 k 2 N 3 a[k][i]2读 1 for(i=strlen(t)-1;i;i--) 2if(t[j]>t[j+1])第二十三套1.调1 "r" 2 fs 3 ft2.将1 if(d%2==0) 2 s/=10;第二十四套1程序(1) a (2)/doc/177712401.html,(3)score[i] 2从1 s[j++]=s[i]; 2 s[j]='\0';第二十五套1.首1 a[i] 2 a[i] 3 02.为1 y=1; 2 d=a-i;第二十六套1.最1 [N] 2 i 3 i+12.将1 void fun(int m, int k)2 aa[i]=m%k;3 printf(“%d”,aa[i-1]);第二十七套1.计1 1.0 2 -1 3 t2从1 for(i=1;i<=3;i++)2 if(k>=0&&k<=6)第二十八套1.计1 sum=0 2 t[i][i] 3 12.用1 double r;2 while(fabs(n-m)>0.001)第二十九套1.有1 0 2 j-- 3 j2.计1 double f(double x) 2 return s;第三十套1.把第一处 1 第二处 j++ 第三处 j2.求1 t=a;a=b;b=t; 2 return (b);第三十一套1.在1 N 2 k 3 ss[i]2.逐1 int k=0; 2 while(*p||*q)第三十二套1.把1 x 2 p 3 s2.计1 long k=1; 2 num/=10第三十三套1.在1 N 2 substr 3 02.求 1 fun(int x,int y,int z) 2return j;第三十四套1.在1 N 2 i 3 -12.从1 a2=k/10; 2 return i;第三十五套1.统1 *n 2 next 3 head2.求1 a=NULL; 2 if(*r==*p)第三十六套1.函数1 char 2 ch<='9' 3 '0'2.将1 b[k]=*p; 2 b[k]='';k++;第三十七套1.把1 a[i]%2 2 a[j] 3 j2.按1 fun(int n) 2 if(n==1)第三十八套1.利1 i 2 ps[j] 3 tp2.计1 double fun(int n) 2 return sum; 第三十九套1.计1 *av 2 i 3 x[j];2.根 1 float fun(int n) 2for(i=2;i<=n;i++)第四十套1.将1 j++ 2 s[i]=t1[i] 3 j2.用 1 for(j=i+1;j<6;j++) 2*(pstr+i)=*(pstr+j);第四十一套1.将1 48 2 s++ 3 sum2.计1 if((k%13==0││(k%17==0))2 }第四十二套1给定1 p->next 2 q 3 p->next2将1 while(*s) 2 s++;第四十三套1 判1 02 ||3 12根1 t=t-1.0/i; 2 return t;第四十四套将1 N 2 N-1 3 02计1 s=s+(n+1.0)/n; 2 return t;第四十五套1 2、1 next2 NULL3 r2计1 r=t; 2 r=t;第四十六套1将1 *s 2 s++ 3 n2由1 { int j,c=0;float xa=0.0;2 if(x[j]>=xa)第四十七套1计1 x 2 n 3 fabs(t)2求1 for(i=1;i<=y;i++) 2 t=t%1000;第四十八套1计1 data2 next3 head2将1 while(*r) 2 *a=*r;a++;r++; 第四十九套1把1 t,s 2 s[i] 3 02找1 if(i%k==0) 2 if(k>=i)第五十套1将1 j 2 k 3 p2首1 while(i<="" p="">第五十一套1计1 0 2 i++ 3 2.0*i2将1 void fun(char*s, char *t) 2 t[2*d]='\0';第五十二套1在1 j 2 0 3 i++2根 1 for(i=2;i<=m;i++) 2y-=1.0/(i*i);第五十三套1将1 std[] 2 PERSON 3 std2将1 int k,q,i; 2 pt[i]=str[k][i]; 第五十四套1计1 0.0 2 x[i]/N 3 j++2根 1 double fun(int m) 2for(i=100;i<=m;i+=100)第五十五套1判1 s 2 -- 3 return 02求1 double fun(int n)2 s=s+(double)a/b;第五十六套1.从1 *fw 2 str 3 str2从 1 void fun(long s,long*t) 2s1=s1*10;第五十七套1计1 n++ 2 0 3 s++;2从1 t+=s[k]; 2 *aver=ave;第五十八套1计 1. x=3.0/4; 2 while(x>e) 3x=(2*i+1)/(t*t);2求 1 double fun(int n) 2s=s+(double)a/b;第五十九套1把1 a[i] 2 a[j] 3 a[j]2用 1 switch(g)去掉分号2 case 1:return 1; case 2:return 1;第六十套1有1 [N] 2 t[i][j] 3 t[j][i]2计 1 #define FU(m,n) ((m)/(n))2 return (value);第六十一套1找1 std[i].year 2 std[i] 3 n2读1 IsPrime (int n) 2 if (!(n%i))第六十二套1将1 t [] [N] 2 i=0; i<="">2利 1 fun (int a [], int m)2 else if (m>a [mid])第六十三套1求1 M 2 < 3 k2将1 if (( ' a ' <=tt[i])&&(tt[i]<= ' z ' )) 2 tt[ i ]- =32;第六十四套1对1 i+1 2 k=j 3 t2判1 void fun(char *str, char ch ) 2 if (*str! =ch) 3 str [1]=0;第六十五套1计1 1 2 2*i 3 (-1)2判 1 k++; 2 if (m==k)第六十六套1在1 && 2 0 3 s [j]2根1 for (i =2 ; i<= m; i++) 2 y+=1. 0/( i* i) ;第六十七套1找1 999 2 t/10 3 x2从 1 void fun (long s, long *t)2 while (s>0)第六十八套1将(1)0(2) 10*x (3)n/102将1 *t=0; 2 if (d%2!=0)第六十九套1 甲乙 1 i2 t++ 3count2根1 int fun (int a,int b, int c)2 else return 1;第七十套1统1 (n%10) 2 break 3 break2统1 if (t==0) 2 *zero =count;第七十一套1把1 a[] 2 2 3 i+12按1 sum=0.0; 2 if ((i+1)%5==0)第七十二套1统1 j=2 2 i 3 j2计1 sum =0; j=0; 2 if (sum %4==2) 第七十三套1计1 x 2 n 3 t2计1 d=1 ; s=0 ; 2 d=d/10 ;第七十四套1.计1 1 2 1 3 i2找1 k= i ; 2 c=k%10;第七十五套1给定1 next 2 t->data 3 t2将1 fun (char *a )2 printf ( "%c" , *a);第七十六套1在给1 '\0' 2 0 3 c2计1 double sum =0. 0; 2 sum/=c; 第七十七套1将1 10 2 0 3 x2计1 if (n==0) 2 result *=n--;第七十八套1 给定1 FILE*2 fp3 ch2依1 s [j++]=s [ i ]; 2 s [ j ]= ' \ 0 ' ; 第七十九套110. 1 h - >next 2 p - > next 3 >2求1 p= h - >next; 2 p=p->next;第八十套1 X 1 double2 f 13 f 22 给1 while(p!=NULL) 2 p= p - >next; 第八十一套1 给定1 FILE* fp2 fclose (fp) 3fp2对1 t=calloc(m,sizeof(STU));2 t [k] =b [ j ] ;第八十二套1 x 1 double2 f13 f22比1 char *fun (char *s ,char *t)2 ss++;3 tt++;第八十三套1 程序1 tt2 tt.score [ i ]3 std2求1 m= i ; 2 if ( a [k]>a [m]) m=k; 第八十四套1 程序1 filename2 fp3 fp2 给定 1 p=(NODE*) malloc (sizeof(NODE)); 2 return h;第八十五套1 程序1 "r"2 >3 fwrite2在1 p=s ; 2 while (*p++)第八十六套1 2、1 NODE2 next3 r2将1 if ( i % 2 || s [ i ]%2= =0 )2 t [ j ]= ' \0 ' ;第八十七套1 程序1 fp2 = =3 fp12利1 n=strlen (aa); 2 ch =aa [i];第八十八套1调1 N 2 break 3 n2先1 sum=02 scanf ("%d" , &a [ i ] [ j ]) ;第八十九套1求1 [N] 2 len 3 *n=len2根1 t+=1. 0/ i ; 2 return t;第九十套1求1 ss[i] 2 n+j 3 12将1 if(*p= =' ')2 *(p-1)=toupper(*(p-1));第九十一套1将 1 std[0] 2 std[i].age 3 /doc/177712401.html,2实1 void fun(int *a,int *b)2 t=*b;*b=*a;*a=t;第九十二套1将1 '0' 2 s++ 3 ctod(a)+ctod(b)2分1 void fun ( char *s, int *a, int *b ) 2*a=*a+1; 3 *b=*b+1;第九十三套1找1 0 2 x 3 t++2先1 int i,s1; 2 t[i]=s[s1-i-1];第九十四套1从1 a 2 a 3 b2首1 c=c+32; 2 c=c+5;第九十五章1 给定 1 STYPE2 FILE 3fp2先1 for(i=0;i<="" p="" t[2*s1]="\0"> 第九十六套1 程序1 ->sno2 ->name3 &t2应1 double fun(double a,double x0) 2 if(fabs(x1-x0)>0.00001)第九十七套1找1 *s 2 1 3 k[n]2求1 float fun(int k) 2 return s;第九十八套1将1 1 2 s>0 3 i*102输1 int fun(int n,int xx[][M])2 printf("%d",xx[i][j]);第九十九套1求1 k 2 len 3 ss[i][j]2计1 result *=n--; 2 return result;第一百套1 给1 STU2 score[i]3 &std2求1 if(k>1) 2 elsse if(k= =0)答题方法,例如100题:1填空题例如程序中__1__,对应答案1,把__1__删除填入STU都填完(一般2-3个空)然后编译程序即可。
上机编程题总结一、编程题的基本算法1.求和问题。
(1)(循环控制变量)计数器的范围。
(2)和变量的初值一般为0。
(3)如是分数求和,请注意整除问题。
(4)在确保前三个条件的情况下,按编程的思路,一步步完善。
2. 求乘积问题。
(1)积变量(2)乘积表达式作分母的时候,是一个整体,请加括号。
3.找最大值、最小值问题。
(1)首先将首元素(行首、列首等)的值赋给保存最大值(或最小值)的变量,如max(或min)(2)然后将max(或min)和后面的元素一一比较,如果出现更大的值(或更小的值),则将该值赋给max(或min),直到全部比完为止,利用一个临时变量j记录max所在位置。
(3)一维数组的首元素为a[0],二维数组的首元素为a[0][0],二维数组的行首元素为a[i][0],二维数组的列首元素为a[0][i]。
例:找出2×M整型二维数组中最大元素的值int fun (int a[][M]){int i,j,max=a[0][0];for(i=0;i<2;i++)for(j=0;j<M;j++)if(max<a[i][j])max=a[i][j];return max;}4.求素数问题。
(1)判断一个素是否为素数。
(2)求某个范围内素数的个数、和、平方根和等。
5. 求最小公倍数、最大公约数问题。
最小公倍数求法:用从1开始的数去整除,若能同时整除,则此数为最小公倍数,否则继续加1再整除,直到找到为止。
for(k=1; ;k++){if(k%a==0&&k%b==0) break};最大公约数求法(碾转相除法):x>y(1)将两数中的大数去除以小数,如果除不断,转入(2),若能整除,转入(3)。
(2)将小数变成被除数,它们的余数为除数,再相除。
如果除不断,转入(2)。
若能整除,转入(3)。
(3)则此除数为最大公约数。
int a(int x,int y) {int temp;temp=x%y;if(temp==0){ return y; }else{return a(y,temp); }}6.字符串问题。
计算机二级C语言上机题型总结一)“******”问题1、将字符串中的前导*号全部删除,中间和后面的*号不删除。
void fun(char *a){char *p=a;while(*p= =’*’) p++;for( ; *p!=’\0’;p++,a++)*a=*p;*a=’\0’;}2、只删中间*int i;for(i=0;a[i]= =’*’;i++)for( ;h<p;h++)if(*h!=’*’)a[i++]=*h;for( ;*p;p++)a[i++]=*p;a[i]=’\0’;3、只删尾*while(*a!=’\0’)a++;a--;while(*a= =’*’)a--;*(a+1)=’\0’;4、只留前*int i , j=0;for(i=0;a=’*’;i++); j=i;for( ;a;i++)if(a!=’*’)a[j++]=a[i];a[j]=’\0’;5、只留中间*int i,j=0;for(i=h;i<n-e;i++) a[j++]=a[i];a[j]=’\0’;6、只留尾*char *t=a;for( ; t<=p;t++)if(*t!=’*’)*(a++)=*t;for( ;t!=’\0’;t++)*(a++)=*t;*a=’\0’;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]=’\0’;}(二)移动问题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)的元素平移到数组最后。
第1套一、填空给定函数的功能是调用fun 函数建立班级通讯录。
通讯录记录每位学生的编号,姓名和电话号码。
班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为答案yfile5.dat的二进制文件中。
答案:1. STYPE 2. FILE3. fp二、修改先将在字符串s中的字符按正序存放到t串中,然后把s 中的字符按逆序连接到t串后面。
答案:1. for(i = 0 ; i < sl ;i++) 2. t[2*sl] =` 0`; 三、程序将两个两位数的正整数a,答案合并成一个整数放在c中。
合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,答案数的十位和个位数依次放在c数的百位和个位上。
*c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10);第2套一、填空从键盘输入若干行文本(每行不超过80个字符),写到文件答案yfile4.txt中,用-1作为字符串输入结束的标记。
然后将文件的内容读出显示在屏幕上。
文件的读写分别有自定义函数ReadText 和WriteText实现。
答案:*fw str str 二、修改从低位开始取出长整形变量s中的奇数位上的数,依次构成一个新数放在t中,高位仍放在高位,低位仍放在低位。
答案:long *t sl =sl*10;三、程序将两个两位数的正整数a,答案合并成一个整数放在c中。
合并的方式:将a数的十位和个位数依次放在c数的千位和十位上,答案数的十位和个位数依次放在c数的百位和个位上。
*c=(b/10)*1000+(a%10)*100+(b%10)*10 +(a/10);第3套一、填空将自然数1~10以及它们的平方根写到名为答案yfile3txt的文本文档中,然后再顺序读出显示在屏幕上。
答案:(1)fp (2)fclose(fp)(3)fname二、修改将n个无序整数从小到大排序。
答案:for(i=j+1;i<n;i++)p=i;三、程序将两个两位数的正整数a,答案合并成一个整数放在c中。
重要说明:本题库为从题中一题一题复制出来工作量大,而且有许多表达式无法在word中快速表示出来(这样会加大工作量)故而省略,或者表达错位,有的地方可能或者肯定会有错,我相信准备参加C语言二级考试的同学应当能够对照参考答案看出来,这是最新版最完整考试题库,相信大家一定都能通过!第一套程序填空给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。
如输入一个数:27638496,新的数为729第一空:{ t=*n%10;第二空:if(t%2!=0)第三空:*n=x;2.程序修改给定程序modi1.c中函数fun的功能是:计算n!。
例如,给n输入5,则输出120.000000。
double fun(int n ){ double result=1.0;/*****found******/if(n==0)return 1.0;while(n>1&&n<170)/*****found******/result*=n--;return result;}程序设计请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
例如,若输入字符串“-1234”,则函数把它转换为整数值-1234。
long fun(char *p){int i,len,t;long x=0;len=strlen(p);if(p[0]==’-‘){ t=-1;len--;p++;}else t=1;while(*p)x=x*10-48+(*p++);return x*t;}第二套1. 给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
C语言上机题型总结一)“******”问题1、将字符串中的前导*号全部删除,中间和后面的*号不删除。
void fun(char *a){char *p=a;while(*p= =‟*‟) p++;for( ; *p!=‟\0‟;p++,a++)*a=*p;*a=‟\0‟;}2、只删中间*int i;for(i=0;a[i]= =‟*‟;i++)for( ;h<p;h++)if(*h!=‟*‟)a[i++]=*h;for( ;*p;p++)a[i++]=*p;a[i]=‟\0‟;f[]){ int i;char *p=tt; 3、只删尾*while(*a!=‟\0‟)a++;a--;while(*a= =‟*‟)a--;*(a+1)=‟\0‟;4、只留前*int i , j=0;for(i=0;a=‟*‟;i++);j=i;for( ;a;i++)if(a!=‟*‟)a[j++]=a[i];a[j]=‟\0‟;5、只留中间*int i,j=0;for(i=h;i<n-e;i++)a[j++]=a[i];a[j]=‟\0‟;6、只留尾* char *t=a;for( ; t<=p;t++)if(*t!=‟*‟)*(a++)=*t;for( ;t!=‟\0‟;t++)*(a++)=*t;*a=‟\0‟;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]=‟\0‟;}(二)移动问题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<n;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到后移到前。
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]!=‟\0‟;j++)w[j-1]=w[j];w[j-1]=t;}}(三)排序法1、冒泡法for(i=1;i<n;i++)for(j=0;j<n-1;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=a[j];} 2、选择法for(i=0;i<n-1;i++){p=i;for(j=i+1;j<n;j++)if(a[p]>a[j]) p=j;if(p!=i)t=a[i];a[i]=a[p];a[p]=t;}3、插入法for(i=1;i<n;i++){t=a[i];for(j=i-1;a[j]>t&&j>=0;j--)a[j+1]=a[j];a[j+1]=t;}(四)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<t);c=a;return 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<k;i++)for(j=2;j<i;j++)if(i%j= =0){xx[n++]=i;break;}}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;j++)if(i%j= =0) break;if(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<m;i++){ +]=*p;a[i]=‟\0‟;for(j=2;j<i;j++)if(i%j= =0) break;if(j<i) xx[n++]=i;}*k=n;}或{int i, j,t,n=0;for(i=2;i<m;i++){ t=1;for(j=2;j<i;j++)if(i%j==0){t=0;break;}if(t==1) xx[n++]=I;}*k=n;}(六)删除相同数int fun(int a[],int n){ int i, j=1;for(i=1;i<n;i++)if(a[j-1]!=a[i])a[j++]=a[i];return j;} 除以最大公约数。
或{ int i,t,j=0;t=a[0];for(i=1;i<n;i++)if(t==a[i]);else{a[j++]=t;t=a[i];}a[j++]=t;return j;}(七)统计字符个数,单词个数。
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<N;i++)bb[i]=0;i=0;while(*(p+i)){ p-…0‟;p++; } 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 所指数组中。
void fun( char *tt,int pp[]){int i;for(i=0;i<26;i++)pp[i]=0;for(;*tt!=‟\0‟;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==‟\0‟) n++;str++;}return n;}7、求出ss所指字符串中指定字符的个数,并返回此值。
int fun( char *ss, char c){ int i=0;for( ;*ss!=‟\0‟;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]!=‟\0‟;i++)if(str[i]==substr[0]&&str[i+1]==substr[1])j++;return j;}(八)进制转换1、把str字符串转换成任意进制的数。
x:原进制;y:要转换成的进制。
int fun(char *str, int x, int y){ int sum;int i=0;char *p=str;for(i=0;i<N;i++)xx[i]=0;sum=*p-…\0‟;p++;while(*p){ sum=sum*x+*p-…0‟;p++; } ){ +]=*p;a[i]=‟\0‟; 3 i=0;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进制数的最低位。