当前位置:文档之家› 大学一年级下学期C语言程序设计实验报告答案完整版

大学一年级下学期C语言程序设计实验报告答案完整版

《C语言程序设计》实验教学大纲

学时课程总:64学分:4

实验学时:24 实验个数:9 实验学分: 1.5

课程性质:必做适用专业:计算机科学技术、网络工程、软件工程、电子商务、教育技术

教材及参考书:《C语言程序设计与实践实验指导》,谢满得邵俊编著,机械工业出版社,2014年1月

大纲执笔人:廖雪花大纲审定人:

一、实验课的性质与任务

C语言程序设计实验是面向计算机相关专业学生开设的《C语言程序设计》实验课,是配合《C语言程序设计》课程而开设的实践性教育环节。本课程的主要任务是让学生充分掌握C语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。

二、实验课程目的与要求

1.实验目的

通过实验课程的学习实践,加深学生对所学的基本概念、基础理论和知识的理解,熟悉使用Visual C++ 6.0集成环境进行C语言的编写、编译与调试。同时,通过项目开发全过程的全方位指导,从需求分析、算法设计到程序编写和过程调试,以项目实训的形式引导和帮助学生解决实际问题,提高学生解决具体问题的能力,以及培养学生用多函数、多文件组织程序的思维习惯,为今后的后继课程学习和实际工作打下良好基础。

2.实验要求

(1)掌握C语言程序的基本格式,了解C程序的开发过程和C语言中的一些常用概念。

(2)掌握常量和五种基本数据类型变量的使用。

(3)掌握C表达式和运算符的正确使用,熟练掌握数据输入、输出函数。

(4)掌握条件转移语句if-else和选择分支语句switch;掌握三种程序跳转的方法,即break语句、continue语句、return 语句。

(5)掌握循环语句(for语句;do-while语句;while语句)的正确使用,认真体会应该如何组织循环。

(6)掌握数组的定义、赋值,一维数组与二维数组的使用。

(7)掌握函数的定义、函数的调用以及函数的类型说明。

(8)掌握局部变量、全局变量的定义和使用。

(9)掌握指针的基本概念以及数组与指针、指向指针的指针的基本用法。

(10)掌握结构体变量的定义,引用结构体中成员的方法,应用结构数组解决实际问题;共用体的概念,引用共用体中成员的方法。

(11)掌握链表的类型定义及其基本操作。

(12)掌握文件的打开、读写及关闭,并能运用文件提高编程的效率。

(13)理解项目式程序开发的过程。

三、实验项目及内容提要

四、实验内容安排:

实验一数据类型和表达式实验

(验证性实验2学时)1、目的要求:

(1)了解C语言中数据类型的意义。

(2)理解常用运算符的意义。

(3)掌握C语言表达式的运行规则。

(4)编写实验报告。

2、实验内容(参考实验指导书):

(1)计算由键盘输入的任何两个双精度数据的平均值。

#include

main()

{

double a,b;

printf("please input two real numbers:\n");

scanf("%lf%lf",&a,&b);

printf("the two`s average is: %.4lf\n",(a+b)/2); }

(2)写一个输入7个数据的程序,把输入的数据代入a + b * (c – d ) / e * f – g 表达式进行运算。

#include

main()

{

float a,b,c,d,e,f,g,x;

scanf("%f%f%f%f%f%f%f",&a,&b,&c,&d,&e,&f,&g);

x=a + b * (c - d ) / e * f - g;

printf("x=%.4f\n",x);

}

(3)编写一个C语言程序,测试下列各表达式:

i, j

i + 1 , j + 1

i++ , j++

++i , ++j

i+++++j

#include

main()

{

int i=1,j=1;

printf("%d %d\n",i+1,j+1);

printf("%d %d\n",i++,j++);

printf("%d %d\n",++i,++j);

printf("%d\n",(i++)+(++j));

}

(4)输入存款金额money,存期year和年利率rate,根据下列公式计算存款到期时的利息interest(税前),输出时保留2位小数。

interest = money(1+rate)year– money

#include

#include

main()

{

int year=2;

float rate=0.1,money=1000;

float interest;

interest=money*pow((1+rate),year);

printf("%10.2f",interest);

}

(5)输入华氏温度,输出对应的摄氏温度。计算公式如下:

c = 5 * ( f - 32) / 9

其中,c表示摄氏温度,f表示华氏温度。

#include

main()

{

int c,f;

scanf("%d",&f);

c = 5 * ( f - 32) / 9;

printf("%d",c);

}

实验二分支结构程序设计实验

(验证性实验2学时)

1、目的要求:

(1)了解和掌握分支语句的使用,包括if语句的各种形式以及switch语句。(2)编写实验报告。

2、实验内容(参考实验指导书):

(1)编写一个程序完成输入一个整数,输出它的符号。

#include

main()

{

int i;

scanf("%d",&i);

if(i>0)

printf("+");

else

printf("-");

}

(2)请编写居民应交水费,并提供各种测试数据。

居民应交水费y(元)与月用水量x(吨)的函数关系式如下:

