admin 管理员组

文章数量: 1086019


2025年1月2日发(作者:hscangku8)

《 程序设计基础 》考试试卷四

班级 姓名 学号

一、选择题(每题1分,共20分)

题号

一 二

得分

总得分

评卷人

审核人

1.以下叙述中正确的是( )

A. C程序中注释部分可以出现在程序中任意合适的地方

B. 花括号"{"和"}"只能作为函数体的定界符

C. 构成C程序的基本单位是函数,所有函数名都可以由用户命名

D. 分号是C语句之间的分隔符,不是语句的一部分

2.判断下面标识符中哪个是C语言中合法的用户定义标识符( )

A. 2a1b B. a%bd C. _123 D. char

3.设有以下定义

int a=0; double b=1.25; char c=’A’; #define M 2

则下面语句中错误的是( )

A. a--; B. b--; C. c--; D. M--;

4.有两条语句: static char x[]=”abcde”;

static char y[]={‘a’,’b’,’c’,’d’,’e’};

则下列说法中正确的是( )

A. 数组x和数组y长度相同 B. 数组x长度大于数组y长度

C. 数组x长度小于数组y长度 D. 以上三种说法均错误;

5.设整型变量a=13,则经运算a+= a/=a%=5后,a的值为( )

A. 17.333 B. 17 C. 0 D. 2

6. 已知:int n,i=1,j=2;执行语句n=i

A. 1,2 B. 1,3 C. 2,2 D. 2,3

7.有函数定义如下:当自变量x<0时y=-1;当x=0时y=0;当x>0时y=1;以下程序片段能实现该

函数功能的是( ):

A. if(x>=0) B. y=-1; C. if(x>=0) D. y=0;

if(x>0) y=1; if(x!=0) if(x>0) y=1; if(x>=0)

else y=-1; if(x>0) y=1 ; else y=0; if(x>0) y=1;

else y= 0; else y=0; else y= -1; else y=-1;

8.当a=2,b=1,c=3,d=4,m和n值为1时,(m=a>b)||(n=c>d)的值是( )

A. TRUE B. FALSE C. 1 D.0

9.在C语言程序中,以下说法正确的是( )

A. main函数内部可嵌套定义子函数

第 1 页/共 4 页

B. main函数必须出现在所有函数之前

C. main函数必须出现在所有函数之后

D. main函数是程序执行的入口

10.关于局部变量和全局变量说法正确的是( ):

A. 在main函数中定义的变量都为全局变量

B. 当全局变量与局部变量同名时,全局变量起作用

C. 当全局变量与局部变量同名时,局部变量起作用

D. 以上说法都不正确

11.下列关于switch和break语句的讨论中,只有( )是正确的。

A. break语句是switch 语句的一部分

B. 在switch语句中可以根据需要使用或不使用break语句

C. switch语句中必须使用break语句

D. 以上三种说法都不正确。

12.设main函数中有定义float a[8],此外,程序中还定义了以下函数

