《二级c语言150套题1.docx》由会员分享,可在线阅读,更多相关《二级c语言150套题1.docx(174页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1.3程序请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用 C语言提供的将字符串转换为整数的函数)。long fun ( char *p) /*以下代码仅供参考*/int i, len, t; /* len为串长,t为正负标识*/long x=0;len=strlen(p);if(p0=v)t=-l; len-; p+; else t=l;/*以下完成数字字符串转换为一个数字*/while(*p) x = x*10-48+(*p-H-); return x*t; 第二套:2.3程序请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据,按列的顺 序依次放到一
2、个字符串中。void fun(char sN, char *b) int ij,n=0;fbr(i=O; iN;i+) /*请填写相应语句完成其功能*/ fbr(j = O;jM;j+) bn = sji;n = i*M+j + 1; bn=*(T; 第三套:3.3程序请编写函数firn,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。 一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开, 一行的开始没有空格。(有问题)int fun( char *s) int k = 1 ; while(*s) if (*s =) k+ ;S+; return k; 第
3、四套:4.3程序请编写函数ftin,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数 获得,并放在主函数的age数组中:要求函数把0至9岁年龄段的人数放在d0中,把10 至19岁年龄段的认输放在dl中,把20至29岁年龄段的人数放在d2中,期于依此类推, 把100岁(含100)以上年龄的人数都放在d10中。结果在主函数中输出。void fbn( int *a, int *b) int i,j ;fbr(i = 0 ; i M ; i+) bi = 0 ;fbr(i = 0 ; i 10) bM - 1+; else bj+ ; 第五套:5.3程序请编写函数fim,函数的功能是:删去一
4、维数组中所有相同的数,使之只剩一个。数 组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。例如,-维数组中 的数据是:2223445666677899 10 10 10。删除后,数组中的内容应该是: 2345 6789 10int fun(int a, int n)int i,j = l,k = a0;fbr(i = 1 ; in ; i+)if(k != ai) aj-H-=ai; k = ai; aj = 0;return j ;第六套:6.3程序请编写函数fUn函数的功能是:移动字符串中的内容,移动的规则如下:把第1到 第m个字符,平移到字符串的最后,把第m+1到最后的字符
5、移动到字符串的前部。例如, 字符串中原由的内容为:ABCDEFGHIJK, m的值为3,则移动后,字符串中的内容应该是 DEFGHIJKABCovoid fun 1 (char *w) /*本函数的功能是将字符串中字符循环左移一个位置*/ int i; char t;t=w0;fbr(i=O;istrlen(w)-l ;i+)wi=wi+l;wstrlen(w)-1 =t; void fun(char *w, int m) /* 可调用 funl 函数左移字符 */ inti;fbr(i = 0 ; i m ; i+) fiinl(w); 第七套:8.3程序程序定义了 NxN的二维数组,并在主
6、函数中自动赋值。请编写函数ftin(int a,int n), 函数的功能是:使数组左下三角元素中的值乘以no例如:若n的值为3, a数组中的值为则 返回主程序后a数组中的值应为。int fun (int aN, int n ) inti,j;fbr(i = 0;iN ; i+)for(j = O;j=i;j+)aiQ *=n ;第九套:9.3程序请编写函数ftm,函数的功能是:移动一维数组中的内容:若猪组中有N个整数,要 求把下标从0到P (含P, P小于等于N-1)的数组元素平移到数组的最后。例如,一维数 组中的原始内容为:1, 2, 3, 4, 5, 6, 7, 8, 9, 10; P的
7、值为3。移动后一维数组中的 内容应为:5, 6, 7, 8, 9, 10, 1, 2, 3, 4,void fiin(int *w, int p, int n) int i,j = 0, bN;fbr(i = p + 1 ; i n ; i+) bj+ = wi;fbr(i = 0 ; i = p ; i+) bj-H- = wi;fbr(i = 0 ; i n ; i+) wi= bi;第十套:10.3程序请编写一个函数,函数的功能是删除字符串中的所有空格。例如,主函数中输入 “asd af aa z67”,则输出为asdafhaz67”。int fiin(char *str) char *
8、p = str;int i = 0 ;while(*p) if(*p != ) stri+ = *p ;P+; )stri=0;第_套:11.3程序fun函数功能:将放在字符串数组中的M个字符串(每串的长度不超过N),将顺 序合并组成一个新的字符串。函数fun中给出的语句仅供参考。例如,字符串数组中的M 个字符串为AAAA BBBBBBB CCC则合并后的字符串的内容应是: AAAABBBBBBBCCCo提示:strcat (a,b)功能是将字符串b复制到字符串a的串尾上,成 为一个新串。void fiin(char aMN, char *b) /*以下代码仅供参考*/int i; *b=0;
9、fbr(i = 0 ; i M ; i+) strcat(b, ai); 第十二套:12.3程序程序定义了 MxN的二维数组,按列的顺序依次放到一维数组中。例如:二维数组 中的数据为则一维数组中为:334455 33 4455 3344 55 33 4455。同2.3 void fun(int (*s)10, int *b, int *n, int mm, int nn) /*以下代码仅供参考*/int ij,np=0; /* np用作b数组下标*/fbr(i = 0 ; i nn ; i+)for(j = 0 ; j mm ; j+) bnp = sji;np = i * mm + j +
10、1; *n=np; 第十三套:13.3程序程序定义了 MxN的二维数组中数据,按行的顺序依次放到一维数组中。一维数组中数据的 个数放在形参n所指的存储单元中。例如:二维数组中的数据为则一维数组中为: 33 33 33 33 44 44 44 44 55 55 55 55。void fiin(int (*s)10, int *b, int *n, int mm, int nn) inti,j, k;fbr(i = 0 ; i mm ; i+) fbr(j = O;jnn;j+) k = i *nn+j ;bk = siU; *n = mm * nn ;第十四套:14.3程序编写函数fun,函数功
11、能:判断字符串是否为回文?若是,函数返回1,主函数输 出:YES,否则返回0,主函数输出NO。回文是指顺读和倒读都一样的字符串。例如:字 符串LEVEL是回文,而字符串123312就不是回文。#define N 80int fiin(char *str) int i, j = strlen(str);fbr(i = 0;is;STREC *p;p=h-next;while(p) if(p-smax)max=p-s;p=p-next; return max; 第十六套:16.3程序请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符 按ASCH码降序排列。例如,CEA cd
12、ca排序后CedcEAa。int fun(char *s,int num) char ch ;int i,j;fbr(i = 1 ; i 6 ; i-H-)fbr(j = i + 1 ;j6;j+) if(*(s + i)*(s+j)ch = *(s+j);*(s + j) = *(s +i);*(s + i) = ch ; 第十七套:17.3程序编写函数ftm,其功能:把指定分数范围内的学生数据放在b所指的数组中,分数 范围内的学生人数由函数值返回。例如:输入60 69则应把分数在60-69的学生数据进行输 出,包括60分和69分的学生数据。主函数中把60放在low中,把69放在heigh中
13、。#define N 16 typedef struct char num10;int s; STREC;int fun( STREC *a,STREC *b,int 1, int h ) int i j = 0 ;fbr(i = O;i= 1 & ai.s = h) bj+ = ai;return j ;第十八套:18.3程序函数ftm功能:将s所指的字符串中ASCH值为奇数的字符删除,字符串中剩余 字符形成一个新串放在t所指的数组中。例如:s所指的内容:ABCDEFG12345,其中字符 A的ASCII码为奇数1的ASCII码为奇数都应当删除,其他以此类推。最后t所指的数组中的内容:BDF
14、24.void fun(char *s, char t) int i,j = 0;for(i = 0;i strlen(s); i+) if(si % 2=0) tj+ = si;tUl = O;第十九套:19.3程序Fun功能:将a、b中的两个两位正整数合并形成一个新de整数放在c中。合并 的方式:将a中十位和个位依次放在变量c的百位和个位上,b中的十位和个位数依次放在 变量的十位和千位上。例如:当a=45, b=12o调用该函数后,c=2415o void fun(int a, int b, long *c) *c = (b% 10)* 1000+(a/10)* 100+(b/10)*10
15、+a% 10; 第二十套:20.3程序函数的功能是求出二维数组周边元素之和,作为函数值返回。二维数组中的值在 主函数中赋予。例如:二维数组为则函数值为61。/define M 4#define N 5int fun ( int aMN) int tot = 0, i, j;fbr(i = 0;iN ; i+) tot += a0i;tot += aM-li;for(i = 1 ; i M - 1 ; i+) tot += ai0;tot+=aiN-l; return tot;第二十一套:21.3程序 求出数组周边元索dcpjz并作为hansz返回主函数中的s例如:a数组中的值为主 程序s的值为
16、3.375。#define N 5double fun (int wN) int i,j, n=0;double sum=0;fbr(i =0; iN; i+ ) sum+=w0 i+wN-1 i; n+=2; fbr(i=l; iN- l;i+) sum +=wi 0+wi N-1 ;n+=2;return sum/n;第二十二套:22.3程序将两个两位的正整数a, b合并成一个整数放在c中。合并方式是:将a数的十位 和个位依次放在c数de个位和百位匕b数的十位和个位数依次放在c数的十位和千位上。 例如,当a=45, b=12时,调用该函数后c=2514。void fun(int a, in
17、t b, long *c) *c=(b% 10)*1000+(a% 10)* 100+(b/10)*l 0+(a/10);main() int a,b; long c;printfif1 Input a, b:M);scanfC,%d,%dn, &a, &b);fun(a, b, &c);printffThe result is: %ldnM, c);NONO();)第二十三套:23.3程序求出小于或等于lim的所有素数并放在aa数组中,函数返回所求出的素数的个数。#define MAX 100int fun(int lim, int aaMAX) /*以下代码仅供参考*/int ij,k=O
18、;/*其中变量k用于统计素数个数*/fbr(i=2;i=lim;i-H-) /*以下完成判断aa数组中小于或等于lim的素数并统计个数*/fbr(j = 2;j (i/2) aak+ = i;return k; 第二十四套:24.3程序把分数最低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一 个,函数返回分数最低的学生人数。#define N 16typedef struct char num10;int s; STREC;int fun( STREC *a, STREC *b ) int i, j = 0, min=a0.s ;fbr(i = 0;i ai.s) j = o;
19、bj-H- = ai; min = ai.s ;else ififmin = ai.s)bLj+ = ai ;return j ;第二十五套:25.3程序将s所指zfc中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所 指的数组中。例如,若s所指zfb中de内容为:“ABCDEFG12345,其中字符B的ASCH 码值为偶数都该删除,其他依次类推。最后t所指的数组中的内容为:“ACEG135”。#include #include void fun(char *s, char t) inti,j = O;for(i = 0 ; i strlen(s); i+) if(si % 2)
20、= si;tj = O;第二十六套:26.3程序编写函数fun,求出1到m之间(含m)能被7或11整除的所有整数放在数组a 中,通过n返回这些的个数。例如,若传送个m的值为50 ,则程序输 出:7 11 14 21 22 28 33 35 42 44 49。#define M 100void fun (int m, int *a, int *n )int i ;*n=0 ;fbr(i=7; i=eps) s+=t; n+; t=t*n/(2.0*n+l); return (s*2.0); 第二十八套:28.3程序求出1-1000之间能被7或11整除、但不能同时被7和11整除的所有整数并将 其放
21、在a所指的数组中,通过n返回这些数的个数。void fun (int *a, int *n) inti;*n = 0;fbr(i = 7 ; i 1000 ; i-H-)% 7) = 0 | (i % 11) = 0) & (i % 77) != 0) a(*n)+ = i;第二十九套:29.3程序学生的记录由学好和成绩组成,N名学生的数据放在主函数中结构体数组s中, 编写函数,把高于等于平均分的学生数据放在b所指的数组中,把高于或等于平均分的学生 人数通过形参n传回,pjf通过函数值返回。#define N 12 typedef struct char num10;double s; STR
22、EC;double fun( STREC *a, STREC *b, int *n ) double t=0;int i;*n = 0;for(i = 0 ; i N ; i+) t = t + ai.s ;t = t/N;for(i = 0;i t) b(*n)+ = ai;return t;第三十套:30.3程序函数功能:将字符中的前导*号全部移到字符串的尾部。例如,字符串中的内容为: *A*BC*DEF*G*移动后,字符串中的内容应当是:a*BC*DEF*G*。 void fiin( char *a ) /*以下代码仅供参考*/char *p,*q;int n=0;P=a;while(*
23、p=,*f) /* 统计串头*个数 n */n+; p+;)q=a;/*向前复制字符串,请填写相应的语句完成其功能*/while(*p) *q=*p;p+;q+; fbr(;n0;n) /* 在串尾补 n 个* */*q+=*;*q=VV; 第三H一套:31.3程序编写函数viod fun (char a,char b,int n),其功能是:删除一个字符串中指定下标 的字符。其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存 放指定的小标。例如,输入一个字符串:World,然后输入3,则调用该函数后的结果为: Wordo#define LEN 20void fun (c
24、har a, char b, int n) stmcpy(b, a, n);bn = 0;strcat(b, a + n + 1);第三十二套:32.3程序使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号;若少于或等 于n个,则什么都不做,字符串中间和尾部de*号不删除。例如,字符串中的内容为: *A*BC*DEF*G* ,若n的值为4,删除后,字符串中的内容应当是: *A*bc*DEF*G*若 nwei8 则字符串仍为*A*BC*DEF*G*。n 的值在主程序 中输入。void fun( char *a, int n ) /*以下代码仅供参考*/int i=Oj,k=O;whil
25、e(ak=*) k+; /* k 为统计*字符个数 */ if(kn) i=ny=k;/*以下完成将下标为k至串尾的字符前移k-n个位置*/fbr(; aj !=0;j+) ai+=a|j;ai = 0; 第三十三套:33.3程序将两个两位数的正整数a, b合并形成一个整数放在C中。合并的方式是:将a的 十位和个位依次放在c数的十位和千位上,b数的十位和个位依次放在c数的百位和个位 上。例如,当a=45, b=12时,调用该函数后,c=5142o void fun(int a, int b, long *c) *c=(a% 10)*1000+(b/10)*100+( 10)*10+(b% 10
26、); 第三十四套:34.3程序计算并输出n (包括n)以内能被5或9整除的所有自然数的倒数之和。例如,在 主函数中键盘给nshuru20后,输出为:s=0583333odouble fun(int n) inti;double sum=0.0;fbr(i=l; i=n; i+)if(i%5 = 0 | i%9 = 0) /* 被 5 或 9 整除 */sum+=1.0/i;return sum;第三十五套:35.3程序编写一个函数从num个字符串中找到最长的一个字符串,并通过形参指针max传回该串地 址(注意:主函数中用*作为结果输入的标志,函数ftm中给出的语句仅供参考)。fiin(char
27、(*a)81 ,int num,char *max) /*以下代码仅供参考*/int i,k=0,len, maxlen; /* ka数组中最长串所在元素的下标,初始为0, maxlen为其串长*/maxlen=strlen(ak);fbr(i=l ;inum;i+) /*以下完成查找最长串*/ *max=ak;第三十六套:36.3程序将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全 部都删除;串中剩余字符所形成的一个新串放在t所指的数组中。例如,若s所指zf窜中 的内容为:“ABCDEFG123456”,其中字符A的ASCH码值为奇数,因此应当删除;其中字 符B的A
28、SCH码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其它依次类推。 最后t所指的数组中的内容应是:“246”。void fun(char *s, char t) inti,j = O;fbr(i = 0 ; i strlen(s); i += 2) if(si % 2 = 0) tj+ = si;tj = o;第三十七套:37.3程序只删除字符串前导和尾部的*号,串中之间的*号都不删除。形参n给出了字符串 的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。例 如,字符串的内容为:*A*BC*DEF*G*删除后 A*BC*DEF*G。void fun( ch
29、ar *a) intj=O;char *p=a;while(*p) if(*p != *) aj+=*p ;P+;aU=O;第三十八套:38.3程序 函数功能删除字符串中的所有*号。例如 字符串中的内容为: *A*BC*DEF*G*,删除后,字符串中的内容应当是:ABCDEFGo void fiin( char *a ) intj=O;char *p=a;while(*p) if(*p != *) aj+=*p ;P+; aj=O;第三十九套:39.3程序功能:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不 得使用C语言提供的字符串函数。例如,字符串中的内容为:*A*BC*
30、DEF*G*, 删除后,字符串中的内容应当是:*ABCDEFG。void fun( char *a) /*以下代码仅供参考*/int i=0,k;while(ai=*) i+;k=i;while(ai!=) /*以下程序段实现非*字符前移*/ if(ai != *) ak+=ai;i+; ak=、O,;第四十套:40.3程序功能:计算n门课程的平均分,计算结果作为函数值返回。例如,若有5门课程 的成绩是:90.5, 72, 80, 61.5, 55则函数的值为:71.80。float fun ( float *a , int n ) int i;float ave=0.0;fbr(i=0; i
31、n; i-H-) ave=ave+ai;ave=ave/n;return ave;第四H一套:41.3程序程序定义了 NxN的二维数组,并在函数中自动赋值。请编写函数fim,函数的功 能是:使数组右上三角元素中的值乘以m。例如:若m的值为2, a数组中的值为则返回主 程序后a数组中的值应为。#define N 5int fun (int aN, int m ) inti.j;fbr(i = 0 ; i N ; i+)for(j = i;jnext; /*由于头结点中没有存放数据*/double av=0.0;/*对计算成绩平均值的变量进行初始化*/int n = 0 ;while(p!=NUL
32、L) /*判断链表是否结束*/av = av + p-s ; /*对成绩进行累加*/p=p-next;/*到下一个结点位置*/n+;/* 人数加 1 */av /= n ;/计算成绩平均值*/return av ;/*返回成绩平均值*/第四十五套:45.3程序功能:使字符串中尾部的*号不得多于n个;若多于n个,则删除多余的*号;若 少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。例如,字符串的内容为: *A*BC*DEF*G* ,若n的值为4,删除后,字符串中的内容应当是: *A*BC*DEF*G*;若 n 的值为 7,贝I字符串中的内容仍为*A*BC*DEF*G*。 n的值在主函
33、数中输入。void fiin( char *a,int n ) char *p=a;intj=O;while(*p) p+; p-; /* 字符串的长度 */while(*p = *) p-; /* 字符串右的* */P+;while(jn & *p) pH;j; *P = 0;第四十六套:46.3程序编写函数他的功能是计算下列级数和,和值由函数值返回。例如,当n=10, x=0.3 时,函数值为1.349859。long jc(int n) long s = 1 ;inti;for(i = 1 ; i = n ; i-H-) s *= i;return s;double fiin(doubl
34、e x , int n) double s= 1.0, y = x ;inti;fbr(i = 1 ; i = n ; i+) s 4-= y / (double)jc(i);y *= x ; return s ; 第四十七套:47.3程序函数功能:计算并输出下列级数和例如:当n=10时,函数值为:0.909091odouble fun( int n) double s = 0.0 ;int i;fbr(i = 1 ; i = n ; i-H-) s = s + 1.0 / (i * (i + 1);return s; 第四十八套:48.3程序功能:求小于形参n同时能被3与7整除的所有自然数之
35、和的平方根,作为函数值返回。例如若n为1000时,程序输出应为:s=153.909064odouble fun( int n) double sum=0.0;int i;fbr(i=21; in,例如:m=12, n=8时,运行结果为495.000000。float fun (int m, int n)Ilong jc(int m) longs=l;int i;fbr(i= 1 ;i=m;i+) s=s*i;return s;float fun(int m, int n) float p;p= 1.0*jc(m)/jc(n)/jc(m-n);return p; void main ()FILE
36、 *wf;system(MCLSn);printf (Mp=%fnM,fun (12,8);wf=fbpen(,out.dat,V,wM);fprintf(wf,n%r,fun(12,8);fclose(wf);第五十套:50.1 填空功能:有NxN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三 角元素中,右上三角元素置为0。例如,N=3,有下列矩阵:计算结果为。#define N 4void fiin(int (*t)N) int i,j;fbr(i=l; iN; i+) for(j=O;ji;j+)y* 治und * */tiU=tiU+tUi;/*3und* */tUi=O;
37、 50.2 改错功能:计算函数的值,其中x和y的值不等,z和y的值不等例如当x的值为9、 y的值为11、z的值为15时。函数值为-3.50。/*8und* */#definc FU(m,n) (m)/(n)float fun(float a,float b,float c) float value;value=FU(a+b,a-b)+FU(c+b,c-b);/* found * /return (value);50.3程序功能:将字符串中的前导*号全部删除,中间和为的*号不删除。例如字符串中的 内容:*a*bc*DEF*G*,删除后字符串中的内容应当是a*bc*def*g*。 void fii
38、n( char *a ) int j=0;char *p = a ;while(*p = *) p+ ;while(*p) aU+ = *p;p+; aj=O;:51.3:设计Fun:功能是求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。如输入如下 整数:876 675 896 101 301 401 980 431 451 777 ,则输出结果为 6, 980 int fiin(int *s, int t, int *k) int i, pos = 0, max = *s ;fbr(i = 1 ; i t; i+) if(max *(s + i) max = *(s + i);P
39、s = i;*k = pos ;53.3:设计Fun:计算并输出当x0.97时下列多项式的值,直到为止。如在主函数中从键盘给x输入0.21后,输出为:8=1.100000.#include double fun(double x)int n=l; /*循环计数*/double sn=l; /* 累计数*/double xn=l,xnl=0; /*x 的 n 值,以及 x 的 n-1 值;*/while(fhbs(xnxnl)=0.000001)/* 绝对值是否满足条件*/xn=xn*x*(0.5n+l)/n; /*表达式分解以后 xn=(xn-1 )*x*(0.5-n+1 )/n*/n+=l;sn+=xn; /*sn 累力口上 xn*/)retum(sn);)54.3:设计Fun:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。 如当s所指