C语言实验报告.docx
《C语言实验报告.docx》由会员分享,可在线阅读,更多相关《C语言实验报告.docx(23页珍藏版)》请在冰点文库上搜索。
C语言实验报告
实验一:
11.输入4个整数,要求按由小到大的顺序输出,采用冒泡法。
#include
intmain()
{inti,j,a[4],t;
for(i=0;i<4;i++)
scanf("%d",&a[i]);
for(j=1;j<4;j++)
for(i=0;i<=3-j;i++)
if(a[i]>a[i+1])
{t=a[i+1];a[i+1]=a[i];a[i]=t;}
for(i=0;i<4;i++)
printf("%5d",a[i]);
}
运行结果:
实验二:
输入4个整数,要求按由小到大的顺序输出。
采用函数调用。
#include
{voidsort(intarray[],intn);
inta[4],i;
printf("enterarray:
\n");
for(i=0;i<4;i++)
scanf("%d",&a[i]);
sort(a,4);
printf("Thesortedarray:
\n");
for(i=0;i<4;i++)
printf("%d",a[i]);
printf("\n");
return0;
}
voidsort(intarray[],intn)
{inti,j,t;
for(j=0;jfor(i=0;iif(array[i]>array[i+1])
{t=array[i];array[i]=array[i+1];array[i+1]=t;}
运行结果:
实验三:
输入两个正整数m和n,求其最大公约数和最小公倍数。
#include
intmain()
{intp,r,n,m,temp;
printf("请输入两个正整数n,m:
");
scanf("%d,%d,",&n,&m);
if(n{
temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!
=0)
{
r=n%m;
n=m;
m=r;
}
printf("它们的最大公约数为:
%d\n",n);
printf("它们的最小公倍数为:
%d\n",p/n);
return0;
}
运算结果:
实验四
写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用者两个函数,并输出结果。
maxyueshu(m,n)
intm,n;
{inti=1,t;
for(;i<=m&&i<=n;i++)
{if(m%i==0&&n%i==0)
t=i;
}
return(t);
}
minbeishu(m,n)
intm,n;
{intj;
if(m>=n)j=m;
elsej=n;
for(;!
(j%m==0&&j%n==0);j++);
returnj;
}
main()
{inta,b,max,min;
printf("entertwonumberis:
");
scanf("%d,%d",&a,&b);
max=maxyueshu(a,b);
min=minbeishu(a,b);
printf("max=%d,min=%d\n",max,min);
}
运行结果:
实验五:
3用函数实现m*n的整型矩阵对角线元素之和,并用函数调用,用地址传递。
#include
intmain()
{
inti=0,j=0,a[3][3],s1,s2;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
s1=a[0][0]+a[1][1]+a[2][2];
s2=a[0][2]+a[1][1]+a[2][0];
printf("s1=%d,s2=%d\n",s1,s2);
}
运行结果:
实验六:
13.编一个程序,将两个字符串连接起来,不要用strcat函数。
#include
intmain()
{voidconcatenate(charstring1[],charstring2[],charstring[]);
chars1[100],s2[100],s[100];
printf("inputstring1:
");
scanf("%s",s1);
printf("inputstring2:
");
scanf("%s",s2);
concatenate(s1,s2,s);
printf("\nThenewstringis%s\n",s);
return0;
}
voidconcatenate(charstring1[],charstring2[],charstring[])
{inti,j;
for(i=0;string1[i]!
='\0';i++)
string[i]=string1[i];
for(j=0;string2[j]!
='\0';j++)
string[i+j]=string2[j];
string[i+j]='\0';
}
运行结果:
实验七:
求方程a*x*x+b*x+c=0的根,用3个函数分别求当:
b*b-4*a*c大于0、等于0、和小于0时的根并输出结果。
从主函数输入a,b,c的值。
#include
#include
floatx1,x2,disc,p,q;
intmain()
{voidgreater_than_zero(float,float);
voidequal_to_zero(float,float);
voidsmaller_than_zero(float,float);
floata,b,c;
printf("inputa,b,c:
");
scanf("%f,%f,%f",&a,&b,&c);
printf("equation:
%5.2f*x*x+%5.2f*x+%5.2f=0\n",a,b,c);
disc=b*b-4*a*c;
printf("root:
\n");
if(disc>0)
{greater_than_zero(a,b);
printf("x1=%f\t\tx2=%f\n",x1,x2);
}
elseif(disc==0)
{equal_to_zero(a,b);
printf("x1=%f\t\tx2=%f\n",x1,x2);
}
else
{smaller_than_zero(a,b);
printf("x1=%f+%fi\tx2=%f-%fi\n",p,q,p,q);
}
}
voidgreater_than_zero(floata,floatb)
{x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
}
voidequal_to_zero(floata,floatb)
{x1=x2=(-b)/(2*a);
}
voidsmaller_than_zero(floata,floatb)
{p=-b/(2*a);
q=sqrt(-disc)/(2*a);
}
运行结果:
实验八:
14.输入10个学生5门课的成绩,分别用函数实现下列功能:
<1>计算每个学生的平均分;
<2>计算每门课的平均分;
<3>找出所有50个分数中最高的分数所对应的学生和课程;
<4>计算平均分方差:
#include
#defineN10
#defineM5
floatscore[N][M];
floata_stu[N],a_cour[M];
intr,c;
intmain()
{inti,j;
floath;
floats_var(void);
floathighest();
voidinput_stu(void);
voidaver_stu(void);
voidaver_cour(void);
input_stu();
aver_stu();
aver_cour();
printf("\nNO.cour1cour2cour3cour4cour5aver\n");
for(i=0;i{printf("\nNO%2d",i+1);
for(j=0;jprintf("%8.2f",score[i][j]);
printf("%8.2f\n",a_stu[i]);
}
printf("\nawerage:
");
for(j=0;jprintf("%8.2f",a_cour[j]);
printf("\n");
h=highest();
printf("highest:
%7.2fNO.%2dcourse%2d\n",h,r,c);
printf("variance%8.2f\n",s_var());
return0;
}
voidinput_stu(void)
{inti,j;
for(i=0;i{printf("\ninputscoreofstudent%2d:
\n",i+1);
for(j=0;jscanf("%f",&score[i][j]);
}
}
voidaver_stu(void)
{inti,j;
floats;
for(i=0;i{for(j=0,s=0;js+=score[i][j];
a_stu[i]=s/5;
}
}
voidaver_cour(void)
{inti,j;
floats;
for(j=0;j{s=0;
for(i=0;is+=score[i][j];
a_cour[j]=s/(float)N;
}
}
floathighest()
{floathigh;
inti,j;
high=score[0][0];
for(i=0;ifor(j=0;jif(score[i][j]>high)
{high=score[i][j];
r=i+1;
c=j+1;
}
return(high);
}
floats_var(void)
{inti;
floatsumx,sumxn;
sumx=0.0;
sumxn=0.0;
for(i=0;i{sumx+=a_stu[i]*a_stu[i];
sumxn+=a_stu[i];
}
return(sumx/N-(sumxn/N)*(sumxn/N));
}
运行结果:
以上是输入10个学生的5门课的成绩,下面是输出结果:
实验九:
15写几个函数:
<1>输入10个职工的姓名和职工号;
<2>按职工号由小到大顺序排序,姓名顺序也随之调整;
#include
#include
#defineN10
intmain()
{voidinput(int[],charname[][8]);
voidsort(int[],charname[][8]);
intnum[N],number,flag=1,c;
charname[N][8];
input(num,name);
sort(num,name);
while(flag==1)
{printf("\ninputnumbertolookfor:
");
scanf("%d",&number);
printf("continuetonot(Y/N)?
");
getchar();
c=getchar();
if(c=='N'||c=='n')
flag=0;
}
return0;
}
voidinput(intnum[],charname[N][8])
{inti;
for(i=0;i{printf("inputNO.:
");
scanf("%d",&num[i]);
printf("inputname:
");
getchar();
gets(name[i]);
}
}
voidsort(intnum[],charname[N][8])
{inti,j,min,templ;
chartemp2[8];
for(i=0;i{min=i;
for(j=i;jif(num[min]>num[j])min=j;
templ=num[i];
strcpy(temp2,name[i]);
num[i]=num[min];
strcpy(name[i],name[min]);
num[min]=templ;
strcpy(name[min],temp2);
}
printf("\nresult:
\n");
for(i=0;iprintf("\n%5d%10s",num[i],name[i]);
}
运行结果:
实验十:
16.写一个函数,输入一个十六进制数,输出相应的十进制数。
#include
#defineMAX1000
main()
{inthtoi(chars[]);
intc,i,flag,flag1;
chart[MAX];
i=0;
flag=0;
flag1=1;
printf("inputaHEXnumber:
");
while((c=getchar())!
='\0'&&i{if(c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')
{flag=1;
t[i++]=c;
}
elseif(flag)
{t[i]='\0';
printf("decimalnumber%d\n",htoi(t));
printf("continueornot?
");
c=getchar();
if(c=='N'||c=='n')
flag1=0;
else
{flag=0;
i=0;
printf("\ninputaHEXnumber:
");
}
}
}
}
inthtoi(chars[])
{inti,n;
n=0;
for(i=0;s[i]!
='\0';i++)
{if(s[i]>='0'&&s[i]<='9')
n=n*16+s[i]-'0';
if(s[i]>='a'&&s[i]<='f')
n=n*16+s[i]-'a'+10;
if(s[i]>='A'&&s[i]<='F')
n=n*16+s[i]-'A'+10;
}
return(n);
}
运行结果:
实验十一:
3.输入10个整数,将其中最小的数与第1个数对换,把最大数与最后一个数对换。
写成三个函数;输入10个数;进行处理;输出10个数。
f(x,n)
intx[],n;
{int*p0,*p1,i,j,t,y;
i=j=x[0];p0=p1=x;
for(y=0;y{if(x[y]>i)
{i=x[y];p0=&x[y];}
elseif(x[y]{j=x[y];p1=&x[y];}}
t=*p0;*p0=x[n-1];x[n-1]=t;
t=*p1;*p1=x[0];x[0]=t;
return;
}
main()
{inta[10],u,*r;
for(u=0;u<10;u++)
scanf("%d",&a[u]);
f(a,10);
for(u=0,r=a;u<10;u++,r++)
printf("%d",a[u]);
printf("\n");
}
运行结果:
实验十二:
16、写一个函数,输入一个十六进制数,输出相应的十进制数。
#include
#defineMAX1000
intmain()
{inthtoi(chars[]);
intc,i,flag,flag1;
chart[MAX];
i=0;flag=0;flag1=1;
printf("inputaHEXnumber;");
while((c=getchar())!
='\0'&&i{if(c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')
{flag=1;t[i++]=c;}
elseif(flag)
{t[i]='\0';
printf("decimalnumber%d\n",htoi(t));
printf("continueornot?
");
c=getchar();
if(c=='N'||c=='n')
flag1=0;
else
{flag=0;i=0;
printf("\ninputaHEXnumber:
");
}
}
}
return0;
}
inthtoi(chars[])
{inti,n;n=0;
for(i=0;s[i]!
='\0';i++)
{if(s[i]>='0'&&s[i]<='9')
n=n*16+s[i]-'0';
if(s[i]>='a'&&s[i]<='f')
n=n*16+s[i]-'a'+10;
if(s[i]>='A'&&s[i]<='F')
n=n*16+s[i]-'A'+10;
}
return(n);
}
运行结果:
实验十三:
6.写出一函数,求一字符串的长度.在main函数中输入字符串,并输出其长度。
#include
intmain()
{intlength(char*p);
intlen;
charstr[20];
printf("inputstring;");
scanf("%s",str);
len=length(str);
printf("Thelengthofstringis%d.\n",len);
return0;
}
intlength(char*p)
{intn;
n=0;
while(*p!
='\0')
{n++;p++;}
return(n);
}
运行结果;
实验十四:
8.输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符各有多少。
#include
intmain()
{intupper=0,lower=0,digit=0,space=0,other=0,i=0;
char*p,s[20];
printf("inputstring:
");
while((s[i]=getchar())!
='\n')i++;
p=&s[0];
while(*p!
='\n')
{if(('A'<=*p)&&(*p<='Z'))
++upper;
elseif(('a'<=*p)&&(*p<='z'))
++lower;
elseif(*p=='')
++space;
elseif((*p<='9')&&(*p>='0'))
++digit;
else
++other;p++;
}
printf("uppercase:
%dlowercase:
%d",upper,lower);
printf("space:
%ddigit:
%dother;%d\n",space,digit,other);
return0;
}
运行结果: