C2实验报告 2.docx
《C2实验报告 2.docx》由会员分享,可在线阅读,更多相关《C2实验报告 2.docx(50页珍藏版)》请在冰点文库上搜索。
C2实验报告2
《C程序设计2》实验报告格式
实验名称
1、实验目的(自己组织)
2、实验内容
(1)
(2)
(3)
3、实验报告要求
(1)程序(可写在实验内容处);
(2)程序运行结果及分析;
(3)实验总结;
(4)学期结束,将所有实验内容完善后,以文件形式提交(文件名格式:
学号_姓名.RAR)。
《C程序设计2》实验内容
实验一:
函数
1、定义函数返回两个数中的最大数,在主函数中通过调用该函数求三个数中较大的数并输出。
#include
intmain()
{
floatf(floatx,floaty);
floata,b,c,max;
printf("putthreedigits:
");
scanf("%f%f%f",&a,&b,&c);
max=f(a,b);
max=f(c,max);
printf("%f%f%fmax=%f",a,b,c,max);
getch();
}
floatf(floatx,floaty)
{
floatm;
m=x;
if(xreturnm;
}
分析:
两次调用函数就可以了。
。
。
2、编写一个判断一个整数是否为素数的函数,并求出在2000以内的所有素数。
#include
intmain()
{
intf(intx);
inti,j=0;
for(i=2;i<2000;i++)
{
if(f(i)==1)
{
printf("%d",i);
j++;
if(j%5==0)printf("\n");
}
}
return0;
}
intf(intx)
{
intm;
for(m=2;mif(x%m==0)break;
if(m>=x)return1;
elsereturn0;
}
3、求方程ax2+bx+c=0的根,用三个函数分别求b2-4ac大于0、等于0和小于0的根,并输出结果。
从主函数输入a、b、c的值。
#include
#include
#include
intmain()
{
voidjisuan1(floatm,floata,floatb,floatc);
voidjisuan2(floatm,floata,floatb,floatc);
voidjisuan3(floatm,floata,floatb,floatc);
floata,b,c,m;
printf("请输入一元二次方程组的a,b,c:
");
scanf("%f%f%f",&a,&b,&c);
printf("\n");
m=b*b-4*a*c;
if(a==0)
printf("不是一元二次方程组!
!
!
");
elseif(m>0)jisuan1(m,a,b,c);
elseif(m==0)jisuan2(m,a,b,c);
elseif(m<0)jisuan3(m,a,b,c);
getch();
}
voidjisuan1(floatm,floata,floatb,floatc)
{
floatm1,m2,x1,x2;
m1=-b/(2*a);
m2=sqrt(m)/(2*a);
x1=m1+m2;
x2=m1-m2;
printf("该方程的根为:
\n");
printf("x1=%.2fx2=%.2f",x1,x2);
}
voidjisuan2(floatm,floata,floatb,floatc)
{
floatm1,x1,x2;
m1=-b/(2*a);
printf("该方程的根为:
\n");
printf("x1=x2=%.2f",m1);
}
voidjisuan3(floatm,floata,floatb,floatc)
{
floatm1,m2,x1,x2;
m1=-b/(2*a);
m2=sqrt(-m)/(2*a);
printf("该方程的根为:
\n");
printf("x1=%.2f+%.2fix2=%.2f-%.2fi",m1,m2,m1,m2);
}
4、定义一个函数replace(),其中包含三个形参:
两个是字符型,一个是字符串型。
该函数返回一个整数。
函数的功能是在字符串中查找第一个字符,如果找到,用第二个字符替换该字符,并将替换的次数作为返回值。
编写主函数调用该函数。
#include
#include
intmain()
{
intreplace(char*s,charc1,charc2);
chars[100],ch1,ch2;
intcount;
printf("请输入一个字符串:
\n");
gets(s);
printf("\n请输入两个字符:
\n");
scanf("%c%c",&ch1,&ch2);
count=replace(s,ch1,ch2);
printf("变化后的字符串为:
");
puts(s);
printf("\n字符变化的次数为:
%d",count);
getch();
}
intreplace(char*s,charc1,charc2)
{
inti,count=0;
for(i=0;s[i]!
='\0';i++)
{
if(s[i]==c1)
{
s[i]=c2;
count++;
}
}
returncount;
}
实验二:
数组
(一)
1、由键盘对10个数组元素初始化,求它们的平均值并输出。
#include
intmain()
{
floata[10],s=0;
inti;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
for(i=0;i<10;i++)
{
printf("%.2f",a[i]);
s+=a[i];
}
printf("\ntheaverageis%.2f",1.0*s/10);
getch();
}
2、输入一个十进制整数,输出与其相等的二进制形式。
将二进制保存在一个数组中,然后按相反的顺序输出。
#include
intmain()
{
intx,a[100],i,j;
printf("putadigit:
");
scanf("%d",&x);
for(i=0;x!
=0;i++)
{
a[i]=x%2;
x=x/2;
}
i--;
for(j=0;j<=i;j++)
printf("%d",a[j]);
getch();
}
2、编程对10个数组元素的排序。
#include
intmain()
{
floata[10],j,t,i,m;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
for(i=0;i<10;i++)
printf("%.2f",a[i]);
printf("\n");
for(i=0;i<9;i++)
{
m=i;
for(j=m+1;j<10;j++)
if(a[m]>a[j])m=j;
t=a[i];a[i]=a[m];a[m]=t;
}
for(i=0;i<10;i++)
if(i!
=9)
printf("%.2f<=",a[i]);
else
printf("%.2f",a[i]);
getch();
}
实验三:
数组
(二)
1、由键盘对4×4的二维数组初始化,计算其两条对角线元素之和并输出。
#include
#include
intmain()
{
inta[4][4],i,j,s1,s2;
printf("put16number:
");
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%d",a[i][j]);
printf("\n");
}
s1=s2=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
if(i==j)s1+=a[i][j];
elseif(i+j==3)s2+=a[i][j];
printf("s1=%ds2=%d",s1,s2);
getch();
}
2、通过二维数组实现杨辉三角的前10行并输出。
杨辉三角形式请参考教材P153。
#include
intmain()
{
inta[10][10],i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i][j]=1;
for(i=2;i<10;i++)
for(j=1;j
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%3d",a[i][j]);
printf("\n");
}
getch();
}
3、将M×N的矩阵转置成N×M的矩阵并输出。
#include
#include
intmain()
{
inta[100][100],i,j,m,n;
printf("输入m,n:
");
scanf("%d%d",&m,&n);
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
printf("bofore:
\n");
for(i=0;i{
for(j=0;jprintf("%d",a[i][j]);
printf("\n");
}
printf("after:
\n");
for(i=0;i{
for(j=0;jprintf("%d",a[j][i]);
printf("\n");
}
getch();
}
实验四:
指针
(一)
注:
实验四~实验六的所有程序都使用指针方法操作
1、编写求字符串串长的函数(strlen),并在主函数中调用。
#include
#include
intmain()
{
intstrlen(char*s);
chars[100];
printf("输入一个字符串:
\n");
gets(s);
printf("这个字符串的长度为:
%d",strlen(s));
getch();
}
intstrlen(char*s)
{
inti;
for(i=0;s[i]!
='\0';i++);
returni;
}
2、编写连接两字符串的函数(strcat),并在主函数中调用。
#include
#include
main()
{
voidstrcat(char*s1,char*s2);
charsm1[100],sm2[100];
printf("请输入一个字符串:
\n");
gets(sm1);
printf("请输入一个字符串:
\n");
gets(sm2);
strcat(sm1,sm2);
printf("处理后的字符串为:
%s",sm1);
getch();
}
voidstrcat(char*s1,char*s2)
{
inti,j=0;
for(i=0;s1[i]!
='\0';i++);
while(s2[j]!
='\0')
{
s1[i]=s2[j];
i++;
j++;
}
}
3、sort()对一维整数数组的内容进行排序;编写函数in_data()读入一组整数;编写函数out_data输出整数数组的内容;在主函数中调用这些函数,输入一组整数,输出排序前和排序后的情况。
#include
#include
ints[100];
intn;
main()
{
voidint_data();//输入
voidout_data();//输出
voidsort(int*s);//排序
int_data();
sort(s);
out_data();
getch();
}
voidint_data()
{
inti;
printf("输入一个数:
");
scanf("%d",&n);
printf("\n输入%d个数:
",n);
for(i=0;iscanf("%d",&s[i]);
}
voidout_data()
{
inti;
for(i=0;iprintf("%d",s[i]);
}
voidsort(int*s)
{
inti,j,t;
for(i=1;ifor(j=0;jif(s[j]>s[j+1])
{
t=s[j];
s[j]=s[j+1];
s[j+1]=t;
}
}
实验五:
指针
(二)
1、编写函数 reverse(*s),实现对字符串S的倒排,编写主函数对其进行调用。
#include
#include
#include
intmain()
{
voidreverse(char*s);
charsh[100];
printf("输入一个字符串:
");
gets(sh);
reverse(sh);
printf("输出一个字符串:
");
puts(sh);
getch();
}
voidreverse(char*s)
{
inti,j;
charch;
j=strlen(s);
for(i=0,j=j-1;i{
ch=s[i];
s[i]=s[j];
s[j]=ch;
}
}
2、编写函数strcmp(*s1,*s2),实现对两字符串的比较,编写主函数对其进行调用。
#include
#include
#include
intmain()
{
intstrcmp(char*s1,char*s2);
charsm1[100],sm2[100];
intcount;
printf("输入一个字符串:
");
gets(sm1);
printf("输入一个字符串:
");
gets(sm2);
count=strcmp(sm1,sm2);
if(count==1)printf("sm1>sm2");
elseif(count==0)printf("sm1=sm2");
elseprintf("sm1getch();
}
intstrcmp(char*s1,char*s2)
{
intl1,l2,min,i;
l1=strlen(s1);
l2=strlen(s2);
min=l1>l2?
l2:
l1;
for(i=0;iif(s1[i]==s2[i])continue;
elsebreak;
if(min-1==i)
{
if(l1>l2)return1;
elseif(l1==l2)return0;
elsereturn-1;
}
else
{
if(s1[i]>s2[i])return1;
elseif(s1[i]==s2[i])return0;
elsereturn-1;
}
}
3、有一字符串,包含n个字符,写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
#include
#include
#include
intmain()
{
voidcopy(char*s,intm);
intn,m,i;
chars[100];
printf("请输入n的值:
");
scanf("%d",&n);
printf("请输入一个字符串:
");
for(i=0;iscanf("%c",&s[i]);
s[i]='\0';
printf("请输入M的值:
");
scanf("%d",&m);
copy(s,m);
printf("%s",s);
getch();
}
voidcopy(char*s,intm)
{
strcpy(s,s+m);
}
实验六:
指针(三)
1、有一个班4个学生5门课程。
(1)求第一门课程的平均分;
(2)找出有2门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;(3)找出平均成绩在90分以上的学生。
分别编3个函数实现以上要求。
#include
voidaverage(floatstu[4][5],floatav[4])
{
inti,j;
for(i=0;i<4;i++)
av[i]=0;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
av[i]+=stu[i][j];
av[i]=1.0*av[i]/5;
}
}
voidfirstsubject(floatstu[4][5])
{
floats=0;
inti;
for(i=0;i<4;i++)
s+=stu[i][0];
printf("\n这些学生第一门课的平均分是:
%.2f\n",1.0*s/4);
}
voidsearch(floatstu[4][5],longnum[4])
{
intcount[4],i,j;
floatav[4];
average(stu,av);
for(i=0;i<4;i++)
count[i]=0;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
if(stu[i][j]<60)count[i]++;
printf("输出两门课以上不及格学生的信息:
\n");
for(i=0;i<4;i++)
{
if(count[i]>2)
{
printf("学号5门课的成绩平均成绩\n");
printf("%ld",num[i]);
for(j=0;j<5;j++)
{
printf("%.2f",stu[i][j]);
}
printf("%.2f\n",av[i]);
}
}
}
voidzhaochu(floatstu[4][5],longnum[4])
{
floatav[4];
inti;
average(stu,av);
printf("平均成绩在90以上的学生信息:
\n");
for(i=0;i<4;i++)
{
if(av[i]>=90)
{
printf("学号:
%ld\n",num[i]);
printf("平均成绩:
%.2f\n",av[i]);
}
}
}
main()
{
floatstu[4][5];
longnum[4];
inti,j;
printf("输入4位学生的信息:
\n");
for(i=0;i<4;i++)
{
printf("输入第%d位学生的信息:
\n",i+1);
printf("学号:
");
scanf("%ld",&num[i]);
printf("\n");
for(j=0;j<5;j++)
{
printf("输入该学生第%d门课的成绩:
",j+1);
scanf("%f",&stu[i][j]);
}
}
firstsubject(stu);
search(stu,num);
zhaochu(stu,num);
}
2、编写一个程序,输入月份,输出该月的英文月名。
例如,输入“3”,则输出“March”,要求用指针数组实现。
#include
voidmain()
{
char*month[]=
{
"January",
"Febuary",
"March",
"April",
"May",
"June",
"July",
"August"
"September",
"Octomber",
"December",
"November"
};
intx;
printf("请用数字输入月份:
");
scanf("%d",&x);
printf("%s\n",month[x-1]);
}
实验七:
结构体
(一)
1、用结构体表示日期,编写程序计算伦敦奥运会的倒计时的天数并输出(2012年8月15日)。
#include
struct
{
intyear;
intmonth;
intday;
}date;
intbanduan(intyear)
{
return((year%4==0&&year%100!
=0)||(year%400==0));
}
main()
{
inti,j,s=0;
inttap[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31