初学问几道C语言数组的练习题

2025-04-09 03:12:43
推荐回答(3个)
回答1:

/*1,将一个一位数组a[10]中的元素值按逆序重新存放.假定数组中原来元素顺序为:1,3,5,7,9,8,6,4,2,0,按逆序重新存放后元素的值位:0,2,4,6,8,9,7,5,3,1。要求:在程序中将数组初值初始化,输出逆序重新存放后元素的值。*/
#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 {
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 {
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 {
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 {
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 for(int j=i+1;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;
}

回答2:

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]);
}
}
}

回答3:

1.
#include
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{if(b[i]>0)z+=1;}
return(z)
}

float aver1(c[],n)
{int i;
float ave;
for(i=0;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{if(b[i]<0)z+=1;}
return(z);
}

float aver2(c[],n)
{int i;
float ave;
for(i=0;i{if(c[i]<0)ave=ave+c[i],m++;}
ave=ave/m;
return(ave);
}