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

第1道

请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换成大写(若该位置上不是字母,则不转换)。
例如,若输入"abc4EFG",则应输出“aBc4EFG”。

void fun ( char *ss)
{
 int i, n=0;
 char *p;
 p=ss;
 while(*p++ !='\0' ) /*判断是否到了字符串的末尾*/
   n++;
 for(i=1 ;i<n;i+=2)
   if(ss[i]>='a'&& ss[i]<='z') /*判断该字符是否为〃写字母*/
     ss[i]=ss[i]-'a'+'A' ; /*若上述条件成立,则将其转换为大写字母*/
}

解析:本题的考核点是指针、ASCII码、数组和循环语句。
解题思路:通过循环语句依次判断数组下标为奇数的元素是否为小写字母,如果是则通过字符运算将其转换为大写字母。


第2道

请编写函数fun,函数的功能是:移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p, p小于等于n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。

void  fun(int  *w, int  p, int  n)
{int x,j,ch;
  for(x=0;x<=p;x++)
    {ch=w[0];/*1,将第一个元素保存*/
     for(j=1;j<n;j++)  
     /*通过for循环语句,将p+1到n-1 (含n-1)之间的数组元素依次向前移动p+1个存储单元*/
       {
	 w[j-1]=w[j];/*2,将其他元素依次前移*/
	}
     w[n-1]=ch;  /*3,将第一个元素存放到最后*/
     /*将0到p个数组元素逐一赋给数组w[n-1]*/
    }
}

解析:本题的考核点是一维数组的应用。
解题思路:本题要求把下标从0到p(含p, p小于等于n-1)的数组元素平移到数组的最后,可以根据输入的p值,通过for循环语句,将p+1到n-1(含n-1)之间的数组元素依次向前移动P+1个存储单元,即w[j-1]-w[j],同时 将0到p个数组元素逐一赋值给数组w[n-1],也就是通过语句w[n-1 ]=ch;来实现此操作的。


第3道

请编写一个函数fun,它的功能是:计算并输出给定整数n的所有因子(不包括1与n自身)之和。规定n的值不大于1000。
例如,在主函数中从键盘给n输入的值为856,则输出为:sum=763。


int fun(int  n)
{
 int i,s=0;
 if(n<1000)
 {for (i=2;i<n;i++)
    if (n%i==0) s=s+i;}
  return (s);
}

解析:本题考查点是求一个数的因子之和。判断因子的方法是:能被n整除的数。因子是指一个数能够被整除的所有正整数。例如数值10的因子包括1,2,5,10.数值4的因子包括1,2,4。


第4道

请编一个函数fun,函数的功能是使实型数保留2位小数,并对第三位进行四舍五入(规定实型数为正数)。
例如:实型数为1234.567,则函数返回1234.570000;
实型数为1234.564,则函数返回1234.560000。

float fun (float h )
{
 return(int)(h*100+0.5)/100.0; /*将该数乘以10的n次方,然后将该数加上0.5,对其取整,然后再除以10的n次方*/
}

本题主要考查浮点型到定点数的转换。
解题思路:要将一个浮点数进行四舍五入到小数点后面的n位,可以先将该数乘以10的n次方,然后将该数加上0.5对其取整,然后再除以10的n次方。


第5道

请编写函数fun,其功能是:计算并输出下列多项式的值:
在这里插入图片描述

例如,在主函数中从键盘给n输入15,则输出为:s=2.718282。
注意:要求n的值大于1但不大于100ₒ

double  fun(int  n)
{
 double m=1.0,p=1.0;/*定义m、p为双字节型变量,并赋值1.0*/
 int i;
 for(i=1;i<=n;i++)
 {  p=p*i;/*p为中间变量,求出累乘值*/
    m=m+1.0/p;/*求出多项式之和*/
 }
 return (m);/*返回结果*/
}

本题主要考查的是求多项式的值。


第6道

请编写函数fun,其功能是统计出x所指数组中能被e整除的元素个数,通过函数值返回主函数;同时,计算不能被e整除的元素之和,放到形参sum所指的存储单元中。
例如:当数组x内容为1, 7,8,6, 10, 15, 11, 13, 29,31,整数e内容为3时,
输出结果应该是:n=2, sum = 110

