计算机二级C语言考试编程题.docx
- 文档编号:16919403
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:174
- 大小:78.70KB
计算机二级C语言考试编程题.docx
《计算机二级C语言考试编程题.docx》由会员分享,可在线阅读,更多相关《计算机二级C语言考试编程题.docx(174页珍藏版)》请在冰豆网上搜索。
计算机二级C语言考试编程题
编程题
1.请编一个函数fun(char*s),函数的功能是把字符串中的内容逆置。
例如:
字符串中原有的内容为:
abcdefg,则调用该函数后,串中的内容为:
gfedcba。
注意:
部分源程序存在文件prog.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include
#include
#include
#include
#defineN81
/*本题的考核点是C语言中的for循环语句的使用。
解题思路:
对于本题,我们给出的参考函数采取的算法是:
将第一个元素与最后一个元素互换,第二个元素与倒数第二个互换…的方式进行倒排序。
因为我们一次互换两个元素,所以for循环语句执行length/2次(length是字符串的长度)就可以把全部元素互换一遍。
*/
voidfun(char*s)
{
inti,length;
chartmp;
length=strlen(s);/*统计字符串s中字符的个数*/
for(i=0;i {/*以下三行即将s中的第i个字符与第length-i个字符进行交互*/ tmp=s[i]; s[i]=s[length-i-1]; s[length-i-1]=tmp; } } NONO() {/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。 */ inti; chara[N]; FILE*rf,*wf; rf=fopen("bc8.in","r"); wf=fopen("bc8.out","w"); for(i=0;i<9;i++){ fscanf(rf,"%s",a); fun(a); fprintf(wf,"%s\n",a); } fclose(rf); fclose(wf); } main() {chara[N]; system("cls"); printf("Enterastring: ");gets(a); printf("Theoriginalstringis: ");puts(a); fun(a); printf("\n"); printf("Thestringaftermodified: "); puts(a);NONO(); } 2.编写程序,实现矩阵(3行3列)的转置(即行列互换)。 例如,输入下面的矩阵: 100200300 400500600 700800900 程序输出: 100400700 200500800 300600900 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #include /*本题的考核点是3行3列矩阵转置算法。 解题思路: 通过两重循环和一个中间数组完成转置。 方法是通过循环将原数组中的i行j列上的数赋值给中间数组的j行i列,最后再将中间数组的值赋给原数组,形成转置后的矩阵。 */ voidfun(intarray[3][3]) {inti,j;intb[3][3]; for(i=0;i<3;i++) for(j=0;j<3;j++) b[j][i]=array[i][j];/*将矩阵行列互换*/ for(i=0;i<3;i++) for(j=0;j<3;j++) array[i][j]=b[i][j];/*将b数组中的数据原封不动的保存在array数组中*/ } NONO() {/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。 */ inti,j; FILE*wf; intarray[3][3]={{100,200,300}, {400,500,600}, {700,800,900}}; wf=fopen("a11.out","w"); fun(array); for(i=0;i<3;i++) {for(j=0;j<3;j++) fprintf(wf,"%7d\n",array[i][j]); } fclose(wf); } main() { inti,j; intarray[3][3]={{100,200,300}, {400,500,600}, {700,800,900}}; system("cls"); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%7d",array[i][j]); printf("\n"); } fun(array); printf("Convertedarray: \n"); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%7d",array[i][j]); printf("\n"); } NONO(); } 3.编写函数intfun(intlim,intaa[MAX]),该函数的功能是求出小于lim的所有素数并放在aa数组中,该函数返回求出素数的个数。 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #include #defineMAX200 /*本题的考核点是找出小于指定数的所有素数的算法。 解题思路: 从2到指定数lim,找出所有的素数,素数的判断方法是: 只能被1和其自身整除,而不能被其它任何数整除的数。 */ intfun(intlim,intaa[MAX]) {inti,j=0,k=0; for(i=2;i {for(j=2;j if(i%j==0)break;/*假如i能被整除,则退出该层循环*/ if(j==i)aa[k++]=i;/*假如i不能被比它小的整数整除,则将i存入aa数组中*/ } returnk; } NONO() {/*请在此函数内打开文件,输入测试数据,调用fun函数, 输出数据,关闭文件。 */ inti,j,limit,sum; intaa[MAX]; FILE*rf,*wf; rf=fopen("b14.in","r"); wf=fopen("a14.out","w"); for(j=0;j<4;j++) {fscanf(rf,"%d",&limit); sum=fun(limit,aa); for(i=0;i fprintf(wf,"%d\n",aa[i]); } fclose(rf); fclose(wf); } main() { intlimit,i,sum; intaa[MAX]; system("cls"); printf("输入一个整数: "); scanf("%d",&limit); sum=fun(limit,aa); for(i=0;i if(i%10==0&&i! =0)printf("\n"); printf("%5d",aa[i]); } NONO(); } 4.请编写函数fun,函数的功能是求出二维数组周边元素之和,作为函数值返回。 二维数组中的值在主函数中赋予。 例如: 二维数组中的值为 13579 29994 69998 13570 则函数值为61。 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #include #defineM4 #defineN5 /*本题的考核点是c语言中嵌套循环语句和条件判断语句的使用。 解题思路: 二维数组的周边元素的特点是: 它有一个下标为0或为数组上界。 所以我们只需判断数组的下标是否为0或数组上界即可。 按行、列进行循环可以保证符合条件的元素只被运算一次。 */ intfun(inta[M][N]) { inti,j,sum=0; for(i=0;i for(j=0;j if((i==0)||(i==M-1)||(j==0)||(j==N-1))/*判断a[i][j]是否为数组中的第一行或最后一行或第一列或最后一列*/ sum+=a[i][j];/*对a数组的周边元素求和*/ returnsum; } NONO() {/*请在此函数内打开文件,输入测试数据,调用fun函数, 输出数据,关闭文件。 */ inti,j,y,k,aa[M][N]; FILE*rf,*wf; rf=fopen("bc4.in","r"); wf=fopen("bc4.out","w"); for(k=0;k<10;k++){ for(i=0;i for(j=0;j y=fun(aa); fprintf(wf,"%d\n",y); } fclose(rf); fclose(wf); } main() {intaa[M][N]={{1,3,5,7,9}, {2,9,9,9,4}, {6,9,9,9,8}, {1,3,5,7,0}}; inti,j,y; system("cls"); printf("Theoriginaldatais: \n"); for(i=0;i {for(j=0;j printf("\n"); } y=fun(aa); printf("\nThesum: %d\n",y); printf("\n"); NONO(); } 5.请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。 例如,原来的字符串为CEAedca,排序输出为CedcEAa。 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #include #include /*本题的考核点是对除首、尾字符外的其它字符按降序排列的算法。 解题思路: 只对除首、尾字符外的字符排序,排序可用多种方法来实现,本题用的是选择法,通过一变量来记录大数的下标,再与前面的数交换,从而实现降序排序。 */ intfun(char*s,intnum) {inti,j,h,t; for(i=1;i {h=i; for(j=i;j if(s[h] if(h! =i)/*判断找到的最大字符的下标是否为第i个字符*/ {t=s[h];s[h]=s[i];s[i]=t;}/*将s[h]与s[i]中的字符进行交换*/ } } NONO() {/*请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。 */ chars[10]; intj; FILE*rf,*wf; rf=fopen("b15.in","r"); wf=fopen("a15.out","w"); for(j=0;j<4;j++) {fscanf(rf,"%s",s); fun(s,7); fprintf(wf,"%s\n",s); } fclose(rf); fclose(wf); } main() { chars[10]; system("cls"); printf("输入7个字符的字符串: "); gets(s); fun(s,7); printf("\n%s",s); NONO(); } 6.请编一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。 二维数组中的数已在主函数中赋予。 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #include #defineM3 #defineN4 voidfun(inttt[M][N],intpp[N]) { inti,j,min; for(i=0;i<4;i++) { min=tt[0][i];/*将每列的第一个数赋值给min*/ for(j=0;j<3;j++)/*将min与该列中的每个数进行比较,并把最大的那个数赋值给min*/ if(min>tt[j][i]) min=tt[j][i]; pp[i]=min; } /*本题的考核点是C语言中循环嵌套语句的使用。 解题思路: 从题目的要求来看,我们应建立一个两重循环来按行、列寻找最小元素。 因为题目要求出每列中的最小元素,所以列循环应放在外面,行循环放在里面。 我们给出的参考函数中,定义了一个变量min来保存最小元素,在行循环中比较出最小元素,并在行循环结束时赋给数组pp的相应元素。 */ } NONO() {/*请在此函数内打开文件,输入测试数据,调用fun函数, 输出数据,关闭文件。 */ inti,j,k,m,t[M][N],p[N]; FILE*rf,*wf; rf=fopen("bc3.in","r"); wf=fopen("bc3.out","w"); for(m=0;m<10;m++){ for(i=0;i for(j=0;j fscanf(rf,"%6d",&t[i][j]); } fun(t,p); for(k=0;k fprintf(wf,"\n"); } fclose(rf); fclose(wf); } main() {intt[M][N]={{22,45,56,30}, {19,33,45,38}, {20,22,66,40}}; intp[N],i,j,k; system("cls"); printf("Theoriginaldatais: \n"); for(i=0;i for(j=0;j printf("%6d",t[i][j]); printf("\n"); } fun(t,p); printf("\nTheresultis: \n"); for(k=0;k printf("\n"); NONO(); } 7.编写一个函数,从传入的num个字符串找出最长的一个字符串,并通过形参指针max传回该串地址。 (注意: 用****作为结束输入的标志。 ) 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #include #include /*本题的考核点是从一组字符串中找出最长串的算法。 解题思路: 通过求字符串长度函数对一组字符串的字符进行比较,并将地址赋给一指针变量。 */ fun(char(*a)[81],intnum,char**max) {inti; *max=a[0];/*将第一个字符串赋值给max指针*/ for(i=1;i<=num;i++) if(strlen(a[i])>strlen(*max))*max=a[i];/*假如字符串a[i]的长度比指针max中的字符串的长度长,则将a[i]字符串赋值给max指针*/ } NONO() {/*请在此函数内打开文件,输入测试数据,调用fun函数, 输出数据,关闭文件。 */ charss[10][81],*ps; intn,i,j; FILE*rf,*wf; rf=fopen("b16.in","r"); wf=fopen("a16.out","w"); for(j=0;j<4;j++) {i=0;fscanf(rf,"%s",ss[i]); while(! strcmp(ss[i],"****")==0) {i++; fscanf(rf,"%s",ss[i]); } n=i; fun(ss,n,&ps); fprintf(wf,"max=%s\n",ps); } fclose(rf); fclose(wf); } main() { charss[10][81],*ps; intn,i=0; system("cls"); printf("输入若干个字符串: "); gets(ss[i]); puts(ss[i]); while(! strcmp(ss[i],"****")==0) { i++; gets(ss[i]); puts(ss[i]); } n=i; fun(ss,n,&ps); printf("\nmax=%s\n",ps); NONO(); } 8.编写一个函数,该函数可以统计一个长度为2的字符串在另一个字符串中出现的次数。 例如,假定输入的字符串为: asdasasdfgasdaszx67askmklo,子字符串为: as,则应输出6。 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #include #include /*本题的考核点是统计子串在主串中出现次数的算法。 解题思路: 将主串中的字符从第一个位置开始逐个与子串中的字符作比较,若子串出现在主串中,次数加1,主串中的指针移动到下一个位置继续与子串比较,反之,主串中的指针也同样移动到下个位置,直至主串中的字符全部比较结束。 */ intfun(char*str,char*substr) {unsignedinti=0; intj,k=0,add; while(i {j=0;add=i; while((str[add]==substr[j])&&(substr[j]! ='\0')) {add++;j++;} if(substr[j]=='\0')k++; i++; } returnk; } NONO() {/*请在此函数内打开文件,输入测试数据,调用fun函数, 输出数据,关闭文件。 */ charstr[81],substr[3]; intn,j; FILE*rf,*wf; rf=fopen("b17.in","r"); wf=fopen("b17.out","w"); for(j=0;j<4;j++) { fscanf(rf,"%s",str); fscanf(rf,"%s",substr); n=fun(str,substr); fprintf(wf,"n=%d\n",n); } fclose(rf); fclose(wf); } main() { charstr[81],substr[3]; intn; system("cls"); printf("输入主字符串: "); gets(str); printf("输入子字符串: "); gets(substr); puts(str); puts(substr); n=fun(str,substr); printf("n=%d\n",n); NONO(); } 9.程序定义了N×N的二维数组,并在主函数中赋值。 请编写函数fun,函数的功能是: 求出数组周边元素的平均值并作为函数值返回给主函数中的s。 例如: a数组中的值为 |01279| |19745| a=|23831| |45682| |59141| 则返回主程序后s的输出结果为: 3.375000。 注意: 部分源程序存在文件prog.c中。 请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 #include #include #include #include #defineN5 /*本题的考核点是二维数组、循环语句和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 二级 语言 考试 编程