C语言上机试题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 Visual C++的使用及顺序结构程序设计
一、实验目的
1、掌握启动和退出VC6的方法。
2、熟悉VC6开发环境。
3、初步掌握简单程序的上机操作基本步骤,熟悉C单文件程序的输入、编译、链接和运行过程。
4、初步掌握程序的编辑修改和调试。
5、熟练使用赋值运算、算术运算等表达式。
6、熟练使用标准输入、输出函数及各种数据类型的格式说明符。
二、实验内容
1、下面C语言程序,其功能是显示字符串“欢迎同学们来到华北水院计算中心!”。
请同学们按照下面的实验指导学习VisualC++6.0的使用。
1.启动VisualC++6.0开发环境
(1)单击“开始”按钮,选择“程序” ——〉“Microsoft Visual Studio 6.0菜单项,单击“MicrosoftVisualC++6.0”,屏幕出现标题为“当时的提示”的窗口。
(2)单击“结束”按钮,关闭窗口,进入开发环境的主窗口。
2.使用Visual C++对一个C程序进行编辑、编译、连接和运行。
⑴分析
Visual C++中程序的开发过程与其它高级语言的开发过程相仿,都要经过编辑、编译、连接和运行四个步骤。
⑵步骤
①编辑
图1-1 New对话框
编辑是将C源程序输入计算机的过程。
在Visual C++主界面下,点击File菜单,选择New菜单项,即可出现New对话框,如图1-1所示。
在弹出窗口中的Files标签页下,选择C++ Source File。
在选项卡右面的File编辑框里输入文件名如“”,在Location编辑框里输入文件路径,如“d:\test”。
点击OK按钮。
将出现编辑窗口,如图1-2所示。
在图1-2所示的右端编辑窗口里输入以下C源程序并保存文件。
include <stdio.h>
void main()
{
printf(" 欢迎同学们来到华北水院计算中心!");
}
图1-2 编辑窗口
②编译
编译是使用系统提供的编译器将文本文件生成机器语言的过程,结果为,由于没有得到系统分配的绝对地址,还不能直接运行,如图1-3所示。
选择Build菜单下的Compile ,计算机将完成对当前源程序的编译。
按提示建立默认工程空间。
编译无错时,将源程序编译为目标文件。
编译结果如图1-4所示。
如果出现运行错误,应该分析错误的原因,例如,是输入数据错误,还是代码错误;如果需要修改源程序文件,还需重新编译、链接和执行。
改正编译窗口下方指出的两个错误,直至编译成功,如图1-5所示。
图1-3 编译源程序
图1-4编译结果
图1-5编译成功
③连接
连接是将目标文件转换为可执行文件的过程。
如图1-6所示选择Build菜单下的Build。
连接无错时,将目标文件连接为。
图1-6 源程序
④运行
运行是执行可执行文件,屏幕输出运行结果。
如图1-7所示选择Build菜单下的Execute。
图1-7 运行程序
运行结果如图1-8所示:
图1-8运行结果
3.关闭系统工作区空间
单击“文件︱关闭工作区”菜单命令,关闭系统工作区空间。
此时读者可以开始输入调试第(2) 个C程序文件。
4.退出开发环境
单击主窗口右上角的“关闭”按钮,退出。
2、验证程序,熟悉编程环境及调试程序的步骤。
已知三角形三条边长a,b,c,计算三角形面积公式为:
s=*(a+b+c)
s
area-
s
-
=
a
-
b
)(
)
s
)(
(c
s
编写程序,要求从键盘输入a,b,c的值,计算并输出三角形面积。
其中源程序代码如下:#include<>
#include<>
void main()
{
double a,b,c,s,area;
printf("input a,b,c:");
scanf("%lf,%lf,%lf",&a,&b,&c);
打印100-200之间的所有素数(按照每行5个显示)
程序代码:
对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:』
2. 编程输出如下上三角形式的九九乘法表。
1 2 3 4 5 6 7 8 9
- - - - - - - - -
1 2 3 4 5 6 7 8 9
4 6 8 10 12 14 16 18
9 12 15 18 21 24 27
16 20 24 28 32 36
25 30 35 40 45
36 42 48 54
49 56 63
64 72
81
程序代码:
对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:』
三、问题讨论
break语句和continue语句在循环结构中使用时有何区别?举例说明。
四、实验总结
1 总结本次实验完成情况、相关知识掌握情况
2 总结本次实验编辑、编译、连接、运行所取得的经验
3 分析本次实验出现的主要错误最直接原因
实验四使用数组的程序设计
一、实验目的
1、正确理解数组的概念,熟练掌握一维数组和二维数组的定义和初始化方法。
2、熟练掌握字符数组和字符串的区别和使用、字符串函数的使用。
3、熟练掌握一维数组、二维数组以及字符串的输入和输出方法。
4、了解数组的地址、数组元素的地址及一维数组和二维数组的存储结构。
5、掌握字符串的结束标志,正确使用字符串的结束标志对字符串进行处理。
6、通过编程和调试程序,加深对数组、字符数组和字符串函数应用的理解。
7、实验前复习数组、字符数组和字符串函数的概念。
二、实验内容
1、打印fabonacci数列的前20项,该数列前两项为1,以后各项均为前相邻两项之和。
程序代码:
#include <>
void main()
{long int f[20]={1,1};
int j;
for(j=2;j<20;j++)
f[j]=f[j-1]+f[j-2];
for(j=0;j<20;j++)
{printf("%15ld",f[j]);
if((j+1)%5==0)
printf("\n");
}
}
对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:』
2、从键盘输入一个班学生(最多30人)的成绩,然后按降序进行排列。
#include <>
#define N 5
void main()
{int a[N],i,j,t;
printf("input scores of students:",N);
for(i=0;i<N;i++)
scanf("%d,",&a[i]);
for(i=0;i<N-1;i++)
for(j=0;j<N-1-i;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
printf("the sorted scores:\n");
for(i=0;i<N;i++)
printf("%10d",a[i]);
printf("\n");
}
3、
程序代码:
对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
c『运行结果:』
3、编写一个程序,利用字符数组实现两个字符串的比较。
(注意不能使用字符串比较函数strcmp())
#include <>
#define n 7
void main()
{char s1[n],s2[n];
int i;
printf("input %d characters\n",n);
scanf("%s\n",s1);
scanf("%s\n",s2);
if(s1!=s2)
{for(i=0);i<n;i++)
{if(s1[i]>s2[i])
{printf("%s>%s",s1,s2);
break;}
else if(s1[i]<s2[i])
{printf("%s<%s",s1,s2);
break;}
else
continue;}
}
else
printf("%s=%s",s1,s2);
}
程序代码:
对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:』
三、问题讨论
1使用%s格式符输入字符串到数组时能否将空格符输入?如果不能该如何使用其它方法解决?举例说明
2数组在“定义”时和“引用”时所带的下标有何区别?
四、实验总结
需多操作才能熟练掌握各种C语言.
1 总结本次实验完成情况、相关知识掌握情况
2 总结本次实验编辑、编译、连接、运行所取得的经验
3 分析本次实验出现的主要错误最直接原因
实验五函数与编译预处理
一、实验目的
1、掌握函数定义及调用的方法,正确理解函数调用时实参和形参的对应关系;
2、掌握并正确使用数组作为函数参数;
3、掌握函数的嵌套调用和递归调用的方法;
4、理解变量的作用域和生存期;
5、掌握宏定义、文件包含。
二、实验内容
1、分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。
#include <>
int fun(int k)
{
int result=1,i;
for(i=1;i<=k;i++)
{
result=result*i;
}
return result;
}
void main()
{
int n;
printf("Input n please(1<=n<=10)");
scanf("%d",&n);
printf("%d!=%d\n",n,fun(n));
}
『运行结果:』
2、编写程序,输出2~n之间的所有素数,n由键盘输入。
要求判断素数的过程要写在函数中,由主函数调用实现,并写出2组以上程序运行结果。
程序代码:
#include<>
#include<>
void main()
{ int i,j,k,n,m=0;
printf("input n please!\n");
scanf("%d",&n);
for(i=2;i<=n;i++)
{ j=sqrt(i);
for(k=2;k<=j;k++)
if(i%k==0)
break;
if(k>j)
{m++;
printf("%3d",i);
if(m%10==0)
printf("\n");
}
}
}
『运行结果:』
3、编程实现输入8个学生某门功课的成绩,用函数求出平均分,并在主函数中输出平均分以及高于平均分的同学的成绩。
并写出2组以上程序运行结果。
程序代码:
#include<>
float average(float x[8])
{ float sum;
int k;
sum=x[0];
for(k=1;k<8;k++)
{ sum=sum+x[k];
}
return(sum/8);
}
void main()
{ float cj[8],aver;
int m,j;
printf("input scores of eight students:\n");
for(j=0;j<8;j++)
scanf("%f",&cj[j]);
aver=average(cj);
for(m=0;m<8;m++)
{ if(cj[m]>aver)
printf("高于平均分:%f\n",cj[m]);
}
printf("average=%6.2f\n",aver);
}
运行结果:』
三、问题讨论
1、举例说明自动变量和静态变量的区别。
2、
答:自动变量是指那些当程序的流程转到该函数时才开辟的单元,执行后又立即释放的变量。
静态变量则是指在整个程序运行期间分配固定存储空间的变量。
四、实验总结
1 总结本次实验完成情况、相关知识掌握情况
2 总结本次实验编辑、编译、连接、运行所取得的经验
3 分析本次实验出现的主要错误最直接原因
答:1.实验完成,知识还未完全掌握。
2.要注意书写格式的正确。
3.主要原因是对知识的不理解。
实验六使用指针的程序设计
一、实验目的
6、掌握指针的概念,会定义和使用指针变量;
7、能正确使用数组的指针和指向数组的指针变量;
8、熟悉指针作为函数参数的定义和调用方法;
9、能正确使用字符串的指针和指向字符串的指针变量。
二、实验内容
1.分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。
#include <>
void main()
{
int *p1,*p2,*p;
int a,b;
printf("Input a b please");
scanf("%d%d",&a,&b);
p1=&a;
p2=&b;
if(a>b)
{ p=p1;p1=p2;p2=p;}
printf("*p1=%d, *p2=%d\n",*p1,*p2);
printf("a=%d, b=%d\n",a,b);
}
『运行结果:』
2.下列程序的功能是分别求出数组中所有奇数之和以及所有偶数之和。
形参n给了数组
中数据的个数,利用指针odd返回奇数之和,利用指针even返回偶数之和。
请在下面空白处将实现这一功能的函数完善,并且调试运行出结果。
#include <>
#define N 10
void fun(int *a,int n,int *odd,int *even)
{
}
void main()
{
int a[N]={1,10,2,3,19,6},i,n=6,odd,even;
printf("The original data is:\n");
for(i=0;i<n;i++)
printf("%5d",*(a+i));
printf("\n\n");
fun(a,n,&odd,&even);
printf("The sum of odd numbers:%d\n",odd);
printf("The sum of even number:%d\n",even);
}
『运行结果:』
3.编程实现从键盘输入一个字符ch和一个字符串str,利用字符指针实现删除字符串
str中和字符ch相等所有字符,然后输出字符串str。
运行程序并写出2组以上程序运行结果。
程序代码:
『运行结果:』
三、问题讨论
1. 简述字符串数组和字符指针的区别,举例说明。
四、实验总结
1 总结本次实验完成情况、相关知识掌握情况
答:通过本次实验我学习了关于指针的一些应用和怎样用指针来解决一些实际问题。
2 总结本次实验编辑、编译、连接、运行所取得的经验
3 分析本次实验出现的主要错误最直接原因
答:对课本上的知识记忆的不够牢固,对一些知识似懂非懂的,理解的不清楚。
还有就是对计算机的的操作不够熟练,操作起来很慢,还经常出错。
以后需加强练习。
实验七、结构体程序设计
一、实验目的
1.掌握结构体类型变量和数组、共用体类型变量和数组以及枚举类型变量的定义和使用。
2.掌握链表的基本,初步学会对链表进行操作。
3.通过编程和调试程序,加深对结构体和共用体概念的理解。
4.实验前复习结构体类型、共用体类型和枚举类型的概念。
二、实验内容及步骤:
编程题:某单位进行选举,有5位候选人:zhang、wang、li、zhao、liu。
编写一个统计每人得票数的程序。
要求每个人的信息使用一个结构体表示,5个人的信息使用结构体数组。
程序代码:
#include <>
#include <>
#define M 5
#define N 10
struct per
{char name[20];
int t;
}leader[M]={"zhang",0,"wang",0,"li",0,"zhao",0,"ma",0};
void main()
{int i,j;
char sec[20];
for(i=0;i<N;i++)
{printf("%d please input your result:",i+1);
scanf("%s",sec);
for(j=0;j<M;j++)
{if(strcmp(leader[j].name,sec)==0)
leader[j].t++;}}
printf("the result:\n");
for(j=0;j<M;j++)
printf("%s\t%d\n",leader[j].name,leader[j].t);
}
对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:』
2、编程题:设张三20岁、李四22岁、王平23岁,编程输出3人中年龄最小者的姓名和年龄。
程序代码:
#include <>
#define N 3
struct peo
{char name[20];
int old;
}people[N]={"张三",20,"李四",22,"王平",23};
void main()
{int i=0,min=people[0].old,t=0;
for(;i<N;i++)
{if(people[i].old<min)
{min=people[i].old;
t=i;}}
printf("姓名:%s\n年龄:%d\n",people[t].name,min);
}
对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:』
三、问题讨论
1、结构体变量何时可以整体引用,何时只能引用结构体成员变量?
2、结构体和数组有什么区别?
答:‘结构体’是一种构造类型,它是由若干成员组成的。
每一个可以是一个基本数据类型或者可以又是一个构造类型。
结构体既然是一种构造而成的数据类型,那么在说明和使用之前必须先定义它。
如同定义函数一样。
四、实验总结
1 总结本次实验完成情况、相关知识掌握情况
2 总结本次实验编辑、编译、连接、运行所取得的经验
3 分析本次实验出现的主要错误最直接原因。