计算机二级考试C语言机试题目.doc

收藏

预览图
编号:45318007    类型:共享资源    大小:97KB    格式:DOC    上传时间:2020-01-12 上传人:仙人****88 IP属地:河南
12
积分
关 键 词:
计算机 二级 考试 语言 试题
资源描述:
题目1 编一个函数fun(char *s),函数的功能是把字符串中的内容逆置。 例子如:字符串中原有的内容为:abcdefg,则调用该函数后,串中的内容为:gfedcba 。 试题程序: #include #include #include #define N 81 /*注:该题的算法是先分别找出字符串的两头,然后同时逐一往中间移动,每移动一次 都进行两字符的位置对换,直到中间字符(用s+i #include /*这题的关键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列 互换时a[j]在好是与a[j]互换,因而只要我位让程序走完矩阵的左上角即可(用 for(i=0;i<2;i++)再套for(j=i+1;j<3;j++)来完成左上角的走动。*/ int fun(int array[3][3]) { int i,j,t; for(i=0;i<2;i++) for(j=i+1;j<3;j++) {t=array[j];array[j]=array[j];array[j]=t;} } main() { int i,j; int array[3][3]={{100,200,300},{400,500,600},{700,800,900}}; clrscr(); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%7d",array[j]); printf("\n"); } fun(array); printf("Converted array:\n"); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%7d",array[j]); printf("\n"); } } 题目3 请编一个函数fun(int *a,int n,int *odd,int *even),函数的功能是分别求出数 组中所有奇数之和以及所有偶数之和。形参n给了数组中数据的个数:利用指针odd返回 奇数之和,利用指针even返回偶娄这和。 例如:数组中的值依次为:1,8,2,3,11,6;则利用指针odd返回奇数之和24;利用 指针even返回偶数之和8。 试题程序。 #include #include #define N 20 /*注:该题的算法是:用for()循环一步一步地找元素,用if(!a%2)来判断是否是奇 数,%运算是求余运算,当对2求余为1时表示原数为奇数,否则为偶数。*/ fun(int *a,int n,int *odd,int *even) { int i; *even=0;*odd=0; for(i=0;i #include #define VSIZE 20 int vector[VSIZE]; /*注:该题的算法是用一个变量(j)来存储最小值元素的下标,在循环过程中让每个元 素都与原最小值元素进行大小比较(if(list #include /*注:h乘以1000后正好是原小数点后第三位做了新数的个位数,然后再进行加5运算时 。如原小数点后第三位为4及以下则加5后还是不能进一位(即四舍),如是5及以上则加 5后该位就要向前进一位数(即五入)。进行加5运算后除10再赋给一个整型变量此时就 只有原小数点第二位及以前各位保留在整型变量中,最后再对整型变量除100,这样又出 现了两位小数。该题中,进行四舍五入后一定要赋给一个整型变量才能将不用部分彻底 变成0 。*/ float fun(float h) { long t; h=h*1000; t=(h+5)/10; return (float)t/100; } main() { float a; clrscr(); printf("Enter a:"); scanf("%f",&a); printf("The original data is:"); printf("%f\n\n",a); printf("The result :%6.2f\n",fun(a)); } 题目6 编写函数fun,函数的功能是:从字符串中删除指定的字符。同一字母的大、小写按 不同字符处理。 若程序执行时,输入字符串为:turbo c and Borland c++ 从键盘上输入字符:n,则输出后变为:turbo c ad borlad c++ 如果输入的字符串不存在,则字符串照原样输出。 试题程序。 #include #include /*注:该题的算法是让i控制一个一个字符往后走,在移动过程中如果s不是要删的字 符,则将其按顺序放到新串中(新串亦是用s来做,只是用k来控制新串的下标,由于要 删除一些元素,因此新串的下标总是比原下标i要慢。因而可用此法即同一字符串变量的 方法。*/ int fun(char s[],int c) {int i,k=0; for(i=0;s;i++) if(s!=c) s[k++]=s; s[k]=\0; } main() { static char str[]="turbo c and borland c++"; char ch; clrscr(); printf(" :%s\n",str); printf(" :"); scanf("%c",&ch); fun(str,ch); printf("str[]=%s\n",str); } 题目7 请编写一个unsigned fun(unsigned w),w是一个大于10的无符号整数,若w是n(n >=2)位的整数,函数求出w的后n-1位的数作为函数值返回。 例如:w值为5923,则函数返回923;w值为923则函数返回23。 试题程序。 #include #include /* 注:由于unsigned型整数在0-65535这间,只要它大于10000则对10000求余即得出后 面4位,否则如果大于1000则对1000求余得出后3位数,这样一层一层往小的判断。由于 return的作用除了返回值以外,还有当执行到return时就跳出该程序,所以可以连续的 用if()语句。 */ unsigned fun( unsigned w ) { if(w>=10000) return w%10000; if(w>=1000) return w%1000; if(w>=100) return w%100; return w%10; } main() { unsigned x; printf( "enter a unsigned integer number :" ); scanf( "%u",&x); if(x<10) printf("data error!"); else printf ("the result :%u\n", fun(x)); } 题目8 编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于lim的所有素数 并放在aa数组中,该函数返回所求出素数的个数。 试题程序。 #include #include #define MAX 100 /*注:循环for(i=2;i=k)用于判断在 上一个for()循环中i能否走到k,如果能则表示在2到k-1的数都不能整除k,即k为素数。 */ int fun( int lim, int aa[MAX]) { int i,j=0,k; for( k=2; k=k) aa[j++]=k; } return j; } main() { int limit,i,sum; int aa[MAX]; printf("\n input a integer number:"); scanf(" %d",&limit); sum=fun(limit,aa); for(i=0; i #include #define M 4 #define N 5 /*注:该题的第一个for()循环是计算矩阵的最上一行和最下一行的总和,第二个for() 是计算除两头元素以外的最左一列和最右一列的元素的和,最后sun就是周边元素的和。 */ int fun(int a[M][N]) {int sum=0,i; for(i=0;i #include #include /*该题采用的排序法是选择法进行降序排序,算法是用外for()循环从字符串的前端往后 端走动,每走动一个字符都用内嵌的for()循环在该字符后找出最小的字符与该字符进 行换位。直到外for()循环走到最后一个字符。此外,此题还要注意把首尾字符除开,即 在最外层for()循环中从1开始,只到num-2即可。*/ int fun(char *s,int num) { int i,j,t; for(i=1;istrlen(p)) p=a; *max=p; } main() { char ss[10][81],*ps; int n,i=0; clrscr(); printf("enter string:\n"); gets(ss); puts(ss); while(!strcmp(ss,"****")==0) { i++; gets(ss); puts(ss); } n=i; fun(ss,n,&ps); printf("\nmax=%s\n",ps); } 题目13 请编一个函数fun,其中n所指存储单元中存放了数组中元素的个数。函数的功能是 :删除所有值为y的元素。数组元素中的值和y的值由主函数通过健盘读入。 试题程序。 #include #include #define M 20 /*注:该题的算法是,用for()循环控制元素逐一判断数组元素是否等于y,若不等则赋 给新数bb,由于删除的关系j总是小于或等于i,故而可用bb作为新数组,与第6题相似。 还要注意*n=j;如果没有这个语句则不能传回新数组的个数,另外也不能换成n=&j ;这点是用指针时常犯的错误,切记!*/ void fun (int bb[], int *n,int y) { int i,j=0; for( i=0; i<*n; i++) if(bb!=y) bb[j++]=bb; *n=j; } main() { int aa[M],n,y,k; printf("\nplease enter n:"); scanf("%d",&n); printf("\nenter %d positive number:\n", n); for( k=0; k100){printf("data eror!\n");exit(0);} y=fun(x); if(y) printf("%d yes\n",x); else printf ("%d no!\n",x); } 题目16 请编写函数fun,函数的功能是:在字符串中所有数字字符前加一个$字符。 例如,输入:A1B23CD45,则输出为:A$1B$2$3CD$4$5。 注意:部分源程序给出如下。 #include /*注:该题用while()循环来控制原字符串从头走到尾,在走动过程中判断是当前字符是 否是数字,若是则在新串中先连一个$然后再连原字符,否则直接连原字符。一定要 注意指针和下标的变化。最后要把新串拷贝到s所指的地址中,注意不能用s=a;若用了 ,则实参数组还是原字符串。*/ void fun( char *s) {char a[100]; int i=0; while(*s) if(*s>=0&&*s<=9) {a[i++]=$;a[i++]=*s++;} else a[i++]=*s++; a=\0; strcpy(s,a); } main() { char s[80]; printf("enter a string:"); scanf("%s", s); fun(s); printf("the result: %s\n", s); } 题目17 请编一个函数fun(char *s),函数的功能是把字符串中所有的字符前移一个位置, 串中的第一个字符移到最后。 例如:原有的字符串为:Mn.123xyZ,则调用该函数后,串中的内容为:n.123xyZM。 试题程序。 #include "conio.h" #include "stdio.h" #define N 81 /* 注:该题要先将字符串的头元素存到某一变量(用c=*s)中,然后后面的字符依向前 移(用for()循环),要记得在串的未尾加一个结束符。*/ fun(char *s) { char c=*s; for(;*(s+1);s++) *s=*(s+1); *s=c; *(s+1)=\0; } main() { char a[N]; clrscr(); printf("enter a string:"); gets(a); printf("the original string is:"); puts(a); fun(a); printf("the string after modified:"); puts(a); } 题目18 请编写函数fun,函数的功能是:将所有大于1小于整数m的非素数存入xx所指数组 中,非素数的个数通过k传回。 例如,若输入:17,则应输出:9和4 6 8 9 10 12 14 15 16。 试题程序。 #include #include /* 注:内嵌的for()循环用于判断是否是素数,在j=A&&s=a&&s& lt;z)) s=s+1; else if(s==z) s=a; else if(s==Z) s=A; } } main() { char a[N]; clrscr(); printf("enter a string:");gets(a); printf("the original string is:");puts(a); fun(a); printf("the string after modified:"); puts(a); } 题目20 请编写函数fun,函数的功能是:将s所指字符串中、下标为奇数位置上的大写字母 转换为字母序列中的下一个小写字母;若该位置上是小写字母,则不转换;若该位置上 是大写字母Z,则仅转换成小写字母z。 例如,输入:ABCdxZZZ,则输出为:AcCdXzZz。 试题程序。 #include "stdio.h" #define N 80 /* 该题的算法与上一题相似,注意同一个字母小写要比大写在ASCII值上大32。*/ void fun(char *s) { int i; for(i=1;i=A&&s #include #include #define N 5 /* 由于是赋值0,因而只要能表示出周边元素即好办,它与求和不同在于求和不能重复 对某个元素进行运算,而赋值则可重复赋值。所以这里只用了一个for()循环来找出所有 的周边元素。*/ fun(int w[][N]) { int i ; for(i=0;i #include #define M 81 /* 注:本题用while()循环来控制字符的移动,每移动一个字符都要进行判断(if(*ss ==c))是否为指定的字母,若是则个数加1。这里要注意如何让ss指针向下走动(ss++) 。*/ int fun(char *ss,char c) {int num=0; while(*ss!=\0) {if(*ss==c) num++; ss++; } return(num); } main() {char a[M],ch; clrscr(); printf("\nPlease enter a strint:");gets(a); printf("\nPlease enter a char:");ch=getchar(); printf("\nThe number of the char is:%d\n",fun(a,ch)); } 题目23 程序定义了N*N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是: 求出数组周边元素的平均值并作为函数值返回给主函数中的s。 例如:a数组中的值为 则返回主程序后s的值应为:3.375。 试题程序。 #include #include #include #define N 5 /* 注意不能重复计算,它与题21不同,第一个for()循环求出第一列与最后一列的和, 第二个for()循环求出第一行与最后一行(已除去两头元素),要注意第二个for()中起 始为1,最后为N-2。*/ double fun (int w[][N]) { int i,t=0; double s=0; for(i=0;i #include /* 注:第一个for()循环用于让i成为第一个字符串的结束符的下标,要注意在这个for ()后要有一个分号否则出错。第二个for()的作用是将第二个字符串一个一个字符依次放 到第一个字符串的未尾。此外,还要注意最后一定要有p1=\0;来给字符串加上 结束符。*/ void fun(char p1[],char p2[]) {int i,j; for(i=0;p1;i++); for(j=0;p2[j];j++) p1[i++]=p2[j]; p1=\0; } main() { char s1[80],s2[80]; clrscr(); printf("Enter s1 and s2:\n"); scanf("%s%s",s1,s2); printf("s1=%s\n",s1); printf("s2=%s\n",s2); printf("Invoke fun(s1,s2):\n"); fun(s1,s2); printf("After invoking:\n"); printf("%s\n",s1); } 题目25 程序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N] ),函数的功能是:使数组第一列元素中的值与最后一列元素中的值对调、第二列元素的 值与倒数第二列中的值对调、……、其他依次类推。 例如:a数组中的值为 则返回主程序后a数组中的值应为 注意:部分源程序给出如下。 请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中填入你编写 的若干语句。 试题程序。 #include #include #include #define N 5 /* 本题的第一个for()循环用于控制行,而内嵌的for()用于在同一行中将列与列对调, 当i为0时a[m]为第m行的第一列元素,a[m][N-1-i]为第m行的最后一列的元素,正好 符合调换的要求。依次类推。*/ int fun(int a[][N]) { int i ,m,t; for(m=0;m #include /* 26题:本题没有先求出A的转置,而是直接利用转置的性质(即第一行作为转置后的 第一列,第二行作为转置后的第二列,的行列互换的性质)。而且最后要求出两矩阵的 相加后得出的新矩阵,由转置性质可知原a[j]转置后位置为a[j],在表达式:b[ i][j]=a[j]+a[j]第一个a为A的元素,第二个a为A的元素。*/ void fun(int a[3][3],int b[3][3]) {int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) b[j]=a[j]+a[j]; } main() {int a[3][3]={{1,2,3},{4,5,6},{7,8,9}},t[3][3]; int i,j; clrscr(); fun(a,t); for(i=0;i<3;i++) {for(j=0;j<3;j++) printf("%7d",t[j]); printf("\n"); } } 题目27 序定义了N*N的二维数组,并在主函数中自动赋值。请编写函数fun(int a[][N]), 函数的功能是:使数组第一行元素中的值与最后一行元素中的值对调、第二行元素的值 与倒数第二行中的值对调、……、其他依次类推。 例如:a数组中的值为 则返回主程序后a数组中的值应为 注意:部分源程序给出如下。 请勿改动主函数main和其它函数中的任何去何内容,仅在函数fun的花括号中填入你编写 的若干语句。 试题程序。 #include #include #include #define N 5 /* 27题:该题与25题相似,外层for()循环用于控制一列一列地移动,内嵌的forr()循 环用于控制在同一列内对应行元素的对调。a[m]为第m列第i行元素,而a[N-1-i][m] 为第m列倒数第i行的元素,正好需要对调。*/ fun(int a[][N]) { int i,m,t; for(m=0;m #include #include /* 28题:第一个for()循环用来计算score数组中分数的总和,然后用aver/=m求出平均 值,第二个循环用来找出小于平均分的元素,并放到数组below中,这里要注意j的递增 方式。*/ int fun(int score[],int m, int below[]) { int i,j=0,aver=0; for(i=0;i #include #include #define N 5 /* 29题:该题的关键是如何表示出左下半角的元素,当从上往下到第i行时只有左边的 i个元素要置为0(每行总是如此)。用外层for()来控制行而内嵌的for()来控制每行的 左边元素,故而在内嵌for()中j最大只能循环到i(即表示出第i行左边的i个元素)。* / int fun(int a[][N]) {int i,j; for(i=0;i #include /* 30题:该题关键就是如何表示能被7或11整除,但不能同时被7和11整除。用(i%7== 0)//(i%11==0)来表示能被7或11整除,用 !((i%7==0)&&(i%11==0))来表示不能 同时被7和11整除。 void fun(int *a,int *n) { int i,m=0; for(i=1;i<1000;i++) if(((i%7==0)//(i%11==0))&&!((i%7==0)&&(i%11==0))) {a[m]=i;m+=1;} *n=m; } main() { int aa[1000],n,k; clrscr(); fun(aa,&n); for(k=0;k #include #include #define N 5 /* 31题:该题的关键亦是在如何表示右上半角,当从上往下到第i行时要从第i列(所 以内嵌for()的j从i开始循环)开始替换直到最后一列,本题用外层for()来控制行,而 用内嵌的for()来控制在每一行内右边元素置0。
内容简介:
-
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:计算机二级考试C语言机试题目.doc
链接地址:https://www.renrendoc.com/p-45318007.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!