int fun(int xQ, int e, int *sum)
{int i,n=0;
 *sum=0;
 for(i=0;i<N;i++)
	 if(x[i]%e==0) n++;
	 else *sum+=x[i];
 return n;

}

解析:通过循环获取数组中的每一个元素,并通过if语句对该元素进行判断, 并按照题中要求,对其进行计数或者统计加和。


第7道

请编写函数fun:在形参指针所指的4个整数中找出最大值和最小值, 最大的放在a中,最小的放在d中。

void  fun(int  *a, int  *b, int  *c, int  *d)
{
 int max, min;
  max=*a;
  min=*d;
  if (*b>max) {max=*b;} 
  if (*c>max) {max=*c;} 
  if (*d>max) {max=*d;} 
  if (*a<min) {min=*a;} 
  if (*b<min) {min=*b;} 
  if (*c<min) {min=*c;}
  *a=max;
  *d=min;

}

本题的考核点是C语言中的指针和函数之间地址值的传递。
解题思路:首先定义两个变量,分别用来放最大值和最小值,先把指针a指向的值赋给max把指针d指向的值端min。此时分别将其他的数与max比较,直到将最大的值赋给max,同理,将最小的值赋给min。数值比较 过后,将指针a指向max,指针b指向min,最后再main函数中输出。


第8道

请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把。至9 岁年龄段的人数放在d⑼中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,其余依此类推,把100岁(含 100)以上年龄的人数都放在d[10]中。结果在主函数中输出。

void  fun( int  *a,  int  *b)
{int i;
 for(i=0;i<M;i++)  
   b[i]=0;/*初始化数组b中的每一个元素*/
 for(i=0;i<N;i++)  
   b[*(a+i)/10>10?10:*(a+i)/10]++;
   /*判断年龄整除10后的值是否大于10,若大于10,则该逗号表达式的值等于10,否则等于*(a+i)/10的值*/
}

本题的考核点是统计各年龄段人数的算法。
解题思路:本题提供的参考程序,先对数组初始化,再通过for循环和逗号表达式
*(a+i)/10>10? 10 : *(a+i)/10将年龄整除10后存放到数组d中,具体执行过程是:判断年龄整除10后的值是否大于10,若大于10,则该逗号表达式的值等于10,即实现了将100岁(含100)以上年龄的人数存放在d[10]中;若不大于10,则逗号表达式的值等于
*(a+i)/10的值,即实现了各个年龄段的人数的统计。


第9道

请编写函数fun,其功能是:判断t所指字符串中的字母是否由连续递增字母序列组成
(字符串长度大于等于2)。
例如:字符串:uvwxyz满足要求;
而字符串:uvxwyz不满足要求。

int  fun( char  *t )
{
	int k=0,i=0;
	while(t[i+1]){
		if(t[i+1]==t[i]+1)
		{
			k++;
			i++;
		}else{
			k=0;
			break;
		}
	}
	return k;
}

本题的考核点是C语言中的数组与指针。
解题思路:对于一个任意输入的字符串,fun函数中的形参指针t指向它的第一个元素的地址,首先对数组中的第一个元素与第二个元素进行比较,如果第二个字符的ASCII码比第一个字符的ASCII码大1,则这两个字符连 续递增;
同理对二个元素和第三个元素进行比较,直到将倒数第二个元素和最后一元素进行比较。如果一直符合条件,则返回非零的int型整数,如果中间有一不符告则结束循环,返回值为0。


第10道

请编一个函数fun,函数的功能是:将s所指字符串中ASCll码值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为"ABCDEFG12345",其中字符串A的ASCll码值为奇数,字符1的ASCll码值也为奇数,都应该删除,其他以此类推。最后t所指的数组中的内容应是"BDF24"。

void  fun(char  *s, char  t[])
{
  int i,slenth,n=0;
    slenth=strlen(s);  /*统计字符串S中字符的个数*/
   for(i=0;i<slenth;i++)
   /*判断字符串s[i]其值的ASCll码值是否为基数,如果是则继续下一个字符串的判断,否则将字符s[i]复制到t数组中*/
       if(s[i]%2==0)
        t[n++]=s[i];
    t[n]='\0';
}

