二级培训C讲义wang8上机.docx
- 文档编号:4382934
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:11
- 大小:17.93KB
二级培训C讲义wang8上机.docx
《二级培训C讲义wang8上机.docx》由会员分享,可在线阅读,更多相关《二级培训C讲义wang8上机.docx(11页珍藏版)》请在冰点文库上搜索。
二级培训C讲义wang8上机
二级考试C培训讲义
第10章上机试卷讲解
10.1改错题
一、函数voidsort(structTitems[],intlow,inthigh)。
功能是:
对items[low]…items[high]的数组元素按name域以字典序排序,输出排序结果。
#include
#include
structT
{charname[20],num[20];}
voidsort(structTitems[],intlow,inthigh)
{structTtemp;
intk,j;
for(k=low;k for(j=low;j if(items[j].name>items[j+1].name) {temp=items[j];items[j]=items[j+1];items[j+1]=temp;} } voidmain() {structTstu[4]={"Wang","6723","Cai","2106","Zhang","5129","Chang","4512","An","6868",} intk; sort(stu,0,4); printf("TheSortedArray: \n"); for(k=0;k<5;k++) printf("name: %s,num: %s\n",stu[k]->name,stu[k]->num); } 二、函数find的功能是: 在给定的5×5矩阵中,找出所有元素a[i][j],使其第i行上所有元素之和等于第j列上所有元素之和。 #include voidfind(inta[5][]) {inti,j,row,col,sum1,sum2; for(i=0;i<5;i++) for(j=0;j<5;j++) {sum1=sum2=0; for(col=0;col<5;col++)sum1+=a[i][col]; for(row=0;row<5;row++)sum2+=a[j][row]; if(sum1=sum2) printf("a[%d][%d]: %d\n",i,j,a[i][j]); } } voidmain() {inti,j,a[5][5]={{2,8,1,9,4},{5,7,1,3,0},{7,1,7,5,2},{3,2,2,1,5,},{0,2,1,6,8}}; for(i=0;i<5;i++) {for(j=0;j<5;j++) printf("%4d",a[i][j]); printf("\n"); } find(a,5); } 10.2编程题 一、编写函数voidcount(chara[],charw[][10],intn,intb[])。 功能是: 统计w指向的数组中的n个单词在a指向的字符串中各自出现的次数(将非字母字符看作单词分割符),拧将统计结果依次保存在b指向的数组中。 main() {chara[]="thisisabook,isanapple."; charw[6][10]={"this","that","is","a","an","book"}; intb[6]; count(a,w,6,b); for(i=0;i<6;i++) printf("%s: %d,",w[i],b[i]); } voidcount(chara[],charw[][10],intn,intb[]) {charword[10];inti=0; for(j=0;j while(s[i]) {getword(a,word,&i); for(j=0;j if(strcmp(word,w[j])==0)break; if(j } } intischar(charc) {if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') return (1); return(0); } voidgetword(chara[],charword[],int*p_i); {inti; for(i=*p_i;s[i];i++) if(ischar(s[i])==1)break; if(s[i]){word[0]='\0';return;} for(j=0;ischar(s[j])==0;j++)word[j]=s[i] *p_i=i; } 二、编写函数char*d_to_h(charb[],charc[])。 功能是: 将b指向的数组中一个整数的十进制字符串转换成该整数的十六进制字符串,并保存在c指向的数组中。 (十六进制字符串自左向右依次保存在c[0]开始的数组元素中)。 函数返回c指向的数组的首地址。 main() {charb[]="26",c[6]; d_to_h(b,c); puts(c); } char*d_to_h(charb[],charc[]) {inttmp; tmp=d_to_int(b); int_to_h(tmp,c); return(c); } intd_to_int(charb[]) {inti,num=0; for(i=0;b[i];i++)num=num*10+b[i]-'0'; return(num); } voidint_to_h(intx,charc[]) {inti=0; for(;x;i++) {tmp=x%16; if(tmp>=0&&tmp<=9)c[i]=tmp+'0'; elsec[i]=tmp-10+'A'; x=x/16; } c[i]='\0'; reverse(c); } voidreverse(charc[]) {intlen,i,j;chartmp; for(len=0;c[len];len++); for(i=0,j=len-1;i {tmp=c[i];c[i]=c[j];c[j]=tmp;}; } 三、编写函数intstat(inta[],intn,intc[][2])。 a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。 函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的整数,从而生成有n/2个元素组成的整数数列;统计该数列中不同整数各自出现的次数,并将统计结果保存到c指向的二维数组中。 函数返回不同整数的个数。 main() {inta[10]={0,1,1,2,4,0,0,1,2,3},c[5][2]; intn,i; n=stat(a,10,c); for(i=0;i printf("%d: %d,",c[i][0],c[i][1]); } intstat(inta[],intn,intc[][2]) {inti; /*生成有n/2个元素组成的整数数列*/ for(j=0,i=0;i {c[i][0]=a[j]*10+a[j-1];c[i][1]=1;} /*统计该数列中不同整数各自出现的次数*/ n=n/2; for(i=0;i for(j=i+1;j if(c[j][0]==c[i][0]) {c[i][1]++; delete(c,n,i);n--; } } voiddelete(intc[][2],intn,intk) {inti; for(i=n-1;i>k;i--) {c[i-1][0]=c[i][0];c[i-1][1]=c[i][1];} } 四、编写函数voidFindWord(chara[])。 功能是: 将a指向的字符串中最长的单词(空格作为单词分割符)移动到该字符串的最后。 main() {chara[]="youarestudenttoo."; FindWord(a); puts(a); } voidFindWord(chara[]) {charword[50];intlen; charlongword[50];intlonglen=0,startpos; inti; for(i=0;a[i];i++) {while(a[i]=='');/*过滤空格*/ /*发现单词*/ for(len=0;a[i]&&a[i]! ='';)word[len++]=a[i++]; word[len]='\0'; /*是否是最长单词*/ if(len>longlen) {longlen=len;statrpos=i-longlen; strcpy(longword,word); } } /*将a[statrpos]…a[statrpos+longlen-1]删除*/ for(i=statrpos+longlen;a[i];i++)a[i-longlen]=a[i]; /*将longword[]中的字符串添加在a[]中字符串末尾*/ for(j=0;longword[j];j++)a[i++]=longword[j]; a[i]='\0'; } 五、将未在字符串s中出现而在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串中字符顺序排列,不去掉重复字符。 例如,当s="ABCDE",t="BDFGG"时,u中的字符串为"FGG"。 main() {chars[]="ABCDE",t[]="BDFGG",u[100]; fun(s,t,u); puts(u); } voidfun(char*s,char*t,char*u) {inti,j,sl,tl; sl=strlen(s);tl=strlen(t); for(i=0;t[i];i++) {for(j=0;s[j];j++) if(t[i]==s[j])break; if(s[j]=='\0'){*u=t[i];u++;} } *u='\0'; } 六、编写函数fun(int*a,intn,int*odd,int*even),功能是: 求出数组a[]中所有奇数之和以及所有偶数之和。 并利用指针odd返回奇数之和,利用指针even返回偶数之和。 例如: a[]的值依次为: 1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even返回偶数之和8。 main() {inta[N]={1,9,2,3,11,6},i,n=6,odd,even; fun(a,n,&odd,&even); printf("odd=%d,even=%d\n",odd,even); } fun(int*a,intn,int*odd,int*even) {inti; *odd=0;*even=0; for(i=0;i if(a[i]%2)*odd+=a[i]; else*even+=a[i]; } 七、编写函数longfun(longn)。 函数功能: (1)判断参数n的最高位是否为奇数,若是奇数,则将所有值为奇数的数字位提取出来,否则,将所有值为偶数的数字位提取出来; (2)用所提取的这些数字组成一个降序数,函数返回这个降序数。 例如由n=3214586生成的降序数为531;由n=87954632生成的降序数为8642。 2.编写main函数。 函数功能: 声明一个longint型数组并用测试数据初始化该数组,用测试数据调用函数fun,将每一测试数据及由其生成的降序数保存到结果文件myf2.out中。 最后将考生本人的准考证号字符串也保存到结果文件myf2.out中。 测试数据: 3214586,87954632 运行结果: 3214586,531 87954632,8642 longfun(longn); voidsort(inta[],intn); main() {longinta[2]={3214586,87954632}; longintx[2]; FILE*fp; x[0]=fun(a[0]); x[1]=fun(a[1]); fp=fopen("f: \\myf2.out","w"); fprintf(fp,"%ld,%ld\n",a[0],x[0]); fprintf(fp,"%ld,%ld\n",a[1],x[1]); fprintf(fp,"1111111\n"); fclose(fp); } longfun(longn) {inta[100],count=0; intb[100],i,j; longs; while(n>0) {a[count++]=n%10; n=n/10; } /*3214586: a[0]...a[count-1]: 6854123*/ j=0; if(a[count-1]%2) for(i=count-1;i>=0;i--) {if(a[i]%2)b[j++]=a[i];} else for(i=count-1;i>=0;i--) {if(a[i]%2==0)b[j++]=a[i];} /*有效数字: b[0]...b[j-1]*/ sort(b,j); /*有效数字已经降序: b[0]...b[j-1]*/ s=0; for(i=0;i s=s*10+b[i]; return(s); } /*降序: 大...小*/ voidsort(inta[],intn) {inti,j,tmp; for(i=0;i for(j=0;j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 培训 讲义 wang8 上机