计算机二级c语言上机100题 联系客服

发布时间 : 星期一 文章计算机二级c语言上机100题更新完毕开始阅读c0c450b9c77da26925c5b00c

void fun(int a, int b, long *c)

{ *c=(a)*1000+(b/10)*100+(a/10)*10+(b);} 第三十四套:

34.1填空 用筛选法可得到2-------n(n小于10000)之间的所有素数,方法是:首先从素数2开始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数表中找一下非0数,并从数表中删去该数的所有倍数;依次类推,直到找到的下一个数等于n为止,这样会得到一个序列:2,3,5,7,11,13,17,19,23, 函数fun用筛选法找出所有小于等于n的素数,并统计的个数作为函数值返回。 int fun(int n)

{ int a[10000], i,j, count=0; for (i=2; i<=n; i++) a[i] = i; i = 2;

while (i

/**********found**********/ for (j=a[i]*2; j<=n; j+=a[i]) a[j] = 0; i++;

/**********found**********/ while (a[i]==0) i++; }

printf(\ for (i=2; i<=n; i++)

/**********found**********/ if (a[i]!=0) {count++;

printf( count?\ }

return count;}

34.2改错 为一个偶数寻找两个素数,这两素数之和等于该偶数,并将这俩个素数通过形参指针传回主函数。 void fun(int a,int *b,int *c) { int i,j,d,y;

for(i=3;i<=a/2;i=i+2) {

/**************found**************/ y=1;

for(j=2;j<=sqrt((double)i);j++) if(i%j==0) y=0; if(y==1) {

/**************found**************/ d=a-i;

for(j=2;j<=sqrt((double)d);j++) if(d%j==0) y=0; if(y==1)

{ *b=i; *c=d; } } }}

34.3程序 计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。 例如,在主函数中键盘给nshuru20后,输出为:s=0583333。 double fun(int n)

{ int i;

double sum=0.0; for(i=1; i<=n; i++)

if(i%5 == 0 || i%9 == 0) /* 被5或9整除 */ sum+=1.0/i; return sum;} 第三十五套:

35.1填空 函数fun的功能是建立一个N×N的矩阵,矩阵元素的结构规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,…

1111112221依次类推。例如,若N=5,生成的矩阵为:12321。

1222111111#define N 7

/**********found**********/ void fun(int (*a) [N]) { int i,j,k,m; if(N%2==0) m=N/2 ; else m=N/2+1; for(i=0; i

/**********found**********/ for(j= i ; j

35.2改错 功能是:将十进制正整数m转换成k(2?k?9)进制数,并按高位到低位顺序输出。例如,若输入8和2,则应输出1000(即十进制数8转换成二进制是1000)。

void fun( int m, int k ) { int aa[20], i;

for( i = 0; m; i++ )

{/**********found**********/ aa[i] = m%k; m /= k; }

for( ; i; i-- )

/**********found**********/ printf( \35.3程序

编写一个函数从num个字符串中找到最长的一个字符串,并通过形参指针max传回该串地址(注意:主函数中用****作为结果输入的标志,函数fun中给出的语句仅供参考)。

fun(char(*a)[81],int num,char **max) { /* 以下代码仅供参考 */

int i,k=0,len, maxlen; /* k为a数组中最长串所在元素

的下标,初始为0,maxlen为其串长 */ maxlen=strlen(a[k]); for(i=1;i

{ /* 以下完成查找最长串 */ } *max=a[k];} 第三十六套:

36.1填空 统计带出带有头结点的单向链表中结点的个数,存放在形参n所指的存储单元中。 #define N 8 typedef struct list { int data; struct list *next; } SLIST;

SLIST *creatlist(int *a); void outlist(SLIST *); void fun( SLIST *h, int *n) { SLIST *p;

/**********found**********/ *n=0; p=h->next;

while(p) { (*n)++;

/**********found**********/ p=p->next; }} main()

{ SLIST *head;

int a[N]={12,87,45,32,91,16,20,48}, num; head=creatlist(a); outlist(head); /**********found**********/ fun(head, &num); printf(\

36.2改错 求出s所指字符串中最后一次出现的t所指子字符串的地址,通过函数值返回,在主函数中输出从地址开始的字符串;若未找到,则函数值为NULL例如,当字符串的内容为:“abcdabfabcdx”,t中的内容为:“abd”时,ze程序输出未找到信息:not be found!。 char * fun (char *s, char *t ) { char *p , *r, *a;

/************found************/ a = NULL; while ( *s )

{ p = s; r = t; while ( *r )

/************found************/ if ( *r == *p ) { r++; p++; } else break;

if ( *r == '\\0' ) a = s; s++; } return a ;}

36.3程序 将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全部都删除;串中剩余字符所形成的一个新串放在t所指的数组中。 例如,若s所指zf窜中的内容为:“ABCDEFG123456”,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其它依次类推。最后t所指的数组中的内容应是:“246”。 void fun(char *s, char t[]) { int i, j = 0 ;

for(i = 0 ; i < strlen(s) ; i += 2) if(s[i] % 2 == 0) t[j++] = s[i] ; t[j] = 0 ;} 第三十七套:

37.1填空 在形参ss所指字符串数组中,查找含有形参substr所指子串并输出,若没找到则输出相应信息。ss所指字符串数组中共有N个字符串,且串的长度小于M。程序中库函数strstr(s1,s2)的功能是在s1串中查找s2子串,若没有,函数值为0,若有,为非0。 #define N 5

#define M 15

void fun(char (*ss)[M], char *substr) { int i,find=0;

/**********found**********/ for(i=0; i< N ; i++)

/**********found**********/

if( strstr(ss[i], substr) != NULL )

{ find=1; puts(ss[i]); printf(\ } /**********found**********/

if (find==0) printf(\

37.2改错 求三个函数的最小公倍数 例如,给主函数中的变量x1、x2、x3分别输入15 11 2,则输出结果应当是:330。

/************found************/ fun(int x, int y, int z ) { int j,t ,n ,m; j = 1 ; t=j%x; m=j%y ; n=j%z;

while(t!=0||m!=0||n!=0) { j = j+1; t=j%x; m=j%y;

n=j%z; }

/************found************/

return j;}

37.3程序 只删除字符串前导和尾部的*号,串中之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*

号的个数。例如,字符串的内容为: ****A*BC*DEF*G*******删除后A*BC*DEF*G。 void fun( char *a ) { int j =0 ; char *p=a; while(*p) {

if(*p != '*') a[j++]=*p ; p++ ;} a[j]=0;} 第三十八套:

38.1填空 把形参a所指数组中的奇数按原顺序依次存放到a[0]、a[1]、a[2]……中,把偶数从数组中删除,奇数个数通过函数返回值。例如,若a所指数组中的数据最初排序为:9、1、4、2、3、6、5、8、7,删除偶数后a所指数组中的数据为:9、1、3、5、7,返回值为5。 #define N 9 int fun(int a[], int n) { int i,j; j = 0;

for (i=0; i

/**********found**********/ if (a[i]%2==1) {

/**********found**********/ a[j] = a[i]; j++; } /**********found**********/

return j;} 38.2改错 求出两个非零正整数的最大公约数,作为函数的返回值 例如,若给num1和num2分别输入49和21,则输出的最大公约数为7;若给num1和num2分别输入27和81,则输出的最大公约数为27。 int fun(int a,int b) { int r,t;

if(a

/************found************/ t=a;a=b;b=t; } r=a%b; while(r!=0)

{ a=b; b=r; r=a%b; }

/************found************/

return(b);} 38.3程序 函数功能删除字符串中的所有*号。例如 字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:ABCDEFG。 void fun( char *a ) { int j =0 ;

char *p=a; while(*p) {

if(*p != '*') a[j++]=*p ; p++ ; }

a[j]=0;} 第三十九套:

39.1填空 在形参ss所指字符串数组中,删除所有串长超过k的字符串,函数返回所剩字符串数组共有N个字符串,且串长小于M。 #define N 5

#define M 10

int fun(char (*ss)[M], int k) { int i,j=0,len;

/**********found**********/ for(i=0; i

/**********found**********/ if(len<= k) /**********found**********/

strcpy(ss[j++],ss[i]); } return j;}

39.2改错 逐个比较p、q所指两个字符串对应位置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的字符串。 例如,若主函数中a字符串为:aBCDeFgH,主函数中b字符串为:ABcd则c中的字符串应为:aBcdeFgH。

{/************found************/ int k = 0; /************found************/ while( *p || *q )

{ if( *p<*q ) c[k]=*q; else c[k]=*p; if(*p) p++; if(*q) q++; k++; }}

39.3程序 功能:除了字符串前导的*号之外,将串中其他*号全部删除。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****ABCDEFG。 void fun( char *a )

{ /* 以下代码仅供参考 */ int i=0,k;

while(a[i]=='*') i++;

k=i;

while(a[i]!='\\0') /* 以下程序段实现非*字符前移 */ { if(a[i] != '*') a[k++]=a[i]; i++; } a[k]='\\0';} 第四十套:

40.1填空 给定程序中建立一个带头结点的单向链表,链表中的各节点按结点数据域的数据递增有序链接。函数功能:把形参值放入一个新结点并插入到链表中,插入后各结点数据域的值仍保持递增有序。

#define N 8 typedef struct list { int data;

struct list *next; } SLIST;

void fun( SLIST *h, int x) { SLIST *p, *q, *s;

s=(SLIST *)malloc(sizeof(SLIST)); /**********found**********/ s->data=x; q=h;

p=h->next;

while(p!=NULL && x>p->data) { /**********found**********/ q=p;

p=p->next; } s->next=p;

/**********found**********/ q->next=s;} 40.2改错 功能:计算正整数的各位上的数字之积。 例如,若输入:252,则输出应该是:20。若输入:202,则输出是:0。 long fun (long num)

{/************found************/ long k=1; do

{ k*=num ;

/************found************/ num/=10 ; } while(num) ; return (k) ;}

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;

for(i=0; i

41.1 填空 功能:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。例如,有10个整数:46,30,32,40,6,17,45,15,48,26,平均值为:30.500000主函数中输出:m=30.0。

#define N 10

double fun(double x[],double *av) { int i,j; double d,s;

s=0;

for(i=0; i

for(i=0; i

if(x[i]<*av && *av - x[i]<=d){ /**********found**********/ d=*av-x[i]; j=i;} /**********found**********/ return x[j];} 41.2 改错 功能:根据整型形参n,计算如下公式的值。

A1?1,A2?11?A,A3?111?A,.......,A1n?例如,若

21?An?1n=10,则应输出:0.617977。 /************found************/ float fun ( int n ) { float A=1; int i;

/************found************/ for (i=2; i<=n; i++)

A = 1.0/(1+A); return A ;}

41.3 程序 程序定义了N×N的二维数组,并在函数中自动赋值。请编写函数fun,函数的功能是:使数组右上三角元素中的值乘以m。例如:若m的值为2,a数组中的

197值为a?238则返回主程序后a数组中的值应为

4562181420316。

40512#define N 5

int fun ( int a[][N], int m ) { int i, j;

for(i = 0 ; i < N ; i++) for(j = i ; j < N ; j++) a[i][j] *= m ;} 第四十二套:

42.1填空 功能:将s所指字符串中的所有数字字符移动到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如:形参s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。 void fun(char *s)

{ int i, j=0, k=0; char t1[80], t2[80]; for(i=0; s[i]!='\\0'; i++)

if(s[i]>='0' && s[i]<='9') {

/**********found**********/