本题主要考考核点是数组和循环语句
解题思路:使用循环语句将数组元素与2做趋于操作,如果余数为0则将其值存入另一个数组中。


第11道

编写函数fun,它的功能是:根据以下公式求P的值,结果由函数值带回。m与n为两个正整数且要求m>n
在这里插入图片描述
例如: m = 12, n=8时,运彳亍结果为495.000000。

float  fun(int m, int n)
{
	 int i;
	 float s=1,f=1,h=1;
	 float x;
	 for (i=m;i>=1;i--) s=s*i;  /*求出m的阶乘*/
	 for (i=n;i>=1;i--) f=f*i;  /*求出n的阶乘*/
	 for (i=m-n;i>=1;i--) h=h*i;/*求出m-n的阶乘*/
	 x=s/(f*h);
	 return (x); 
}

本题的考核点是求阶乘的算法。
解题思路:分别通过三个循环来求得m的阶乘,n的阶乘,m-n的阶乘。求m阶乘的方法是:从1到m累计乘积。


第12道

结构体struct mpow两个成员的意义是:a为幂的底,t为幂的指数。
请编写函数fun,其功能是:计算出x所指数组中n个幂数之和并返回。
例如,当结构体数组用如此数据12, 0,9, 2, 23, 1, 7, 2初始化时, 程序的输出结果应该是:sum = 154.000000

struct mpow
{
	double a;
	int t;
};
double fun(struct mpow *x,int n)
{int i,j;double s=0,m=1;
 for(i=0;i<n;i++)
 {  m=1;
	for(j=0;j<x[i].t;j++)
	  m=m*x[i].a;
	s+=m;
 }
return s;
}

本题考查的知识点为结构体及其成员的引用。
解题思路:结构体中包含两个成员,第一个成员为底数,
第二个成员为幂数,我们可以通过第二个成员来控制循环的次 数,累计第一个成员的乘积。


第13道

编写函数fun,它的功能是:计算并输出下列级数和:
在这里插入图片描述
例如,当n=10时,函数值为0.909091。

double fun(int n)
{
   int i;
   double s=0;
   for (i=1 ; i<=n ; i++)
      s=s+1.0/(i*(i+1)); /*累加各分式的值*/ 
   return (s);
}

本题的考核点是公式算法。
解题思路:累计1/(i*(i+1))的和,通过一循环即可实现。


第14道

请编一个函数fun,函数的功能是求出2XM整型二维数组中最大元素的值,并将此值返回调用函数。

int fun (int a[][M])
{int i,j,max;
 max=a[0][0]; /*将二维数组的第一个元素赋给变量max,该变量是存放数组中最大元素的值*/
 for(i=0;i<2;i++)/*设置循环变量*/
   for(j=0;j<M;j++)
     if(max<a[i][j]) max=a[i][j];/*依次数组中的元素与base作比较*/
 return max; /*返回最大值*/
}

本题的考核点是二维数组、循环语句的嵌套。
解题思路:先用一悭量记录二维数组的第一个元素,然后通过嵌套的循环语句依次将数组中的其他元素与这个变量作比较,如果大于它则交换两者的值。


第15道

请编写函数fun,其功能是:求n (n< 10000)以内的所有四叶玫瑰数并逐个存放到result所 指的数组中,四叶玫瑰数的个数作为函数值返回值。
如果一个4位正整数等于其各个数字的4次方之和,则称该数为四叶玫瑰数。
例如:1634=1x1x1x1+6x6x6x6+3x3x3x3+4x4x4x4,因此1634就是一个四叶玫瑰数。

#pragma warning (disable:4996)
int fun(int n, int result[])
{ int i,j,k=0,s;
  for(i=1000;i<n;i++)
	{s=0;j=i;
     while(j>0)
		{s+=(j%10)*(j%10)*(j%10)*(j%10);
	     j=j/10;}
	 if (s==i) result[k++]=i;
	 }
  return k;
}

本题的考查点是循环的应用。
解题思路:本程序使用for循环遍历所有数,while循环分解当前数的各个位的值, 并四次方后累加求和,若该和与原数相等,则满足要求,保存。


第16道

请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符平移到字符串的最后,把第m + 1到最后的字符移到字符串的前部。
例如,字符串中原有的内容为:ABCDEFGHIJK, m的值为3,则移动后字符串中的内容应该是:DEFGHIJKABC。