0 x < 0

y = f(x) = 4x / 3 0 ≤ x ≤ 15

2.5x – 10.5 x > 15

#include

main()

{

float x,y;

scanf("%f",&x);

if(x<0)

printf("0");

else if(x>=0&&x<=15)

{

y=4*x/3;

printf("%f",y);

}

else if(x>15)

{

y=2.5*x-10.5;

printf("%f",y);

}

}

(3)请根据输入的学生成绩给出成绩等级的判断,判断规则如下:如果输入的成绩大于等于90,则输出优秀;

如果输入的成绩小于90、大于等于80,则输出良好;

如果输入的成绩小于80、大于等于70,则输出中等;

如果输入的成绩小于70、大于等于60,则输出及格;

其他输出不及格。

#include

main()

{

int x;

scanf("%d",&x);

if (x>=90)

printf("优秀\n");

else if (x>=80&&x<90)

printf("良好\n");

else if(x>=70&&x<80)

printf("中等\n");

if(x>=60&x<70)

printf("及格\n");

if(x>=0&x<60)

printf("不及格\n");

}

(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,计算输出用户最终需要支付的运费。

#include

main()

{

int c,s;

float p,w,d,f;

scanf("%f,%f,%d",&p,&w,&s);

if(s>=3000)

c=12;

else

c=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=%15.4f\n",f);

}

实验三循环结构程序设计实验

(验证性综合性实验2学时)

1、目的要求:

(1)使用循环语句完成累乘、图像输出的程序编写。

(2)掌握较复杂结构程序的编写。

(3)掌握程序调试的方法。

(4)编写实验报告。

2、实验内容(参考实验指导书):

(1)已知xyz + yzz = 532,其中x、y、z都是数字(0~9),编写一个程序求出x、y、z分别代表什么数字。

#include

main()

{

int x,y,z;

for(x=1;x<=9;x++)

for(y=1;y<=9;y++)

for(z=1;z<=9;z++)

if(100*x+10*y+z+100*y+10*z+z==532)

printf("%d %d %d",x,y,z);

getchar();

}

(2)编写一个程序打印如下对称图形(行数由键盘输入1~9范围的值),例如下面是输入的数字4时的情形:

4444444

33333

222

1

222

33333

4444444

#include

main()

{

int i,j,k,n;

printf("请输入一个数字\n");

scanf("%d",&n);

i=n;

for(i=0;i<2*n-1;i++)

{

k=i;

if(i>=n)

k=2*n-2-i;

for(j=0;j

printf(" ");

for(j=0;j<2*(n-k)-1;j++)

printf("%d",n-k);

printf("\n");

}

getchar();

}

(3)学校有近千名学生,在操场上排队,5人一行余2人,7人一行余3人,3人一行余1人,编写一个程序求该校的学生人数。

#include

main()

{

int i;

for(i=900;i<=1100;i++)

{

if(i%5==2&&i%7==3&&i%3==1)

{

printf("%d\n",i);

break;

}

}

getchar();

}

(4)学校某班A、B、C、D四位同学中的一位做了好事不留名,表扬信来了之后,班主任问这四位是谁做了好事,四位回答如下:

A说:不是我。

B说:是C。

C说:是D。

D说:他胡说。

已知三个人说的是真话,一个人说的是假话。请根据这些信息,找出做了好事的人。#include

main()

{

int i,j,a,b,c,d;

for(i=0;i<=4;i++)

{

for(j=0;j<=4;j++)

if(j==i)

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==1&&c+d==1&&b+c+d==1)

printf("做好事的人是%c\n",i+'a');

}

getchar();

}

实验四数组程序设计实验

(验证性综合性实验4学时)

1、目的要求:

(1)掌握一维和二维数组的使用技巧。

(2)编写实验报告。

2、实验内容(参考实验指导书):

(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数据元素往中间推的实现过程以及数组处理的方向。

#include

#include

#define N 10

main()

{

int a[N]={2,-5,-89,75,0,-89,0,93,48,0};

int i,t,j;

for(i=0;i

printf("%4d",a[i]);

printf("\n");

for(i=0;i

{

for(j=i+1;j

{

if(a[i]>0&&a[j]<0)

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

else if(a[i]>0&&a[j]==0)

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

else if(a[i]==0&&a[j]<0)

{

t=a[i];

a[i]=a[j];

a[j]=t;

}

}

}

for(i=0;i

printf("%4d",a[i]);

printf("\n");

}

(2)设数组a的定义如下:

int a[20] = {2,4,6,8,10,12,14,16}; 已存入数组中的数据值已经按由小到大的顺序存

放,现从键盘输入一个数据,把它插入到数组中,要求插入新数据以后,数组数据仍然保持有序。请编写一个程序实现上述功能。

提示:

1)定义整型数组并初始化。

2)从键盘输入一个数据。

3)将该数据插入到数组中,由于要保证插入的数组仍然有序,所以需要查找插入的位置。

4)输出插入数据以后的数组。

#include

main()

{

int a[9]={2,4,6,8,10,12,14,16};

int i,j,number;

printf("原数组\n");

for(i=0;i<=8;i++)//输出数组原有的元素

printf("%d ",a[i]);

printf("\n");

printf("请输入一个数据\n");

scanf("%d",&number);

i=0;//以下三行找到插入位置

while(a[i]

i++;

for(j=7;j>=i;j--)//将插入点以后的元素顺序往后移一位

a[j+1]=a[j];

a[i]=number;//插入数据

printf("输出改变后的数组\n");

for(i=0;i<=8;i++)//输出插入后仍有序的数组

printf("%d ",a[i]);

}

(3)写一个3 x 5矩阵的转置程序,输出其原矩阵的值和转置以后的结果。

提示:

1)定义一个二维数组及相关变量。

2)对二维数组赋值,可以由键盘输入,也可以通过其他方式赋值。

3)输出转置前的二维数组。

