2009C语言实验报告参考答案
实验一熟悉C语言程序开发环境及数据描述
四、程序清单
1.编写程序实现在屏幕上显示以下结果:
The dress is long
The shoes are big
The trousers are black
答案:
#include
main()
{
printf("The dress is long\n");
printf("The shoes are big\n");
printf("The trousers are black\n");
}
2.编写程序:
(1) a=150,b=20,c=45,编写求a/b、a/c(商)和a%b、a%c(余数)的程序。
(2)a=160,b=46,c=18,d=170, 编写求(a+b)/(b-c)*(c-d)的程序。
答案:
(1)
#include
main()
{
int a,b,c,x,y;
a=150;
b=20;
c=45;
x=a/b;
y=a/c;
printf("a/b的商=%d\n",x);
printf("a/c的商=%d\n",y);
x=a%b;
y=a%c;
printf("a/b的余数=%d\n",x);
printf("a/c的余数=%d\n",y);
}
(2)
#include
main()
{
int a,b,c,d;
float x;
a=160;
b=46;
c=18;
d=170;
x=(a+b)/(b-c)*(c-d);
printf("(a+b)/(b-c)*(c-d)=%f\n",x);
}
3. 设变量a的值为0,b的值为-10,编写程序:当a>b时,将b赋给c;当a<=b时,将0赋给c。(提示:用条件运算符)
答案:
#include
main()
{
int a,b,c;
a=0;
b=-10;
c= (a>b) ? b:a;
printf("c = %d\n",c);
}
五、调试和测试结果
1.编译、连接无错,运行后屏幕上显示以下结果:
The dress is long
The shoes are big
The trousers are black
2、(1) 编译、连接无错,运行后屏幕上显示以下结果:
a/b的商=7
a/c的商=3
a/b的余数=10
a/c的余数=15
(2) 编译、连接无错,运行后屏幕上显示以下结果:
(a+b)/(b-c)*(c-d)=-1064.0000
3. 编译、连接无错,运行后屏幕上显示以下结果:
c =-10
实验二顺序结构程序设计
四、程序清单
1.键盘输入与屏幕输出练习
问题1D。
问题2改printf("%c,%c,%d\n",a,b,c);这条语句
改成:printf("%c %c %d\n",a,b,c);
问题3改scanf("%c%c%d",&a,&b,&c);这条语句
改为:scanf("%c,%c,%d",&a,&b,&c);
问题4改printf("%c,%c,%d\n",a,b,c);这条语句
改成:printf("\’%c\’ \’ %c\’ %d\n",a,b,c);
问题5把scanf("%c%c%d",&a,&b,&c);和printf("%c,%c,%d\n",a,b,c);
改成scanf("%c%*c%c%*c%d",&a,&b,&c);
printf("\'%c\',\'%c\',%d\n",a,b,c);
2(1)从键盘输入两个八进制数,计算两数之和并分别用十进制和十六进制数形式输出。
#include
int main()
{
int a,b,c;
scanf("%d%d",&a,&b);
c = a + b;
printf("%d\n",c);
printf("%x\n",c);
return 0;
}
2(2)编写程序:从键盘输入两个实数a和x,按公式计算并输出y的值:
#include
#include
int main()
{
float a,x,y;
scanf("%f%f",&a,&x);
y = pow(a,5) + sin(a*x) + exp(a*x) + log(a+x);
printf("y=%f\n",y);
return 0;
}
五、调试和测试结果
2(1) 输入: 12 14
输出:26
1a
2(2) 输入:1 0
输出:2.000000
实验三选择结构程序设计
四、设计流程(算法描述)
(请写出上机内容2(3)题的算法描述)
主要是两两比较,然后得出最大的数
五、程序清单
(1)输入一个整数,若大于等于0,输出提示信息“is positive”,否则输出“is negative”。
#include
#include
main()
{
int a;
scanf("%d",&a);
if(a>=0)
printf("the number is positve\n");
else
printf("the number is negetive\n");
return 0;
}
(2)输入两个整数a和b,若a>=b时,求其积c并显示;若a
#include
main()
{
int a,b,c;
scanf("%d%d",&a,&b);
if(a>=b)
printf("c=%d\n",a*b);
else
printf("c=%d\n",a/b);
return 0;
}
(3)输入a、b、c三个整数,输出最大数。
#include
main()
{
int a,b,c,x;
scanf("%d%d%d",&a,&b,&c);
if(a>=b)
x=a;
else
x=b;
if (x x=c; printf("the max number is:%d\n",x); return 0; } 六、调试和测试结果 2(1) 输入: 2 输出:the number is positve 输入: 0 输出:the number is positve 输入: -2 输出:the number is negetive 2(2) 输入: 3 2 输出:c=6 输入: 2 3 输出:c=0 2(3) 输入:3 2 1 输出:the max number is:3 输入:2 3 1 输出:the max number is:3 输入:1 2 3 输出:the max number is:3 实验四循环结构程序设计 四、设计流程(算法描述) (请写出上机内容2的算法描述) 首先求出每一个给定数的所有因子和,然后从2到5000循环,那一个数x与因子之和相等,就是完数。 五、程序清单 1.编写程序:求1+2+3+…+100和12+22+33+…+1002。 #include #include int main() { int i,j,sum; sum = 0; for (i=1;i<=100;i++) sum += i; printf("the sum is:%d\n",sum); sum =0; for(i=1;i<=100;i++) { j=pow(i,2); sum +=j; } printf("the square sum is:%d\n",sum); return 0; } 2.一个数如果恰好等于它的因子之和,这个数就称为“完数”,编写程序找出2~5000中的所有完数。 #include #include main() { int i,j,sum=0; for(i=2;i<=5000;i++) //遍历从2到5000的所有数 { sum = 0; for (j=1;j<=i/2;j++) //找出给定整数X的所有因子和 { if(i%j == 0) sum +=j; } if(i == sum) //sum为因子和,如果和i相等,则输出 printf("%d ",i); } return 0; } 3.编写程序:计算sinx的近似值,精确到10-6。 其实所以程序 #include #include main() { float x,sinx,i,t; printf("请输入一个x值(弧度值):"); scanf("%f",&x); sinx=0; t=x;i=1; while(fabs(t)>=1e-6) { sinx=sinx+t; t=t*(-x*x/(2*i*(2*i+1))); i++; } printf("sin(%.2f)=%.6f\n",x,sinx); } 六、调试和测试结果 1:结果:the sum is:5050 the square sum is:338350 2:结果:6 28 496 3、输入0,输出sin(0.00)=0.000000 输入1.57,输出sin(1.57)=1.000000 输入0.5,输出sin(0.50)=0.479426 实验五函数和编译预处理 四、设计流程(算法描述) (请写出上机内容2的算法描述) 求素数的方法就是:给定一个大于3的数x,从2到X的平方根遍历,只要有数可以被x整除,就不是素数 五、程序清单 1.编写自定义函数long power(int m,int n),计算的值。利用此函数编程序实现:从键盘输入两个整数m和n,计算出的值。 #include long power(int m,int n)//要返回的是long型 { int i; long s;//因为是要返回的数,所以这里也定义为long型 s=1; for(i=1;i<=n;i++) { s *=m; } return s; } int main(void) { int m,n; scanf("%d%d",&m,&n); printf("s=%ld\n",power ( m,n)); return 0; } 2.编写自定义函数prime(int x),判断x是否为素数。利用此函数编写程序找出3~5000中的所有素数,并输出素数的个数。 #include #include int prime(int m) { int i,k; k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0)break; if(i>k)return 1; return 0; } main() { int i,k; k=0; for(i=3;i<=5000;i++) if(prime(i)==1){k++;printf("%d is a prime muber \n",i);} printf("共有%d个素数\n",k); } 3. 编写自定义函数count(int x),计算x的因子个数。利用此函数找出并输出1~1000中有奇数个不同因子的整数。 #include #include int count(int x) { int sum,i; sum =0;//记住因子的个数 for(i=1;i<=x/2;i++) if(x%i == 0) sum +=1; return sum+1; } int main(void) { int i,y; for(i=1;i<=100;i++) { y=count(i); if(y%2==1)printf("%d\t",i); } return 0; }六、调试和测试结果 1.输入:2 3 输出:s=8 2.输出:共有668个素数 2. 3、输出结果为: 实验六数组 四、设计流程(算法描述) (请写出上机内容1的算法描述) 设置两个变量分别指示头和尾。第一个和最后一个元素值互换,然后头和尾变量向里移动,最终到两变量相遇为止。 五、程序清单 1.编写程序:从键盘输入一串整数保存到数组中,调用函数antitone()将数组反序输出。自定义函数void antitone(int a[],int n)实现将数组中的n个数据按逆序存放。 void antitone(int a[],int n) { int i,j; int k; i=0; j=n-1; while(i { k=a[i]; a[i]=a[j]; a[j]=k; i +=1; j -=1; } } 2.已知某数列的前两项为2和3,其后每一项为其前两项之积。编程实现:从键盘输入一个整数x,判断并输出x最接近数列的第几项? #include #include void Mad(int a[],int n) { int i; a[0]=2; a[1]=3; for(i=2;i { a[i] = a[i-1] * a[i-2]; } } int main(void) { int a[100],x,k1,k2; int i; Mad(a,100);//产生序列 printf("input x:"); scanf("%d",&x); i=0; for(;x>a[i];i++); k1 = abs(x-a[i-1]); k2 = abs(x-a[i]); if(k1>k2) printf("the most similar x number is:%d\n",a[i]); else printf("the most similar x number is:%d\n",a[i-1]); return 0; } 3.编程实现:输入10个学生5门课的成绩并完成如下功能 (1)求每个学生的平均分; (2)求每门课程的平均分。 #include #include #define num 10 typedef struct student { char name[20]; float math; float englis; float computer; float Chinese; float history; }STUDENT; int main(void) { STUDENT stu[num]; int i; float score,sum,average; char s[10]; float scoreMath,scoreEng,scoreCom,scoreChi,scoreHis; for(i=0;i { printf("Name: "); gets(stu[i].name); printf("math score: "); scanf("%f",&score); stu[i].math = score; printf("englis score: "); scanf("%f",&score); stu[i].englis = score; printf("computer score: "); scanf("%f",&score); stu[i].computer = score; printf("Chinese score: "); scanf("%f",&score); stu[i].Chinese = score; printf("history score: "); scanf("%f",&score); stu[i].history = score; gets(s);//功能是接受最后一个回车符,然后下一次gets(stu[i].name);才能起到作用 } //求每个学生的平均分数 for(i=0;i { sum=0; sum +=stu[i].math; sum +=stu[i].englis; sum +=stu[i].computer; sum +=stu[i].Chinese; sum +=stu[i].history; average = sum/5; printf("%s's average score is:%f\n",stu[i].name,average); } //求每门课的平均成绩 scoreMath=0; scoreEng=0; scoreCom=0; scoreChi=0; scoreHis=0; for(i=0;i { scoreMath += stu[i].math; scoreEng += stu[i].englis; scoreCom += stu[i].computer; scoreChi += stu[i].Chinese; scoreHis += stu[i].history; } printf("math's average score is:%f\n",scoreMath/num); printf("englis's average score is:%f\n",scoreEng/num); printf("computer's average score is:%f\n",scoreCom/num); printf("Chinese's average score is:%f\n",scoreChi/num); printf("history's average score is:%f\n",scoreHis/num); return 0; } 实验七数组和函数 四、程序清单 (请写出上机内容2中函数的源代码) void fun(int tt[M][N],int pp[N]) { int i,j,max;