C语言实验报告程序.docx
《C语言实验报告程序.docx》由会员分享,可在线阅读,更多相关《C语言实验报告程序.docx(18页珍藏版)》请在冰豆网上搜索。
C语言实验报告程序
常见错误解析
1.Error:
Undefinedsymbol‘s’infunctionmain
主函数中s变量未定义。
2.Warning:
Possibleuseof‘sum’beforedefinitioninfunctionmain
该错误最有可能是因为变量sum未赋初值。
3.Error:
Statementmissing;infunctionmain
应考察当前的行或是上一行,看是否丢失了分号。
4.注意:
if语句、for和while语句之后所跟的括号后面,不要随意的加分号。
5.一定要区分开“=”和“==”;“/”和“%”。
“!
=”是“不等于”运算符
实验一顺序结构的使用
1.编程求下列表达式的值,并与手工计算结果相比较。
若有”inta=2,b=3;floatx=3.5,y=2.5;”,求(float)(a+b)/2+(int)x%(int)y。
main()
{inta=2,b=3;
floatx=3.5,y=2.5;
printf(“%f”,(float)(a+b)/2+(int)x%(int)y);
}
2.有两个变量a=2,b=5,编写程序,交换它们的值。
main()
{inta=2,b=5,t;
t=b;
b=a;
a=t;
printf(“%d,%d\n”,a,b);
}
3.编写一个程序实现求表达式
的值。
#include
main()
{
floata,b,sum;
scanf(“%f%f”,&a,&b);
sum=a+sqrt(b);
printf(“%f\n”,sum);
}
实验教材P19选择题答案:
1~5题CCDAD
实验二选择结构的使用
1.编写程序:
由键盘输入任意3个数,按降序打印此3个数。
main()
{inta,b,c,t;
scanf(“%d%d%d”,&a,&b,&c);
if(a
{t=a;a=b;b=t;}
if(a{t=a;a=c;c=t;}
if(b{t=b;b=c;c=t;}
printf(“%d%d%d\n”,a,b,c);
}
2.输入百分制的分数,要求按下列分数段输出成绩等级:
90分以上为A,80~89为B,70~79为C,60~69为D,小于60分为E(要求用switch语句实现,可参考本实验中“预备知识2.多分支选择结构”中的“例题”来做)。
main()
{intscore,n;
scanf(“%d”,&score);
n=score/10;
switch(n)
{case10:
case9:
printf(“A\n”);
case8:
printf(“B\n”);
case7:
printf(“C\n”);
case6:
printf(“D\n”);
default:
printf(“E\n”);
}
}
3.从键盘输入3个数,它们分别代表3条线段的长度。
编写程序判断:
这3条线段能否组成三角形,若能请进一步判断三角形的类型(等边三角形、直角三角形)。
参考图2-2编写程序。
main()
{floata,b,c;
scanf(“%f%f%f”,&a,&b,&c);
if(a+b>c&&b+c>a&&a+c>b)
{printf(“Itisatriangle!
”);
if(a==b&&b==c)
printf(“Itisanequaltriangle!
”);
elseif(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
printf(“Itisarighttriangle!
”);
elseprintf(“Itisageneraltriangle!
);
}
elseprintf(“Itisnotatriangle!
”);
}
4.阅读程序,给出结果,上机调试程序,验证其运行结果与阅读结果是否相同。
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;
}
case2:
a++;b++;break;
}
printf(“a=%d,b=%d\n”,a,b);
}
程序结果:
a=2,b=1
实验三循环结构的使用
1.求分数序列2/1,-3/2,5/3,-8/5,……的前10项和。
main()
{inti;
floats=0,a=2,b=1,t=1,c;
for(i=1;i<=10;i++)
{s+=a/b*t;
c=a;a=a+b;b=c;t=-t;/*a=a+b;b=a-b;*/
}
printf(“%.4f\n”,s);
}
2.求100~200之间所有能被3和5整除的数之和。
main()
{inti,sum=0;
for(i=100;i<=200;i++)
if(i%3==0&&i%5==0)
sum=sum+i;
printf(“%d\n”,sum);
}
3.求26个小写英文字母的ASCII码值之和,存入变量sum中,并求出sum值的位数,存入变量k中。
#include
main()
{intsum,k;
charch;
intt;
sum=0,k=0;
for(ch=‘a’;ch<=‘z’;ch++)
sum+=ch;
t=sum;
while(t!
=0)
{t=t/10;
k++;
}
printf(“sum=%dk=%d\n”,sum,k);
}
4.有一分数序列:
1/2,-1/3,1/4,-1/5,1/6……,求这个序列的前m项之和,将总和存放到sum变量中,并输出总和。
#include
main()
{inti,m;
floats=0;
scanf(“%d”,&m);
for(i=1;i<=m;i++)
s+=1.0/(i+1)*pow(-1,i+1);
printf(“%.4f\n”,s);
}
5.求一个正整数m的所有约数之和,存入变量sum中,并输出sum。
例如:
如果m为12,则它的约数为2,3,4,6。
main()
{inti,m,sum=0;
scanf(“%d”,&m);
for(i=2;iif(m%i==0)
sum=sum+i;
printf(“%d\n”,sum);
}
6.打印九九乘法表
main()
{inti,j=1;
for(i=1;i<=9;i++)
{for(j=1;j<=i;j++)
printf(“%d*%d=%d”,i,j,i*j);
printf("\n");
}
}
7.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
Main()
{intletter=0,space=0,num=0,other=0;
charc;
while((c=getchar())!
=’\n’)
if((c>=’A’&&c<=’Z’)||(c>=’a’&&c<=’z’))
letter++;
elseif(c==’’)
space++;
elseif(c>=’0’&&c<=’9’)
num++;
elseother++;
printf(“%d,%d,%d,%d”,letter,space,num,other);
}
实验四数组的使用
1.编一个程序,将两个一维数组中的对应元素值相加后显示出来。
main()
{inti,a[10],b[10];
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
for(i=0;i<10;i++)
{scanf(“%d”,&b[i]);
printf(“%4d”,a[i]+b[i]);
}
}
2.已知10名学生的成绩已存入数组a中,计算前m位同学的平均成绩,并存入变量aver中,输出aver。
main()
{inti,a[10],sum=0;
floataver;
for(i=0;i<10;i++)
{scanf(“%d”,&a[i]);
sum+=a[i];
}
aver=sum/10.0
printf(“%f”,aver);
}
3.已知10位同学的英语成绩分别为90,61,92,79,45,67,86,95,63,79,用“冒泡法”对此成绩由大到小排序。
main()
{inta[10]={90,61,92,79,45,67,86,95,63,79},i,j,t;
for(j=0;j<=8;j++)
for(i=0;i<=8-j;i++)
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
for(i=0;i<10;i++)
printf("%4d",a[i]);
}
4.改错:
给一个实型数组中的前5个元素输入数据后,将这5个元素的值相加再赋给最前面的元素并输出。
请分步运行的方法调试,并观察数组a中个元素的值。
main()
{floata[10];
inti;
for(i=0;i<5;i++)
scanf(“%f”,&a[i]);
for(i=1;i<5;i++)
a[0]=a[0]+a[i];
printf("%f",a[0]);
}
5.从键盘输入任意一个十进制正整数m(假设m<=100),然后转换成用二进制表示的字符串,存入数组a中,然后输出a。
例如:
如果m为6,程序应该输出110。
main()
{
intm,i=0,a[8],j;
scanf(“%d”,&m);
while(m!
=0)
{a[i]=m%2;
m=m/2;
i++;
}
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
}
6.从键盘输入一行字符串到数组a中,求其中数字字符的个数,存入变量count中,并输出count。
例如,若输入"MyTelnumberis86142222.",则输出8。
#include
main()
{
chara[30];
intcount=0,i;
gets(a);
for(i=0;a[i]!
=’\0’;i++)
if(a[i]>=’0’&&a[i]<=’9’)
count++;
printf("%d",count);
}
7.已知数组a中10名学生的成绩,求不低于m分的人数,并存入变量count中,并输出count。
main()
{
intcount=0,a[10],i,m;
scanf(“%d”,&m);
for(i=0;i<10;i++)
{scanf(“%d”,&a[i]);
if(a[i]>=m)
count++;
}
printf("%d",count);
}
8.从键盘输入字符串”Iamastudent.”,并求此字符串的长度(不能用strlen函数).
#include
main()
{
chara[30];
inti;
gets(a);
for(i=0;a[i]!
=’\0’;i++);
printf("%d",i);
}
9.将数组b中的字符串拷贝到字符数组a中(不允许使用strcpy函数)。
#include
main()
{
chara[30],b[30]={“shenyanginstitute”};
inti;
for(i=0;b[i]!
=’\0’;i++)
a[i]=b[i];
a[i]=’\0’;
puts(a);
}
10.编程序求一行字符串(<20)中小写字母的ASCII码值之和.
#include
main()
{charstr[20];
intsum=0,i;
gets(str);
for(i=0;str[i]!
='\0';i++)
if(str[i]>='a'&&str[i]<='z')
sum+=str[i];
printf("\n%d",sum);}
实验五函数的使用
1.写一个函数求3个整数中的最大数,3个数从主函数传递给该函数,并在主函数中输出最大数。
指出什么是形参、什么是实参,哪条语句是函数调用语句。
max(inta,intb,intc)
{intd;
if(a>=b)d=a;
elsed=b;
if(dreturnd;
}
main()
{intr,s,t,m;
printf(“\npleaseenterthreenumbers:
”);
scanf(“%d,%d,%d”,&r,&s,&t);
m=max(r,s,t);
printf(“\nmaxis:
%d”,m);
}
2.编写一个函数,实现将具有10个元素的整型数组按逆序存放,要求在主函数中进行数组的输入与输出。
intinv(inta[],intn)
{inti,t;
for(i=0;i{t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
}
main()
{inta[10],i;
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
inv(a,10);
for(i=0;i<10;i++)
printf(“%3d”,a[i]);
}
3.编写一个函数,求10个学生成绩中的最高分和最低分,要求在主函数中进行数组的输入和结果的输出。
intmax;
intmaxmin(inta[],intn)
{intx,i;
max=a[0];
x=a[0];
for(i=1;i{if(maxif(x>a[i])x=a[i];
}
returnx;
}
main()
{inti,a[10],m;
for(i=0;i<=9;i++)
scanf(“%d”,&a[i]);
m=maxmin(a,10);
printf(“\nmaxis:
%d\nminis:
%d”,max,m);
}
4.递归计算xn,n为整数,参考下面的递归模型设计。
1n<=0
fact(x,n)=
x*fact(x,n-1)n>0
intfact(intx,intn)
{
if(n<=0)return1;
elsereturnx*fact(x,n-1);
}
main()
{intx,n,m;
scanf(“%d,%d”,&x,&n);
m=fact(x,n);
printf(“\n%d”,m);
}
5.编写函数mystrlen(chara[]),其功能是求字符串a的长度。
用主函数main()调用函数mystrlen,以验证mystrlen的正确性。
intmystrlen(chara[])
{
}
main()
{charm[10]=”Howareyou”;
intcount;
count=mystrlen(m);
printf(“\n%d”,count);
}
6.设计一个计算器,能实现实数的加、减、乘、除运算。
要求:
采用模块化设计方法,设计一个功能菜单,每个功能用一个函数来完成。
floatadd(floatx,floaty)
{floatz;
z=x+y;
returnz;
}
floatsub(floatx,floaty)
{floatz;
z=x-y;
returnz;
}
floatmul(floatx,floaty)
{floatz;
z=x*y;
returnz;
}
floatdiv(floatx,floaty)
{floatz;
z=x/y;
returnz;
}
main()
{floata,b,c;
charn;
clrscr();
scanf("%c",&n);
scanf("%f,%f",&a,&b);
switch(n)
{case'+':
c=add(a,b);printf("addis:
%5.2f\n",c);break;
case'-':
c=sub(a,b);printf("subis:
%5.2f\n",c);break;
case'*':
c=mul(a,b);printf("mulis:
%5.2f\n",c);break;
case'/':
c=div(a,b);printf("divis:
%5.2f\n",c);break;
default:
printf("Error!
\n");
}
}
P1537.4已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
main()
{inta[10]={1,3,4,6,15,23,59,70,76},i,m,t;
scanf(“%d”,&m);
a[9]=m;
for(i=9;i>=0;i--)
if(a[i]{t=a[i];a[i]=a[i-1];a[i-1]=t;}
elsebreak;
for(i=0;i<=9;i++)
printf(“%3d”,a[i]);
}
自定义函数形式实现:
fun(intw[],intn,intm)
{inti,t;
if(m>w[n-1])w[n]=m;
else
{for(i=0;w[i]t=i;
for(i=n-1;i>=t;i--)
w[i+1]=w[i];
w[t]=m;
}
}
main()
{
inta[6]={10,20,30,40,50},m,i;
m=35;
fun(a,5,m);
for(i=0;i<6;i++)
printf(“%d,”,a[i]);
}