川师C语言上机实验报告答案.doc
四川师范大学计算机学院实 验 报 告 册院系名称: 计算机科学学院 课程名称: C语言程序设计 实验学期 2013 年至 2014 年 第 二 学期专业班级: 2013级2班 姓名: 黄涛 学号: 指导教师: 苏菡老师 实验最终成绩: 本学期(年)开设实验课程情况一览表序号实验名称(学生实验后填写)学时数成绩(分数或等级)1熟悉C语言上机环境22数据类型和表达式23分支结构程序设计24循环结构程序设计45数组程序设计46函数67指针68字符串与指针29结构体210文件操作211121314151617181920 实验报告(1)实验名称熟悉C语言上机环境同组人姓名实验性质 基本操作 验证性 综合性 设计性实验日期实验成绩教师评价:实验预习 实验操作 实验结果 实验报告 其它 教师签名:一、 目的要求:1.(1)熟悉C语言的运行环境,了解和使用Visual C+(简称VC+)集成开发环境。(2)熟悉VC+环境的基本命令和功能键。(3)熟悉常用的功能菜单命令。(4)掌握C语言程序的书写格式和C语言程序的结构。(5)掌握C语言上机步骤,了解运行一个C程序的方法。(6)完成实验报告。2.(1)了解C语言中数据类型的意义。(2)理解常用运算符的意义。(3)掌握C语言表达式的运行规则。(4)编写实验报告。3.(1)了解和掌握分支语句的使用,包括if语句的各种形式以及switch语句。(2)编写实验报告。4.(1)使用循环语句完成累乘、图像输出的程序编写。(2)掌握较复杂结构程序的编写。(3)掌握程序调试的方法。(4)编写实验报告。5.(1)掌握一维和二维数组的使用技巧。(2)编写实验报告。6.二、 实验内容1.(1)熟悉VC+的实验环境。(2)完成一个输出“hello world!”的程序,熟悉VC+中有关的编辑和编译命令的使用方法。(3)完成3个数据的输入、求和并输出计算结果的程序。(4)在屏幕上输出如下图形:2.(1)计算由键盘输入的任何两个双精度数据的平均值。(2)写一个输入7个数据的程序,把输入的数据代入a + b * (c d ) / e * f g 表达式进行运算。(3)编写一个C语言程序,测试下列各表达式: i, j i + 1 , j + 1 i+ , j+ +i , +j i+j(4)输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。 interest = money(1+rate)year - money(5)输入华氏温度,输出对应的摄氏温度。计算公式如下: c = 5 * ( f - 32) / 9 其中,c表示摄氏温度,f表示华氏温度。3.(1)编写一个程序完成输入一个整数,输出它的符号。(2)请编写居民应交水费,并提供各种测试数据。 居民应交水费y(元)与月用水量x(吨)的函数关系式如下: 0 x < 0 y = f(x) = 4x / 3 0 x 15 2.5x 10.5 x > 15(3)请根据输入的学生成绩给出成绩等级的判断,判断规则如下: 如果输入的成绩大于等于90,则输出优秀; 如果输入的成绩小于90、大于等于80,则输出良好; 如果输入的成绩小于80、大于等于70,则输出中等; 如果输入的成绩小于70、大于等于60,则输出及格; 其他输出不及格。 (4)运输公司对用户计算运费。路程(s)越远,每公里运费越低。标准如下: s = 250km 没有折扣 250km s < 500km 2%折扣 500km s < 1000km 5%折扣 1000km s < 2000km 8%折扣 2000km s < 3000km 10%折扣 3000km s 15%折扣 设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣为d,则总运费的计算公式为: f = p * w * s * ( 1 d ) 请编程实现:从键盘输入基本运费p,货物重w,距离s,计算输出用户最终需要支付的运费。4.(1)已知xyz + yzz = 532,其中x、y、z都是数字(09),编写一个程序求出x、y、z分别代表什么数字。(2)编写一个程序打印如下对称图形(行数由键盘输入19范围的值),例如下面是输入的数字4时的情形: 33333 222 1 222 33333 (3)学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。(4)学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下: A说:不是我。 B说:是C。 C说:是D。 D说:他胡说。 已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人。5.(1)从键盘输入一个长度为N(比如10)的整型数组,而后将数组中小于零的元素移动到数组的前端,大于零的元素移到数组的后端,等于零的元素留在数组中间。比如原来数组为:2 -5 -89 75 0 -89 0 93 48 0,经过处理后的数组为:-5 -89 -89 0 0 0 75 93 48 2。由于不要求数组有序,所以不允许用排序方法。提示:1)输入N个数据,构建数组。2)按照要求确定数据的位置,需要注意循环条件的确定、0数据元素往中间推的实现过程以及数组处理的方向。(2)设数组a的定义如下:int a20 = 2,4,6,8,10,12,14,16; 已存入数组中的数据值已经按由小到大的顺序存放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能。提示:1)定义整型数组并初始化。2)从键盘输入一个数据。3)将该数据插入到数组中,由于要保证插入的数组仍然有序,所以需要查找插入的位置。4)输出插入数据以后的数组。(3)写一个3 x 5矩阵的转置程序,输出其原矩阵的值和转置以后的结果。提示:1)定义一个二维数组及相关变量。2)对二维数组赋值,可以由键盘输入,也可以通过其他方式赋值。3)输出转置前的二维数组。4)对二维数组中的值进行转置。5)输出转置后的二维数组中的值。(4)编程实现随机产生10个位于区间100 200互不相等的整数,并将其按降序排序和输出。6.三、主要设备及软件PC机1台, VC 6.0 平台四、 实验流程、操作步骤或核心代码、算法片段1.(2)#include<stdio.h>/完成一个输出“hello world!”的程序main()printf("hello world!n");(3)#include<stdio.h>/完成3个数据的输入、求和并输出计算结果的程序main()int a,b,c,sum;scanf("%d %d %d",&a,&b,&c);sum=a+b+c;printf("sum=%dn",sum);(4)#include<stdio.h>/在屏幕上输出如下图形:main()printf(" An BBBnCCCCCn");2.(1)#include<stdio.h>/计算由键盘输入的任何两个双精度数据的平均值main()double a,b;scanf("%lf %lf",&a,&b);printf("%lfn",(a+b)/2);(2) #include<stdio.h>/写一个输入7个数据的程序,把输入的数据代入a + b * (c d ) / e * f g 表达式进行运算main() float x,a,b,c,d,e,f,g;scanf("%f %f %f %f %f %f %f",&a,&b,&c,&d,&e,&f,&g);x=a+b*(c-d)/e*f-g;printf("%lfn",x);(3)#include<stdio.h>/编写一个C语言程序,测试下列各表达式:i, j , i + 1 , j + 1,i+ , j+, +i , +j,i+jmain()int i=1,j=1;printf("%d%dn",i+1,j+1);printf("%d%dn",i+,j+);printf("%d%dn",+i,+j); printf("%dn",(i+)+(+j);(4)#include<stdio.h>/输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。interest = money(1+rate)year - money#include<math.h>main()int year;float money,rate,interest;printf("请输入:money rate year: ");scanf("%f %f %d",&money,&rate,&year);interest=pow(1+rate,year)*money-money;printf("interest=%fn",interest);(5)#include<stdio.h>/)输入华氏温度,输出对应的摄氏温度。计算公式如下: c = 5 * ( f - 32) / 9 其中,c表示摄氏温度,f表示华氏温度。#include<math.h>main() float f,c; printf("请输入华氏温度f:n"); scanf("%f",&f); c=5*(f-32)/9; printf("c=%fn",c);3.(1)#include<stdio.h>/编写一个程序完成输入一个整数,输出它的符号main() int a; printf("请输入整数an"); scanf("%d",&a); if(a>0) printf("+n"); else if(a<0) printf("-n");(2)#include<stdio.h>/编写居民应交水费main() float x,y; printf("请输入月用水量x:n"); scanf("%f",&x); if(x<0) y=0; else if(x>=0&&x<=15) y=4*x/3; else if(x>15) y=2.5*x-10.5; printf("y=%fn",y);(3)#include<stdio.h>/根据输入的学生成绩给出成绩等级的判断main() float a; printf("请输入成绩n"); scanf("%f",&a); if(a>=90) printf("优秀n"); else if(a<90&&a>=80) printf("良好n"); else if(a<80&&a>=70) printf("中等n"); else if(a<70&&a>=60) printf("及格n"); else printf("不及格n");(4)#include<stdio.h>/运输公司对用户计算运费main()int c,s;float p,w,d,f; scanf("%f,%f,%d",&p,&w,&s);if(s>3000)c=12;elsec=s/250;switch(c)case 0: d=0;break; case 1: d=2;break; case 2: case 3: d=5;break; case 4: case 5: case 6: case 7: d=8;break; case 8: case 9:case 10: case 11: d=10;break; case 12: d=15;break;f=p*w*s*(1-d/100.0);printf("freight=%fn",f);4.(1)#include<stdio.h>/已知xyz + yzz = 532,其中x、y、z都是数字(09),编写一个程序求出x、y、z分别代表什么数字。main()int x,y,z;for(x=0;x<=9;x+)for(y=0;y<=9;y+)for(z=0;z<=9;z+)if(100*x+10*y+z+100*y+10*z+z=532)printf("%d %d %d",x,y,z);return(0);(2)#include<stdio.h>/*编写一个程序打印如下对称图形(行数由键盘输入19范围的值)*/main()int i,j,k,n;printf("Enter n(19):n");scanf("%d",&n);for(i=0;i<=n;+i)for(j=0;j<=i;+j)printf(" ");for(k=0;k<=2*n-2*i;+k)printf("%d",n-i);printf("n");for(i=1;i<=n;+i)for(j=0;j<=n-i;+j)printf(" ");for(k=0;k<=2*i;+k)printf("%d",i);printf("n");return(0);(3)#include<stdio.h>/学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。#include<math.h>main()int i;for(i=900;i<=1000;i+)if(i%5=2&&i%7=3&&i%3=1)printf("%dn",i);return(0);(4)#include<stdio.h>/学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事void main()int A,B,C,D,j;for(j=0;j<4;j+)switch(j) case 0:A=1;B=0;C=0;D=0;break; case 1:A=0;B=1;C=0;D=0;break; case 2:A=0;B=0;C=1;D=0;break; case 3:A=0;B=0;C=0;D=1;break; default:break;if(A+B+C=1&&B+C+D=1&&A+C+D=1) printf("%cn",j+'A');5.(1)#include<stdio.h>#include<stdlib.h>#define N 10main()int i,t,j;int aN=2,-5,-89,75,0,-89,0,93,48,0;for(i=0;i<N;i+)printf("%4d",ai);printf("n");for(i=0;i<N;i+)for(j=i+1;j<N;j+)if(ai>0&&aj<0)t=ai;ai=aj;aj=t;else if(ai=0&&aj<0)t=ai;ai=aj;aj=t;else if(ai>0&&aj=0)t=ai;ai=aj;aj=t;for(i=0;i<N;i+)printf("%4d",ai);printf("n");system("pause");return 0;(2)#include<stdio.h>#include<stdlib.h>main()int i,j,k,a9=2,4,6,8,10,12,14,16;for(i=0;i<8;i+)printf("%3d",ai);printf("n");scanf("%d",&k);i=0;while(ai<k&&i<8)i+;for(j=7;j>=i;j-)aj+1=aj;ai=k;for(i=0;i<=8;i+)printf("%3d",ai);system("pause");(3)#include<stdio.h>#include<stdlib.h>main()int i,j;int a35=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15;for(i=0;i<3;i+)for(j=0;j<5;j+)printf("%3d",aij);printf("n");for(i=0;i<5;i+)for(j=0;j<3;j+)printf("%3d",aji);printf("n");system("pause");return 0;(4)/编程实现随机产生10个位于区间100 200互不相等的整数,并将其按降序排序和输出。#include<stdio.h>#include<time.h>#include<stdlib.h>#define random(x) (100+rand()%201)/定义产生【100,200】的随机数main()int i,j,k,n;/产生随机数int a10;srand(int)time(0);for(i=0;i<=9;i+)ai=random(200);printf("%4d",ai);printf("n");for(i=0;i<=9;i+)/排序 for(j=i+1;j<10;j+) if(ai<aj); k=ai; ai=aj; aj=k;printf("排序后的数组为n");for(i=0;i<10;i+)printf("%4d",ai);system("pause");6.五、 实验结果的分析与评价1.(2)结果如下:(3)结果如下:(4)结果如下:2.(1)结果如下: (2)结果如下:(3)结果如下:(4)结果如下:(5)结果如下:3.(1)结果如下:(2)结果如下:(3)结果如下:(4)结果如下:4.(1)结果如下:(2)结果如下:(3)结果如下:(4)结果如下:5.(1)结果如下:(2)结果如下:(3)结果如下:(4)结果如下:6.