计算机二级c语言题库

计算机C语言二级题库 程序设计60道(下)

第31道

N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高 分,由函数值返回。

double  fun( STREC *h  )
{STREC *c;
 double max;
 c=h->next;
 max=c->s; 
 while (c->next!=0)
 {c=c->next;
  if (max<c->s) max=c->s; 
 }
 return max;
}

本题的考核点是找最大数算法。
解题思路:通过指针指向链表,从首结点开始逐个找,找出最大值并返回。


第32道

请编写函数fun,其功能是:计算并输出下列多项式的值:
在这里插入图片描述
例如,在主函数中从键盘给n输入50后,输出为:s=1.718282。

double fun(int  n)
{   int i;
    double sum=0.0,tmp=1.0; 
    if(n<=1||n>100){ printf("Input n(n>1&&n<=100):  ");  scanf("%d",&n);}
    for(i=1;i<=n;i++)
    {	tmp*=i; 
        sum+=1.0/tmp; 
    }
    return sum; 
}

本题考查的是C语言中的基本算法和简单语句的使用。
解题思路:本题要求计算并输出多项式的值,通式为:1/(12……*n)ᵣ在给出的参考程序中,由于函数的返回值为双精度型,所以定义sum、tmp为双精度型,再对符合条件的n,使用中间变量tmp求出1到n的累乘 值,即题目中每个多项式中分子的值,再通过sum+= 1.0/tmp;计算出所有多项式之和,最终返回。


第33道

请编函数fun,其功能是将一例字字符串转换成与其面值相同的长整型整数。可调用strlen函数求字符串的长度。
例如在键盘输入字符串2345210,函数返回长整型数2345210ₒ

long  fun( char  *s )
{   int i,n;
    long a,r;
    a=0;
    r=0;
    n=strlen(s);
    for(i=0;i<n;i++)
    {
	a=*(s+i)-48;
	r=r*10+a;
    }
    return r;
}

本题的考查点是字符串的应用。
解题思路:首先可以通过for循环依次取出每个字符*(s+i),然后将字符*(s+i)的ASCII值减去48,即可得到与其面值相同的整数数字,再将每个整数数字组合成所需的长整型数。


第34道

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。函数fun中给出的 语句仅供参考。
例如,字符串中的内容为:ABCDEFG,移动后,字符串中的内容应当是:ABCDEF*G***********。在编写函数时,不得 使用C语言提供的字符串函数。

void  fun( char *a )
{
  /* 以下代码仅供参考 */
  char *p,*q;
  int n=0;
  p=a;
  while(*p=='*')  /* 统计串头'*'个数n */
  {n++; p++;}
  q=a;
  /* 向前复制字符串,请填写相应的语句完成其功能 */
   while(*p)
	{*q=*p;
	  q++;p++;}


  for(;n>0;n--)  /* 在串尾补n个'*' */
    *q++='*';
  *q='\0';  
}

本题的考核点是移动字符串中字符的算法。
解题思路:先统计原串串首连续*的个数,按照个数将*号后面的字符串向前复制,再在字符串末尾补上相应数量的*号。


第35道

请编写函数fun,其功能是:将一组得分中,去掉一个最高分和一馆氐分,然后求平均值,并通过函数返回。函数形参a指向存放得分的数组,形参n中存放得分个数(n>2)。
例如,若输入9.9 8.5 7.6 8.5 9.3 9.5 8.9 7.8 8.6 8.4十个得分,则输出结果为8687500。

double fun(double  a[ ] , int  n)
{
    double min,max,s,avg;
    int i;
    min=a[0];
    max=a[0];
    s=0.0;
    avg=0.0;
    for(i=0;i<n;i++)
    {
	if(min>a[i])
		min=a[i];
	if(max<a[i])
		max=a[i];
	s+=a[i];
    }
    avg=(s-min-max)/(n-2);
    return avg;
}

本题的考查点是一维数组的应用。
解题思路:首先可以通过for循环语句遍历数组a中元素,找出最大值和最小值,并求出数组a中所有元素之和。然后将求得的和减去最大值最小值,以便求出所需的平均值。


第36道

请编写函数fun,其功能是:将具有n个元素的形参数组x中的偶数依原顺序输出到字符数 组str中,每个数字后面加f一个小数点,并生成一个结果字符串str由函数返回。
例如:当数组x内容为1,4, 19, 82, 61,2,输出结果是:4.82.2

