0039《C语言》秋季作业精彩试题和问题详解.docx
《0039《C语言》秋季作业精彩试题和问题详解.docx》由会员分享,可在线阅读,更多相关《0039《C语言》秋季作业精彩试题和问题详解.docx(35页珍藏版)》请在冰豆网上搜索。
0039《C语言》秋季作业精彩试题和问题详解
[0039]《C语言》讲师:
邹显春
Z的值是3
i=1,max=0或max=i=0;max=i; a[max]
36、设intm=3;floatn=12.6;charch=’a’;,若用输入语句实现上述三个变量的初始化结果且键入数据形式为:
3,12.6a<回车换行>,则scanf语句应是___________。
“%d,%f%c”,&m,&n,&ch
37、设inti;floatf=3.14;,执行i=(int)f;后,变量f的值是____________。
3.14
38、若定义函数时类型缺省,则该函数默认的类型是___________。
extern
39、 设chars[]=”’Name\Address”;,s的长度是___________。
15
40、 设floata,b,c;,若a、b和c分别为三角形的三条边长,它们“能构成等边三角形”的逻辑表达式是____________。
(a+b=c)&&(a+c=b)&&(b+c>a)
41、编写C语言程序的一般步骤什么?
在VC环境下,调试程序的基本步骤有哪些?
调试程序中常见的错误有哪些?
如何解决发现这些错误?
编写C语言程序的一般步骤:
分析问题、构建算法、描述算法、编码、调试。
在VC环境下,调试程序的基本步骤有编辑、编译、连接、执行
调试程序中常见的错误有语法错误和逻辑错误。
其中语法错误通过编译来实现,逻辑错误通过单步追踪和设置断点的方法来发现逻辑错误。
42、在C语言为什么规定对所有用到的变量要"先定义,后使用”?
这样的做有什么好处?
对所有用到的变量进行"先定义,后使用”的原因:
凡未被事先定义的,C语言不把他认作变量,这样的目的能是为了保证程序中的变量能被正确的使用。
好处:
(1)每一个变量被指定为一个确定类型,在编译时C语言就能为其分配相应的存储单元。
(2)指定每一个变量属于一个类型,便于在编译时检查在程序变量进行的运算合法性。
43、请给出C语言的主要数据类型,请你至少给出4种以上的数据类型实例。
主要数据类型有:
C语言包括基本类型(整型、字符型、浮点型(单、双精度型)枚举类型)、构造类型(数组、结构体、共用体类型)、指针类型、空类型。
整数型inta=2;短整型shortb=3;单精度floatc=1;字符型chard=abc
44、一个C程序由哪些要素构成,请给出一个C语言程序进行说明。
一个C程序由若干函数组成,但至少一个主函数。
而每个函数包括函数的首部和函数体。
程序:
/*注释开始
**filename:
pun.c
**
**(C)2013RongbingTang
**
**Thisprogramprintsastatement
**"ToC,ornottoC:
that'snotaproblem."
注释结束*
45、 编一程序求:
1+(1+2)+(1+2+3)+……+(1+2+3+……+10)。
#include"stdio.h"
main()
{
inti,s=0,t=0;
for(i=1;i<=10;i++)
{t+=i;s+=t;}
printf("%d",s);
}
46、C语言程序包括哪些三种基本结构?
请给出这三种基本结构的传统流程图或N-S图
C语言程序包括哪些三种基本结构:
顺序结构、选择(或分支)结构、循环结构.三种基本结构图示依据作业情况评定
Ø顺序结构
顺序结构是一种最基本、最简单的程序结构。
先执行A,再执行B,A与B是按照顺序执行。
Ø选择(或分支)结构
根据条件是否成立而去执行不同的程序模块。
当条件P为真时,执行A,否则执行B,即要么执行A,要么执行B。
Ø循环结构
循环结构是指重复执行某些操作,重复执行的部分称为循环体。
47、什么是函数的原型?
其作用是什么?
在这些作用中如何使用?
答:
若自定义了一个函数,则该函数的首部称之为该函数的原型
函数原型的作用:
调用函数的接口;用于原型声明
其中函数的调用方法:
函数(实在参数)
函数的原型声明:
当被调用函数在调用函数之后时,必须进行原型声明,在程序最前面或在调用函数中进行声明,声明方法:
函数的首部;
48、什么是内部函数和外部函数?
内部函数:
一个函数只能被本文件中的其它函数调所用,在定义时使用static。
外部函数:
一个函数不光是被本文件中其它函数调用,还可以被其它文件中的函数调用,定义时用extern。
extern可缺省。
49、讨论题
1.设floata,b,c;,若a、b和c分别为三角形的三条边长,它们“能构成等边三角形”的逻辑表达式是____________。
2.设inti;floatf=3.14;,执行i=(int)f;后,变量f的值是____________。
3.设chars[]=”\t\’Name\\Address\n”;,s的长度是___________。
4.设intx=1,y=3,z;,执行z=x>y?
++x:
y++;后,z的值是____________。
5.设intm=3;floatn=12.6;charch=’a’;,若用输入语句实现上述三个变量的初始化结果且键入数据形式为:
3,12.6a<回车换行>,则scanf语句应是___________。
6.若定义函数时类型缺省,则该函数默认的类型是___________。
7.设inta[5]={l,3,5,7,9},*p=&a[2];,则++(*p)的值是_______
8.以下程序的功能是:
从键盘上输入若干个学生的成绩,统计计算出平均成绩,并输出低于平均分的学生成绩,用输入负数结束输入。
请填空。
main()
{floatx[1000],sum=0.0,ave,a;
intn=0,i;
printf("Entermark:
\n”);scanf("%f”,&a);
while(
(1) )
{sum___
(2)____;x[n]=a ;n++;
scanf("%f”,&a);}
ave=____(3)___;
printf("Output:
\n”);
printf("ave=%f\n”,ave);
for(i=0;i;i++) if(x[i] }
9.下列程序的功能是在数组a中寻找最大值的下标,输出数组a中的最大值及其下标。
请填空:
#include"stdio.h"
voidmain()
{inta[10],i,max;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(
(1) ;i<10;i++)
if(a[i]>a[max])
(2)
printf("最大值为:
%d ,下标是:
%d", (3) ,max);
}
10、下列程序的功能是:
从键盘输入10数,找出其中的素数并按降序输出这些素数。
请根据给定的程序和程序的功能完善该程序。
(每空2分,共6分)。
#include
#include
intf(intx)
{inti;
for(i=2;i<=sqrt(x);i++)
if(x%i==0)return0;
(1)
}
voidmain()
{inta[10],i,n=0,j,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
if(
(2))n++;
elsea[i]=0;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if((3) ){t=a[j];a[j]=a[j+1];a[j+1]=t;}
printf("共有%d个素数,它们是:
",n);
for(i=0;i<9;i++)
if(a[i]!
=0)printf("%d ",a[i]);
}
11.从键盘输入10个学生的姓名、性别和成绩,计算并输出这些学生的平均成绩。
#defineN10
structstudent
{
charname[20];
charsex;
intscore;
}stu[N];
voidmain()
{
inti;
floataver,sum=0;
for(i=0;i;i++)
{scanf(“%d,%c%s”,
(1)_________);/*第一空*/
sum=sum+_
(2)________;/*第二空*/
}
aver=_(3)_________;/*第三空*/
printf(“aver=%6.2f\n”,aver);
}
12.从键盘输入一串字符(以“?
”作为结束标志),保存到文本文件text.txt中。
#include“stdio.h”
voidmain()
{
FILE
(1)______;/*第一空*/
charch;
if((fp=fopen(“text.txt’’,_
(2)______))==NULL)exit(0);/*第二空*/
while((ch=getchar())!
=’?
’)fputc(ch,_(3)_______);/*第三空*/
fclose(fp);
}
13.用递归方法计算学生年龄,已知第一位学生年龄为10岁,其余学生一个比一个大2岁,求第5位学生的年龄。
递归公式如下:
age(n)=
intage(intn)
{
if(n==1)return(__
(1)_____);/*第一空*/
elsereturn(_
(2)________);/*第二空*/
}
voidmain()
{
printf(‘‘%d\n”,_(3)________);/*第三空*/
}
14.依据下列提供的程序回答问题
(1)提供程序的功能是什么?
#include"stdio.h"
voidmain()
{intscore[10],i,max;
for(i=0;i<10;i++)
{printf("请输入第%d个学生的成绩(0-100):
\n",i+1);
scanf("%d",&score[i]);}
for(i=1,max=0;i<10;i++)
if(score[i]>score[max]) max=i;
printf("最高成绩为:
%d,最高成绩是第%d个:
%d",score[max],max+1);
}
(2)请依据提供的程序画出其中的传统流程图或N-S图。
(3)在VC6.0环境下,运行上述程序时,若输入数据如89、87、77、67、87、80、97、80、97、74、58、84,则输出结果是什么?
50、下列表达式的值是多少?
处理表达式后,a的值是多少?
假设整数类型变量a的值为12
(1)a+=a
(2)a-=2
(3)a*=2+3 (4)a/=a+a
(5)a%=(n%=2) n的值等于5 (6)a+=a-=a*a
51、请简述算法、程序设计语言与程序的区别与联系
区别:
算法(Algorithm)就是对解决某问题所采用的方法和步骤的描述。
程序设计语言设计上就是一组符号及规则的集合。
它是由语法、语义、语用三个要素组成。
一个程序一般包括数据类型和算法两个方面的内容。
其中数据类型(即数据结构)是对程序中的数据进行描述,指定数据在程序中的类型和数据的组织形式,它决定了数据的在内存中所占的存储空间和数据在内存中存放形式。
而算法是对程序中数据的操作描述,是解决“做什么”和“怎么做”的问题,源程序中的操作语句就是算法的体现。
正如著名计算机科学家沃思(NikiklausWirth)所提出的观点:
程序=数据结构+算法。
联系:
程序设计语言是编写程序实现算法的语言工具
52、什么是算法?
算法的特征一级算法的描述方法有哪些?
53、
4.写出下列表达式所对应的C语言表达式,其中x,y为整数,a,b,c为实数类型
内容见附件写C语言表达式
(1)x*x-3.0*x*y/(2-y)
(2)sqrt(fabs(a*b-c*c))
(3)sqrt(abs(a*b-c*c)*cos(x)/a)
(4)(1+sqrt(x))/(1-y/x)
(5)cos(x)+sqrt(3*a*b)/(2-y)
(6)sqrt(abs(a*b-c*c)*sin(x)/b)
54、在下列程序中,函数f的功能是什么?
该程序的运行结果是多少?
#include"stdio.h"
intfun(intnum)
{intk=1;
do
{k*=num%10;
num/=10;
}while(num);
returnk;
}
voidmain()
{intx=651,y=123;
printf("%d,%d",fun(x),fun(y));
}
答:
函数f的功能是求任意整数的各位数字之积,该程序的运行结果是15,0
55、在下列程序中,函数p的功能是什么?
该程序的运行结果是多少?
#include"stdio.h"
void sort(intx[],intn)
{inti,j,k,t;
for(i=0;i{k=i;
for(j=i+1;j if(x[k]>x[j])k=j;
if(i!
=k)
{t=x[k];x[k]=x[i];x[i]=t;}
}
}
voidmain()
{inta[10]={34,50,89,67,102,11,75,30,125,145},i;
sort(a,10);
for(i=0;i<10;i++)
printf("%10d",a[i]);
}
答:
函数p的功能是对n个整数排序,该程序的运行结果是11 30 34 50 67 75 89 102 125145
56、结构化程序设计方法的内容是什么?
划分模块的基本原则?
采用结构化方法的好处?
结构化程序设计方法是一种自顶向下、逐步求精、模块化的程序设计方法。
按照结构化程序设计方法的思想,就是将给定的一个功能较多的复杂问题合理地划分为若干个较简单的子问题,还可以将这些子问题再分解为若干功能更简单的子任务(可将每个子任务看作一个模块),以便于“分而治之”
在模块划分时,应该尽可能地保证数据的独立性和模块功能的唯一性。
也就是说,各模块间的耦合性要尽量弱,即一个模块最好像是一个黑盒子,模块间的数据交换要尽量少;模块的内聚性要尽量强,即每个模块只完成单一的功能。
结构化程序设计强调程序设计风格和程序结构的规范化,提倡结构清晰。
良好的程序设计风格可以使程序结构清晰合理,使程序代码便于维护。
著名的“清晰第一,效率第二”的论点已成为当今主导的程序设计风格。
采用结构化程序设计方法的好处是:
可以使每个模块功能明确,模块间的关系简单、清晰(即可读性强),每个模块内部的修改尽可能不影响其他模块(即独立性好),同时每个模块的正确性容易验证(即可维护性好)。
57、通过你对C语言程序设计课程的学习,你认为C语言程序设计具有哪些特点?
并简要说明。
C语言有哪些局限性?
针对这些局限性,是如何解决这些问题的?
答:
特点:
1、c语言是一种结构化的语言。
一个C语言程序是由一个或多个函数组成,函数是C语言的基本单位
2、C语言有强大的表现能力和处理能力
C语言具有丰富的运算符和数据类型,并且引入了结构、指针、地址、位运算、寄存器存储等功能,使C语言实现了对硬件编程操作,大大提高了从语言的表现能力和处理能力。
3、C语言程序易于移植
同汇编语言相比,C语言将与硬件相关的部分也通过库函数或其他相关函数来实现,不再依赖于具体的机器,广泛地移植到了各种类型计算机上,从而体现了C语言的易移植性。
4、C语言的运行效率高
用C语言编写的程序可通过编译获得高效的可执行代码
局限:
1、C语言的类型检查机制相对较弱,使得程序中的一些错误不能在编译时由编译程序指出;
2、C语言缺乏支持代码重用的语言结构;
3、C语言不适合开发大型程序,当程序的规模达到一定程度时,程序员很难控制程序的复杂性。
解决:
C++语言正是为了解决上述问题而设计的。
C++语言继承了C语言的精髓,如高效率、灵活性等,并增加了面向对象机制,弥补C语言不支持代码重用的不足,这对于开发大型的程序非常有效。
C++语言成为一种可用于表现过程模型,又可用于表现对象模型的优秀程序设计语言。
58、程序的功能是从键盘上任意输入一个正整数,求各位数字之和。
请用模块化方法改写下列程序,功能不变。
#include"stdio.h”
voidmain()
{intn;
intr,s=0;
scanf("%d”,&n);
do{r=n%10;
s+=r; n=n/10;
}while(n>0);
printf("%d”,s);
}
答:
#include"stdio.h”
intadd(intn)
{intr,s=0;
do{r=n%10;
s+=r;n=n/10;
}while(n>0);
return(s);
}
voidmain()
{intm;
scanf("%d”,&m);
printf("%d”,add(m));
}
59、
有如下程序
#include
int fun(int x)
{int p;
if(x==0||x==1) return3;
else p=x-fun(x-2);
return p;
}
void main()
{printf("%d”,fun(9));
}
该程序的输出结果是多少?
该程序的输出结果是7
60、下列函数的功能是什么
intfun(char*x)
{char*y=x;
while(*y++);
returny-x-1 }
函数的功能是求字符串的长度
61、什么是指针,什么是指针变量?
指针所指向的变量?
给一实例说明
指针:
就是一个变量的地址
指针变量:
有一个变量专门用来存放另一变量的地址(即指针)。
如果将一个变量的地址(指针)赋给同一类型的指针变量,则该变量为指针变量所指向的变量。
如intx=10,*p=&x;
则:
整数变量x的值为10,指针变量为p,指针所指向的变量为*p.
62、
从键盘上任意输入20个2位或3位整数存放在array数组中,找出array数组中的能够被7整除的数存放在数组b中,并对b数组的值按升序排列。
要求:
(a)编写一个sort(intword,inta[])函数实现排序功能。
(b)除sort函数外,其余在主函数内完成,但主函数必须调用sort函数实现排序功能。
(c)程序必须有输入输出提示。
窗体顶端
本题参考答案:
#include"stdio.h"
voidsort(inta[],intn)
{
inti,j,t;
for(i=0;ifor(j=0;jif(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
printf("排序以后的数:
");
for(i=1;i<=n;i++)
printf("%d",a[i]);
printf("\n");
}
intmain()
{
intarray[20];
intb[20];
inti,j=0;
printf("请输入20个整数:
");
for(i=0;i<20;i++){
scanf("%d",&array[i]);
if(array[i]%7==0)
b[j++]=array[i];
}
printf("这20个整数中,能被7整除的有:
");
for(i=0;iprintf("%d",b[i]);
printf("\n");
sort(b,j);
return0;
窗体底端
63、编写一个函数计算函数f(x,y)=x2+y2+sin(x)的值,要求有输入输出提示,结果保留小数点后3位
窗体顶端
本题参考答案:
#include
#include
voidmain()
{
doublex,y,result;
printf("请分别输入x,y的值:
");
scanf("%lf%lf",&x,&y);
result=x*x+y*y+sin(x);
printf("函数f(%.0lf,%.0lf)=%.3lf\n",x,y,result);
}
窗体底端
64、输出100-900之间的所有奇数,并求出这些奇数的平均值输出
#include"stdio.h"
voidmain()
{
intx,sum=0,count=0;
for(x=100;x<=900;x++)
if(x%2!
=0){
printf("%d\t",x);
sum+=x;
count++;
}
printf("\n这些奇数的平均值是:
%d\n",sum/count);
}
窗体顶端
#include"stdio.h"
voidfun(intn){
doubles=0.0,t1=1,t2=2,temp;
inti;
for(i=1;i<=n;i++)
{
s=s+t2/t1;
temp=t2;
t2=t1+t2;
t1=temp;
}
printf("此数列的前N项