初学问几道C语言数组的练习题
06年南开上机题
1: 第1题 m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人作为函数值返回,将低于平均分的分数放在below所指定的函数中。
答案:int fun(int score[],int m,int below[])
{
int i,k=0,aver=0;
for(i=0;i<m;i++)
aver+=score[i];
aver/=m;
for(i=0;i<m;i++)
if(score[i]<aver)
{
below[k]=score[i];
k++;
}
return k;
}
2: 第2题 请编写函数fun,它的功能是:求出1到100之内能北7或者11整除,但不能同时北7和11整除的所有证书,并将他们放在a所指的数组中,通过n返回这些数的个数。
答案:void fun(int *a, int *n)
{
int i,j=0;
for(i=2;i<1000;i++)
if ((i%7==0 || i%11==0) && i%77!=0)
a[j++]=i;
*n=j;
}
3: 第3题 请编写函数void fun(int x,int pp[],int *n),它的功能是:求出能整除x且不是偶数的各整数,并按从小到大的顺序放在pp所指的数组中,这些除数的个数通过形参n返回。
答案:void fun(int x, int pp[ ], int *n)
{
int i=1,j=0;k=0,*t=pp;
for(i=0;i<=x;i++)
if(i%2!=0)
{
t[j]=I;
j++;
}
for(i=0;i<j;i++)
if(x%t[i]==0)
{
pp[k]=t[i];
k++;
}
*n=k;
}
4: 第4题 请编写一个函数void fun(char *tt,int pp[]),统计在tt字符中"a"到"z"26各字母各自出现的次数,并依次放在pp所指的数组中。
答案:void fun(char *tt, int pp[])
{
int i;
for (i=0;i<26;i++)
pp[i]=0;
while (*tt)
{
switch (*tt)
{
case ‘a’: pp[0]++;break;
case ‘b’: pp[1]++;break;
case ‘c’: pp[2]++;break;
case ‘d’: pp[3]++;break;
case ‘e’: pp[4]++;break;
case ‘f’: pp[5]++;break;
case ‘g’: pp[6]++;break;
case ‘h’: pp[7]++;break;
case ‘i’: pp[8]++;break;
case ‘j’: pp[9]++;break;
case ‘k’: pp[10]++;break;
case ‘l’: pp[11]++;break;
case ‘m’: pp[12]++;break;
case ‘n’: pp[12]++;break;
case ‘o’: pp[14]++;break;
case ‘p’: pp[15]++;break;
case ‘q’: pp[16]++;break;
case ‘r’: pp[17]++;break;
case ‘s’: pp[18]++;break;
case ‘t’: pp[19]++;break;
case ‘u’: pp[20]++;break;
case ‘v’: pp[21]++;break;
case ‘w’: pp[22]++;break;
case ‘x’: pp[23]++;break;
case ‘y’: pp[24]++;break;
case ‘z’: pp[25]++;break;
}
tt++;
}
}
5: 第5题 请编写一个函数void fun(int m,int k,int xx[]),该函数的功能是:将大于整数m且紧靠m的k各素数存入xx所指的数组中。
答案:void fun(int m, int k, int xx[])
{
int g=0,I,j,flag=1;
for(i=m+1;i<m*m;i++)
{
for(j=0;j<I;j++)
{
if(i%j!=0)
flag=1;
else
{
flag=0;
break;
}
}
if (flag==1 && j>=i)
{
if (k>=0)
{
xx[g++]=i;
k--;
}
else
break;
}
}
}
6: 第6题 请编写一个函数void fun(char a[],char[],int n),其功能是:删除以各字符串中指定下标的字符。其中,a指向原字符串,删除后的字符串存放在b所指的数组中,n中存放指定的下标。
答案:void fun(char a[],char b[], int n)
{
int I,j=0;
for (i=0;i<LEN;i++)
if (i!=n)
{
b[j]=a[i];
j++;
}
b[j]=‘\0’;
}
7: 第7题 请编写一个函数int fun(int *s,int t,int *k),用来求除数组的最大元素在数组中的下标并存放在k所指的储存单元中。
答案:void fun (int *s, int t, int *k)
{
int I, max;
max=s[0];
for(i=0;i<t;i++)
if (s[i]>max)
{
max=s[i];
*k=I;
}
}
8: 第8题 编写函数fun,功能是:根据以下攻势计算s,计算结果作为函数值返回;n通过形参传入。S=1+1/(1+2)+1/(1+2+3)+…….+1/(1+2+3+4+……+n)
答案:float fun (int n)
{
int i;
float s=1.0, t=1.0;
for(i=2;i<=n;i++)
{
t=t+i;
s=s+1/t;
}
return s;
}
9: 第9题 编写一个函数fun,它的功能是:根据以下公式求p的值,结果由函数值带回。M与n为两个正整数,且要求m>n。 p=m!/n!(m-n)!
答案:float fun(int m, int n)
{
float p,t=1.0;
int I;
for (i=1;i<=m;i++)
t=t*I;
p=t;
for(t=1.0,i=1;i<=n;i++)
t=t*I;
p=p/t;
for(t=1.0,i=1;i<=m-n;i++)
t=t*I;
p=p/t;
return p;
}
10: 第10题 编写函数fun,它的功能是:利用以下的简单迭代方法求方程cos(x)-x=0的一个实根。
迭代步骤如下:(1)取x1初值为0.0; (2)x0=x1,把x1的值赋各x0;
(3)x1=cos(x0),求出一个新的x1;
(4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤(2);
(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。
程序将输出root=0.739085。
答案:float fun()
{
float x1=0.0,x0;
do
{
x0=x1;
x1=cos(x0);
}
while(fabs(x0-x1)>1e-6);
return x1;
}
11: 第11题 下列程序定义了n×n的二维数组,并在主函数中自动赋值。请编写函数 fun(int a[][n]),该函数的功能是:使数组左下半三角元素中的值全部置成0。
答案:int fun(int a[][N])
{
int I,j;
for(i=0;i<N;i++)
for(j=0;j<=I;j++)
a[i][j]=0;
}
12: 第12题 下列程序定义了n×n的二维数组,并在主函数中赋值。请编写函数fun,函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s。
答案:double fun(int w[][N])
{
int I,j,k=0;
double s=0.0;
for(j=0;j<N;j++)
{
s+=w[0][j];
k++;
}
for(j=0;j<N;j++)
{
s+=w[N-1][j];
k++;
}
for(i=1;i<=N-2;i++)
{
s+=w[i][0];
k++;
}
for(i=1;i<=N-2;i++)
{
s+=w[i][N-1];
k++;
}
return s/=k;
}
13: 第13题 请编写一个函数void fun(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中。二维数组中的数已在主函数中赋予。
答案:void fun(int tt[M][N], int pp[N])
{
int I,j,min;
for(j=0;j<N;j++)
{
min=tt[0][j];
for(i=0;i<M;i++)
{
if (tt[i][j]<min)
min=tt[i][j];
}
pp[j]=min;
}
}
14: 第14题 请别写函数fun,函数的功能使求出二维数组周边元素之和,作为函数值返回。二维数组中的值在主函数中赋予。
答案:int fun(int a[M][N])
{
int I,j,s=0;
for(j=0;j<N;j++)
{
s+=a[0][j];
s+=a[M-1][j];
}
for(i=1;i<=M-2;i++)
{
s+=a[i][0];
s+=a[i][N-1];
}
return s;
}
15: 第15题 请编写一个函数unsigned fun(unsigned w),w使一个大于10的无符号整数,若w使n(n≥2)位的整数,则函数求出w后n-1位的数作为函数值返回。
答案:unsigned fun(unsigned w)
{
unsigned t,s=0,s1=1,p=0;
t=w;
while(t>10)
{
if(t/10)
p=t%10;
s=s+p*s1;
s1=s1*10;
t=t/10;
}
return s;
}
16: 第16题 请编写一个函数float fun(double h),函数的功能使对变量h中的值保留2位小树,并对第三位进行四舍五入(规定h中的值位正数)。
答案:float fun(float h)
{
long t;
float s;
h=h*1000;
t=(h+5)/10;
s=(float)t/100.0;
return s;
}
17: 第17题 请编写一个函数fun(char *s),该函数的功能使把字符串中的内容拟置。
答案:void fun(char *s)
{
char ch;
int I,m,n;
i=0;
m=n=strlen(s)-1;
while(i<(n+1)/2)
{
ch=s[i];
s[i]=s[m];
s[m]=ch;
i++;
m--;
}
}
18: 第18题 编写程序,实现矩阵(3行3列)的转置(即行列互换)。
答案:void fun(int array[3][3])
{
int I,j,temp;
for(i=0;i<3;i++)
for(j=0;j<I,j++)
{
temp=array[i][j];
array[i][j]=array[j][i];
array[j][i]=temp;
}
}
19: 第19题 编写函数fun,该函数的功能是:从字符中删除指定的字符,同一字母的大、小写按不同字符处理。
答案:void fun(char s[],int c)
{
int i=0;
char *p;
p=s;
while(*p)
{
if(*p!=c)
{
s[i]=*p;
i++;
}
p++;
}
s[i]=‘\0’;
}
20: 第20题 编写函数int fun(int lim,int aa[max]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求的素数的个数。
答案:int fun(int lim, int aa[MAX])
{
int k=0,I,j;
for(i=lim;i>1;i--)
{
for(j=2;j<i;j++)
if(i%j==0)
break;
else
continue;
if(j>=i)
{
aa[k]=i;
k++;
}
}
return k++;
}
21: 第21题 请编写函数fun,对长度位7个字符的字符串,除首尾字符外,将其余5个字符按ascii码降序排列。
答案:void fun(char *s,int num)
{
char t;
int I,j;
for(i=1;i<num-2;i++)
for(j=i+1;j<num-1;j++)
if(s[i]<s[j])
{
t=s[i];
s[i]=s[j];
s[j]=t;
}
}
22: 第22题 n名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。
答案:double fun(STREC *h)
{
double max;
STREC *q=h;
max=h->s;
do
{
if(q->s>max)
max=q->s;
q=q->next;
}
while(q!=0);
return max;
}
23: 第23题 请编写函数fun,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。
答案:int fun(char *str)
{
int I,n=0;fg=1;
char *p=str;
while (*p)
{
n++;
p++;
}
for(i=0;i<n/2;i++)
if (str[i]==str[n-1-i]);
else
{
fg=0;
break;
}
return fg;
}
24: 第24题 请编写一个函数fun,它的功能是:将一个字符串转换为一个整数(不得调用c语言提供的将字符串转换为整数的函数)。
答案:long fun (char *p)
{
long s=0,t;
int i=0,j,n=strlen(p),k,s1;
if(p[0]==‘-’)
i++;
for(j=I;j<=n-1;j++)
{
t=p[j]-‘0’;
s1=10;
for(k=j;k<n-1;k++)
t*=s1;
s+=t;
}
if(p[0]==‘-’)
return –s;
else
return s;
}
25: 第25题 请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。
答案:char *fun(char *s,char *t)
{
char *p,*t1=t,*s1=s;
int n=0;m=0;
while (*s1)
{
n++;
s1++;
}
while(*t1)
{
m++;
t1++;
}
if(n>=m)
p=s;
else
p=t;
return p;
}
26: 第26题 请编写一个函数fun,它的功能是:根据以下公式求x的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):
x/2=1+1/3+1×2/3×5+1×2×3/3×5×7+1×2×3×4/3×5×7×9+…+1×2×3×…×n/3×5×7×(2n+1)
程序运行后,如果输入精度0.0005,则程序输出为3.14…。
答案:double fun(double eps)
{
double s;
float n,t,pi;
t=1;pi=0;n=1.0;s=1.0;
while((fabs(s))>=eps)
{
pi+=s;
t=n/(2*n+1);
s*=t;
n++;
}
pi=pi*2;
return pi;
}
27: 第27题 请编写一个函数fun,它的功能是:求除1到m之内(含m)能北7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
答案:void fun(int m, int *a, int *n)
{
int I,j=0; *n=0;
for(i=1;i<=m;i++)
if (i%7==0 || i%11 ==0)
{
a[j]=I;
j++;
}
*n=j;
}
28: 第28题 请编写一个函数fun,它的功能是:找出一维整型数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n 是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。
答案:void fun (int a[],int n, int *max, int *d)
{
int I;
*max=a[0];
*d=0;
for(i=0;I<n;i++)
if(a[i]>*max)
{
*max=a[i];
*d=I;
}
}
29: 第29题 请编写一个函数fun,它的功能是:将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
答案:void fun(char *ss)
{
int I,n;
n=strlen(ss);
for(i=1;i<n;i+=2)
if(ss[i]>=‘a’&& ss[i]<=‘z’)
ss[i]=ss[i]-32;
}
30: 第30题 请编写一个函数fun,它的功能是:求除一个2×m整型二维数组中最大元素的值,并将此值返回调用函数。
答案:int fun(int a[][M])
{
int I,j,max;
max=a[0][0];
for(i=0;i<2;i++)
for(j=0;j<M;j++)
if(a[i][j]>max)
max=a[i][j];
return max;
}
31: 第31题 请编写函数fun,其功能是:将s所指字符串中除了下标为偶数、同时ascii值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。
答案:void fun(char *s,char t[])
{
int I,j=0,n;
n=strlen(s);
for(i=0;I,n;i++)
if(i%2==0&&s[i]%2==0)
{
t[j]=s[i];
j++;
}
t[j]=‘\0’;
}
32: 第32题 请编写函数fun,其功能是:将s所指字符串中除了下标为奇数、同时ascii值也为奇数的字符之外,其余的所有字符都删除,串中剩余字符所形成的一个新串放在t所指的一个数组中。
答案:void fun(char *s,char t[])
{
int I,j=0,n;
n=strlen(s);
for(i=0;I,n;i++)
if(i%2!=0&&s[i]%2!=0)
{
t[j]=s[i];
j++;
}
t[j]=‘\0’;
}
33: 第33题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字符串中尾部的*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做,字符串中间和前面的*号不删除。
答案:void fun(char *a,int n)
{
int i=0;k=0;
char *p, *t;
p=t=a;
while (*t)
t++;
t--;
while(*t==‘*’)
{
k++;
t--;
}
t++;
if(k>n)
{
while (*p&&p<t+n)
{
a[i]=*p;
i++;
p++;
}
a[i]=‘\0’;
}
}
34: 第34题 学生的记录由学号和成绩组成,n名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能使:把分数最高的学生数据放在h所指的数组中,注意:分数最高的学生可能不止一个,函数返回分数最高的学生的人数。
答案:int fun (STREC *a, STREC *b)
{
int I,j=0,n=0, max;
max=a[0].s;
for(i=0;i<N;i++)
if(a[i].s>max)
max=a[i].s;
for(i=0;i<N;i++)
if(a[i].s==max)
{
*(b+j)=a[i];
j++;
n++;
}
return n;
}
35: 第35题 请编写一个函数,用来删除字符串中的所有空格。
答案:void fun(char *str)
{
int i=0;
char *p=str;
while (*p)
{
if(*p!=‘’)
{
str[i]=*p;
i++;
}
p++;
}
str[i]=‘\0’;
}
36: 第36题 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部移到字符串的尾部。
答案:void fun(char *a)
{
int i=0,n=0;
char *p;
p=a;
while (*p==‘*’)
{
n++;
p++;
}
while (*p)
{
a[i]=*p;
i++;
p++;
}
while(n!=0)
{
a[i]=‘*’;
i++;
n--;
}
a[i]=‘\0’;
}
37: 第37题 某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。请自己定义正确的形参。
答案:void fun(STREC *p)
{
double av=0.0;
int i:
for(i=0;i<N;i++)
av+=p->s[i];
av/=N;
p->ave=av;
}
题目要求的是编写函数void find_odd(int odd[],int n)
函数的目的是把相应的奇数放入odd数组中
在main函数输出,而不是find_odd函数中输出
#include#define N 100void find_odd(int odd[],int n){ int i; for(i=0;i<n;i++) odd[i]=n*n-n+1+i*2;}main(){ int a[N]={0}; int n,i; scanf("%d",&n); find_odd(a,n); printf("%d^3=",n); for(i=0;i<N;i++) { if(a[i]!=0) printf("%d+",a[i]); else { printf("\b
"); break; } }}
#include "stdafx.h"
int main(int argc,char* argv[])
{
int a[10]={1,3,5,7,9,8,6,4,2,0};//初始化。
int b[10];
printf("顺序的数据:\n");
for(int j=0;j<10;j++)
{
printf("%d",a[j]);
printf(" ");
}
for(int i=0;i<10;i++)
{
b[10-1-i]=a[i];
}
printf("\n逆序后的数据:\n");
for(int n=0;n<10;n++)
{
printf("%d",b[n]);
printf(" ");
}
return 0;
}
/*2,有整型数组a[20],首先输入一组非0整数(少于20个)到该数组中,以输入0值为结束。编写4个函数分别求该数组中元素的1,正数个数,2,正数平均值,3,负数个数,4,负数平均值,最后在主函数中输入4个求出的值。提示:将数组定义为:int a[20],实际只用数组的前若干个元素。
*/
#include "stdafx.h"
int fun1(int *ar,int num)
{
int au=0;
for(int i=0;i<num;i++)
{
if(ar[i]>0)
{
au++;
}
}
printf("正数个数:%d\n",au);
return au;
}
int fun2(int *ar,int num)
{
int au=0;
for(int i=0;i<num;i++)
{
if(ar[i]>0)
{
au+=ar[i];
}
}
au=au/fun1(ar,num);
printf("正数平均值:%d\n",au);
return au;
}
int fun3(int *ar,int num)
{
int au=0;
for(int i=0;i<num;i++)
{
if(ar[i]<0)
{
au++;
}
}
printf("负数个数:%d\n",au);
return au;
}
int fun4(int *ar,int num)
{
int au=0;
for(int i=0;i<num;i++)
{
if(ar[i]<0)
{
au+=ar[i];
}
}
au=au/fun1(ar,num);
printf("负数平均值:%d\n",au);
return au;
}
int main(int argc,char* argv[])
{
int a[20];
int num,date;
printf("请输入数据:\n");
for(num=0;num<20;num++)
{
scanf("%d",&date);
if(date==0)
{
break;
}
a[num]=date;
}
fun2(a,num);
fun4(a,num);
return 0;
}
/*3,任意输入一个4位数,存入变量i,将该数的每一位上的数字,分解到整型数组a[]中,用选择法将a[]数组中的数排成升序,并输入a[]数组的内容。要求选择法排序在函数中完成。
如:int i,a[4];输入i=8362
分解后:a[0]=2,a[1]=6,a[2]=3,a[3]=8
排序后:a[0]=2,a[1]=3,a[2]=6,a[3]=8
运行时,输入8362
输出2368 */
#include "stdafx.h"
void fun(int *a,int num)
{
for(int i=0;i<num-1;i++)
for(int j=i+1;j<num;j++)
{
if(a[i]>a[j])
{
int date=a[i];
a[i]=a[j];
a[j]=date;
}
}
}
int main(int argc,char* argv[])
{
int i=0;
int a[4];
printf("请输入四位整数:\n");
scanf("%d",&i);
for(int s=1000,l=0;l<4;s/=10,l++)
{
a[l]=i/s;
i%=s;
}
fun(a,4);
for(int n=0;n<4;n++)
{
printf("%d",a[n]);
}
return 0;
}
,4,给定2维数组如下,求该数组2条对角线元素之和
a=3 6 4 6
8 3 1 3
4 7 1 2
2 9 5 3
要求:1,在主函数中实现:数组赋初值及求和结果的输出 */
#include "stdafx.h"
int main(int argc,char* argv[])
{
int a[4][4]={{3,6,4,6},{8,3,1,3},{4,7,1,2},{2,9,5,3}};
int num=0;
for(int i=0,j=0;i<4;i++,j++)
{
num+=a[i][j];
}
printf("第一对角线之和:",num);
printf("%d\n",num);
for(i=4-1,j=4-1;i>0;i--,j--)
{
num+=a[i][j];
}
printf("第二对角线之和:",num);
printf("%d\n",num);
return 0;
}
/*6,编写一个函数viod my_strcpy(char s1[],char s2[]),将s2中的字符串拷贝到数组s1中去。要求:
1,不允许使用C语言的库函数strcpy()
2,在主函数中输入2个字符串,调用函数my_strcpy()进行字符串拷贝,并在主函数中输入字符串s1,s2内容。
注意:应该将字符数组s1[]定义足够长,使之能存放连接后的字符串 */
#include "stdafx.h"
void copystr(char *str1,char *str2)
{
while(*str2)
{
*str1++=*str2++;
}
}
int main(int argc,char* argv[])
{
char st1[]="test str";
char st2[20]="";
copystr(st2,st1);
printf("%s\n",st2);
return 0;
}
/*7,输入2个字符串,将对应字母交叉组成第三个字符串,最后输入第三个字符串。例如输入的2个字符串分别是“abcd”和“1234”,则合并后的字符串是“a1b2c3d4”。若2个字符串的长度不等,则其中的一个字符串多余的部分放在结果字符串的尾部,如2个字符串分别是“banana”和“12”,则合并后的字符串是“b1a2nana”
要求:第一个字符串的第一个字母总是结果串的第一个字母。
*/
#include "stdafx.h"
void combinstr(char *str1,char *str2,char *str3)
{
for(;*str1||*str2;)
{
if(*str1)
{
*str3++=*str1++;
}
if(*str2)
{
*str3++=*str2++;
}
}
}
int main(int argc,char* argv[])
{
char st1[]="abcdefghi";
char st2[]="1234";
char st3[64]="";
combinstr(st1,st2,st3);
printf("%s\n",st3);
return 0;
}
只有第五个没有了,你想怎么示范?
算了随便弄个可以看效果的了:/*5,已知5个学生的3门成绩
COURSE1 COURSE2 COURSE3 AVER
STUD1 76 80 90
STUD2 90 65 77
STUD3 63 55 70
STUD4 90 92 97
STUD5 73 69 82
要求:1,求出并输入每个学生的平均成绩
2,求出并输入每门课的平均成绩
*/
#include "stdafx.h"
int main(int argc,char* argv[])
{
float stud[5][3]={{76,80,90},{90,65,77},{63,55,70},{90,92,97},{73,69,82}};
float num=0;
for(int i=0;i<5;i++)
{
for(int j=0;j<3;j++)
{
num+=stud[i][j];
}
num/=3;
printf("\n第%d个学生的平均成绩:\n",i+1);
printf("%f\n",num);
num=0;
}
for(i=0;i<3;i++)
{
for(int j=0;j<5;j++)
{
num+=stud[i][j];
}
num/=5;
printf("\n第%d科的平均成绩:\n",i+1);
printf("%f\n",num);
num=0;
}
return 0;
}
1,将一个一位数组a[10]中的元素值按逆序重新存放.假定数组中原来元素顺序为:1,3,5,7,9,8,6,4,2,0,按逆序重新存放后元素的值位:0,2,4,6,8,9,7,5,3,1。要求:在程序中将数组初值初始化,输出逆序重新存放后元素的值。
#include"stdio.h"
void main()
{
int i,a[10]={1,2,3,4,5,6,7,8,9,10};
for(i=9;i>=0;i--)
{
printf("%d ",a[i]);
}
}
}
1.
#include<stdio.h>
void main()
{
int a[10],i,m;
for(i=0;i<10;i++)
{canf("%d",&a[i]);}
for(i=0;i<5;i++)
{m=a[i];a[i]=a[9-i];a[9-i]=m;}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}
===============================================================
2.
main()
{
int num1(b[],n);
float aver1(c[],n);
int num2(b[],n);
float aver2(c[],n);
int a[20],i=0,m;
scanf("%d",&m);
while(m!=0)
{a[i]=m;
i++;
scanf("%d",&m);}
i=i-1;/*因为前面的i在变化时多了一个1,在这里要减去1*/
printf("zheng shu ge shu %d\n ",num1(a,i));
printf("average of zheng gu %.2f\n",aver1(a,i));
printf("fu shu ge shu %d\n",num2(a,i));
printf("average of fu shu %.2f",aver2(a,i));
}
int num1(b[],n)
{int i,z=0;
for(i=1;i<n;i++)
{if(b[i]>0)z+=1;}
return(z)
}
float aver1(c[],n)
{int i;
float ave;
for(i=0;i<n;i++)
{if(c[i]>0)ave=ave+c[i],m++;}
ave=ave/m;
return(ave);
}
int num2(b[],n)
{int i,z=0;
for(i=1;i<n;i++)
{if(b[i]<0)z+=1;}
return(z);
}
float aver2(c[],n)
{int i;
float ave;
for(i=0;i<n;i++)
{if(c[i]<0)ave=ave+c[i],m++;}
ave=ave/m;
return(ave);
}
//1、
#include"stdio.h"
int main()
{
int a[10]={1,3,5,7,9,8,6,4,2,0},i,t,j;
for(i=0;i<5;i++)
{
t=a[i];
a[i]=a[9-i];
a[9-i]=t;
}
for(j=0;j<10;j++)
printf("%2d",a[j]);
putchar('\n');
return 0;
}
==================================================
//2、
#include"stdio.h"
int jud_pos(int *a)
{
int n=0,i;
for(i=0;a[i]!=0;i++)
if(a[i]>0)
n++;
return n;
}
int jud_neg(int *b)
{
int m=0,i;
for(i=0;b[i]!=0;i++)
if(b[i]<0)
m++;
return m;
}
float aver_pos(int *c,int s)
{
int i;
float sum=0;
for(i=0;c[i]!=0;i++)
if(c[i]>0)
sum+=c[i];
if(s>0)
return sum/s;
else
return sum;
}
float aver_neg(int *d,int t)
{
int i;
float sum=0;
for(i=0;d[i]!=0;i++)
if(d[i]<0)
sum+=d[i];
if(t>0)
return sum/t;
else
return sum;
}
int main()
{
int a[20],i;
scanf("%d",&a[0]);
for(i=1;a[i-1]!=0;i++)
scanf("%d",&a[i]);
printf("正数的个数: %d\n",jud_pos(a));
printf("正数的平均数: %f\n",aver_pos(a,jud_pos(a)));
printf("负数的个数: %d\n",jud_neg(a));
printf("负数的平均数: %f\n",aver_neg(a,jud_neg(a)));
return 0;
}
===========================================================
//3、
#include"stdio.h"
void b(int *s)
{
int i,j,k,t;
for(i=0;i<3;i++)
{
k=i;
for(j=i+1;j<4;j++)
if(s[j]<s[k])
k=j;
t=s[k];s[k]=s[i];s[i]=t;
}
}
int main()
{
int i,a[4],j;
scanf("%d",&i);
a[0]=i/1000;
a[1]=(i-a[0]*1000)/100;
a[2]=(i-a[0]*1000-a[1]*100)/10;
a[3]=i%10;
b(a);
for(j=0;j<4;j++)
printf("%d",a[j]);
return 0;
}
====================================================
//4、
#include"stdio.h"
int sum1=0,sum2=0;
int main()
{
void a_add(int a[4][4]);
int a[][4]={3,6,4,6,8,3,1,3,4,7,1,2,2,9,5,3};
a_add(a);
printf("主对角线和:%2d\n",sum1);
printf("次对角线和:%2d\n",sum2);
return 0;
}
void a_add(int a[4][4]){
int i,j,k;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(i==j)
sum1+=a[i][j];
else if
(i+j==3)
sum2+=a[i][j];
}
=====================================================
//5、
#include"stdio.h"
int main()
{
int a[5][3]={76,80,90,90,65,77,63,55,70,90,92,97,73,69,82};
float b[5]={0},c[3]={0};
int i,j,k,t;
for(i=0;i<5;i++)
for(j=0;j<3;j++)
b[i]+=a[i][j];
for(k=0;k<3;k++)
for(t=0;t<5;t++)
c[k]+=a[k][t];
printf("每个学生的平均分为:");
for(i=0;i<5;i++)
printf("%2.2f ",b[i]/3);
putchar('\n');
printf("每学科的平均分为:");
for(j=0;j<3;j++)
printf("%2.2f ",c[j]/5);
return 0;
}
===================================================
6、
#include"stdio.h"
int main()
{
char sa[100],sb[100];
void my_strcpy(char *s1,char *s2);
gets(sa);
gets(sb);
my_strcpy(sa,sb);
return 0;
}
void my_strcpy(char *s1,char *s2)
{
char *s=s1,*p;
int i;
for(i=0;;i++)
if(s1[i]=='\0')
{p=&s1[i];break;}
while(*p++=*s2++);
puts(s);
}
main()
{int a[4][4]={ 3,6,4,6,8,3,1,3,4,7,1,2,2,9,5,3};
int i,j,s=0;
for(i=0;i<4;i++)
s=s+a[i][i];
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(i+j==4)
s=s+a[i][j];
printf("%d",s);
}
C语言数组题
1、给整型二维数组 b[3][4]输入12个数据,计算并输出数组中所有正数之和、所有负数之和。2、青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。分析:这道题的核心是排序。将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中...
C语言的数组编程题,求大神解答?
for(i=0; i<k; ++i)if(c[i]==max)printf("%d ",t[i]);} return 0;}
C语言程序设计指针雨数组三道题?
原程序不能实现pt1指向a和b的大者,pt2指向小者的目的,应该把指向int型的指针p改成int型,只需改变相应的交换程序,其它不用变.改正后的完整的C语言程序如下(改动的地方见注释)include<stdio.h> void swap(int *p1,int *p2){ int p;\/\/这里定义int型变量p p=*p1;*p1=*p2;*p2=p;\/\/这里...
C语言 数组 两道题求解答
第一条:include.h头文件:ifndef __INCLUDE_H__define __INCLUDE_H__define MAX_NUM 80 typedef struct { float qizhong;float qimo;float zongpin;}CHENGJI;typedef struct { CHENGJI classmate[MAX_NUM];}TONGXUE;void Count_ZP(&TONGXUE);void printfCJ(&TONGXUE);main.c实现文件:include <...
C语言字符数组一题
语句:char ch[7]={"65ab21"}是定义一个字符数组同时给它赋值。这种用法在C语言中是允许的。C语言给字符数组赋值的方法常用的有三种,见下面讲解。这个赋值语句赋值结果如下:ch[0] = '6'; \/\/ASCII码值为54 ch[1] = '5';ch[2] = 'a';...ch[5] = '1';ch[6] = '\\0';程序运...
学生来看这8道C语言谜题你能答对几个
C语言8个语言谜题答对几个 1、下面的程序并不见得会输出"hello-std-out"你知道为什么吗?参考答案:stdout和stderr是不同设备描述符。stdout是块设备,stderr则不是。对于块设备,只有当下面几种情况下才会被输入:遇到回车; 缓冲区满;flush被调用。而stderr则不会。2、下面的程序看起来是正常的,...
关于C语言的几道习题 急求高手解答!
int arr[N];int i,j,t,f;printf("输入数组:\\n");for(i=0;i<N;i++)scanf("%d",arr+i);for(i=0;i<N-1;i++)for(j=i+1;j<N;j++)if(arr[i]<arr[j]){t=arr[i];arr[i]=arr[j];arr[j]=t;} for(i=0;i<N;i++)printf("%5d",arr[i]);printf("输入要找的...
c语言 设计一个二维数组储存学生的四门课成绩,要求从键盘输入学生学号...
include<iostream> include<cstring> using namespace std;struct date { int year;int moonth;int day;};struct score { float chinese;float macth;float english;float history;};struct student {int shu;char name[20];char sex[20];struct date brithday;struct score fen;}stu[100];void ...
C语言高手 请告诉我几道简单的题! 我想搞明白 谢谢
1 . 首先我们定义的是一个指针数组,pt[3] 它和数组类似,数组名表示的是第一个字符,而指针名则表示第一个指针,所以pt应该是pt[0],而pt[0]对应的是t[0][]在 *(*(pt+l)+2) 中 先看pt+l 对于数组来说,每一行的内存是连续分配的, 所以pt+l就是pt当前这一行的下一行,即t[1][]...
几道C语言小题,,求详解!!!
1.没有答案。标识符由数字、字母、下划线组成。而且不能以数字开头,不能为C语言的关键字,根据以上判据可以判定没有答案。2.选择C。C、D中的减号,应该改为等号吧,应该是打错了。改完之后,ABD都是将a、b的值互换,而C中则是这样的:if(a>b) { c=a; }a=b;b=c;。3.选择D。因为当...
赞萍护肝: 第一题: #include "stdio.h" void main() {int a[10]; int i,max; for(i=0;i<10;++i) scanf("%d,",&a[i]); max=a[0]; for(i=1;i<10;i++) {if(max<a[i]);max=a[i]; } printf("最大值为:%d",max); } 第二题: #include "stdio.h" void main() { int i,a[10]; ...
西夏区19216786025: C语言一道简单的数组编程题 - ?
赞萍护肝: //#include "stdafx.h"//vc++6.0加上这一行.#include "stdio.h" void main(void){ int a[1000],i,k; for(k=i=0;i if((a[i]=i+1)%77 && (a[i]%7==0 || a[i]%11==0)) printf(++k%5 ? "%4d" : "%4d\n",a[i]); } if(k%5) printf("\n"); }
西夏区19216786025: 几道c语言二维数组题目 - ?
赞萍护肝: 1. for (int i = 0 ; i < m ; ++ i) { for (int j = 0 ; j < n ; ++ j) { if (0==ar[i][j]) { ar[i][0] == 0 ; a[0][j] = 0 ; } } } for (int i = 0 ; i < m ; ++ i) { if (0==a[i][0]) { for (int j = 0 ; j < n ; ++ j ) a[i][j] = 0 ; } } for (int j = 0 ; j < n ; ++ j ) { if (0==a[0][j]) { for (int i = 0 ; i < m ; ++ i) a[i][j] = 0 ; ...
西夏区19216786025: C语言数组编程题?
赞萍护肝: main() {int i,j; for(i=1;i<=100;i++) {for(j=2;j<i;j++)if(i%j==0)break;if(j==i)printf("%d",j) }}
西夏区19216786025: C语言数组编程题 - ?
赞萍护肝: #include <stdio.h> #include <string.h> void charNo(char *ch) {int a,b,c,d;int temp;int i;a=b=c=d=0;for(i=0;i<strlen(ch);i++){temp=(int)ch[i];if((temp>=65&&temp<=90)||(temp>=97&&temp<=122)) a++;else if(temp>=48&&temp<=57) b++;else ...
西夏区19216786025: c语言数组的一道题 - ?
赞萍护肝: #include void main (){ char p[40],q[20]; int i=0,j=0; printf("please input the first string(<20 chars):"); scanf("%s",p); printf("please inp...
西夏区19216786025: 找一些C语言的关于数组的程序题 - ?
赞萍护肝: 14下面程序可求出矩阵 a 的两条对角线上的元素之和,请填空 j=2 j>=015. 下面程序段将输出 computer,请填空.iif(i16. 下面程序的功能是在三个字符串中找出最小的.请填空.strcmp(str[0],str[1])s17. 在以下程序,数组 a 中存放一个递增数列.输入一个整数 x,并将它插入到数组 a 中,使该数组仍为一个递增数列.请选择正确的答案.d (因为要插入另外一个x 所以必须要11) a(跳出循环a) d(向前遍历) d(插入x) 如有不明白 可联系我!
西夏区19216786025: c语言的数组题?
赞萍护肝: #include<stdio.h> #define MAX 8 typedef struct tagArray { int array[MAX]; int iLen; }ARRAY,*LPARRAY; void SortArray(int * const array,const int iLen) { int i=0,j=0; if (!array) return; for (i=iLen-2;i>=0;--i) { for (j=iLen-1;j>=iLen-1-i;--j) if (array[j]<array[j-1...
西夏区19216786025: 求帮忙,一道C语言一维数组题. - ?
赞萍护肝: #include "stdio.h" void main() { int A[]={16,5,8,12,1,17,3,6,10,2}; int i; int x,y; int len; len=sizeof(A)/sizeof(int); x=0;y=len-1; while(x<y) { while(A[x] & 1) x++; while(!(A[y] & 1)) y--; if(x<y) { int temp=A[x]; A[x]=A[y]; A[y]=temp; } } for(i=0;i<len;i++) printf("%d ",A[i]); printf("\n"); }
西夏区19216786025: c语言数组基础题! - ?
赞萍护肝: 大家一起交流 第一题 int fun(n){ if(n==1){return(1); } else if(n==2){ return(1);} else return(fun(n-1)+fun(n-2)); } main() { int i; for(i=1;i<=20;i++) { printf("%d",fun(20)); if(i%5==0)printf("\n"); } } 第二题 main() { int a[40],i; int b[10]; printf("vote 1,2,3,4...