4)对二维数组中的值进行转置。

5)输出转置后的二维数组中的值。

#include

#include

main()

{

int i,j;

int a[3][5]={1,2,3,4,5,6,7,8,9,1,2,3,4,5,0};

for(i=0;i<3;i++){

for(j=0;j<5;j++)

printf("%d\t",a[i][j]);

printf("\n\n");

}

printf("转置后的矩阵为\n");

for(i=0;i<5;i++){

for(j=0;j<3;j++)

printf("%d\t",a[j][i]);

printf("\n\n");

}

}

(4)编程实现随机产生10个位于区间[100 200]互不相等的整数,并将其按降序排序和输出。#include

#include

#include

#define random(x)(rand()%101+100)

main()

{

int i,j,k,n;//产生随机数

int a[10];

srand((int)time(0));

for(i=0;i<=9;i++){

a[i]=random(200);

printf("%d ",a[i]);

}

printf("\n");

for(i=0;i<=9;i++){//排序

k=i;

for(j=i;j<10;j++)

if(a[k]

n=a[i];

a[i]=a[k];

a[k]= n;

}

printf("排序后的数组为\n");

for(i=0;i<10;i++)

printf("%d ",a[i]);

printf("\n\n");

}

实验五函数实验

(验证性综合性实验5学时)

1、目的要求:

(1)学习函数的编程思想,编写一个包括3~4个函数的程序。

(2)掌握函数中参数传递的两种方式和函数的相互调用。

(3)编写实验报告。

2、实验内容(参考实验指导书):

(1)写一个函数int digit( int n , int k ),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3。

#include

void digit(int n,int k);

main()

{

int x,y;

printf("请输入一个数据\n");

scanf("%d%d",&x,&y);

digit(x,y);

}

void digit(int n,int k)

{

int i,j,a,b;

b=n%10;

a=(n/10)%10;

j=(n/100)%10;

i=(n/1000)%10;

n=1000*i+100*j+10*a+b;

if(k==1)

printf("%d\n",b);

else if(k==2)

printf("%d\n",a);

else if(k==3)

printf("%d\n",j);

else if(k==4)

printf("%d\n",i);

}

(2)写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时,函数返回零值。

#include

#include

int isprime(int n);

main()

{

int x;

printf("请输入一个整

数\n");

scanf("%d",&x);

printf("%d\n",isprime(x));

}

int isprime(int n)

{

int i=2;

while(i

{

if(n%i==0)

return 0;

i++;

}

return 1;

}

(3)写一个函数reverse( char s[]),将字符串s[]中的字符串倒序输出。试分别用递归和非递归两种形式编写。

递归型:

#include

#include

void res(char s[],int len);

void reverse(char b[]);

void main()

{

char a[100];

printf("请输入一串字符:\n");

gets(a);

reverse(a);

printf("\n");

}

void res(char s[],int len)

{

if(len>=0)

{

printf("%c",s[len-1]);

len--;

res(s,len);

}

}

void reverse(char b[])

{

res(b,strlen(b));

}

非递归型:

#include

void reverse(char s[]);

void main()

{

char s[100];

printf("请输入一串字符\n");

gets(s);

reverse(s);

printf("\n");

}

void reverse(char s[])

{

int j,i=0;

do

{

i++;

}while(s[i]!='\0');

for(j=i-1;j>=0;j--)

printf("%c",s[j]);

}

(4)写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性。判断奇偶性:

#include

int parity(int n);

void main()

{

int x;

printf("please input a number:\n");

scanf("%d",&x);

parity(x);

}

int parity(int n)

{

if(n%2==0)

printf("even\n");

else

printf("odd\n");

return 0;

}

(5)一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行。

#include

#include

int hw(int n);

int isprime(int n);

void main()

{

int i;

int cnt=0;

for(i=10000;i<100000;i++)

{

if(hw(i))

{

if(isprime(i)==1)

{

cnt++;

printf("%d\t",i);

}

}

}

printf("\n合计:%d个\n",cnt);

}

int isprime(int n)

{

int i=2;

while(i

{

if(n%i==0)

return 0;

i++;

}

return 1;

}

int hw(int n)

{

int m=0;

int t=n;

相关主题
文本预览
相关文档 最新文档