C语言上机试题及答案.docx
- 文档编号:13091134
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:31
- 大小:338.94KB
C语言上机试题及答案.docx
《C语言上机试题及答案.docx》由会员分享,可在线阅读,更多相关《C语言上机试题及答案.docx(31页珍藏版)》请在冰点文库上搜索。
C语言上机试题及答案
实验一VisualC++6.0的使用及顺序结构程序设计
一、实验目的
1、掌握启动和退出VC6的方法。
2、熟悉VC6开发环境。
3、初步掌握简单程序的上机操作基本步骤,熟悉C单文件程序的输入、编译、链接和运行过程。
4、初步掌握程序的编辑修改和调试。
5、熟练使用赋值运算、算术运算等表达式。
6、熟练使用标准输入、输出函数及各种数据类型的格式说明符。
二、实验内容
1、下面C语言程序,其功能是显示字符串“欢迎同学们来到华北水院计算中心!
”。
请同学们按照下面的实验指导学习VisualC++6.0的使用。
1.启动VisualC++6.0开发环境
(1)单击“开始”按钮,选择“程序”——〉“MicrosoftVisualStudio6.0菜单项,单击“MicrosoftVisualC++6.0”,屏幕出现标题为“当时的提示”的窗口。
(2)单击“结束”按钮,关闭窗口,进入VC6.0开发环境的主窗口。
2.使用Visual C++6.0对一个C程序进行编辑、编译、连接和运行。
⑴分析
Visual C++6.0中程序的开发过程与其它高级语言的开发过程相仿,都要经过编辑、编译、连接和运行四个步骤。
⑵步骤
①编辑
图1-1 New对话框
编辑是将C源程序输入计算机的过程。
在Visual C++6.0主界面下,点击File菜单,选择New菜单项,即可出现New对话框,如图1-1所示。
在弹出窗口中的Files标签页下,选择C++ Source File。
在选项卡右面的File编辑框里输入文件名如“Exa.c”,在Location编辑框里输入文件路径,如“d:
\test”。
点击OK按钮。
将出现编辑窗口,如图1-2所示。
在图1-2所示的右端编辑窗口里输入以下C源程序并保存文件。
图1-2 编辑窗口
②编译
编译是使用系统提供的编译器将文本文件Exa.c生成机器语言的过程,结果为Exa.obj,由于没有得到系统分配的绝对地址,还不能直接运行,如图1-3所示。
选择Build菜单下的Compile Exa.c,计算机将完成对当前源程序的编译。
按提示建立默认工程空间。
编译无错时,将源程序Exa.c编译为目标文件Exa.obj。
编译结果如图1-4所示。
如果出现运行错误,应该分析错误的原因,例如,是输入数据错误,还是代码错误;如果需要修改源程序文件,还需重新编译、链接和执行。
改正编译窗口下方指出的两个错误,直至编译成功,如图1-5所示。
图1-3 编译源程序
图1-4编译结果
图1-5编译成功
③连接
连接是将目标文件Exa.obj转换为可执行文件Exa.exe的过程。
如图1-6所示选择Build菜单下的Build Exa.exe。
连接无错时,将目标文件Exa.obj连接为Exa.exe。
图1-6 源程序
④运行
运行是执行可执行文件Exa.exe,屏幕输出运行结果。
如图1-7所示选择Build菜单下的Execute Exa.exe。
图1-7 运行程序
运行结果如图1-8所示:
图1-8运行结果
3.关闭系统工作区空间
单击“文件︱关闭工作区”菜单命令,关闭系统工作区空间。
此时读者可以开始输入调试第
(2)个C程序文件。
4.退出VC6.0开发环境
单击主窗口右上角的“关闭”按钮,退出VC6.0。
2、验证程序,熟悉VC6.0编程环境及调试程序的步骤。
已知三角形三条边长a,b,c,计算三角形面积公式为:
s=0.5*(a+b+c)
编写程序,要求从键盘输入a,b,c的值,计算并输出三角形面积。
其中源程序代码如下:
#include
#include
voidmain()
{
doublea,b,c,s,area;
printf("inputa,b,c:
");
scanf("%lf,%lf,%lf",&a,&b,&c);//输入三角形的三条边
s=(a+b+c)/2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c))//求三角形的面积
prinf("area=%f\n",area);
}
具体要求:
(1)在VC6.0环境中输入上述源程序。
(2)对源程序进行编译连接,若有错误请调试修改。
(3)运行程序,并输入三条边长,观察程序运行结果。
图1-9为程序运行时,当输入三条边长分别为3,4,5时的运行结果,可作为参考。
图1-9上述程序的运行结果
三、问题讨论
1、使用printf函数输出数据时如果想使数据左对齐该如何设置?
2、使用scanf函数时,输入项为何必须是变量地址而不是变量名?
四、实验总结
1总结本次实验完成情况、相关知识掌握情况
2总结本次实验编辑、编译、连接、运行所取得的经验
3分析本次实验出现的主要错误最直接原因
实验二选择结构程序设计
一、实验目的
1、熟悉VC6.0编程环境。
2、进一步熟悉用VC6.0调试C语言源程序的过程。
3、熟练使用关系表达式和逻辑表达式作为if语句的条件判断。
4、熟练掌握if语句和switch语句的使用方法。
二、实验内容
1、身高预测
每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。
小孩成人后身高与其父母身高和自身性别密切相关。
设faHeight为其父身高,moHeight为其母身高,身高预测公式为:
男性成人时身高=(faHeight+moHeight)*0.54(cm)
女性成人时身高=(faHeight*0.923+moHeight)/2(cm)
此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。
编程从键盘输入你的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示喜爱,输入字符N表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。
程序代码:
:
#include
main()
{
charsex;/*孩子的性别*/
charsports;/*是否喜欢体育运动*/
chardiet;/*是否有良好的饮食习惯*/
floatmyHeight;/*孩子身高*/
floatfaHeight;/*父亲身高*/
floatmoHeight;/*母亲身高*/
printf("你是男孩(M)还是女孩(F):
");
scanf("%c",&sex);/*在前加一个空格,将存于缓冲区的回车符读入*/
printf("你爸多高(cm):
");
scanf("%f",&faHeight);
printf("你妈多高(cm):
");
scanf("%f",&moHeight);
printf("你喜欢运动吗(Y/N)?
");
scanf("%c",&sports);/*在前加一个空格,将存于缓冲区的回车符读入*/
printf("你有一个良好的生活习惯吗(Y/N)?
");
scanf("%c",&diet);/*在前加一个空格,将存于缓冲区的回车符读入*/
if(sex=='M'||sex=='m')
myHeight=(faHeight+moHeight)*0.54;
else
myHeight=(faHeight*0.923+moHeight)/2.0;
if(sports=='Y'||sports=='y')
myHeight=myHeight*(1+0.02);
if(diet=='Y'||diet=='y')
myHeight=myHeight*(1+0.015);
printf("你将来的身高是%f(cm)\n",myHeight);
}
设计多组测试数据对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:
』
自己弄运行信息结果吧
2、使用switch语句实现下面程序。
输入一个学生的两门课成绩(百分制),计算该学生的总分并要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。
总分在180分以上为‘A’,160~179分为‘B’,140~159分为‘C’,120~139分为‘D’,120分以下为‘E’。
具体要求:
①学生的两门课成绩通过键盘输入,成绩应该都为整数,输入之前要有提示信息。
②若输入的成绩不是百分制成绩,则给出错误提示信息,并且不再进行下面的等级评价;若输入的成绩是百分制成绩,则计算总分,并根据要求评价等级。
③按下面形式输出结果:
总分----〉等级
如:
186----〉A
把正确的程序源代码写在下面。
程序代码:
#include
main()
{
intscore1,score2,sum,mark;
printf("请输入你的成绩:
");
scanf("%d%d",&score1,&score2);
sum=score1+score2;
mark=sum/10;/*采取整除方法,将mark取值压缩到有限的去值范围内*/
switch(mark)
{
case20:
case19:
case18:
printf("%d---->A\n",sum);
break;
case17:
case16:
printf("%d---->B\n",sum);
break;
case15:
case14:
printf("%d---->C\n",sum);
break;
case13:
case12:
printf("%d---->D\n",sum);
break;
case11:
case10:
case9:
case8:
case7:
case6:
case5:
case4:
case3:
case2:
case1:
case0:
printf("%d-->E\n",sum);
break;
default:
printf("输入错误\n");/*处理非法数据*/
}
}
设计多组测试数据对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:
』
自己弄运行信息结果吧
三、问题讨论
在使用switch语句时,switch和case后值的类型要求以及default子句和break语句的位置有什么需要注意的地方?
举例说明
四、实验总结
1总结本次实验完成情况、相关知识掌握情况
2总结本次实验编辑、编译、连接、运行所取得的经验
3分析本次实验出现的主要错误最直接原因
实验三循环结构程序设计
一、实验目的
5、熟练掌握while语句,do-while语句和for语句的格式和功能,能够用这些语句实现循环结构程序设计的方法。
6、熟练掌握循环语句嵌套使用的基本形式,能够用循环语句实现多重循环。
7、掌握在循环结构程序设计中使用break语句和continue语句改变程序流程。
8、通过编程和调试程序,加深对while语句、do…while语句和for语句的理解,学习编程和测试的基本方法。
9、实验前复习while语句、do…while语句和for语句的概念。
二、实验内容
1.打印100-200之间的所有素数(按照每行5个显示)
程序代码:
对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:
』
2.编程输出如下上三角形式的九九乘法表。
123456789
---------
123456789
4681012141618
9121518212427
162024283236
2530354045
36424854
495663
6472
81
程序代码:
对程序进行测试,并观察运行结果。
将程序的运行情况写在下面。
『运行结果:
』
三、问题讨论
break语句和continue语句在循环结构中使用时有何区别?
举例说明。
四、实验总结
1总结本次实验完成情况、相关知识掌握情况
2总结本次实验编辑、编译、连接、运行所取得的经验
3分析本次实验出现的主要错误最直接原因
实验四使用数组的程序设计
一、实验目的
1、正确理解数组的概念,熟练掌握一维数组和二维数组的定义和初始化方法。
2、熟练掌握字符数组和字符串的区别和使用、字符串函数的使用。
3、熟练掌握一维数组、二维数组以及字符串的输入和输出方法。
4、了解数组的地址、数组元素的地址及一维数组和二维数组的存储结构。
5、掌握字符串的结束标志,正确使用字符串的结束标志对字符串进行处理。
6、通过编程和调试程序,加深对数组、字符数组和字符串函数应用的理解。
7、实验前复习数组、字符数组和字符串函数的概念。
二、实验内容
1、打印fabonacci数列的前20项,该数列前两项为1,以后各项均为前相邻两项之和。
程序代码:
#include
voidmain()
{longintf[20]={1,1};
intj;
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
#defineN5
voidmain()
{inta[N],i,j,t;
printf("inputscoresofstudents:
",N);
for(i=0;i scanf("%d,",&a[i]); for(i=0;i for(j=0;j if(a[j]>a[j+1]) {t=a[j];a[j]=a[j+1];a[j+1]=t;} printf("thesortedscores: \n"); for(i=0;i printf("%10d",a[i]); printf("\n"); } 3、 程序代码: 对程序进行测试,并观察运行结果。 将程序的运行情况写在下面。 c『运行结果: 』 3、编写一个程序,利用字符数组实现两个字符串的比较。 (注意不能使用字符串比较函数strcmp()) #include #definen7 voidmain() {chars1[n],s2[n]; inti; printf("input%dcharacters\n",n); scanf("%s\n",s1); scanf("%s\n",s2); if(s1! =s2) {for(i=0);i {if(s1[i]>s2[i]) {printf("%s>%s",s1,s2); break;} elseif(s1[i] {printf("%s<%s",s1,s2); break;} else continue;} } else printf("%s=%s",s1,s2); } 程序代码: 对程序进行测试,并观察运行结果。 将程序的运行情况写在下面。 『运行结果: 』 三、问题讨论 1使用%s格式符输入字符串到数组时能否将空格符输入? 如果不能该如何使用其它方法解决? 举例说明 2数组在“定义”时和“引用”时所带的下标有何区别? 四、实验总结 需多操作才能熟练掌握各种C语言. 1总结本次实验完成情况、相关知识掌握情况 2总结本次实验编辑、编译、连接、运行所取得的经验 3分析本次实验出现的主要错误最直接原因 实验五函数与编译预处理 一、实验目的 10、掌握函数定义及调用的方法,正确理解函数调用时实参和形参的对应关系; 11、掌握并正确使用数组作为函数参数; 12、掌握函数的嵌套调用和递归调用的方法; 13、理解变量的作用域和生存期; 14、掌握宏定义、文件包含。 二、实验内容 1、分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。 #include intfun(intk) { intresult=1,i; for(i=1;i<=k;i++) { result=result*i; } returnresult; } voidmain() { intn; printf("Inputnplease(1<=n<=10)"); scanf("%d",&n); printf("%d! =%d\n",n,fun(n)); } 『运行结果: 』 2、编写程序,输出2~n之间的所有素数,n由键盘输入。 要求判断素数的过程要写在函数中,由主函数调用实现,并写出2组以上程序运行结果。 程序代码: #include #include voidmain() {inti,j,k,n,m=0; printf("inputnplease! \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 floataverage(floatx[8]) {floatsum; intk; sum=x[0]; for(k=1;k<8;k++) {sum=sum+x[k]; } return(sum/8); } voidmain() {floatcj[8],aver; intm,j; printf("inputscoresofeightstudents: \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.主要原因是对知识的不理解。 实验六使用指针的程序设计 一、实验目的 15、掌握指针的概念,会定义和使用指针变量; 16、能正确使用数组的指针和指向数组的指针变量; 17、熟悉指针作为函数参数的定义和调用方法; 18、能正确使用字符串的指针和指向字符串的指针变量。 二、实验内容 1.分析下面的程序并上机运行程序,要求写出3组以上程序的运行结果。 #include voidmain() { int*p1,*p2,*p; inta,b; printf("Inputabplease"); 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 #defineN10 voidfun(int*a,intn,int*odd,int*even) { } voidmain() { inta[N]={1,10,2,3,19,6},i,n=6,odd,even; printf("Theoriginaldatais: \n"); for(i=0;i printf("%5d",*(a+i)); printf("\n\n"); fun(a,n,&odd,&even); printf("Thesumofoddnumbers: %d\n",odd); printf("Thesumofevennumber: %d\n",even); } 『运行结果: 』 3.编程实现从键盘输入一个字符ch和一个字符串str,利用字符指针实现删除字符串str中和字符ch相等所有字符,然后输出字符串str。 运行程序并写出2组以上程序运行结果。 程序代码: 『运行结果: 』 三、问题讨论 1.简述字符串数组和字符指针的区别,举例说明。 四、实验总结 1总结本次实验完成情况、相关知识掌握情况 答: 通过本次实验我学习了关于指针的一些应用和怎样用指针来解决一些实际问题。 2总结本次实验编辑、编译、连接、运行所取得的经验 3分析本次实验出现
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 上机 试题 答案