void fun1(char *w)  /* 本函数的功能是将字符串中字符循环左移一个位置 */
{
  int i; char t;
  t=w[0];
  for(i=0;i<(int)strlen(w)-1;i++)
    w[i]=w[i+1];
  w[strlen(w)-1]=t;
}
void  fun(char  *w, int  m)  /* 可调用fun1函数左移字符 */
{int i=0,x,j;
 char ch;
 for(j=0;w[j];j++)i++;
 for(x=0;x<m;x++)
    {ch=w[0];
     for(j=1;j<i;j++) 
      {
       w[j-1]=w[j];
      }
     w[i-1]=ch; 
    }
}

本题的考核点是一维数组的应用。
解题思路:本题要求把字符串中的第1到第m个字符平移到字符串的最后,把第m+1到最后的字符移到字符串的前部,我们可以根据输入的m的值,通过for循环语句,将m+l到最后的字符之间的字符依次向前平移m个 存储单元,本题中是通过w[j-1]=w[j]语句实现的,然后再将1到m个字符逐一赋给数组w[i-1],即w[i-1]=ch;


第17道

请编写函数fun,其功能是:分别求一个双精度数的整数部分和小数部分,并通过指针返回。
例如程序输入的数为:5104. 7583,则输出的整数部分是:5104,小数部分是0.758300。

void  fun(  double  aa, int  *x, double  *y )
{ 
 *x=(int)(aa);
 *y=aa-*x;
}

本题考查的知识点在如何通过运算将一个浮点数的整数部分和小数部分获取出来,对一个浮点数来说,强制类型转换(int)可以得到它的整数部分,原数据减去截取后的整数部分,即可得到小数部分。


第18道

请编写函数fun,函数的功能是:统计一行字符串中单词的个数作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字 母组成,单词之间由若干个空格隔开,一行的开始没有空格。

int  fun( char  *s)
{int i=1,j=0;
 while(*s){
	   if((i==1) && (*s!=32)) 
              {j++;i=0;} 
	   if(*s==32)
               i=1; 
	       s++; 
	   }
 return j; 
}

本题的考核点是统计字符串中单词个数的算法。
解题思路:本题要求统计一行字符串中单词的个数,并作为函数值返回。在给出的参考程序中,若判断出当前字符为非空格,而它前面的字符是空格,则单词数累加1;若当前字符为非空格,而其前面的字符也为非空 格,则单词数不累加1。


第19道

有一个很奇怪的车牌号,它是一个4位十进制数,是某一个数的平方数,且这4个数字从 右至左一个比一个大。程序的功能是把这个车牌号找出来,部分程序已给出。
请编写函数fun,其功能是:将一个4位数的每一位数分离出来,
并依次存放在结构体变量成员中,通过函数值返回给主函数。
例如,一个4位数n为2579,则应把2放在res. m3中,
把5放在res. m2中,把7放在res. ml中,把9放在res. mO中。
程序正确运行后的输出结果是:NO. is 1369

struct BITS { int  m3, m2, m1, m0; };
struct BITS  fun(int  n)
{
   struct BITS  res;
/* 在这里将函数代码补充完整 */
   res.m0=n%10;
   res.m1=n/10%10;
   res.m2=n/100%10;
   res.m3=n/1000%10;
return res;
}

本题考查的是求余计算。
解题思路:将一个四位数的各个位分解出来。方法是将所求位变换到个位上,然后与10求余,即%10。变换到个位上是利用了整型数相除无小数的原理。


第20道

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

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

本题的考查点是字符串的应用。
解题思路:在main。函数中,程序先定义了 一个字符型数组s[10],和 一个长整形变量r然后通过"gets⑸;"语句,读取用户手动输入的字符,并将其存放在数组s中,并将s作为参数,传递给fun()函数。在fun()函数中, 以指针变量s作为形参,获取参数,通过"n=strlen⑸;“语句可以知道用户输入字符数组的长度,并将该长度值代入到for循环中,通过for循环由后向前依次取出每个字符,直到数组结束,在for循环中,首先通过”* (s+i)"取出该位置对应的字符,然后将字符*(s+i)的ASCII值减去48,即可得到与其面值相同的整数数字,再通过语句"r=r*10+a;"将每个整教数字组合成所需的长整型数。