char  *fun(int x[], int n)
{
	static char str[200]={'\0'};
    int i,j;
    char* strP = str;
	
    /* 请在这里填入你编写的代码*/
	//获取数组中的偶数
	for (i = 0;i < n;i++)
	{
		if (x[i] % 2 == 0)
		{
			int temp = x[i];
			char s[10]={'\0'};
			char* strP2 = s;
 
			//获取整数的每一位并记录在s[10]中
			while (temp) 
			{
				int_to_str(temp % 10, strP2++);
				temp /= 10;
			}

			//反向取出每一位并赋值给str[200]这个里面
			for ( j=(strP2-s-1);j>=0;j--)
			{
				*strP = s[j];
				++strP;
			}

			//添加小数点
			*strP = '.';
			++strP;
 
		}
		
	}
    return str;
}

本题的考查点是字符串处理。


第37道

请编写函数fun,其功能是分别统计形参t所指二维数组中字母A和C的个数。

void  fun( char (*t)[M], int *a ,int *c)
{
	int i,j;
	*a=0;
	*c=0;
	for(i=0;i<M;i++)
	{
		for(j=0;j<M;j++)
		{
			if(t[i][j]==67){
				*c=*c+1;
			}else if(t[i][j]==65){
				*a=*a+1;
			}else
				continue;
		}
	}
}

本题的考核点是C语言中的循环语句和ASCII码。
解题思路:先随机产生一个数组,在fun函数中对数组中各元素的值进行判断,若元素的ASCII码为65,则该元素为A,指针a所指向的存储单元的值加1,若元素的ASCII码为67,则该元素为C,指针c所指向的存储单元的值加1,如果两个值都不符合,则结束本次循环,进入下次循环。


第38道

请编写函数fun,函数的功能是查找x在s所指数组中下标的位置作为函数值返回,若x不存在,则返回-1。

int  fun( int *s, int x)
{int i;
  for(i=0;i<N;i++)
  {
    if(s[i]==x)
    return i;
  }
return -1;
}

本题的考查点是查找法和一维数组的应用。
解题思路:题目要求查找x在s所指数组中下标的位置,则要将x与数组中的元素依次比较,如果相等,则返回此元素在数组中的下标位置;如果数组的元素都已比较完,仍无元素与而等,则返回.。


第39道

请编写函数fun,其功能是:判断形参n中的正整数是几位数(输入数据的位数不超过4位),并将结果通过函数值返回。
例如若输入的数据为123,则输出结果为输入的数字是3位。

int  fun(int  n)
{
	int k=0;
	while(n!=0)
	{
		n=n/10;
		k++;
	}
	return k;
}

本题主要考查C语言的循环语句。
解题思路:首先定义一个变量k,用来记录整数n的位数.当n不等于0时,用整数n除以10,得出的结果相当于去除n末尾的教。这样一直除以10,直到得出的商为0,此时k的值就是整数n的位数。


第40道

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导的*号之外,将串中其它号全部删除。在编写函 数时,不得使用C语言提供的字符串函数。函数fun中给出的语句仅供参考。
例如,字符串中的内容为:ABCDEFG
****,删除后,字符串中的内容应当是:****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';
}

本题的考核点是公式算法
本题的考核点是删除字符串中字符的算法。
解题思路:从字符串的第一个字符开始往后逐个判断是否为*号,直到找到非*号字符为止,将非*字符前移,最后在该字符后面加上结束符号’\0’。


第41道

写函数fun,它的功能是计算下列级数和,和值由函数值返回。
计算机二级c语言题库_第1张图片
例如,当n = 10, x=0.3时,函数值为1.349859。

double fun(double x , int  n)
{ int i;
  double f=1.0,h=x;
  double s=1;
  s=s+h/f;      /*求公式中1、2两项的和(即1+x)*/    
  for (i=2;i<=n;i++)
  { f=f*i;       /*求公式中每一项分母的阶乘值*/ 
    h=h*x;       /*求公式中每一项分子的乘方值*/ 
    s=s+h/f;
  }
 return (s);
}

本题的考核点是公式算法。
解题思路:通过一变量累计乘积,求阶乘,通过另一变量累计乘积,求次方,再通过一变量累计分式的和。


第42道

请编写函数fun,其功能是:统计出x所指数组中能被e整除的所有元素,这些元素的和通
过函数值返回主函数,元素个数通过形参num返回主函数。
x所指数组的元素个数通过形参n传入。
例如:当数组x内容为1,9,8,6, 12,整数e内容为3时,输出结果应该是:sum=27, num = 3

