一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。)
- 在下列说法中,()是正确的。
A.C程序从第一个函数开始执行,直到最后一个函数结束
B.C程序从第一个函数开始执行,直到主函数结束
C.C程序从主函数开始执行,直到最后一个函数结束
D.C程序从主函数开始执行,直到主函数结束
2.下列标识符中,不合法的C语言用户自定义标识符是()。
A. printf
B. enum
C._
D. sin
3.以下叙述中错误的是()
A.C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
B.C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C.用C语言编写的程序称为源程序,它以ASCI代码形式存放在一个文本文件中
D.C语言源程序经编译后生成后缀为.obj的目标程序
- 在C语言中,数字079是一个()
A.八进制数
B.十进制数
C.十六进制数
D.非法数
5.对于变量定义double a,b,c;,则表达式()与a/b/c不等价。
A. a/(b*c))
B.a/c/b
C. a/(b/c)
D. (a/b)/e
6.为表示“a和b都不等于0”,应使用的C语言表达式是()
A. (a!=0) Il (b!=0))。
B. a ll b
C. !(a=0)&&(b!=0)
D. a && b
7·下列关于单目运算符++、–的叙述正确的是()
A.它们的运算对象可以是任何变量和常量)。
B.它们的运算对象可以是char型变量和int型变量,但不能是float型变量
C.它们的运算对象可以是int型变量,但不能是double型变量和float型变量
D.它们的运算对象可以是char型变量、int型变量和float型变量
8.若变量a是int类型,并执行了语句:a=‘A’+1.6;,则正确的叙述是()
A. a的值是字符C
B. a的值是浮点型
C.a的值是字符"A,的ASCI值加上1。
D.不允许字符型和浮点型相加
9.若有以下定义int k=7, x=12;,则能使值为3的表达式是()。
A. x%=(k%=5)
B.x%=(k-k%5)
C. x%=k-k%5
D. (x%=k)-(k%=5)
10.字符串"\092"ABC"\"的长度是()
A. 11
B.8
C.5
D.0
11.有一下程序
#include <stdio.h>
void main()
{
int x;
scanf(“%d”,&x);
if(x>10) printf(“1”);
else if(x>20) printf(“2”);
else if(x>30) printf(“3”);
}
若运行时输入:35<回车>,则输出结果是()。
A.1
B.2
C.3
D. 123
12.下面有关for循环的正确描述是()。
A.for循环只能用于循环次数已经确定的情况
B.for循环是先执行循环体语句,后判断表达式
C.在for循环中,三个表达式都不能省略
D.for循环的循环体语句中,可以包含多条语句,但必须用大括号括起来
13.以下能正确定义数组并正确赋初值的语句是()。
A. int N=5,b[N][N];
B. int a[1][2]={1},(3}};
C. int c[2]0={{1,2),(3,4));
D. int d[3][2]=((1,2),(34));
14.对于定义char str]=“abc10def”;(注:其中0为数字零),求字符串str的长度len(即调用标准库函数strlen:len = strlen(str))和数组str的大小size(即size= sizeof(str)),len和size分别是:
A.7,8
B.7,7
C.3,8
D.3,7
15.下列定义数组的语句中正确的是()。
A. #define size 10 char strl[size],str2[size+2];
B. char str;
C. int n;scanf(“%d”,&n);int num['10;
D. int n=5; int a[n][n+2];
- 下面程序a,b值为()。
#include <stdio.h>
int main (void)
{
int a;
a= 1;
{
int b= 2;
b= a+b;
a=a+b;
}
printf (“%d,%d”,a,b);
return 0;
A. 1,2
B. 1,0
C. b 随机数
D.4, b随机数
17.在C语言中,下列错误的说法是()
A.函数可以递归调用
B.不允许在函数定义中再定义函数
C.递归程序不可能用非递归算法实现
D.对于continue语句,可以通过改变程序的结构而不使用它
18.以下语句或语句组中,能正确进行字符串赋值的是()
A. char sp; sp=“right!”;
B. char s[10]; s=“right!”;
C. char s[10];*s=“right!”;
D. char *sp=“right!”;
19.宏定义“#define DIV(a, b) ab”,经DIV(x+5,y-5)引用,替换展开后是()。
A.x+5/y-5
B.(x+5/y-5)
C. (x +5)/(y-5)
D. (x+5)/(y-5);
20,以下程序运行后的输出结果是( )。
#include<stdio.h>
struct s
{
int x;
int y;
} data[2]= {10, 100, 20, 200};
int main(){
struct s *p=data +1;
printf(“%d\n”, p->x);
return 0;
}
A. 10
B. 11
C.20
D.21
二、程序阅读题(本大题共5小题,每小题6分,共30分。请将程序的运行结构填写在答题纸的相应位置上。)
1_________
#include <stdio.h>
int main() {
int a, b, m = 1, n = 1;
scanf("%d%d", &a, &b);
if (a > 0) {
m = 2 * n;
b++;
} else {
n = m + n;
a += 2;
b++;
}
while (a == b);
printf("m=%d n=%d", m, n);
return 0;
}
//输入-1 0
2_______
#include <stdio.h>
int fun3(int m);
void main() {
int n;
for (n = 1; n < 10; n++) {
if (fun3(n) == 1) {
printf("%d ", n);
}
}
}
int fun3(int m) {
int i;
if (m == 2 || m == 3) {
return 1;
}
if (m < 2 || m % 2 == 0) {
return 0;
}
for (i = 3; i < m; i = i + 2) {
if (m % i == 0) {
return 0;
}
}
return 1;
}
3_______
#include <stdio.h>
void main() {
float b[6] = {1.1, 2.2, 3.3, 4.4, 5.5, 6.6};
float t;
int i;
t = b[0];
for (i = 0; i < 5; i++) {
b[i] = b[i + 1];
}
b[5] = t;
for (i = 0; i < 6; i++) {
printf("%6.2f", b[i]);
}
}
4_______
#include <stdio.h>
long fun(int n) {
long s;
if (n == 1 || n == 2) {
s = 2;
} else {
// Your logic for other cases goes here
// For now, returning an uninitialized value
return s;
}
return s;
}
void main() {
printf("%ld\n", fun(4));
}
5_______
#include <stdio.h>
void main() {
int a[2][3] = {1, 2, 3, 4, 5, 6};
int m, *ptr;
ptr = &a[0][0];
m = (*ptr) * (*(ptr + 2)) * (*(ptr + 4));
printf("%d\n", m);
}
三、程序填空题(共 35分。请将答案填写在答题纸的相应位置上。)د
1.以下程序段的功能是:将字符串 str1的内容复制到字符串 str2。
int i;
char str1[81], str2[81];
i=0;
while(________){
_______;
i++;
}
_______;
2. 计算字符串的有效长度。字符串的有效长度就是有效字符的个数,即数组中第1个"10前面的字符个数。例如、字符串"Happy"的有效长度是5。
#include <stdio.h>
int main(){
int k, len;
char str{81];
k=0;
while(______){
k++;
}
________;
len =_______;
printf("%d\n", len);
return 0;
}
3,以下程序的功能是:将一个3x3的数组的元素行列互换
#include <stdio.h>
int main()
{
int a[3][3],i,j,t;
for(i=0;i<3;i++)
for(i=0;i<3;i++)
scanf("%d",&a[i][j]);
for(j=0;j<3)
{
for(i=0;i<3;i++)
printf("%d",a[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
for(j=0;_______;j++)
{
t=a[i]li};
a[i][i]=a[j][i];
aj][i]=t;
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d ",a[i][i]);
printf("\n");
}
return 0;
}
四、编程题(本大题共3小题,每小题15分,共45分。请在答题纸的相应位置上作答。)
1.编写程序计算某年某月某日是该年中的第几天。
2.一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
14,以下能正确定义数组并正确赋初值的语句是()。
A. int n=5,a[n];
B. int a[1][2]=((1),(3));
C. char s2[]=I’t’,‘e’,‘s’,’
D.char s1[10];s1=“test”;