第21道

请编写函数fun(charsp, intct),其功能是,对传给sp的字符串,分别统计两个相连 字母"ea"、“ou"和"iu"出现的次数(不能使用函数strstr(), 并将统计结果存入ct所指数组中。
例如:若字符串的内容为"abeaeafeeaoukgdoouuoioui fwieeotiu”,
则运行结果为3 ,3,1。

void fun(char*sp ,int *ct)
{int i;
 ct[0]=0;ct[1]=0;ct[2]=0;
 for(i=0;sp[i];i++)
 {if (sp[i]=='e' && sp[i+1]=='a') ct[0]++;
  if (sp[i]=='o' && sp[i+1]=='u') ct[1]++;
  if (sp[i]=='i' && sp[i+1]=='u') ct[2]++;
 }
}

本题考查的是字符串的遍历,并统计子串的个数。
解题思路:子串长度仅为2,也就是说子串特殊,故编程时可以简单的使用i
和i+1两个相连的下标确定是否与子串相同。


第22道

请编写函数fun,它的功能是:求出能整除形参x且不是偶数的所有整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数 通过形参n返回。
例如,若x中的值为:35,则有4个数符合要求,它们是:1,5,7,35。

void  fun ( int x, int  pp[], int *n )
{  int i,k,j = 0 ;
       for(i=1;i<=x;i+=2)               
       {if((x%i)==0) pp[j++] =i;      
        *n=j ;}                       
       for(i=0;i<j-1;i++)
       for(k=i+1;k<j;k++)
       if(pp[i]>pp[k])
        {x=pp[i]; pp[i]=pp[j]; pp[j]=x;} 
}

本题着重考察考生对c语言中一些简单算法的掌握情况。


第23道

编写函数fun,它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回。
例如若n为1000时,函数值应为:s=153.909064。

double  fun( int  n)
{ int i;double s=0.0;
  for (i=1;i<n;i++)
   /*判断i是否能被3与7同时整除*/
  if (i%3==0 && i%7==0) s=s+i;
  return sqrt(s);
}

本题的考核点是n以内能被3与7整除的所有数之和的算法。
解题思路:从1到n,依次整除3与7,将能被整除的数求和,最后求和的平方根。


第24道

请编写函数fun,函数的功能是:将M行N列的二维数组中的数据按列的顺序依次放到一维数组中。例如,二维数组中的数据为:
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应是:
33 44 55 33 44 55 33 44 55 33 44 55

void  fun(int s[][10], int  b[], int  *n, int mm, int nn)
{
  /* 以下代码仅供参考 */
  int i,j,np=0;   /* np用作b数组下标 */
for(j=0;j<nn;j++)
 for(i=0;i<mm;i++)
    b[np++]=s[i][j];

  *n=np;
}

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


第25道

请编写函数fun,其功能是:在一个含有11个四位数的数组中,统计出这些数的奇数、偶数个数,然后计算出个数多的那些数的算数平均值并由函数返回,个数通过yy传回。
例如,若11 个数据为:1101, 1202, 1303, 1404, 1505, 2611, 2712, 2813, 2914, 3202,4222
则输出:yy=6, pjz=2609. 33

double fun( int xx[], int *yy )
{int i,n=0,m=0;double s1=0,s2=0;
 for(i=0;i<N;i++)
	 if(xx[i]%2==0) {s1+=xx[i];n++;}
     else {s2+=xx[i];m++;}
 if (n>m) {*yy=n;return s1/n;}
 else {*yy=m;return s2/m;}
}

本题考查的是数组。
解题思路:函数fun首先要对形参指针xx所指的一维数组中的所有元素根据if判断,分别统计出所有奇数、偶数的加和 及个数,根据个数的多少,去求对应的平均值。


第26道

请编写函数fun,其功能是:统计出x所指数组中偶数的个数,通过函数值返回主函数
并计算出偶数的平均值放到形参ave所指的存储单元中。
例如当数组内容为:12,5,9,8, 23, 4,7, 21时,
输出结果应该是:n = 3, ave=8. 000000