int fun(int x[],int n,int e,int *num)
{
    int i,s=0;
    *num=0;
    for(i=0;i<n;i++)
        if(x[i]%e==0)
            {s+=x[i];(*num)++;}
    return s;
}

本题的考核点是求和。


第43道

程序定义了NxN的二维数组,并在主函数中自动赋值。请编写函数fun,函数的功能
是:使数组右上三角元素中的值乘以m。例如:若m的值为2, a数组中的值为
| 1 9 7 | I 2 18 14|
a = | 2 3 8 | I 2 6 16|
| 4 5 6 | 则返回主程序后a数组中的值应为 | 4 5 12 |

void fun ( int a[][N], int m )
{
  int i,j; /*定义两个整型变量,用于控制二维数组行、列下标的变化*/
  for(i=0; i<N; i++) /*用外层for()来控制二维数组行的变化*/
    for(j=N-1; j>=i; j--) /*内嵌的for。来控制二维数组列的变化*/
      a[i][j]*=m; /*对数组上半三角元素中的值全部乘以m*/
}

本题的考核点是C语言中的循环嵌套。
解题思路:使用嵌套循环,外循环是列循环,内循环是行循环,这样可以对整个数组中的元素进行符合条件的运算。是对数组上半三角元素中的值乘以n,观察二维数组可以看出,数组上半三角中的元素,行坐标 值都小于等于列坐标值。
/*该题的关键是在如何表示右上半角,当从上往下到第i行时要从第i列(所以内嵌for()的j从i开始循环)开始替换直到最后一列,本题用外层for()来控制行,而用内嵌的for()来控制在每一行内右边元素乘m,本题采用的 是在一行内从最后一列的元素开始往前乘,只有j>=i时才改变


第44道

函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是将a中的十位和个位数依次放在变量c的 百位和个位上,b中的十位和个位数依次放在变量c的干位和十位上。
例如,当a=45, b=12。调用该函数后,c=1425ₒ

void fun(int a, int b, long *c)
{
    int a_up,a_low,b_up,b_low;
    a_up=a/10;    /*求正整数a的十位数*/
    a_low=a%10;  /*求正整数a的个位数*/
    b_up=b/10;   /*求正整数b的十位数*/
    b_low=b%10;  /*求正整数b的个位数*/
    *c=b_up*1000+a_up*100+b_low*10+a_low;  
     /*将a数的十位和个位数依次放在c数的百位和个位上,b数的十位和个位数依次放在c数的千位和十位上*/
}

本题的考核点是求取整数相应位上的数值的算法。
解题思路:可用整除和求余的运算求取整数各位上的数值。方法是整除相应位上的位权值,再对其求余,余数即为相应位上的数值。


第45道

请编写函数fun,其功能是:找出用1、2、3、4四个数字,能组成多少个互不相同且无重
复数字的三位数,然后把这些三位数按从小到大的顺序依次存入相应的数组xxx中,符合条件的个数由函数值返回。

int fun(int xxx[])
{
int i,j,l,k=0;
  for(i=1;i<5;i++)
	  for(j=1;j<5;j++)
		if (j!=i) 
		  for(l=1;l<5;l++)
			  if (l!=j && l!=i)
				  xxx[k++]=i*100+j*10+l;

   return k;


}

本题要求求出一个三位数,百位从四个数中取一个(for
(i=1;iv5;i++)),十位数也是从四个数中取一个(for(j=1;j〈5;j++)),
但题目要求无重复数字,即不等于百位(if (j!=i)),个位同理,从余下的两个数中取一个。
题目要求从小到大,故1到4循环,若从大到小,则写成从4到1循环即可。


第46道

函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的个位和 百位上,b数的十位和个位数依次放在c数的千位和十位上。
例如,当a=45, b=12时,调用该函数后,c=1524ₒ

void fun(int a, int b, long *c)
{
	*c=b/10*1000+a%10*100+b%10*10+a/10;
/*a数的十位和个位数放在c数的个位和百位上,b数的十位和个位数放在c数的千位和十位上*/

}

本题考核的是取整数相应位上的数值的算法。
解题思路:用整除求得两位正整数中高位上的数,求余的方法求得两位正整数中低位上的数。


第47道

