计算机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,它的功能是计算下列级数和,和值由函数值返回。
例如,当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列的二维数
组中的数据按行的顺序依次放到一维数组中。