资源描述
西南大学 网络与继续教育学院
课程代码: 0039 学年学季:20172
窗体顶端
主观题
38、下列程序的功能是在数组a中寻找最大值的下标,输出数组a中的最大值及其下标。请填空:
#include "stdio.h"
void main()
{int a[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);}
参考答案:
i=1,max=0或max=i=0;max=i; a[max]
39、设int m=3;float n=12.6;char ch=’a’;,若用输入语句实现上述三个变量的初始化结果且键入数据形式为:3,12.6a<回车换行>,则scanf语句应是___ ________。
参考答案:
scanf("%d,%f%c",&m,&n,&ch)
40、设int i;float f=3.14;,执行i=(int)f;后,变量f的值是____________。
参考答案:
3.14
41、 若定义函数时类型缺省,则该函数默认的类型是____ _______。
参考答案:
extern
42、 设float a,b,c;,若a、b和c分别为三角形的三条边长,它们“能构成等边三角形”的逻辑表达式是____________。
参考答案:
(a==b)&&(c==b)&&(a==c)
43、
编写C语言程序的一般步骤什么?在VC环境下,调试程序的基本步骤有哪些?调试程序中常见的错误有哪些?如何解决发现这些错误?
参考答案:
编写C语言程序的一般步骤:分析问题、构建算法、描述算法、编码、调试。
在VC环境下,调试程序的基本步骤有编辑、编译、连接、执行
调试程序中常见的错误有语法错误和逻辑错误。其中语法错误通过编译来实现,逻辑错误通过单步追踪和设置断点的方法来发现逻辑错误。
44、在C语言为什么规定对所有用到的变量要"先定义,后使用”?这样的做有什么好处?
参考答案:
对所有用到的变量进行"先定义,后使用”的原因:
凡未被事先定义的,C语言不把他认作变量,这样的目的能是为了保证程序中的变量能被正确的使用。
好处:
(1)每一个变量被指定为一个确定类型,在编译时C语言就能为其分配相应的存储单元。
(2)指定每一个变量属于一个类型,便于在编译时检查在程序变量进行的运算合法性。
45、找出一个3行4列的二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。可能有几个鞍点也可能一个都没有。
参考答案:
46、请给出C语言的主要数据类型,请你至少给出4种以上的数据类型实例。
参考答案:
主要数据类型有:C语言包括基本类型(整型、字符型、浮点型(单、双精度型)枚举类型)、构造类型(数组、结构体、共用体类型)、指针类型、空类型。
数据类型实例依据学生答题评定
47、一个C程序由哪些要素构成,请给出一个C语言程序进行说明。
参考答案:
一个C程序由若干函数组成,但至少一个主函数。而每个函数包括函数的首部和函数体。
实例自行给定
48、 编一程序求:1+(1+2)+(1+2+3)+……+(1+2+3+……+10)。
参考答案:
参考答案
#include "stdio.h"
main()
{
int i,s=0,t=0;
for(i=1;i<=10;i++)
{t+=i;s+=t;}
printf("%d",s);
}
49、C语言程序包括哪些三种基本结构?请给出这三种基本结构的传统流程图或N-S图
参考答案:
C语言程序包括哪些三种基本结构:顺序结构、选择(或分支)结构、循环结构. 三种基本结构图示依据作业情况评定
Ø 顺序结构
顺序结构是一种最基本、最简单的程序结构。先执行A,再执行B,A与B是按照顺序执行。
Ø 选择(或分支)结构
根据条件是否成立而去执行不同的程序模块。当条件P为真时,执行A,否则执行B,即要么执行A,要么执行B。
Ø 循环结构
循环结构是指重复执行某些操作,重复执行的部分称为循环体。
50、
什么是函数的原型?其作用是什么?在这些作用中如何使用?
参考答案:
若自定义了一个函数,则该函数的首部称之为该函数的原型
函数原型的作用:调用函数的接口;用于原型声明
其中函数的调用方法:函数(实在参数)
函数的原型声明:当被调用函数在调用函数之后时,必须进行原型声明,在程序最前面或在调用函数中进行声明,声明方法:
函数的首部;
51、什么是内部函数和外部函数?
参考答案:
内部函数:一个函数只能被本文件中的其它函数调所用,在定义时使用static。
外部函数:一个函数不光是被本文件中其它函数调用,还可以被其它文件中的函数调用,定义时用extern。extern可缺省。
52、在下列程序中,循环结构执行结束后,i的值是多少,循环次数是多少?i--执行的次数是多少?
#include "stdio.h"
int main()
{ int i=100, s=0,n=0;
while(i--){s+=i;n++;
}
printf("%d ",n);
}
参考答案:
I的值为-1,循环次数是100,i--执行的次数为101
53、在下列程序中,fun函数为一个递归函数,请将程序中的fun函数改为非递归函数,保持功能不变。
#include "stdio.h"
long fun(int n)
{ if(n==1)
return 1;
else
return n*fun(n-1);
}
void main()
{int n;
printf("请输入n的值:");
scanf("%d",&n);
printf("%d!=%ld ",n,fun(n));
}
参考答案:
参考答案
#include "stdio.h"
#include "string.h"
viod fun( )
{int n;
char ch[10];
gets(ch);
n=strlen(ch);
for(i=n-1;i>=0;i--)
printf("%c",ch[i]);
}
main() {f();}
54、
参考答案:
1. (a+b=c)&&(a+c=b)&&(b+c>a)_。
2. _____3.14_______。
3. ____15________。
4. ____3________。
5. ___scanf(“%d,%f%c”,&m,&n,&ch);_________。
6. ____extern________。
7. ___6____
8. (1) a>=0
(2)=sum+a ___
_(3)sum/n ___;
9. (1)i=1,max=0或max=i=0 (2) max=i;
(3) a[max]
10、
(1)return 1;
(2)f(a[i] (3)a[j]<A[J+1]
11. _(1)_ &stu[i].score, &stu[i].sex, stu[i].name
(2)_ stu[i].score ________;
(3)__ sum /N_________;
12. (1)__*fp____ (2)_\"w \"_____(3)__fp_____
13. (1)___10___(2)__age(n-1)+2____(3)___age(5)_____
14.(1)在数组a中寻找最大值的下标,输出数组a中的最大值及其下标。
(2)依据学生答题评阅<\ p="">
(3)则输出结果为:最高成绩为:97,最高成绩是第7个
55、
下列表达式的值是多少?处理表达式后, 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
参考答案:
表达式计算
(1)表达式a=a+a的值是24?处理表达式后, a的值是24
(2)表达式a=a-2的值是10处理表达式后, a的值是10
(3)表达式a=a*(2+3)的值是60处理表达式后, a的值是60
(4)表达式a=a/(a+a)的值是0,处理表达式后, a的值是60
(5) 表达式a%=(n%=2)的值是0,处理表达式后, a的值是12
(6) 表达式a+=a-=a*a的值是-264,处理表达式后, a的值是-264
56、请简述算法、程序设计语言与程序的区别与联系
参考答案:
区别:算法(Algorithm)就是对解决某问题所采用的方法和步骤的描述。程序设计语言设计上就是一组符号及规则的集合。它是由语法、语义、语用三个要素组成。一个程序一般包括数据类型和算法两个方面的内容。其中数据类型(即数据结构)是对程序中的数据进行描述,指定数据在程序中的类型和数据的组织形式,它决定了数据的在内存中所占的存储空间和数据在内存中存放形式。而算法是对程序中数据的操作描述,是解决“做什么”和“怎么做”的问题,源程序中的操作语句就是算法的体现。正如著名计算机科学家沃思(Nikiklaus Wirth)所提出的观点:程序=数据结构+算法。
联系:程序设计语言是编写程序实现算法的语言工具
57、什么是算法?算法的特征?算法的描述方法有哪些?
参考答案:
所谓算法(Algorithm)就是对解决某问题所采用的方法和步骤的描述。
一个算法应该具有以下特点:
(1)确定性:一个算法给出的每个计算步骤都必须是准确的、无二义性。在【例1.6】中每一个步骤的含义都是确定的。
(2)有穷性:一个算法必须在执行有穷多个计算步骤后终止。在【例1.6】中执行4个步骤后问题处理结束。
(3)有效性:算法中的每一个步骤必须能够有效地执行,并能够得到确定的结果。
(4)输入:一个算法可以有0个或1个以上的输入。在【例1.6】中需要输入a,b,c三个数。
(5)输出:一个算法有1个或多个的输出,一个算法得到的结果就是算法的输出。在
算法的描述方法有: 自然语言、流程图、N-S图等。
58、
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)
59、在下列程序中,函数f的功能是什么? 该程序的运行结果是多少?
#include "stdio.h"
int fun(int num)
{int k=1;
do
{k*=num%10;
num/=10;
}while(num>0);
return k;
}
int main()
{int x=651,y=123;
printf("%d,%d",fun(x),fun(y));
}
参考答案:
函数f的功能是求任意整数的各位数字之积,
该程序的运行结果是15,6
60、在下列程序中,函数p的功能是什么? 该程序的运行结果是多少?
#include "stdio.h"
void sort(int x[ ],int n)
{int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(x[k]>x[j])k=j;
if(i!=k)
{t=x[k];x[k]=x[i];x[i]=t;}
}
}
int main()
{int a[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 125 145
61、结构化程序设计方法的内容是什么?划分模块的基本原则?采用结构化方法的好处?
参考答案:
结构化程序设计方法是一种自顶向下、逐步求精、模块化的程序设计方法。按照结构化程序设计方法的思想,就是将给定的一个功能较多的复杂问题合理地划分为若干个较简单的子问题,还可以将这些子问题再分解为若干功能更简单的子任务(可将每个子任务看作一个模块),以便于“分而治之”
在模块划分时,应该尽可能地保证数据的独立性和模块功能的唯一性。也就是说,各模块间的耦合性要尽量弱,即一个模块最好像是一个黑盒子,模块间的数据交换要尽量少;模块的内聚性要尽量强,即每个模块只完成单一的功能。
结构化程序设计强调程序设计风格和程序结构的规范化,提倡结构清晰。良好的程序设计风格可以使程序结构清晰合理,使程序代码便于维护。著名的“清晰第一,效率第二”的论点已成为当今主导的程序设计风格。
采用结构化程序设计方法的好处是:可以使每个模块功能明确,模块间的关系简单、清晰(即可读性强),每个模块内部的修改尽可能不影响其他模块(即独立性好),同时每个模块的正确性容易验证(即可维护性好)。
62、通过你对C语言程序设计课程的学习,你认为C语言程序设计具有哪些特点?并简要说明。C语言有哪些局限性?针对这些局限性,是如何解决这些问题的?
参考答案:
(1)C语言是一种结构化的语言
一个C语言程序是由一个或多个函数组成,函数是C语言的基本单位。
(2)C语言有强大的表现能力和处理能力
C语言具有丰富的运算符和数据类型,并且引入了结构、指针、地址、位运算、寄存器存储等功能,使C语言实现了对硬件编程操作,大大提高了C语言的表现能力和处理能力。
(3)C语言程序易于移植
同汇编语言相比,C语言将与硬件相关的部分也通过库函数或其他相关函数来实现,不再依赖于具体的机器,广泛地移植到了各种类型计算机上,从而体现了C语言的易移植性。
(4)C语言的运行效率高
用C语言编写的程序可通过编译获得高效的可执行代码
C语言也存在着一些局限:
(1)C语言的类型检查机制相对较弱,使得程序中的一些错误不能在编译时由编译程序指出;
(2)C语言缺乏支持代码重用的语言结构;
(3)C语言不适合开发大型程序,当程序的规模达到一定程度时,程序员很难控制程序的复杂性。
C++语言正是为了解决上述问题而设计的。C++语言继承了C语言的精髓,如高效率、 灵活性等,并增加了面向对象机制,弥补C语言不支持代码重用的不足,这对于开发大型的程序非常有效。C++语言成为一种既可用于表现过程模型,又可用于表现对象模型的优秀的程序设计语言。
63、程序的功能是从键盘上任意输入一个正整数,求各位数字之和。请用模块化方法改写下列程序,功能不变。
#include "stdio.h”
void main()
{int n;
int r,s=0;
scanf("%d”,&n);
do{r=n%10;
s+=r; n=n/10;
}while(n>0);
printf("%d”, s);
}
参考答案:
参考答案
#include “stdio.h”
int add(int n)
{int r,s=0;
do{r=n%10;
s+=r; n=n/10;
}while(n>0);
return(s);
}
void main()
{int m;
scanf(“%d”,&m);
printf(“%d”, add(m));
}
64、有如下程序
#include "stdio.h"
int fun(int x)
{ int p;
if(x==0 || x==1) return 3;
else p=x-fun(x-2);
return p;
}
int main()
{ printf(" %d",fun(9));
}
该程序的输出结果是多少?
参考答案:
该程序的输出结果是7
65、下列函数的功能是什么
int fun(char *x)
{char *y=x;
while(*y++);
return y-x-1 }
参考答案:
函数的功能是求字符串的长度
66、什么是指针,什么是指针变量?指针所指向的变量?给一实例说明
参考答案:
指针:就是一个变量的地址
指针变量:有一个变量专门用来存放另一变量的地址(即指针)。
如果将一个变量的地址(指针)赋给同一类型的指针变量,则该变量为指针变量所指向的变量。
如int x=10,*p=&x;
则:整数变量x的值为10,指针变量为p,指针所指向的变量为*p.
67、从键盘上任意输入20个2位或3位整数存放在array数组中,找出array数组中的能够被7整除的数存放在数组b中,并对b数组的值按升序排列。
要求:
(a)编写一个sort(int word,int a[])函数实现排序功能。
(b)除sort函数外,其余在主函数内完成,但主函数必须调用sort函数实现排序功能。
(c)程序必须有输入输出提示。
参考答案:
#include "stdio.h"
void sort(int a[],int n)
{
int i, j, t;
for (i = 0;i < n;i++)
for (j = 0;j < n - i;j++)
if (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");
}
int main()
{
int array[20];
int b[20];
int i,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;i < j;i++)
printf("%d ", b[i]);
printf("\n");
sort(b, j);
return 0;
}
68、依据下列提供的程序回答问题
#include "stdio.h"
double fun(int a[],int m)
{int i;
double sum=0;
for(i=0;i<m;i++)sum+=a[i];
return(sum/m);
}
void main()
{int x, count = 0,a[300];
for (x = 1;x <= 30;x++)
if (x%2==0) {
a[count]=x;
count++;
}
printf("\n这些偶数的平均值是:%6.0lf\n", aver(a,count));
}
(1)上述提供程序中,函数fun的功能是什么?
(2)请依据上述程序思想,画出其中的传统流程图或N-S图。
(3)在VC6.0环境下,运行上述程序时,其输出结果是什么?
参考答案:
(1)fun的功能是求m个数的平均值
(2)依据学生答题评定分数
(3)这些偶数的平均值是16
69、编写一个函数计算函数f(x,y)=x2+y2+sin(x)的值,要求有输入输出提示,结果保留小数点后3位
参考答案:
#include <stdio.h>
#include <math.h>
void main()
{
double x, 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);
}
70、输出100-900之间的所有奇数,并求出这些奇数的平均值输出
参考答案:
#include "stdio.h"
void main()
{
int x, 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);
}
71、编写一个函数fun求出分数序列的前n项之和,再写一主函数测试其功能
参考答案:
#include "stdio.h"
void fun(int n) {
double s = 0.0, t1 = 1, t2 = 2, temp;
int i;
for (i = 1;i <= n;i++)
{
s = s + t2 / t1;
temp = t2;
t2 = t1 + t2;
t1 = temp;
}
printf("此数列的前N项的和是:%.1lf\n", s);
}
void main() {
int n;
printf("请输入自然数N(N>1):\n");
scanf("%d", &n);
fun(n);
}
72、输出1-500之间的所有偶数,并求出这些偶数的平均值输出。
参考答案:
#include“stdio.h”
void main()
{
int x, sum = 0, count = 0;
for (x = 1;x <= 500;x++)
if (x % 2 == 0) {
printf("%d\t", x);
sum += x;
count++;
}
printf("\n这些偶数的平均值是:%d\n", sum / count);
}
73、依据下列提供的程序回答问题
#include"stdio.h"
int fun(int a,int b)
{ int r;
r=a%b;
while(r!=0)
{ a=b; b=r; r=a%b; }
return(b);
}
void main()
{ int num1, num2,a;
printf("Input num1 num2: ");
scanf("%d%d",&num1,&num2);
printf("num1= %d,num2= %d\n\n",num1,num2);
a=fun(num1,num2);
printf("The maximun mon divisor is %d\n\n",a);
}
(1) 上述提供程序中,函数fun的功能是什么?
(2)请依据提供的函数fun代码画出其中的传统流程图或N-S图。
(3)在VC6.0环境下,运行上述程序时,若输入的数据序列为24,,36其输出结果是什么?
参考答案:
(1)上述提供程序中,函数fun的功能是求最大公约数
(2)请依据提供的函数fun代码画出其中的传统流程图或N-S图。
依据考生答题给分
(3)在VC6.0环境下,运行上述程序时,若输入的数据序列为24,,36其输出结果是:
num1= 24,num2=36
The maximun mon divisor is12
74、编写程序打印下列图案
参考答案:
#include "stdio.h"
void main() {
for (int i = 0;i <= 4;i++) {
for (int j = 0;j <= i;j++) {
printf("*");
}
printf("\n");
}
}
75、
参考答案:
#include "stdio.h"
void fun(int n) {
double s = 0.0, t;
int i;
for (i = 1;i <= n;i++)
{
t = 2 * i;
s = s + (t - 1) * (t + 1) / (t*t);
}
printf("此数列的前N项的和是:%.3lf\n", s);
}
void main() {
int n;
printf("请输入自然数N(N>1):\n");
scanf("%d", &n);
fun(n);
}
76、写一个函数将一个字符串中的大写字母转换为小写,再写一个测试函数测试其功能。不允许使用strlwr函数
参考答案:
#include "stdio.h"
void convert(char *str)
{
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] >= 'A' && str[i] <= 'Z') {
str[i] = str[i] - 'A' + 'a';
}
}
}
int main()
{
char str[20] = "aZcdABxDEF123";
convert(str);
printf("%s\n", str);
return 0;
}
77、
参考答案:
#include "stdio.h"
#include "math.h"
void main()
{
double x, y,result;
printf("请分别输入x,y的值:");
scanf("%lf%lf",&x,&y);
result = sqrt(x + 1) + y*y*y;
printf("函数f(%.0lf,%.0lf)=%.3lf\n", x, y, result);
}
78、#include "stdio.h"
double aver(int a[],int m)
{int i;
double sum=0;
for(i=0;i<m;i++)sum+=a[i];
return(sum/10);
}
void main()
{int a[10],i,max;
double sum=0;
for(i=0;i<10;i++) scanf("%d",&a[i]);
printf("平均分数:%6.0lf\n" ,aver(a,10));
max=0;
for(i=1;i<10;i++)
if(a[i]>a[max]) max=i;
printf("最大值为:%d,最大值下标是:%d\n" ,a[max],max+1);
}
(1) 所提供程序中,函数aver的功能是什么?
(2)请依据提供上述程序,画出其的传统流程图或N-S图或自然语言描述。。
(3)若输入的数据分别为:45,87,89,90,77,88,88,78,78,78,则在VC6.0环境下运行上述程序,其输出结果是什么?
参考答案:
(1)求m个数的平均值
(2)依据考生答题评定成绩
(3)平均分 80
最大值为:90,最大值下标是:4
79、依据下列提供的程序回答问题
#include "stdio.h"
#include "math.h"
int f(int x)
{int i;
for(i=2;i<=sqrt(x);i++)
if(x%i==0) return 0;
return 1;
}
void main()
{int a[10],i,n=0;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
if( f(a[i])==1 )
{ printf("%5d",a[i]);n++;
}
printf("\n满足条件的数的个数为%d",n);
}
(1) 上述提供程序中,函数f的功能是什么?
(2)请依据提供的函数f的代码程序,画出其的传统流程图或N-S图或自然语言描述。。
(3)在VC6.0环境下,运行上述程序时,若输入的数据序列为97,35,17,110,3,11,45,43,7,89其输出结果是什么?
参考答案:
(1)提供程序的功能是什么?
判断x是否是素数
(2)依据考生答题给分
(3)输出结果
97 17 3 11 43 7 89
满足条件的数的个数是7
80、写一个函数将一个字符串中的小写字母转换为大写,再写一个测试函数测试其功能。不允许使用strurp函数
参考答案:
#include "stdio.h"
void convert(char *str)
{
int i;
for (i = 0;str[i];i++)
if (str[i] >= 'a'&&str[i] <= 'z')
str[i] -= 32;
}
int main()
{
char str[20] = "aZcdABxDEF123";
convert(str);
printf("%s\n", str);
return 0;
}
81、利用随机函数产生20个100-300的随机整数放入数组a中,从键盘输入查找关键字word是否在数组a中。
要求:
(1)编写一个函数find(int word,int a[])查找关键字word是否在数组a中
(2)主函数中产生随机整数,并调用find函数进行测试。
(3)程序必须有相应的输入输出提示。
参考答案:
#include "stdio.h"
#include "stdlib.h"
void find(int word, int a[])
{
for (int i = 0;i < 20;i++)
if(word==a[i])
printf("找到关键字word,它在数组中的位置是:%d",i);
else
printf("没有找到关键字word!\n");
}
int main()
{
int a[20];
int word;
int i;
srand(time(0));
for (i = 0;i < 20;i++)
a[i] = rand() % 201 + 100;
printf("请输入关键字word:");
scanf("%d", &word);
find(word, a);
return 0;
}
82、编写程序打印下列图案
参考答案:
#include "stdio.h"
void main() {
for (int i = 0;i <= 4;i++) {
for (int j = 0;j <= i;j++) {
printf("%d",j+1);
}
printf("\n");
}
}
窗体底端
展开阅读全文