请编写函数fun,其功能是:给定一个整数n(n< 10000),如果n加上100后是一个完全平方数(所谓"完全平方数",就是开方后的结 果是整数的数),并且n加上268也是一个完全平方数,则函数值返回1,否则返回0。

int fun(long n)
{
	float y1,y2 = 0;//用于计算
	y1 = sqrt(n + 100);//获取n+100后开方的值
	y2 = sqrt(n + 268);//获取n+268后开方的值
	if ((int)y1 == y1 && (int)y2 == y2)//判断y1,y2是否为整数
	{
		return 1;
	}
	else
	{
		return 0;
	}
}

本题考核的是完全平方。


第48道

请编写函数fun,其功能是将形参s所指的字符串放入形参a所指的字符数组中,使a中存放同样的字符串。说明:不得使用系统提供的字 符串函数。

void  fun( char  *a , char  *s)
{
	int i=0;
	while(*s!='\0') //判断s所指向的字符是否为字符串结束字符
	{
		a[i] = *s; //如果s未指向字符串结束字符,贝监s所指字符放入字符数组a中
		s++; //将s指向下一个字符
		i++; //将字符数组的下标后移一位
	}
	a[i]='\0'; //添加字符串结束标志
}

本题的考查点是字符串和字符数组的应用。
解题思路:按题目要求,可以通过while循环将s所指字符串中的字符依次取出,放入a所指的字符数组中。直到指针s指向了字符串结束字符’\0’,跳出循环。


第49道

请编写函数void fun(int*dp, int n, int upordown),其功能是,找出dp所指数组中的
最小或最大值,并与其第1个元素交换。形参n为元素的个数,
形参upordown为查找标志:值为0时找最小值;值为1时找最大值。

void fun (int *dp,int n,int upordown)
{
int i,dorx;
 dorx=0;
 if(upordown==0)
	{for(i=1;i<n;i++)
		if (dp[dorx]>dp[i]) dorx=i;}
 else
    { for(i=1;i<n;i++)
		if (dp[dorx]<dp[i]) dorx=i;}

 i=dp[0];
 dp[0]=dp[dorx];
 dp[dorx]=i;


}

本题根据upordown标志,求出最小或最大值所在的下标,然后交换数据。


第50道

请编写函数fun,其功能是:验证参数n是否可以分解成2个素数相乘,是则返回1,否则
返回0,并通过指针变更x、y返回分解后的2个素数值,要求*x < *yₒ
主程序中将打ELI出分解结果。
例如:111=3*37,当函数fun的参数n为111时,
可以分解为2个素数(3和37)的乘积函数返回值为1。
另外,prime函数验证参数m是否为素数,是则返回1,否则返回0。

int prime(int m)
{
	int k,flag=1;
	for(k=2;k<(int)sqrt((double)m);k++)
		if(m%k==0)
			flag=0;
	return flag;
}
int fun(int n,int *x,int *y)
{
	int k,flag=0;
	int k2;
    k=2;
	do {
	  k2=n/k;
	  if (k*k2==n)
		  if (prime(k) && prime(k2) && k<k2) 
			  {flag=1; *x=k; *y=k2; break;}
	  k+=1;
	}
	while (k<k2);
    return flag;
}

本程序是判断一铐数是否能分解成两个素数,我们思路是先分解成两个数k和k2,由于存在省略小数的可能,所以需要判断这两个数是否能分解,k*k2==nₒ若正确分解,则判断是否满足题鼠 满足题意,则将 函数返回值改变,将这两个数传回,然后退出do循环;若不满足题意则k+ = 1,重新分解成新的两数再次判断,当分解出的数不满足题意*x<*y要求,则结束。


第51道

程序中定义了NXN的二维数组,并已在主函数中赋初值。
请编写函数fun,其功能是:将a所指数组主对角线上的元素分别乘以2;次对角线上的元素 分别乘以3,依次放入指针p所指的数组中。计算过程中不得修改a所指数组中的数据

void fun( int a[N][N],int *p)
{
    int i;
    for(i=0;i<N;i++){
        p[i]=a[i][i]*2;
        p[N+i]=a[i][N-1-i]*3;
    }
}

本题的考核点是C语言中的二维数组。


第52道

函数fun的功能是:将a、b中的两个两位正整数合并形成Y新的整数放在c中。合并的方式是将a中的十位和个位数依次放在变量c的 十位和千位上,b中的十位和个位数依次放在变量c的个位和百位上。
例如,当a=45, b=12。调用该函数后,c=5241ₒ

