单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。)
1.结构化程序由三种基本结构组成、三种基本结构组成的算法是()
A.可以完成任何复杂的任务
B. 只能完成部分复杂的任务
C. 只能完成符合结构化的任务
D. 只能完成一些简单的任务
- 以下名字,不能作为C 语言标识符的是()
A. name
B. ab_c
C.student-2
D. name
- 在一个C程序中,()
A. main 函数必须出现在固定位置
B. main 函数可以出现在任何地方
C. main 函数必须出现在所有函数之前
D.main函数必须出现在所有函数之后
4,以下选项中,非法的字符常量是()
A.' Y'
B. '\77'
C. "n"
D. 't'
5.设x、 y、t均为int型变量,则执行语句: x=y=0;E+xl++y;后, y的值为()
A. 不定值
B.0
C. 1
D. 2
- 下面的程序段将输出(int a=5,b=-3, c;c=a%b;printf("%dn", c);
A. 1
B. -1
c. 2
D. -2
- 设有如下定义: int ix=10,iy=3,iz;则语句 print("%din",iz-(ix%iy,ix/iy));的输出结果是()
A.I
B. 2
C. 3
D. 4
8.在下图中,阴影部分区域可用表达式()来表示。
A. (x<=a)&&(x>=b)&&(x<=c)
B. (x<=a)(b<=x<=c)
C. (x<=a)l(x>=b)&&(x<=c)
D. (x<=a)&&(b<=x<=c)
9若a是32-位int类型变量,判断其32个2进位中末两位均为1的表达式为()
A a&3=3
B. a&3=11
C. a&i1=3
D. a&l1=11
- 如果下面程序运行结果是 i=12.5,j=4.0,从键盘应输入()。
c
#inctude"stdio.h"
int main(){
float ij;
scanf("i=%fj=%f",&i,&j);
printf("i=%fj=%fn",ij);
return 0;
}
A. 12.5 4.0
B. i=12.5 j-4.0
C. i=12.5 j=4
D. i=12.5.j=4
11.下列程序的运行结果是()
c
#include <stdio.h>
int main() {
int a, b, c;
a = 20;
b = 30;
c = 10;
if (a < b) {
a = b;
}
if (a >= b) {
b = c;
c = a;
}
printf("a=%d, b=%d, c=%d\n", a, b, c);
return 0;
}
A. a=20, b=10,c=20
B. a=30, b=10, c=20
C. a=30,b=10, c=30
D. a=20, b=10,c=30
- 设有以下定义;
char *cc[2]={"1234","5678");则正确的叙述是()
A.cc 数组的两个元素中各自存放了字符串"1234"和"5678"的首地址素
B.cc数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
C. cc是指针变量,它指向含有两个数组元素的字符型一维数组
D. cc数组元素的值分别是"1234"和"5678"
13.以下程序的运行结果是()。
c
#include <stdio.h>
int main() {
int p[7] = {11, 13, 14, 15, 16, 17, 18};
int i = 0, k = 0;
while (i < 7 && p[i] % 2) {
k = k + p[i];
i++;
}
printf("%d\n", k);
return 0;
}
A. 58
B. 56
C. 45
D. 24
- 以下数组定义中错误的是()
A. int x[][3]={0};
B. int x[2][3]={{1,2},(3,4},{5,6)};
C. intx[][3]={{1,2,3},(4,5,6)};
D. int x[2][3]=(1,2,3,4,5,6};
15.以下哪一种对于str 的定义不恰当,有可能使 strlen(str)获得非预期的结果()
A. char str[]="hello world!";
B. char str[100]="X";
C. char str[4] = "abcd";
D.char str[6]= {65, 66, 67, 68, 69, 0};
16.在一个C源程序文件中,如要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是()
A. extern
B. register
C. anto
D. static
17.以下对 C 语言中函数的有关描述正确的是()
A.调用函数时只能把实参的值传送给形参,形参的值不能传送给实参,
B.C函数既可以嵌套定义又可以递归调用。
C.函数必须有返回值,否则不能使用函数。
D. 程序中有调用关系的所有函数必须放在同一个源程序文件中。
18 下列不正确的定义是()
A. int*p,t
B. int i,p=&i;
C. int p=&i,i;D. int i,*p;
19下列程序的输出结果是
c
#include <stdio.h>
#define F(X, Y) ((X) * (Y))
int main() {
int a = 3, b = 4;
printf("%d\n", F(a++, b++));
return 0;
}
A12
B. 15
C.16
D. 20
20,以下哪个选项中的p不是指针变量()
A. intp;
B. int §[5];
C. imt *p[6];
D.char name[20];int age;}*p, q;
二、程序阅读题(本大题共 5 小题,每小题 6分,共 30 分。请将程序的运行结果填写在答题纸的相应位置上。)
c
#include <stdio.h>
void main() {
int i;
char str[] = "student";
for (i = 0; i <= 3; i++) {
switch (i) {
case 0:
printf("%c ", str[i]);
// No break statement, falls through to the next case
case 1:
printf("%c\n", str[i]);
break;
case 2:
printf("%s\n", str);
break;
default:
printf("***");
}
}
}
c
#include <stdio.h>
void main() {
int a[4][4] = {
{1, 2, -3, -4},
{0, -12, -13, 14},
{-21, 23, 0, -24},
{-31, 32, -33, 0}
};
int i, j, s = 0;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
if (a[i][i] < 0) {
continue;
}
if (a[i][j] != 0) {
break;
}
s += a[i][0];
}
}
printf("%d\n", s);
}
c
#include <stdio.h>
void fun(int a[], int n, int k) {
int i;
for (i = n - 2; i >= k; i--) {
a[i + 1] = a[i];
}
}
int main() {
int a[] = {1, 2, 3, 4, 5, 6};
int i;
fun(a, 6, 2);
for (i = 0; i < 6; i++) {
printf("%d,", a[i]);
}
return 0;
}
c
#include <stdio.h>
void fun(char al[], char a2[], int n) {
int k;
for (k = 0; k < n; k++) {
a2[k] = (al[k] - 'A' - 3 + 26) % 26 + 'A';
}
a2[n] = '\0';
}
int main() {
char s1[5] = "ABCD", s2[5];
fun(s1, s2, 4);
puts(s2);
return 0;
}
c
#include <stdio.h>
struct st {
int x;
int *y;
} *p;
int dt[4] = {10, 20, 30, 40};
struct st a[4] = {
{50, &dt[0]},
{60, &dt[1]},
{70, &dt[2]},
{80, &dt[3]}
};
void main() {
p = a;
printf("%d, ", ++p->x);
printf("%d, ", (++p)->x);
printf("%d\n", (*p->y)++);
}
三、程序填空题(每空 5分,共35分。请将答案填写在答题纸的相应位置上。)1,猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾又多吃了一个。第二天早上有将剩下的挑子吃掉一半,又多吃了一个,后每天早上都吃了前一天剩下的一半零一个。到第day (通过键盘输入)天早上想再吃时,只剩下一个挑子了。求第一天共摘了多少桃子。输入10,输出为 1534。
c
#include <stdio.h>
int main() {
int day;
int m = 0;
int n = 1;
scanf("%d", &day);
while (________) { // Corrected the loop condition
m = ________;
n = n + 2;
________;
}
printf("%d\n", m);
return 0;
}
2.从键盘输入的一个正整数,求各位数字中最大者。
例如: 1083各位数字中最大者是8.
c
#include <stdio.h>
void main(void) {
unsigned long num, max, t;
max = 0;
scanf("%ld",&num);
do {
t=_________;
if (max < t) {
if(max<t) max=t;
_________;
}
} while (num);
printf("max=%ld\n", max);
}
- 程序功能:将两个字符串连接。
c
#include <stdio.h>
void concatenate(char string1[], char string2[], char string[]);
void main() {
char s1[100], s2[100], s[100];
printf("Input string1: ");
scanf("%s", s1);
printf("Input string2: ");
scanf("%s", s2);
concatenate(s1, s2, s);
printf("\nThe new string is %s\n", s);
}
void concatenate(char string1[], char string2[], char string[]) {
int i, j;
for (i = 0; string1[i] != '\0'; i++) {
string[i] = string1[i];
}
for (j = 0; string2[j] != '\0'; j++) {
_____________;
}
string[________] = '\0';
}
四、编程题(本大题共3小题,每小题15分,共45分。请在答题纸的相应位置上作答。)
1.用迭代法求一个数 a的平方根。求平方根的迭代公式为:Xn+1 =(Xn +a/Xn)/2要求前后两次求出的x的差的绝对值小于10-5
- 编写程序,计算如下数列的前n 项之和。请将程序补充完整。1, -2, 3, -4, 5, -6, 7, -8,【要求:编写一个求和的函数实现计算,再编写主函数调用,在主函数中输入项数n 的值并传入到计算函数中】
#include <stdio.h>
int cal(int n)
{inti,s-0,f-1; //i为循环控制, s求和, f改变正负号
}
void main()
{ int n;
}
3,用结构体来描述一个学生的成绩情况,内容包括:姓名,学号,C成绩和微机原理成绩。要求对一个班的30个学生的成绩进行统计处理:
(1)计算学生的平均分,并按平均分高低排出名次,打印出姓名。
(2)打印出平均分90分以上和不及格者的名字。