void printarray(float a[8],int n){ int i; for(i=0;i

并将其放在调用语句之后,则以下说法错误的是( )

A. 调用之前的函数声明可以写为void printarray(float a[], int n);

B. 调用之前的函数声明可以写为void printarray(float [], int) ;

C. 调用语句可以为printarray(a[8],8);

D. 调用语句可以为printarray(a,8);

13.以下说法正确的是( )

A. 若在某函数中用static声明一个局部变量,则该变量在此函数外也起作用

B. 若用static声明一个函数,则该函数可被其它文件中的函数调用

C. 若用static声明一个函数,则该函数不能被其它文件中的函数调用

D. 以上说法都不正确

14.设int i=5,且变量i的地址是2001,int *p=&i,变量p的地址是2011,则表达式&*p的值为(

A. 5 B. 2001 C. 2011 D. 无法确定

15. 若有如下定义,则下面在scanf函数调用语句中对结构体成员的引用不正确是( )。

struct pupil

{

char name[20];

int age;

int sex;

}pup[5],*p;

A. scanf("%d",p->age);

B. scanf("%s",pup[0].name);

C. scanf("%d",&pup[0].age);

D. scanf("%d",&(pup[1].sex));

16 有以下程序段

int k=0

第 2 页/共 4 页

while(k=1)k++;

则while 循环执行的次数是( )

A. 无限次 B. 有语法错,不能执行 C. 一次也不执行 D. 执行1次

17有定义struct ex{ int x ; float y; char z ;} example;则下面的叙述中不正确的是( )

A. struct结构体类型的关键字 B. example是结构体类型名

C. x,y,z都是结构体成员名 D. struct ex是结构体类型

18 若fp是指向某文件的指针,且已读到文件末尾,则库函数feof(fp)的返回值是()

A. EOF B. -1 C. 非零值 D. NULL

19 以下程序执行后sum的值是()

void min()

{ int i , sum;

for(i=1;i<6;i++) sum+=i;

printf("%dn",sum);

}

A.15 B. 14 C. 不确定 D.0

20 当调用函数时,实参是一个数组名,则向函数传送的是( )

A. 数组的长度 B. 数组的首地址 C. 数组每一个元素的地址 D. 数组每个元素中的值

二、读程序写执行结果(每题5分,共20分)

1.#include

void main()

{

int x=3

do

{

printf("%d ",x-=2);

}while (!(--x));

}

3、

void main()

{

double d=3.2;

int x,y;

x=1.2;

y=(x+3.8)/5;

printf(“%dn”,d*y);

}

2、#include

void swap(int x, int y)

{ int temp;

temp=x;

x=y;

y=temp;

void main()

{ int a[]={3,5};

swap a[0], a[1]);

printf(“%d,%dn” ,a[0],a[1]);

}

4.#include

void main()

{

int

a[ ]={1,2,3,4,5,6,7,8,9,0,},*p;

p=a;

printf("%dn",*p+9);

}

三、程序改错题

(每题5分,共20分)

1、以下程序的功能是:给r输入数据后计算半径为r的圆面积s。

#include

#define PI 3.14

第 3 页/共 4 页

void main(){

int r;

float s;

scanf("%d",r);

s=PI*r^2;

printf("s=%fn",s);

}

1 当n>5

2、以下程序用语实现分段函数cost= 0.7 当 3

#include 0.5 当n<3

void main(){

int n; float cost;

if(n>5) cost=1;

if(n>3) cost =0.7;

else cost=0.5;

}

3、以下程序用于从终端教授一个字符赋给c,如c不为换行符就循环输出,为换行符则停止

#include

void main(){

c=getchar();

while(c!=’n’)

printf(“%c”,c);

}

4、以下程序用于实现矩阵的转置

#include

void main(){

int a[][2]={{1,2},{3,4}};

int i,j,temp;

for(i=0;i<2;i++)

for(j=0;j<2;j++)

{ a[i][j]=a[j][i]; a[j][i]= a[i][j];

}

}

四、程序填空(共10分)

1.本程序用于求100-500之间的素数并输出

# include

#include

void main()

{

int m, i, n; float k;

m=100;

第 4 页/共 4 页

while(m<=500)

{

;

for(i=2; i<=k; i++)

if(m%i= =0) ;

if( i>k )

{

printf(“%d ”,m);

n++;

}

m++;

}

}

2.本程序用于动态建立一个链表。链表中每个结点包括学号、成绩及指向下一结点的指针,整个链

表共10个结点。

#include

#include

#define NULL 0

struct student

{ int num;

float score;

;

};

void main( )

{ struct student *head=NULL,*p1,*p2;

int n=0;

do{

p1= ;

printf(“请输入学生的学号和成绩:n”);

scanf(“%d,%f”,&p1->num,&p1->score);

n=n+1;

if(n= =1) head=p1;

else p2->next=p1;

;

}while(n<10);

p1->next=NULL;

}

五、编程题(画N-S图或PAD图,每题10分,共30分)

1.编程求1-1/3+1/5-1/7+……+1/97-1/99的值并输出。

第 5 页/共 4 页

2.定义一8个元素的整数数组,读入各元素值后用选择法由小到大排序,之后输出排序结果。

3.读入正整数n,用递归法和非递归法求F(n)并输出,已知F(1)=1; F(2)=1; 当n>2时

F(n)=F(n-1)+F(n-2)。

《 程序设计基础 》试卷四答案

一、选择题(每题1分,共20分)

1A 2C 3D 4B 5D 6C 7C 8C 9D 10D

11B 12C 13C 14B 15A 16A 17B 18C 19C 20B

二、读程序写执行结果(每题5分,共20分)

1. 1 -2

2. 3,5

3. 0

4. 10

三、程序改错题(每题5分,共20分)

1、以下程序的功能是:给r输入数据后计算半径为r的圆面积s。

#include

#define PI 3.14

void main(){

int r;

float s;

scanf("%d",r); //改为scanf(“%d”,&r);

s=3.14*r^2; //改为s=3.14*r*r;

printf("s=%fn",s);

} 1 当n>5

2、以下程序用语实现分段函数cost= 0.7 当 3

#include 0.5 当n<=3

void main(){

int n; float cost;

if(n>5) cost=1;

if(n>3) cost =0.7; //改为else if(n>3)cost=0.7;

else cost=0.5;

}

3、以下程序用于从终端教授一个字符赋给c,如c不为换行符就循环输出,为换行符则停止

第 6 页/共 4 页

#include

void main(){

c=getchar(); //此句去掉

while(c!=’n’) //此句改为while((c=getchar())!=’n’);

printf(“%c”,c);

}

4、以下程序用于实现矩阵的转置

#include

void main(){

int a[][2]={{1,2},{3,4}};

int i,j,temp;

for(i=0;i<2;i++)

for(j=0;j<2;j++) //此句改为for(j=i;j<2;j++)

{

a[i][j]=a[j][i]; a[j][i]= a[i][j];//此句改为temp=a[i][j]; a[i][j]=a[j][i]; a[j][i]=temp;

}

}

四、程序填空(共10分)

1、

K=sqrt(m) ;

break ;

2. struct student *next ;

(struct student *)malloc(sizeof(struct student ));

p2=p1 ;

五、编程题(每题10分,共30分PAD图或N-S图占一半的分)

1.#include

void main()

{

int i,sign;

float term,sum;

sign=1; sum=1;

for(i=2;i<=50;i++)

{

sign*=-1;

term=sign*1.0/(2*i-1);

sum+=term;

}

printf("the result is:%fn",sum);

}

第 7 页/共 4 页

2. #include

void main()

{

int a[8], i, j, min,temp;

printf(“请输入原数组:n”);

for(i=0;i<8;i++)scanf (“%d”,&a[i]);

for(i=0;i<8;i++)

{

min=i;

for(j=i+1;j<8;j++)

if(a[min]>a[j])min=j;

temp=a[min];

a[min]=a[i];

a[i]=temp;

}

printf(“排序后为:n”);

for(i=0;i<8;i++)printf(“%d ”,a[i]);

}

3.

(1)

递推法实现 (2)递归法实现

#include #include

void main() int f(int n)

{ {

int i,n,f1,f2,result; int r ;

printf("input n:n"); if(n==1||n==2) r=1;

scanf("%d",&n); else r=f(n-1)+f(n-2);

f1=1;f2=1;result=0; return(r);

if(n= =1||n= =2)result=1; }

else void main()

{ {

for(i=3;i<=n;i++) int n,result;

{ scanf("%d",&n);

result=f1+f2; result=f(n);

f1=f2; printf("the result is%dn",result);

f2=result; }

}

}

printf("the result is %dn",result);

}

第 8 页/共 4 页


本文标签: 函数 程序 语句 数组 实现