void fun(int  a, int  b, long  *c)
{
    int a_up,a_low,b_up,b_low;
    a_up=a/10;
    a_low=a%10;
    b_up=b/10;
    b_low=b%10;
    *c=a_low*1000+b_low*100+a_up*10+b_up;
}

本题的考核点是求取整数相应位上的数值的算法。
解题思路:可用整除和求余的运算求取整数各位上的数值。方法是整除相应位上的位权值,再对其求余,余数即为相应位上的数值。


第53道

假定输入的字符串中只包含字母和号。请编写函数fun,它的功能是:将字符串尾部的号全部删除,前面和中间的文号不删除。
例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:****A*BC*DEF*G。在编写函数时,不得使用C 语言提供的字符串函数。

void  fun( char *a )
{
int i;
for(i=strlen(a)-1;i>=0;i--)
if(a[i]!='*') break;   /*当字符串数组中的元素不为时,跳出循环*/
a[i+1]=0;				/*找到非*号字符,在该字符后面加上结束符号*/
}

本题的考核点是删除字符串中字符的算法。
解题思路:对于f字符串要删除其尾部的*号,只需要在最后一个不是*号的字符后面加上结束符号’\0’ 。具体操作为:首先找到字符串的结尾,然后从最后一个字符开始逐个判断是否为*号,直到找到非*号字符为止,最后在该字符后面加上结束符号’\0’。


第54道

请编写一个函数,用来删除字符串中的所有空格。

void fun(char *str)
{
int i,j;
 for(i=0;*(str+i);i++)
   if(*(str+i)==32)   /*判断当前位置上的字符是否为空格(空格的ASCII码值为32) */
   { for(j=i+1;*(str+j);j++)
       *(str+j-1)=*(str+j);/*删除空格*/
       *(str+j-1)=0; /*以字符串结束标志"\0"结束循环*/
       i=0;
   }
}

本题的考核点是字符数组、循环语句。
解题思路:通过for循环语句以及i借句,判断当前位置上的字符是否为空格(空格的ASCII码值为32),若是空格,再判断下一个字符是否为空格,若下一个字符不是空格,则将当前位置上的字符赋给上一行符位置 上;若下一个字符还是空格,则继续判断该字符的下一个字符,直至其下一个字符为非空格时重复上述赋值操作,最终以字符串结束标志"\0"结束循环。


第55道

请编写函数fun,其功能是:编写函数fun要求实现:
将s0所指字符串分解成三个字符串,分别存入s1、s2、S3所指内存中。分解的方法是,s1、s2、S3从sO中依次顺序每隔3个字符取1 个。
例如:s0为“abcdefghij”时,分解完成后,s1、s2、s3分别为:“adgj”、“beh”、“cfi"。

void fun(char * s0,char *s1,char *s2, char *s3)
{
 int i,j,k,t;
 j=k=t=0;
 for(i=0;i<strlen(s0);i+=3)
 {
  
  s1[j++]=s0[i];
  if(i+1<strlen(s0))
   s2[k++]=s0[i+1];
  if(i+2<strlen(s0))
   s3[t++]=s0[i+2];
 }
 s1[j]='\0';
 s2[k]='\0';
 s3[t]='\0';
}

本题的考核点是字符串处理。


第56道

根据哥德巴赫猜想,任意一个大偶数都可以分解为两个素数之和。但许多偶数分解为两个素数之和并不是唯一的。
请编写函数fun,其功能是:求1000(不包括1000)以内的所有恰好能分解成10组两个素数之和(5 + 109和109+5被认为是同一组)的偶数,并依次存入数组a中并在屏 幕上打印出来,打印时每个数单独一行,符合条件的个数通过函数值返回。
例如:114=5+109=7+107=11+103=13+101=17+97=31+83=41+73=43+71=47+67=53+61
114恰好可以分解为10组素数之和,因此114是我们要找的偶数。
而116=3+113=7+109=13+103=19+97=37+79=43+73
120=7+113=11+109=13+107=17+103=19+101=23+97=31+89=37+83=41+79=47+73=53+67=59+61
116可以分解为6组素数之和,120可以分解为12组素数之和,因此116和120都不是我们要找的偶数。
函数prime用来判断一个数n是否为素数,是则返回1,否则返 回0。

