湖州师范学院2020—2021学年第 2 学期 《C程序设计》期末考试试卷(B卷)
湖州师范学院2020—2021学年第 2 学期
《C程序设计》期末考试试卷(B卷)
考试时间 120 分钟
学院 班级 学号 姓名
题号 | 一 | 二 | 三 | 四 | 五 | 总分 |
分数 |
得分 | 一、 单项选择题 (每小题1分,共15分) |
1. 以下叙述中正确的是( )。
A.C语言程序将从源程序中第一个函数开始执行
B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C.C语言规定必须用main()作为主函数名,程序将从此开始执行,在此结束
D.main可作为用户标识符,用以命名任意一个函数作为主函数
2. putchar()函数可以向终端输出一个( )。
A.整型变量表达式值 B.实型变量值
C.字符串 D.字符或字符型变量值
3. 若变量已正确定义,有以下程序段,运行输出结果是( )。
int a=3,b=5,c=7;
if(a>b) a=b; c=a;
if(c!=a) c=b;
printf("%d,%d,%d\n",a,b,c);
A.程序段有语法错 B.3,5,3 C.3,5,5 D.3,5,7
4. 以下程序段的输出结果是( )。
int a = 10,b = 0 ;
if ( a > 15 )
b = 1;
else if ( a < 2 )
b = 2;
else
b = 3;
printf("%d",b);
A.3 B.2 C.1 D.0
5. 下面有关for循环的正确描述是( )。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判定表达式
C.在for循环中,不能用break语句跳出循环体
D.for循环体语句中,可以包含多条语句,但要用花括号括起来
6. 以下叙述中正确的是
A.在使用scanf函数输入整型或实数时,输入数据之间只能用空格来分隔
B.在scanf函数中的格式控制字符串是为了输入数据用的,不会输出到屏幕上
C.使用printf函数无法输出百分号%
D.在printf函数中,各个输出项只能是变量
7. 以下关于C语言数组的描述正确的是( )。
A.数组的大小是固定的,但可以有不同数据类型的数组元素
B.数组的大小是可变的,但所有数组元素的数据类型必须相同
C.数组的大小是固定的,所有数组元素的数据类型必须相同
D.数组的大小是可变的,可以有不同数据类型的数组元素
8. 函数调用strcat(strcpy(str1,str2),str3);的功能是( )。
A.将字符串str1复制到字符串str2中后再连接到字符串str3之后。
B.将字符串str1连接到字符串str2中后再复制到字符串str3之后。
C.将字符串str2复制到字符串str1中后再将字符串str3连接到字符串str1之后。
D.将字符串str2连接到字符串str1之后再将字符串str1复制到字符串str3中。
9. 以下能正确定义一维数组的是( )。
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";
10. 已知一维数组:int a[10],要使数组中最后三个元素值为7,8,9,其余元素为0。下面实现方法中,正确的是( )。
A.int a[10]={7,8,9};
B.int a[]={7,8,9};
C.int a[10]={0};a[7]=7;a[8]=8;a[9]=9;
D.int a[10]={0};a[8]=7;a[9]=8;a[10]=9;
11. 下面的程序段所表示的数学函数关系是( )。
y=-1;
if(x!=0) if(x>0) y=1; else y=0;
12. 下列语句定义p为指向float类型变量d的指针,其中正确的是( )。
A.float d, *p=d; B.float d, *p=&d; C.float*p=&d, d; D.float d, p=d;
13. 在C语言中,要求运算对象必须是整型数据的运算符是( )。
A.% B./ C.* D.!
14. printf("%c,%d",'b', 'b');的输出结果是( )。
A.b,98 B.b 98 C.98,b D.98 b
15. 下列格式符中,( )可以用于以16进制形式输出整数。
A.%16d B.%8x C.%d16 D.%d
得分 | 二、 程序填空题 (每小题2分,共30分) |
1. 以下程序功能是求输入的整数各位数字之和,如输入234则输出9,输入-312则输出6。
#include <stdio.h>
#include <math.h>
main()
{
int n,s=0;
scanf("%d",&n);
① ;
while(n!=0) //n!=0也可以写成n或n>=1
{
② ;
n=n/10;
}
printf("%d\n",s);
}
2. 以下程序的功能是找出100~999之间所有的Armstrong数(也称水仙花数)。所谓Armstrong数是指这个3位数各位上数字的立方和等于自身。例如:371=3*3*3+7*7*7+1*1*1,那么371就是Armstrong数。
#include <stdio.h>
#include<math.h>
main()
{
int i,b,s,g;
for(i=100;i<=999;i++)
{
b=i/100; //求百位数
① ; //求十位数
g=i%10; //求个位数
if ( ② )
printf("%d is a Armstrong number!\n",i);
}
3. 下面程序以每行4个数据的形式输出a数组。
#include<stdio.h>
#define N 20
main()
{ int a[N],i;
for (i=0;i<N;i++)scanf("%d", ① );
for (i=0;i<N;i++)
{ if( ② ) printf("\n")
printf("%3d",a[i]);
}
printf ("\n");
}
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; ① ; j++)
if ( ② ) {
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. 以下程序是将两个字符串连接起来(不能使用库函数)。
#include <stdio.h>
main()
{
char s1[80],s2[40];
int i=0,j=0;
printf("\n请输入第一个字符串:");
scanf("%s",s1);
printf("\n请输入第二个字符串:");
scanf("%s",s2);
while (s1[i] !='\0')
① ;
while (s2[j] !='\0')
s1[i++]=s2[j++];
② ;
printf("\n连接后的字符串: %s\n",s1);
}
6. 以下函数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;
① ;
}
if(n>=0) return y;
else ② ;
}
7. 以下程序中,函数SumColumMin的功能是求出M行N列二维数组每列元素中的最小值,并计算它们的和值。要求和值通过形参传回主函数输出。
#include <stdio.h>
#define M 2
#define N 4
void SumColumMin(int a[M][N],int *sum)
{ int i,j,k,s=0;
for(i=0;i<N;i++)
{ k=0;
for(j=1;j<M;j++)
if(a[k][i]>a[j][i])k=j;
s+= ① ;
}
② =s;
}
main()
{ int x[M][N]={3,2,5,1,4,1,8,3},s;
SumColumMin( ③ );
printf("%d\n",s);
}
得分 | 三、 程序阅读题 (每小题3分,共15分) |
1. 阅读下列程序,写出程序的运行结果是 。
#include<stdio.h>
main()
{
int a,b,c,d,x;
a=c=0;
b=1;
d=20;
if(a) d=d-10;
if(!c)x=15;
else x=25;
printf("d=%d\n",d);
}
2. 阅读下列程序:
#include <stdio.h>
main()
{ int choice,i;
float price;
for(i=1;i<=5;i++)
{
scanf("%d",&choice);
if(choice==-1) break;
switch(choice){
case 1:price=2.5;break;
case 2:price=1.5;break;
case 3:price=4.5;break;
case 4:price=3.5;break;
default:price=0.0;break;
}
printf("%0.1f\n",price) ;
}
printf("Thanks\n");
}
程序运行时,输入3 7 -1,程序输出结果为: 。
3. 有以下程序:
#include <stdio.h>
main()
{char a,b,c,d;
scanf("%c%c",&a, &b);
c=getchar();
d=getchar();
printf("%c%c%c%c\n",a,b,c,d);
}
当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是一个字符)
12<CR>
34<CR>
程序输出结果为 。
4. 阅读下列程序,写出程序的运行结果 。
#include<stdio.h>
main( )
{ static int a[ ][3]={9,7,5,3,1,2,4,6,8};
int i,j,s1=1,s2=1;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{ if(i==j) s1=s1*a[i][j];
if(i+j==2) s2=s2*a[i][j];
}
printf("%d\n%d\n",s1,s2);
}
5. 写出以下程序运行的结果。
#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);
}
得分 | 四、 程序设计题 (每小题10分,共40分) |
运行示例:
表达式结果为:4037913
2. 输出一个字符串(少于80个字符),再输入一个字符,统计并输出该字符在字符串中出现的次数。
运行示例:
输入一个字符串:ahenejhehke
输入一个字符:h
字符在字符串中出现的次数是:3
3. 编写程序,输入x,y计算下面的函数值。
运行示例:
输入x=4, y=5,输出41.0
输入x=3, y=-2,输出5.0
输入x=-3, y=4,输出1.0
输入x=-1,y=-2,输出1.0
4. 输入一个正整数,计算它是一个几位数。
运行示例:
输入:54781
输出:这个数是5位数。