湖州师范学院2020—2021学年第二学期 《C程序设计》期末考试试卷(A卷)
湖州师范学院2020—2021学年第二学期
《C程序设计》期末考试试卷(A卷)
考试时间 120 分钟
说明:(1)将所有试题的答案写在答卷上;
(2)交卷时将答卷纸和试题一同上交。
学院 班级 学号 姓名 成绩
题号 | 一 | 二 | 三 | 四 | 总分 |
分数 |
得分 |
一、单选题(每题1分,共15分)
1、以下叙述中正确的是( )。
A. C语言程序将从源程序中第一个函数开始执行
B. 可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C. C语言规定必须用main()作为主函数名,程序将从此开始执行,在此结束
D. main可作为用户标识符,用以命名任意一个函数作为主函数
2、以下选项中不属于C语言中的数据类型的是( )。
A.char B.boolean
C.double D.long
3、在C语言中,要求运算对象必须是整型数据的运算符是( )。
A.% B./ C.* D.!
4、有变量定义:char c=’a’;则以下不能将变量c转换成大写字母的C语言表达式是( )。
A.c=’A’ B.c=c-32
C. c=toupper(c); D. c=c+32
5、根据下面的程序及数据的输入,则程序输出结果是( )。
#include <stdio.h>
main()
{ char ch1,ch2,ch3;
scanf("%c%c%c",&ch1,&ch2,&ch3);
printf("%c%c%c\n",ch1,ch2,ch3);
}
数据输入形式:A空格B空格C
A.A空格B B.ABC C.AB空格 D.空格AB
6、以下程序的运行结果是( )。
#include<stdio.h>
void fun (int p)
{
int d=2;
p=d++; printf(“%d”,p);
}
main ( )
{
int a=1;
fun(a);
printf(“%d\n”, a);
}
A. 32 B. 12 C. 21 D. 22
7、以下程序运行的情况是( )。
#include <stdio.h>
main()
{ int i=1,sum=0;
while(i<10) sum=sum+1;i++;
printf("i=%d,sum=%d",i,sum);
}
A.i=10,sum=9 B.i=9,sum=9 C.i=2,sum=1 D.死循环
8、以下能正确定义一维数组的是( )。
A. int a[5]={0,1,2,3,4,5}; B. char a[]={'0', '1', '2’, '3', '4', '5'};
C. char a={'A','B','C'}; D. int a[5]="01234";
9、有定义:int a=[][3]={1,2,3,4,5,6,7,8,9};,则a[1][1]的值是( )。
A.1 B.5 C.7 D.9
10、下列不正确的定义是( )。
A.int *p=&i,i; B.int *p,i; C.int i,*p=&i; D.int t,*p;
11、下列程序段的输出结果是( )。
int t=0,a[3]={10,5,1};
int*p;
for(p=a;p<a+3;p++)
t=t +*p;
printf("\n%d",t);
A.15 B.16 C.10 D.不确定
12、在C语言程序中,有关函数的定义正确的是( )。
A.函数的定义可以嵌套,但函数的调用不可以嵌套
B.函数的定义不可以嵌套,但函数的调用可以嵌套
C.函数的定义和函数的调用均不可以嵌套
D.函数的定义和函数的调用均可以嵌套
13、设x和y均为int型变量,则执行下面的循环后,y的值为( )。
for(y=1,x=1;y<=50;y++)
{
if(x>=10)break;
if(x%2==1){x+=5;continue;}
x-=3;
}
A.2 B.4 C.6 D.8
14、以下程序段的输出结果是( )。
#define M(x, y) x / y
printf("%d", M(10,2+3));
A.2 B.2.0 C.5 D.8
15、根据下面的程序及数据的输入,则程序输出结果是( )。
#include <stdio.h>
#include <string.h>
main()
{ char a[10]=”abcd”;
printf("%d,%d\n",strlen(a), sizeof(a));
}
A. 7,4 B. 4,10 C. 8,8 D. 10,10
得分 |
二、程序填空题(每空2分,共30分)
1、 输入一个以回车结束的字符串,分别统计数字字符的个数、英文字母的个数。
#include<stdio.h>
main( )
{
char ch;
int num, aph;
while(( 1 )!= '\n')
{
if(ch>='0' &&ch<= '9')
num++;
if( 2 )
aph++;
}
printf("英文字符数为:%d\t数字字符人数为:%d\n",num,aph);
}
2、以下程序的功能是从键盘上输入一批以-1结束的整数,求偶数和。
#include <stdio.h>
main()
{ int x,sum;
sum = 0;
printf("请输入批数据(以-1结束):\n");
scanf("%d",&x);
while( 3 )
{
if( 4 ) sum = sum + x;
scanf("%d",&x);
}
printf("偶数之和为%d\n",sum);
}
3、以下程序是将一个字符串str的内容颠倒过来。
#include<stdio.h>
#include < 5 >
main( )
{ int i,j, k ;
char str[80];
printf("请输入一个字符串(少于80个字符):");
gets(str);
for(i=0,j=strlen(str)-1; 6 ; i++,j--)
{k=str[i]; str[i]=str[j]; str[j]=k;}
printf("颠倒后的字符串:%s\n",str);
}
4、用冒泡法对10个整数按升序排序。
#include <stdio.h>
#define N 10
main()
{
int i,j,temp;
int a[N]={5,4,3,2,1,9,8,7,6,0};
printf("\n排序前的数组:\n");
for (i=0;i<N;i++)
printf("%5d",a[i]);
for (i=0;i<N-1;i++)
{
for (j=0; 7 ; j++)
if ( 8 ) {
temp=a[j+1]; a[j+1]=a[j]; a[j]=temp;}
}
printf("\n排序后的数组: \n");
for (i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
}
5、以下函数f的功能是将1个整数首尾倒置,若程序输入12345,则输出54321;若程序输入-34567,则输出-76543。
#include <stdio.h>
#include <math.h>
long f(long n)
{ long m,y=0; m=fabs(n);
while(m!=0) {
y=y*10+m%10;
9 ;
}
if(n>=0) return y;
else 10 ;
}
6、函数f的功能是将字符串中所有的数字字符删除。
#include <stdio.h>
#include <string.h>
#include < 11 >
void f(char *s)
{ int i;
while(s[i]!='\0')
if(isdigit(s[i])) 12 (s+i,s+i+1); // isdigit(s[i])也可写成s[i]>= '0 '&& s[i]<= '9 '
13 i++;
}
7、把100~200之间的不能被3整除的数输出。
#include <stdio.h>
void main()
{int n;
for (n=100;n<=200; 14 )
{
if (n%3==0)
15 ;
printf("%d ″,n);
}
}
得分 |
三、程序阅读题(每题3分,共15分)
1、程序1
#include<stdio.h>
main()
{
int x=1,y=1,z=1;
y=y+z;
x=x+y;
printf("%d,",x<y?y:x);
printf("%d,",x<y?x++:y++);
printf("%d,%d",x,y);
}
输出结果是:
2、程序2
#include<stdio.h>
main( )
{ int k=0;
char c='A';
do{ switch(c++)
{
case 'A':k++;break;
case 'B':k--;
case 'C':k+=2;break;
case 'D':k=k%2;break;
case 'E':k=k*10;break;
default:k=k/3;
}
k++;
}while(c<'G' );
printf("k=%d\n",k);
}
程序的运行结果是:
3、程序3
#include<stdio.h>
main()
{ int a,b,c;
int s,w,t;
s=w=t=0;
a=-1;b=3;c=3;
if(c>0) s=a+b;
if(a<=0)
{if (b>0)
if(c<=0) w=a-b;}
else if (c>0) w=a-b;
else t=c;
printf("%d %d %d",s,w,t);
}
程序的输出结果是
4、程序4
#include<stdio.h>
void swap(int *a,int *b)
{
int *t;
t=a; a=b; b=t;
}
main()
{
int i=3,j=4,*p=&i,*q=&j;
swap(p,q);
printf("%d %d\n",*p,*q);
}
程序运行时,程序的输出结果是
5、程序5
#include <stdio.h>
void main ()
{
int f (int);
int a=2, i;
for(i=0; i<3;i++)
printf("%d",f(a));
}
int f (int a)
{
auto int b=0;
static c=3;
b=b+1;
c=c+1;
return (a+b+c);
}
则输出的结果是
得分 |
四、 程序设计题(每小题10分,共40分)
1、编写程序,输入x的值,按下列公式计算并输出y值。

2、 根据输入的成绩,将其转换成“Excellent”、“Good”、“Pass”、“Fail”输出。转换规则:100-90:“Excellent”;89-70:“Good”;69-60:“Pass”;50-0:“Fail”。(要求用Switch case语句来实现)
3、将数组a的每1行均除以该行上的主对角元素(第1行同除以a[0][0],第2行同除以a[1][1],...),然后将a数组输出。
运行示例:
定义数组a[3][3]={{1,2,3},{2,2,4},{3,6,3}};
输出:a[3][3]={{1,2,3},{1,1,2},{1,2,1}};
4、采用递归方法求n的阶乘,计算n阶乘的数学递归定义式