int prime(int n)
{	int k,flag=1;
	for (k=2; k<=(int)sqrt((double)n); k++)
		if (n%k == 0)
			flag=0;
	return flag;
}
int fun(int m, int a[])
{ 
  int k, s, count, i=0;
   for(k=6; k<=m; k+=2)
   {   count = 0;
	/* 请在此处填写代码 */
        for(s=2;s<=k/2;s++)
            if(prime(s) && prime(k-s)) count++;
        if (count == 10) {
             printf("%d\n", k);
	     a[i++] = k;
	 }
   }
   return i;
}

本题的考核点是字符统计。


第57道

请编写函数fun,函数的功能是:判断字符串是否为回文?若是,函数返回1,主函数中输出:YES;否则返回0,主函数中输出NO。
回文是指顺读和倒读都一样的字符串。
例如,字符串LEVEL是回文,而字符串123312就不是回文。

int fun(char *str)
{
    int count=strlen(str),i; 
    for(i=0;i<=count/2;i++)
	if(str[i]!=str[count-i-1])
	    {return 0;	break;}
    return 1;
}

本题的考核点是字符串的应用。
解题思路:由于回文是指顺读和倒读是一样的字符串,所以可以以中间字符为对称点,通过循环判断字符串中对称位置上的字符是否相同,如果相同,则是回文,否则不是


第58道

请编写函数fun,其功能是:统计s所指字符串中的数字字符个数,并作为函数值返回。
例如,s所指字符串中的内容是:2def35adh25 3kjsdf 7/kj8655x,函数fun返回值为11。

int fun(char  *s)
{int n=0;
   while(*s!='\0'){//判断s是否指向字符串结束标志符
        if(*s>='0'&&*s<='9'){//判断s指向的字符是否是数字字符
		n++;   //如果是数字字符,则数字字符个数加一
	}
	s++;//将s指向下一个字符
   }
	return n;  //返回数字字符个数
}

本题的考查点是字符串和指针的应用。
解题思路:首先定义一个变量n,初始值为0,用来统计字符串中数字字符的个数。通过while循环判断指针s指向的元素是否为字符串的结束字符’\0’,如果不为‘\0’字符,则判断它是否为数字字符,如果是,则个数n 加1,然后将s指向下一个字符,继续判断,直到s指向字符串结束字符。


第59道

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。 形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。在编写函数时,不得使用C语言 提供的字符串函数。
例如,字符串中的内容为:****A*BC*DEF*G******,删除后,字符串中的内容应当是:A*BC*DEF*G。

void  fun( char *a, int n,int h,int e )
{ char b[81],*c,*d;
  int i=0,j=0;
  c=a;d=a;
  c=c+h;d=d+n-e-1;
  while (c<=d)
  {b[i]=*c;i++;c++;}    /*将从第f非*字符开始到串尾连续*之前的非*字符追加在数组b中*/
  b[i]='\0'; i=0;
  while (b[i])
  {a[j]=b[i];j++;i++;} /*将字符串b中的所有字符复制到a字符串中覆盖原串*/ 
  a[j]='\0';
}

本题的考核点是删除字符串中字符的算法。
解题思路:将从第一个非*字符开始到串尾连续*之前的所有字符赋给另一字符串数组,最后将新串中的字符放到原串中覆盖原串。


第60道

请编写函数fun,函数的功能是:将M行N列的二维数组中的数据按行的顺序依次放到一维数组中,一维数组中数据的个数存放在形参n 所指的存储单元中。
例如,二维数组中的数据为:
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应是:
33 33 33 33 44 44 44 44 55 55 55 55。

void  fun(int  (*s)[10], int  *b, int  *n, int mm, int nn)
{int x,y;
 for(x=0;x<nn;x++)  /*利用内、外循环两层for循环,按行的顺序将第1到3行的数据依次存放到数组b的相应位置上*/
  for(y=0;y<mm;y++)
   {b[y*nn+x]=*(s[y]+x); 
    (*n)++; /*统计一维数组b中存放的数据的个数*/
   }
}

本题的考核点是二维数组按行转换为一维数组的算法。
解题思路:本题提供的参考程序利用内、外循环两层for循环,按行的顺序将第1到3行的
依次存放到数组中的相应位置上,同时利用形参变量n来统计一维数组中存放的数据的个数,即实现了将M行N列的二维数
组中的数据按行的顺序依次放到一维数组中。


你可能感兴趣的:(C语言,c语言,开发语言)