C语言程序设计实验报告
C语言程序设计实验报告
2021~2022学年第二学期
实验一
实验项目名称:C程序的运行环境和运行C程序的方法
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1.了解在Visual C++ 6.0环境下如何编辑、编译、连接和运行一个C程序;
2.通过运行简单的C程序,初步了解C源程序的特点。
二、预习内容:
教材《C语言程序设计教程》第1章。
三、实验内容:
1.编程实现从键盘输入a,b,c三个整数,求这三个数之和。
源程序:
运行结果:
2.编程实现从键盘输入任意两个整数,进行值的交换并输出交换后的值。
源程序:
运行结果:
成绩
实验二
实验项目名称:简单的输入输出及顺序程序设计
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1. 掌握整型、实型与字符型数据的正确输入方法(scanf函数的使用);
2. 掌握整型、实型与字符型数据的正确输出方法(printf函数的使用);
3. 掌握编写顺序程序的方法。
二、预习内容:
教材《C语言程序设计教程》第3章。
三、实验内容:
1. 下面程序的功能是:从键盘输入2个整数,输出它们的和。
#include <stdio.h>
int main( )
{
int a,b,sum;
sum=a+b;
printf("%d+%d=%d\\n",a,b,sum);
return 0;
}
请在横线上填写一条合适的语句,使程序完整,然后上机运行该程序。
运行结果:
2.编写程序,计算并输出球的表面积和体积,球的半径在程序运行时由键盘输入。
源程序:
运行结果:
3.编写程序,要求从键盘输入一个华氏温度f,转换成摄氏温度c输出,转换公式为
,输出结果保留小数点后2位。
源程序:
运行结果:
4.编写程序,从键盘输入一个三位正整数,输出该数的逆序数。如:输入123,输出321
源程序:
运行结果:
实验三
实验项目名称:选择结构程序设计
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1. 正确使用关系运算符和关系表达式;
2. 正确使用逻辑运算符和逻辑表达式;
3. 熟练使用if语句实现选择结构程序;
4. 熟练使用switch语句实现多分支选择结构程序。
二、预习内容:
教材《C语言程序设计教程》第4章。
三、实验内容:
1. 下面程序的功能是:输入学生成绩,若成绩在90分以上,输出“Excellent!”;若成绩在60—89分之间,输出“Pass!”;若成绩在60分以下,输出“Fail!”。请将程序补充完整,并上机运行程序。
#include <stdio.h>
main( )
{
int score;
printf("请输入分数(0–100):");
scanf("%d",);
if(score>100 || score<0)
printf("Input Error!\\n");
else if()
printf("Excellent!\\n");
else if()
printf("Pass!\\n");
printf("Fail!\\n");
}
运行该程序4次,分别输入4个不同的数据,对应4种不同的情况,记录运行结果:
输入数据
运行结果
2. 有如下分段函数:
编写程序,要求输入的值,求解对应的值并输出。
源程序:
运行该程序3次,分别输入3个不同数据,分别对应3个不同区间,记录结果。
输入数据
运行结果
3. 某商场进行节日优惠促销活动,活动细则如下: 购物金额10000元以上(含5000元),实际付款为购物金额的80%; 购物金额5000到10000元之间(含5000元,不含10000元),实际付款90%; 购物金额3000到5000元之间(含3000,不含5000),实际付款95%; 3000元以下无优惠。
编写程序,要求从键盘输入购物金额(为实型数据),计算并输出优惠后的实际付款额(小数 点后保留2位)。
源程序:
(1)采用if语句的源程序:
(2)采用switch语句的源程序:
分别运行每个程序4次,输入4个不同数据,分别对应4个不同区间,记录结果。
输入数据
运行结果
实验四
实验项目名称:简单循环程序设计
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1. 掌握循环程序的基本结构;
2. 熟练掌握while、do—while及for语句,并会用来编写循环结构程序。
二、预习内容:
教材《C语言程序设计教程》第5章。
三、实验内容:
1. 编写程序,求
的和。(要求用while语句)
源程序:
运行结果:
2. 有一个分数序列:
,
,
,
…… 编写程序,求这个数列的前20项之和。(要求用for语句,且结果保留6位小数)
源程序:
运行结果:
3. 一个乒乓球从100米高空自由落下,每次落地后,反跳回原高度的一半再落下。求它在第10次落地时,共经过多少距离以及第10次落地后乒乓球反弹的高度。(选择自己擅长的循环语句,结果保留6位小数。)
源程序:
运行结果:
实验五
实验项目名称:多层循环程序设计及break、continue语句在循环程序中的应用
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1. 掌握多层循环程序的执行过程及设计方法;
2. 掌握break及continue语句在循环程序中的使用方法。
二、预习内容:
教材《C语言程序设计教程》第5章。
三、实验内容:
1. 编写一个程序,打印一个如下图所示的图形。
*
***
*****
*******
源程序:
2. 编程输出100以内的所有素数。
源程序:
运行结果:
3. 编程输出前2个水仙花数(所谓“水仙花数”,是指一个3位数,其各位数字的立方和等于该数本身,例如,153=13+53+33,所以153是一个水仙花数)。
源程序:
运行结果:
实验六
实验项目名称:数组及其应用
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1. 掌握一维数组的定义、赋值、输入输出及其应用;
2. 掌握二维数组的定义、赋值、输入输出及其应用;
3. 掌握字符数组的定义、赋值、输入输出及其应用。
二、预习内容:
教材《C语言程序设计教程》第6章。
三、实验内容:
1. 编程在一个已按从小到大排列好的数组中插入一个数,要求插入该数后的数组仍按原规律排列。
源程序:
运行结果:
2. 编程输出杨辉三角形(书本151页编程题第4小题)。
源程序:
3. 编程输入一行字符,将其中的所有英文字母组成一个新的字符串并输出。
源程序:
运行结果:
实验七
实验项目名称:函数的定义及调用
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1.熟悉定义函数的方法;
2. 掌握函数的调用方式及主调函数与被调函数间的信息传递方法;
3. 掌握递归方法以及会用函数来实现递归。
二、预习内容:
教材《C语言程序设计教程》第7章。
三、实验内容:
1. 编写一个判断素数的函数prime,在主函数中输入一个正整数,调用prime判断是否是素数,结 果在主函数中输出。
源程序:
运行结果:
2. 编写一个函数gbs,计算两个正整数的最小公倍数。在主函数中输入两个正整数,调用函数求它 们的最小公倍数,结果在主函数中输出。
源程序:
运行结果:
3. 用递归方法求解猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘了多少个桃子。
源程序:
运行结果:
实验八
实验项目名称:数组名作函数参数及变量的作用域与存储方式
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1.掌握数组名作函数参数时形参与实参的定义方法;
2.会使用数组名作函数参数在主调函数与被调函数间传递多个数据;
3.掌握变量的作用域(局部变量与全局变量);
4. 掌握变量的存储方式(动态存储与静态存储)。
二、预习内容:
教材《C语言程序设计教程》第7章。
三、实验内容:
1. 运行以下程序,并分析结果。
#include <stdio.h>
int x=8,y=3;
int max(int a,int b)
{
int c;
if(a>b) c=a;
else c=b;
return c;
}
int main( )
{
int x=4,maxi;
maxi=max(x,y);
printf("%d\\n",maxi);
return 0;
}
2. 运行以下程序,并分析结果。
#include <stdio.h>
int f(int a)
{
static int b=0;
b=b+a;
return b;
}
int main( )
{
int x=1,y1,y2;
y1=f(1);
y2=f(1);
printf("y1=%d,y2=%d\\n",y1,y2);
return 0;
}
3. 在主函数中输入10个整数,调用函数sort将它们按从小到大的顺序排序,排序结果在主函数中输出。
四、源程序清单:
3.
五、实验结果:
1. 运行结果:
2. 运行结果:
3. 运行结果:
实验九
实验项目名称:指针及其应用
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的:
1.掌握指针和间接访问的概念,会定义和使用指针变量;
2. 能利用指针变量作函数参数得到多个要改变的值;
3.能正确定义指向数组的指针变量,并能用其对数组进行访问;
4.能正确定义指向字符串的指针变量,并能用其对字符串进行访问。
二、预习内容:
教材《C语言程序设计教程》第9章。
三、实验内容:
1. 在主函数中输入2个整数,调用swap函数将它们的值交换,结果在主函数中输出。
2. 在主函数中输入10个整数,调用函数sum求它们的和,结果在主函数中输出(要求:实参用数组名,形参用指针变量)。
3. 在主函数中输入一个字符串,调用converse函数将该字符串逆序,结果在主函数中输出。(要求:实参用字符数组名,形参用指针变量)。
四、源程序清单:
1.
2.
3.
五、实验结果:
1. 运行结果:
2. 运行结果:
3. 运行结果:
实验十
实验项目名称:构造数据类型
所使用的工具软件及环境:Visual C++ 6.0
一、实验目的
1.掌握结构体类型变量和结构体类型指针的定义和使用;
2.掌握结构体类型数组的定义和使用;
3.掌握共用体类型、枚举类型、用户自定义类型的定义和使用。
二、预习内容
教材《C语言程序设计》第10章。
三、实验内容
1.调试、运行下面的程序一。
#include \”stdio.h\”
union data
{
int a;
float b;
char c;
};
void main( )
{
union data d={65};
printf(\”%d\\n\”,d.a);
printf(\”%f\\n\”,d.b);
printf(\”%c\\n\”,d.c);
}
程序的运行结果(或其截图):
2.下面程序二中结构体数组stu1[ ]存放了五个同学的姓名name[ ]和年龄age信息。该程序的功能是想输出成员年龄age最小的元素的各成员值,但程序中有错误,请调试、运行该程序。
已知结构体数组stu1[ ]中各元素的成员信息是:
结构体数组元素
成员name[ ]
成员age
stu1[0]
张三
20
stu1[1]
李四
18
stu1[2]
王五
19
stu1[3]
孙六
20
stu1[4]
陈七
19
#include \”stdio.h\”
#define N 5
typedef struct students
{
char name[9];
int age;
}STUDENT[N];
void main( )
{
STUDENT stu,stu1[N];
int i,j,k;
struct students *pstu=&stu[0],*t=stu1[0];
printf(\”请输入同学的姓名、年龄:\\n\”);
for(i=0;i<N;i++)
scanf(\”%s%d\”,stu[i].name,&stu[i].age);
for(i=0;i<N-1;i++)
{
k=i;
for(j=i+1;j<N;j++)
{
if(((pstu+j)->age)>((pstu+k)->age))
k=j;
}
*t=*(pstu+k);
*(pstu+k)=*(pstu+i);
*(pstu+i)=*t;
}
printf(\”年龄最小的同学:姓名 %s,年龄 %d\\n\”,stu[0].name,stu[0].age);
}
改正后的程序二:
程序的运行结果(或其截图):
3.编写程序三。键盘输入某日,计算并显示该日在本年度中是第几天?例如,若输入是:2015 10 8(表示2015年10月8日),则程序运行结果是:2015年10月8日是2015年中的第281天。要求:用包括年、月、日信息的结构体变量。
代码如下:
程序的运行结果(或其截图):
实验十一
实验项目名称:文件
一、实验目的
1.掌握文件、缓冲文件系统、文件指针的概念。
2.学会使用文件的打开、关闭、读、写等文件操作函数。
二、预习内容
教材《C语言程序设计》第11章。
三、实验内容
1.编写程序一。从键盘输入一个字符串(以“!”结束),将其中的小写字母全部转换成大写字母,然后输出到磁盘文件“test.txt”中保存。
代码如下:
插入文件“test.txt”的内容:
2.编写程序二。已有十位同学的三门课成绩等信息:
学号
姓名
高等数学
大学英语
体育
总分
201501
赵一
92
74
91
201502
钱二
67
88
74
201503
张三
89
68
95
201504
李四
95
94
90
201505
王五
85
75
65
201506
孙六
87
79
73
201507
陈七
82
81
69
201508
刘八
73
89
70
201509
周九
66
92
68
201510
谢十
78
85
93
由键盘输入以上数据,计算每个同学的总分,将原有数据和计算出来的总分存放在磁盘文件“stud.txt”中。
代码如下:
插入文件“stud.txt”的内容:
C/C++语言教程,C语言程序设计入门,C++编程基础教学视频
大家好,我是老盖,这是C/C++语言教学第一课,本文的主要目的就是简单介绍了C/C++,详细教学视频在在文章最下方,看视频的朋友可以到文章最下方直接看视频。其他C/C++教学视频请在我的视频合集里边依次观看,谢谢。
首先下载
Visual Studio Community 2015 with Update 3 (x86 and x64) – DVD (Chinese-Simplified)
这个是下载地址。
http://download.microsoft.com/download/5/d/1/5d1ec81e-bc59-448f-9ab6-27636d5cc18a/vs2015.3.com_chs.iso
下载安装好后运行。这个是主界面。
然后我们新建Win32控制台程序。
在设置的地方用默认的就行。
出现编程界面了以后。现在就准备开始写程序。
开始写我们第一行程序。
程序写完毕后,编译运行一下。
详细视频在这里。
视频加载中…
其他C/C++教学视频请在我的视频合集里边依次观看,谢谢。
C语言程序设计
一、填空题(每空1分,共10分) 1. C语言的数据类型中,构造类型包括:数组、 和 。 2. 在C程序中,指针变量能够赋 值或 值。 3. C目标程序经 后生成扩展名为exe的可执行程序文件。 4. 设有定义语句 static char s[5」; 则s[4]的值是 。 5. 设x为int型变量。与逻辑表达式!x等价的关系表达式是 。 6. 若一全局变量只允许本程序文件中的函数使用,则该变量需要使用的存储类别是 。 7. 磁盘文件按文件读写方式分类可以为顺序存取文件和 。 8. 设有下列结构体变量xx的定义,则表达式sizeof(xx)的值是_________。 struct { long num; char name[20]; union{float y; short z;} yz; }xx; 二、单项选择题(每小题1.5分,共30分)
1. 设有定义int x=8, y, z; 则执行y=z=x++, x=y= =z; 语句后,变量x值是( ) A、0 B、1 C、8 D、9 2. 有以下程序 main( ) { int i=1,j=1,k=2; if((j++‖k++)&&i++) printf(\”%d,%d,%d\\n\”,i,j,k);} 执行后输出结果是( ) A、 1,1,2 B、2,2,1 C、 2,2,2 D、2,2,3 3. 已知i、j、k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1、j的值为2、k的值为3,以下选项中正确的输入语句是( ) A、 scanf( “%2d%2d%2d”,&i,&j,&k); B、 scanf( “%d %d %d”,&i,&j,&k); C、 scanf( “%d,%d,%d”,&i,&j,&k); D、 scanf( “i=%d,j=%d,k=%d”,&i,&j,&k); 4. 有以下程序 main() { int a=5,b=4,c=3,d=2; if(a>b>c) printf(\”%d\\n\”,d); else if((c-1>=d)= =1) printf(\”%d\\n\”,d+1); else printf(\”%d\\n\”,d+2); } 执行后输出结果是 ( ) A、2 B、3 C、 4 D、 编译时有错,无结果 5. 以下程序段 ( ) x=1; do { x=x*x;} while (!x); A、 是死循环 B、 循环执行二次 C、 循环执行一次 D、 有语法错误 6. 以下不能正确定义二维数组的选项是( ) A、 int a[2][2]={{1},{2}}; B、 int a[][2]={1,2,3,4}; C、 int a[2][2]={{1},2,3}; D、 int a[2][]={{1,2},{3,4}}; 7. 有以下程序 main() { int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0; for(i=0;i<4;i++) s+=aa[i][1]; printf(“%d\\n”,s); } 程序运行后的输出结果是 ( ) A、11 B、19 C、 13 D、20 8. 以下程序的输出结果是 ( ) main() { char ch[3][5]={\”AAAA\”,\”BBB\”,\”CC\”}; printf(\”\\\”%s\\\”\\n\”,ch[1]); } A、\”AAAA\” B、\”BBB\” C、\”BBBCC\” D、\”CC\” 9. 有以下程序 #define f(x) x*x main( ) { int i; i=f(4+4)/f(2+2); printf(“%d\\n”,i); } 执行后输出结果是( ) A、28 B、22 C、16 D、4 10. 决定C语言中函数返回值类型的是( )。 A、return语句中的表达式类型 B、调用该函数的主调函数类型 C、调用函数时临时指定的类型 D、定义函数时在函数首部中所指定的类型(若缺省,则隐含为int型)。 11. 系统对预处理命令(如宏替换、文件包含、条件编译)的处理时机是( )。 A、编译源程序 B、编译源程序之前 C、连接目标文件时 D、运行程序时 12. 在位运算中,操作数每左移一位,其结果相当于( )
A、操作数乘以2 C、操作数除以2 B、操作数除以4 D、操作数乘以4
13. 下述描述中不正确的是( )。 A、字符型数组中可以存放字符串 B、可以对字符型数组进行整体输入、输出 C、可以对整型数组进行整体进行输入、输出 D、不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值 14. 若有以下定义 int a[2][3],则对a数组第i行第j列元素的正确引用是( ) A、 *(*(a+i)+j) B、 (a+i)[j] C、 *(a+i+j) D、 *(a+i)+j 15. 有以下程序 void fun(char *a, char *b) { a=b; (*a)++; } main() { char c1=\’A\’,c2=\’a\’,*p1,*p2; p1=&c1 p2=&c2 fun(p1,p2); printf(\”%c%c\\n\”,c1,c2); } 程序运行后的输出结果是( )
A、 Ab B、 aa C、 Aa D、 Bb
16. 已定义以下函数 Fun (char *p2, char * p1) { while((*p2=*p1)!=\’ \\0\’){ p1++;p2++; }} 函数Fun的功能是( ) A、将p1所指字符串复制到p2所指内存空间 B、将p1所指字符串的地址赋给指针p2 C、对p1和p2两个指针所指字符串进行比较 D、检查p1和p2两个指针所指字符串中是否有\’\\0\’ 17. 设有以下结构体类型: struct st { char name[8]; int num; float s[4]; }student[50]; 并且结构体数组student中的元素都已有值,若要将这些元素写到硬盘文件fp中,以下不正确的形式是( ) A、 fwrite(student,sizeof(struct st),50,fp); B、 fwrite(student,50*sizeof(struct st),1,fp); C、 fwrite(student,25*sizeof(struct st),25,fp); D、 for(i =0;i<50;i++) fwrite(student+i, sizeof(struct st),1,fp);
18. 若有说明语句
char a[ ]= \”It is mine\”;
char *p=\” It is mine\”;
则以下不正确的叙述是( )
A、 a+1表示的是字符t的地址
B、 p指向另外的字符串时,字符串的长度不受限制
C、 p变量中存放的地址值可以改变
D、 a中只能存放10个字符
19. 当调用函数时,实参是一个数组名,则向函数传送的是 ( )
A、 数组的长度
B、 数组的首地址
C、 数组每一个元素的地址
D、 数组每一个元素中的值
20. 设有变量说明 int a=3,b=6; char c; 若执行赋值语句 c=(a^b)<<2;
则c的二进制值是( )。
A、00011100 B、00000111 C、00000001 D、00010100
三、阅读程序,将运行结果写到各题右侧的空白处(每小题4分,共20分)
1.#include <stdio.h>
main()
{ char str[]=\”1234567\”;
int i;
for(i=0; i<7; i+=3)
printf(\”%s\\n\”, str+i);
}
2.#include <stdio.h>
main()
{ int i;
for(i=0;i<3;i++)
switch(i)
{ case 0: printf(\”%d\”,i);
case 2: printf(\”%d\”,i);
default: printf(\”%d\”,i);
}
}
3.#include <stdio.h>
main()
{
int i;
for (i=1;i<6;i++)
{
if (i%2){
printf(\”#\”);
continue; }
printf(\”*\”);
}
printf(\”\\n\”);
}
4.#include <stdio.h>
int b=1;
func (int p)
{
static int d=5;
d+=p;
printf (\”%d,\”,d);
return (d );
}
main ()
{
int a=3;
printf(\”%d\\n\”,func(a+func(b)));
}
5.#include <stdio.h>
struct stu
{ int num; char name[10]; int age;};
void py(struct stu *p)
{printf(\”%s\\n\”, (*p).name);}
main()
{
struct stu student[3]={{1001,\”Sun\”,25},{1002,\”Ling\”,23},{1003,\”Shen\”,22}};
py(student+2);
}
四、阅读程序或程序段,填空(每小题4分,共20分)
1.下面程序的功能是调用fun函数以删除字符串中指定的字符,请填空。
void fun(char s[],int c)
{ int i,j;
for(i=0,j=0;s[i]!=\’\\0\’;i++)
if ( )
s[j]=\’\\0\’;
}
main()
{ char str[]=\”abcdefgAbcd\”, ch;
scanf(\”%c\”,&ch);
fun(str,ch);
printf(\”%s\\n\”,str);
}
2.下面程序是按学生姓名查询其排名和平均成绩,查询可连续进行直到键入0时结束,请填空。
#include<string.h>
#define NUM 4
struct student
{ int rank;
char *name;
float score;};
stu[]={3,”Tom”,89.3,4,”Mary”,78.2,1, ”Jack”,95.1,2, ”Jim”,90.6};
main()
{ char str[10]; int i;
do
{ printf(\”Enter a name: \”);
scanf(\”%s\”,str);
for(i=0;i<NUM;i++)
if ( )
{ printf(\”%s,%d,%f\\n\”,stu[i].name, stu[i].rank,stu[i].score); break;}
if(i>=NUM) printf(\”Not found\\n\”);
}while(strcmp(str,”0”)!=0);
}
3.下面程序是用“顺序查找法”查找数组中的元素,请填空。
main()
{ int a[8]={25,57,48,37,12,92,86,33};
int i, x;
scanf(\”%d\”, &x);
for(i=0;i<8;i++)
if ( )
{printf(\”Found!The index is :%d\\n\”, i);break;}
if( )
printf(“Can’t found! \”);
}
4.下面程序由键盘输入一些字符,逐个把它们送到磁盘文件中,直到输入一个“!”为止,请填空。
#include<stdio.h>
main( )
{ FILE *fp;
char ch,fname[10];
printf(\”Input name of file: \\n\”); gets(fname);
if((fp=fopen(fname, \”w\”))= =NULL)
{printf(\”cannot open \\n\”);exit(0);}
printf(\”Enter data:\\n\”);
while ( ) fputc ( );
fclose(fp);
5.下面函数 fun 的功能是:将在字符串s中下标为奇数位置上的字符,紧随其后重复出现一次,放在一个新串t中, 例如:当s中的字符串为:\”ABCDEF\” 时,则t中的字符串应为:\”BBDDFF\”。
#include<string.h>
void fun (char *s, char *t)
{ int i,j;
for(i=0;i<=strlen(s);i++)
{ ;
;
}
}
main()
{ char s[100],t[100];
scanf(\”%s\”,s);
fun(s,t);
printf(\”The result is: %s\\n\”, t);
}
五、编程题(每小题10分,共20分)
1.编一个程序,将输入的一个字符串按反序存放,要求在主函数中输入字符串并输出反序后的字符串,在被调用函数中完成反序存放。例如:输入字符串“abcdefg”,输出“gfedcba”。
2.有一个班5位学生,各学4门课程,查找出有一门以上课程不及格的学生,打印出其全部课程的成绩。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。