C语言实验报告.docx
- 文档编号:23068649
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:27
- 大小:127.59KB
C语言实验报告.docx
《C语言实验报告.docx》由会员分享,可在线阅读,更多相关《C语言实验报告.docx(27页珍藏版)》请在冰豆网上搜索。
C语言实验报告
实习主题
实验题目
C语言程序设计
实验时间
2013学年2学期1周(2013年2月25日—3月2日)
学生姓名
张永聪
学号
2012211156
班级
0311202
实验地点
经济管理学院电子实验室
设备号
34
指导教师
刘友军
C语言实验报告
1.编写一个函数pi,其功能是根据以下近似公式求π值:
(π*π)/6=1+1/(2*2)+1/(3*3)+…+1/(n*n)。
并写一个主函数,调用该函数计算π的值,n在主函数中从键盘输入。
要求程序存入test11.c。
设计思路:
主要考察函数的调运,以及如何定义函数,函数的运行,此题应该使用一个循环。
调试结果:
#include
#include
main()
{
intm=1,n,s;
floatp=0,t;
scanf("%d",&n);
while(m<=n)
{
s=1/(m*m);
p=p+s;
m++;
}
t=sqrt(p*6);
printf("t=%f",t);
}
运行结果:
2.下列程序是将一个数组中的值按逆序重新存放并输出。
请输入并完善程序。
要求程序存入test12.c。
#include
voidmain()
{intarr[10],i,j,temp;
printf(“Inputvalueofarray:
\n”);
for(i=0;i<10;i++)
scanf(“%d”,&arr[i]);
for(i=0,j=9;i<=j;i++,j--)
temp=arr[i],arr[i]=arr[j],arr[j]=temp;
for(i=0;i<10;i++)
printf(“%4d”,arr[i]);
}
设计思路:
数组的考察,首先定义一个数组,FOR循环的使用,数组的转换。
运行结果:
3.在下列程序中,函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符ASCII码差值,当s 请输入程序并改正程序中带*的行中的错误,使它能够正确的输出结果。 要求程序存入test13.c。 #include *intmy_cmp(char*s,char*t) {while(*s==*t) *{if(*s++==0) return(0); ++s,++t; } *return(*s-*t); } voidmain() {char*s1,*s2; *gets(s1); gets(s2); if(my_cmp(s1,s2)==0) printf(“EQ”); elseif(my_cmp(s1,s2)>0) printf(“s1>s2”); elseprintf(“s2>s1”); } 设计思路: 函数的调用,以及while、if语句的使用,如何输入一个字符串,指针的运用。 运行结果: 4.编写一个程序用来统计学生成绩。 其功能包括输入学生姓名和成绩,按成绩从高到低排列打印输出,对前80%的学生定为合格(pass),后20%的学生定为不合格(fail)。 要求程序存入test14.c。 设计思路: 调试结果: #include"stdio.h" #include"malloc.h" structstudent { charname[20]; floatscore; structstudent*next; }; intn; structstudent*creat(void) { structstudent*head,*p1,*p2; n=0; head=p1=p2=(structstudent*)malloc(sizeof(structstudent)); printf("请输入学生姓名: \n"); scanf("%s",p1->name); printf("请输入学生成绩: (成绩为零为结束)\n"); scanf("%f",&p1->score); while(p1->score! =0) { n++; if(n! =1)p2->next=p1; p2=p1; p1=(structstudent*)malloc(sizeof(structstudent)); printf("请输入学生姓名: \n"); scanf("%s",p1->name); printf("请输入学生成绩: \n"); scanf("%f",&p1->score); } p2->next=NULL; returnhead; } structstudent*sort(structstudent*head) { structstudent*p1,*p2,*p; inti,j,k; k=n; for(j=0;j for(i=0,p=p1=head,p2=head->next;i =NULL;i++,p1=p->next,p2=p1->next) {if(p1->score {if(p==head&&i==0) { p1->next=p2->next; p2->next=p1; head=p2; p=p2; } else { p1->next=p2->next; p2->next=p1; p->next=p2; p=p2; } } elsep=p1; } return(head); } voidprint(structstudent*head) { intk,i=1; k=n; k=k*0.8; while(head! =NULL) { if(i<=k)printf("%s,%f合格(pass)\n",head->name,head->score); elseprintf("%s,%f不合格(fail)\n",head->name,head->score); head=head->next; i++; } } voidmain() { structstudent*p; p=sort(creat()); print(p); } 运行结果: Test2 1.编写一个程序计算下列不等式: 1+1/2+1/3++1/n>limit所需级数的项数。 其中limit是提出的要满足的条件,而所求的是项数n。 (例如,当输入limit的值为5时,n的值为83),要求程序存入test21.c。 设计思路: 调试结果: #include"stdio.h" voidmain() { intlimit; floata=0,n,i; printf("请输入limit的值\n"); scanf("%d",&limit); for(i=1;;i++) { a=a+1/i; n=i; if(a>limit)break; } printf("n=%f\n",n); } 设计思路: 循环的使用,scanf函数的运用,for语句的运用。 运行结果: 2.下列程序是一个二维数组行和列的元素互换,存到另一个二维数组中。 请输入并完善程序。 要求程序存入test22.c。 #include voidmain() {inti,j,arr1[2][3]={{2,4,6},{1,3,5}},arr2[3][2]; printf(“Arrayarr1: \n”); for(i=0;i<2;i++) {for(j=0;j<3;j++) {printf(“%5d”,arr1[i][j]); arr2[j][i]=arr1[i][j]; } printf(“\n”); } printf(“Arrayarr2: \n”); for(i=0;i<3;i++) {for(j=0;j<2;j++) printf(“%5d”,arr2[i][j]); printf(“\n”); } } 设计思路: 数组元素的转换,for语句的运用,函数的调运,以及对循环的使用。 运行结果: 3.下列程序的功能是输入一个字符串并将其中从左到右第一个最大的字符与最后一个字符交换。 如: “imaastudent123”,交换后为“imaast3dent12u”。 请输入并改正程序中带*的行中的错误,使它能够正确的输出结果。 要求程序存入test23.c。 #include voidmain() {chars[80],max;inti,k; *gets(s); max=s[0]; k=0; *for(i=0;s[i]! =’\0’;i++) *if(s[i]>s[0]) max=s[i],k=i; if(k! =i-1) *s[k]=s[i-1]; s[i-1]=max; puts(s); } 设计思路: 字符串的输入和输出,循环的使用,数组的使用。 运行结果: 4.编程实现: 找出100以内(含100)满足I,I+4,I+10都是素数的整数I(I+10也在100以内)的个数cnt、每个满足条件的I值以及这些I之和sum。 设计思路: 调试结果: #include #include voidmain() { inti,sum=0,j,cnt=0; for(i=3;i<=90;i++) { for(j=2;j<=i;j++) if(i%j==0||(i+4)%j==0||(i+10)%j==0) break; if(i==j){ sum=sum+i; cnt++; printf("i=%d\n",i); } }printf("cnt=%d\nsum=%d\n",cnt,sum); } 运行结果: Test3综合练习 1.编写程序,实现输入的时间屏幕显示一秒后的时间。 显示格式为HH: MM: SS。 程序需要处理以下三种特殊情况: (1)若秒数加1后为60,则秒数恢复到0,分钟数增加1; (2)若分钟数加1后为60,则分钟数恢复到0,小时数增加1; (3)若小时数加1后为24,则小时数恢复到0。 设计思路: 调试结果: #include"stdio.h" structtime {inthour; intminute; intsecond; }; main() { structtimenow; printf("Pleaseenternowtime(HH,MM,SS)=\n"); scanf("%d,%d,%d",&now.hour,&now.minute,&now.second); now.second++; if(now.second==60) { now.second=0; now.minute++; } if(now.minute==60) { now.minute=0; now.hour++; } if(now.hour==24) now.hour=0; printf("\nNowis%d: %d: %d\n",now.hour,now.minute,now.second); } 运行结果: 2.编写函数,采用递归方法将任一正整数转换为二进制形式。 设计思路: 调试结果: #include turn(n,a,k) intn,a[],k; { if(n>0) { a[k]=n%2; turn(n/2,a,k-1); } elsereturn; } main() { inti,n,a[16]={0}; printf("\nPleaseentern: "); scanf("%d",&n); turn(n,a,15); for(i=0;i<16;i++); printf("%d",a[i]); } 设计思路: 函数的调运,字符串的输入和输出,循环的使用,数组的使用。 运行结果: 3.从键盘上输入两个日期,计算两者之间相隔的天数。 具体要求如下: (1)定义一个一维数组,用以存放平年的12个月的每月天数。 (2)设计一个自定义函数fa(),判断年份是否闰年,如果是则返回数值1,否则返回0。 (3)设计一个自定义函数fb(),用以计算起始日期到年底的天数。 (4)设计一个自定义函数fc(),用以计算起始日期到终止日期间的整年的天数。 (5)设计一个自定义函数fd(),用以计算终止日期是该年的多少天。 (6)主函数要求日期的输入与结果的输出有良好的提示信息。 设计思路: 调试结果: #include"stdio.h" intfa(intq) { if((q%4==0&&q%100! =0)||q%400==0) return (1); else return(0); } intfb(inta[],intb,intc) { inti; intsum=a[b-1]-c; for(i=b;i<12;i++) sum+=a[i]; return(sum); } intfc(inta[],intb,intc,intd,inte) { intsum=0,sum1,sum2; inti; for(i=0;i sum1+=a[i]; sum1+=c,sum1--; for(i=0;i sum2+=a[i]; sum2+=e,sum2--; sum=sum2-sum1; return(sum); } intfd(inta[],intd,inte) { inti; intsum=e; for(i=0;i sum+=a[i]; return(sum); } voidmain() { intq; intb,c,d,e; inta[12]={31,28,31,30,31,30,31,31,30,31,30,31}; printf("请输入你想判断的年份: "); scanf("%d",&q); if(fa(q)==1) { printf("%d是闰年\n",q); a[1]++; } else printf("%d是平年\n",q); printf("请输入起始日期: "); scanf("%d,%d",&b,&c); printf("请输入终止日期: "); scanf("%d,%d",&d,&e); printf("起始日期到年底的天数为: %d\n",fb(a,b,c)); printf("起始日期到终止日期间的整年的天数为: %d\n",fc(a,b,c,d,e)); printf("终止日期是该年的第%d天\n",fd(a,d,e)); } 运行结果: 函数的调运,字符串的输入和输出,循环的使用,数组的使用。 4.在主函数中输入2013年的某月某日,编写一个函数完成计算该日是星期几,在主函数中输出。 程序存入TEST34.C中。 (已知2013年的1月1日是星期二) 例如: 输入: 1/2(表示1月2日) 输出: Tue(表示星期二) 设计思路: 调试结果: #include"stdio.h" voidmain() { intfa(intn,intm); intn,m,y; printf("请输入月份,日期\n"); scanf("%d,%d",&n,&m); y=fa(n,m); switch(y) { case0: printf("Tue\n");break; case1: printf("Wed\n");break; case2: printf("Thu\n");break; case3: printf("Fri\n");break; case4: printf("Sat\n");break; case5: printf("Sun\n");break; case6: printf("Mon\n");break; } } intfa(intn,intm) { inti,sum=0,c,a[12]={31,28,31,30,31,30,31,31,30,31,30,31}; for(i=1;i<=12;i++) { if(i elsebreak; } sum=sum+m-1; c=sum%7; return(c); } 运行结果: 提高题: 1.兑奖程序: 体育彩票由七位数字组成,第七位数字是特别号码,只有在前面六位数都正确的时候才对第七位数。 现在体彩中心给出了一个特等奖号码是1234567,程序要求在屏幕上任输入一个号码判断出中了几等奖。 (如果七位数字都相同就是特等奖;前六位相同为一等奖,任连续五位相同为二等奖,任连续四位相同为三等,任连续三位相同为四等,任连续两位相同位五等。 (注意: 除特等奖外都不考虑第七位) 按照以下对奖方式,写出程序: 不按位对奖: 也就是说不管是多少位,只要有连续几位相同都可以。 比如说给出的号码是: 2312345就中了三等奖(因为1234和前面相同,注意,这里的第七位是5,虽然也相同但是不能算) 设计思路: 调试结果: #include"stdio.h" voidmain() { chara[7],b[7]; inti,j,num,max=0; printf("请输入中奖号码: "); gets(a); printf("请输入兑奖号码: "); gets(b); for(j=0;j<6;j++) { for(i=0,num=0;i<6;i++) { if(a[i]==b[j]) { j++; num++; } } if(num>max)max=num; } if(max==6) { if(a[6]==b[6])printf("你中了特等奖\n"); elseprintf("你中了一等奖\n"); } elseif(max==5)printf("你中了二等奖\n"); elseif(max==4)printf("你中了三等奖\n"); elseif(max==3)printf("你中了四等奖\n"); elseif(max==2)printf("你中了五等奖\n"); elseprintf("谢谢惠顾\n"); } 运行结果: 2.学生成绩管理系统: 编写一个简单的学生信息管理程序,能实现对学生信息的简单管理。 具体要求为: 建立一个4个学生的信息登记表,每个学生的信息包括: 学号,姓名,和3门课程的成绩(FOX,C,ENGLISH)。 程序运行时显示一个简单的菜单,例如: (1): 信息输入(INPUT) (2): 总分统计(COUNT) (3): 总分排序(SORT) (4): 查询(QUERY) 其中: (1): 对4个学生的信息进行输入; (2): 对每个学生的3门课程统计总分; (3): 对4个学生的总分按降序排序并显示出来; (4): 查询输入一个学号后,显示出该学生的有关信息; 请同学们根据实际情况再进行适当扩展。 #include"stdio.h" #include"malloc.h" structstudent { longnum; charname[20]; floatfox; floatc; floatenglish; floatsum; structstudent*next; }; intn; structstudent*input(void){ intboolean=0; structstudent*head,*p1,*p2; n=0; head=p1=p2=(structstudent*)malloc(sizeof(structstudent)); printf("请输入学生学号: "); scanf("%d",&p1->num); printf("请输入学生姓名: "); scanf("%s",p1->name); printf("请输入学生各科成绩(FOR,C,ENGLISH): "); scanf("%f,%f,%f",&p1->fox,&p1->c,&p1->english); p1->sum=p1->fox+p1->c+p1->english;//COUNT; printf("是否继续输入? 1/继续,0/结束"); scanf("%d",&boolean); while(boolean) { n++; p2=p1; p1=(structstudent*)malloc(sizeof(structstudent)); printf("请输入学生学号: "); scanf("%d",&p1->num); printf("请输入学生姓名: "); scanf("%s",p1->name); printf("请输入学生各科成绩(FOR,C,ENGLISH): "); scanf("%f,%f,%f",&p1->fox,&p1->c,&p1->english); p1->sum=p1->fox+p1->c+p1->english; p2->next=p1; printf("是否继续输入? 1/继续,0/结束"); scanf("%d",&boolean); } p1->next=NULL; return(head); } structstudent*sort(structstudent*head) { structstudent*p1,*p2,*p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验 报告