int fun(int x[],double *ave)
{
 int i,n=0;
 *ave=0;
 for(i=0;i<N;i++)
   if(x[i]%2==0) {n++;*ave+=x[i];}
 *ave/=n;
 return n;
}

本题考查的是for循环的应用。
解题思路:通过for循环遍历所有数,若是偶数,记个数、求和。
其他的只需根据题目要求赋初值、计算等。


第27道

请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据按列的顺序依次放到一个字符串中。 例如,二维数组中的数据为:
W W W W
S S S S
H H H H
则字符串中的内容应是: WSHWSHWSHWSH。

void  fun(char  s[][N], char *b)
{
  int i,j,n=0;
  for(i=0; i < N;i++)  /* 请填写相应语句完成其功能 */
  {

	  for (j=0;j<M;j++)
		  b[n++]=s[j][i];
  }
  b[n]='\0';
}

本题的考核点是二维数组按行转换为一维数组的算法。
解题思路:利用内、外两层fo「循环,按列的顺序椁

依次存放到符串中,即实现了将M行N列的二维数组中的字符数据按列的顺序依次放到符串中。


第28道

请编写函数fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除 后数组中数据的个数。
例如,一维数组中的数据是:
2223445666677899 10 10 10ₒ删除后数组中的内容应该是:2 3 4 5 67 8 9 10ₒ

int  fun(int  a[], int  n)
{int i,j,x;  
 for(i=0;i<n-1;i++)   
 /*从数组中的第一个
开始,依次与其后面的数据进行比较,
若相同,则将它之后的字符逐个向前移动置,即将该数据删除*/
   for(j=i+1;j<n;j++)
     if(a[j]==a[i])
       {for(x=j+1;x<n;x++)
          a[x-1]=a[x];
          n--;
          j--;
        } 
 return(n); 
}

本题的考核点是从一维数组中删除相同数据元素的算法。
解题思路:从数组中的第一个数据开始,依次与其后面的数据进行比较,若相同,则将它之后的字符逐个向前移动即将该数据删除,n–;, j-;,继续进行下一个数据循环判断,最终删除一维数组中所有相同的数,使之只剩一个,并返回删除后数组中数据的个数。


第29道

函数fun的功能是:将s所指字符串中除了下标为奇数、同时ASCII值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为:“ABCDEFG12345”,其中字符A的ASCII码值虽为奇数,但所在元素的下标为偶数,因此必需删除; 而字符1的ASCII码值为奇数,所在数组中的下标也为奇数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:“135”。

void fun(char *s, char t[])
{
  int i,slenth,n=0;
    slenth=strlen(s);  /*统计字符串s中字符的个数*/
   for(i=1;i<slenth;i+=2)
       if(s[i]%2!=0) /*将字符串s中所有下标和ASCII值同时为奇数的字符复制到数组t中*/
        t[n++]=s[i];
    t[n]='\0';
}

本题的考核点是数组、循环语句。
解题思路:使用循环语句将数组下标为奇数的元素与2取余,如果余数不为零则将其值存入另外一个数组中


第30道

请编写函数fun,函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。
例如,字符串数组中的M个字符串为:
AAAA
BBBBBBB
CC
则合并后的字符串的内容应是:AAAABBBBBBBCCO
提示:strcat (a, b)的功能是将字符串b复制到字符串a的串尾上,成为一个新串。

#define   M   3
#define   N   20
void  fun(char  a[M][N], char  *b)
{int i,j,d=0;  /*定义整型变量d用于控制字符数组b的下标变化*/            
 for(i=0;i<100;i++)b[i]=0; 
 for(i=0,d=0;i<3;i++)   
 /*通过for循环实现字符数组当前位置上的字符不为'\0 "时将该字符串中的每一行符存入指定数组b中,否则转到下一个字符串,重复上述操作*/ 
   for(j=0;*(a[i]+j);j++)
     {
      *(b+d)=*(a[i]+j);    
      d++;
      }
}

本题的考核点是字符串数组、循环语句。
解题思路:本题的第一个for语句的作用是实现数组的初始化,然后再通过for循环语句,判断该字符串数组当前位置上的字符是否为字符串结束符"\0",若不是,则将该字符串中的每符存入指定数组中,若 是"\0",则转到下一个字符串,重复上述操作。


Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