设有以下说明和定义语句,则下面表达式中值为3的是 D
struct s {
int i1;
struct s *i2;
};
static struct s a[3] = {1, &a[1], 2, &a[2], 3, &a[0]}, *ptr;
ptr = &a[1];
(A) ptr->i1++
(B) ptr++->i1
(C) *ptr->i1
(D) ++ptr->i1
以下与 int *q[5]; 等价的定义语句是 C
(A) int q[5] ;
(B) int *q ;
(C) int *(q[5]) ;
(D) int (*q)[5] ;
下面程序的功能是将字符串s中所有的字符’c’删除。请选择填空。
#include<stdio.h>
main()
{
char s[80];
int i,j;
gets(s);
for(i=j=0;s[i]!=’\0’;i++)
if(s[i]!=’c’) ____A____
s[j]=’\0’;
puts(s);
}
(A)s[j++]=s[i];
(B)s[++j]=s[i];
(C)s[j]=s[i];j++;
(D)s[j]=s[i];
对以下说明语句的正确理解是B
int a[10] = {6, 7, 8, 9, 10};
(A) 将5个初值依次赋给a[1]至a[5]
(B) 将5个初值依次赋给a[0]至a[4]
(C) 将5个初值依次赋给a[6]至a[10]
(D) 因为数组长度与初值的个数不相同,所以此语句不正确
若定义了int i, *p; 则能通过scanf函数给输入项读入数据的程序段是 A
(A) p = &i; scanf ( "%d", p );
(B) p = &i; scanf ("%d", i );
(C) *p = i; scanf ( "%d", p );
(D) *p = i; scanf ("%d", &p);
有如下定义:
struct {
int x;
char *y;
} tab[2] = {{1, "ab"}, {2, "cd"}}, *p = tab;
语句 printf("%c", *(++p)->y ); 的输出结果是 c 。
函数int min(int *x, int n)计算并返回具有n个元素的数组x中的最小元素的下标(该函数不是递归函数)。请填空(表达式
中间不要有空格)。
int min(int *x, int n)
{
int i=0, j;
for(j=0; j<n; j++)
if(x[j] < x[i])
____ i=j _____;
return i;
}
若有:
char *p[2][3] = {
"abc", "defg", "hi",
"jklmnop", "qrstuvwxyz", "ABCD"
};
则表达式(*(*(p+1)+1))[7]的值为x
有以下定义和语句,则以下引用形式非法的是 D
struct s
{ int i1;
struct s *i2, *i0;
};
static struct s a[3] = { 2, &a[1], 4, 4, &a[2], &a[0], 6, NULL, &a[1]};
static struct s *ptr;
ptr = a;
(A) ptr->i1++ (B) *ptr->i2 (C) ++ptr->i0 (D) *ptr->i1
已知学生记录的定义为:
struct student
{
int no;
char name[20];
char sex;
struct
{
int year;
int month;
int day;
}birth;
};
struct student s;
假设变量s中的“生日”应是“1988年5月10日”,对“生日”的正确赋值语句是D
(A) year=1988; month=5; day=10;
(B) brith.year=1988; birth.month=5; birth.day=10;
(C) s.year=1988; s.month=5; s.day=10;
(D) s.birth.year=1988; s.birth.month=5; s.birth.day=10;
设有以下说明语句:C
struct strutype
{
int a;
float b;
}var;
则下面叙述中错误的是
(A) struct是结构类型的关键字
(B) struct strutype是用户定义的结构类型
(C) var是用户定义的结构类型名
(D) a和b都是结构成员名
若有以下说明和语句:
struct student
{
int age;
int num;;
}std, *p;
p = &std;
则以下对结构变量 std 中成员 age 的引用方式不正确的是D
(A) std.age
(B) p->age
(C) (*p).age
(D) *p.age
以下对结构类型变量std1的定义中错误的是 D
(A)#define STUDENT struct student
STUDENT
{ int num;
float age;
} std1;
(B)struct student
{ int num;
float age;
};
struct student std1;
(C)struct
{ int num;
float age;
} std1;
(D)struct
{ int num;
float age;
} student;
struct student std1;
设有说明 int (* ptr) [M]; 其中ptr是C
(A) M个指向整型变量的指针
(B) 指向M个整型变量的函数指针
(C) 一个指向具有M个整型元素的一维数组的指针
(D) 具有M个指针元素的一维指针数组,每个元素都只能指向整型量
若定义了int i, *p; 则能通过scanf函数给输入项读入数据的程序段是 A
(A) p = &i; scanf ( "%d", p );
(B) p = &i; scanf ("%d", i );
(C) *p = i; scanf ( "%d", p );
(D) *p = i; scanf ("%d", &p);
设字符型变量ch中存放字符’A’,则执行’ch+++5’后,ch中的字符是C
A. A
B. B
C. F
D. G
说明语句 int *(*p)();的含义是 D
(A) p是一个指向int型数组的指针
(B) p是指针变量,它构成了指针数组
(C) p是一个指向函数的指针,该函数的返回值是一个整型
(D) p是一个指向函数的指针,该函数的返回值是一个指向整型的指针
以下给字符数组str定义和赋值正确的是B
(A)char str[10]; str = {"China"};
(B)char str[] = "China";
(C)char str[10]; strcpy (str, "abcdefghijklmn");
(D)char str[10] = {"abcdefghigklmn"};
若有说明: char *language[] = {“FORTRAN”, “BASIC”, “PASCAL”, “JAVA”, “C”};则表达式 *language[1] > *language[3] 比较
的是 C
(A) 字符F和字符P
(B) 字符串BASIC和字符串JAVA
(C) 字符B和字符J
(D) 字符串FORTRAN和字符串PASCAL
下述对C语言字符数组的描述中错误的是C
(A) 字符数组可以存放字符串
(B) 字符数组的字符串可以整体输入,输出
(C) 可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
(D) 不可以用关系运算符对字符数组中的字符串进行比较
若用数组名作为函数调用的实参,传递给形参的是 A
(A) 数组的首地址
(B) 数组第一个元素的值
(C) 数组中全部元素的值
(D) 数组元素的个数
若定义了int i, *p; 则能通过scanf函数给输入项读入数据的程序段是 A
(A) p = &i; scanf ( "%d", p );
(B) p = &i; scanf ("%d", i );
(C) *p = i; scanf ( "%d", p );
(D) *p = i; scanf ("%d", &p);
若用数组名作为函数调用的实参,传递给形参的是A
(A) 数组的首地址
(B) 数组第一个元素的值
(C) 数组中全部元素的值
(D) 数组元素的个数
以下正确的函数声明形式是 C
(A) double fun(int x, int y)
(B) double fun(int x; int y)
(C) double fun(int x, int y);
(D) double fun(int x, y);
在C语言程序中,以下正确的描述是B
(A) 函数的定义可以嵌套,但函数的调用不可以嵌套
(B) 函数的定义不可以嵌套,但函数的调用可以嵌套
(C) 函数的定义和函数的调用均不可以嵌套
(D) 函数的定义和函数的调用均可以嵌套
以下程序的运行结果是 23
#include<stdio.h>
void main()
{
int k=2;
switch(k)
{
case 1:printf("%d",k++);
break;
case 2:printf("%d",k++);
case 3:printf("%d",k++);
break;
case 4:printf("%d",k++);
default:printf("Full!");
}
}
以下正确的函数声明形式是 C
(A) double fun(int x, int y)
(B) double fun(int x; int y)
(C) double fun(int x, int y);
(D) double fun(int x, y);
已知int a, *p=&a; 则下列函数调用中错误的是 D
(A) scanf(“%d”, &a);
(B) scanf(“%d”, p);
(C) printf(“%d”, a);
(D) printf(“%d”, p);
若有以下程序段:
int a[]={4,0,2,3,1},i,j,t;
for(i=1;i<5;i++)
{
t=a[i];j=i-1;
while(j>=0&&t>a[j])
{ a[j+1]=a[j];j–;}
a[j+1]=t;
}
则该程序段的功能是B
(A)对数组a进行插入排序(升序)
(B)对数组a进行插入排序(降序)
(C)对数组a进行选择排序(升序)
(D)对数组a进行选择排序(降序)
有如下定义:
int a[3][4][2];
则数组a的第10个元素是 B
(A) a[2][1][2]
(B) a[1][0][1]
(C) a[2][0][1]
(D) a[2][2][1]
若有以下语句
int x = 3;
do {
printf(“%d\n”, x -= 2);
} while (!(–x));
则上面程序段 B
(A) 输出的是1
(B) 输出的是1和-2
(C) 输出的是3和0
(D) 是死循环
C语言中while和do-while循环的主要区别是A
(A) do-while的循环体至少无条件执行一次
(B) while的循环控制条件比do-while的循环控制条件严格
(C) do-while允许从外部转到循环体内
(D) do-while的循环体不能是复合语句
以下正确的描述是 B
(A) continue语句的作用是结束整个循环的执行
(B) 只能在循环体内和switch语句体内使用break语句
(C) 在循环体内使用break语句或continue语句的作用相同
(D) 从多层循环嵌套中退出时,只能使用goto语句
在C语言中的if语句中,用作判断的表达式为D
A 关系表达式
B 逻辑表达式
C 算术表达式
D 任意表达式
设整型变量x和y的值均为7,则表达式“x/(y-4)”的值是C
A. 3
B. -3
C. 2
D. 1
本文详细介绍了C语言的基本概念和语法,包括结构体、指针、数组、函数调用等方面的知识。通过实例解析了如何操作结构体成员、数组元素、指针变量,并讨论了C语言中的循环控制语句及其应用。此外,还涉及了输入输出函数的使用和数组作为函数参数的传递方式。对于初学者,本文提供了深入理解和实践C语言的基础。
377

被折叠的 条评论
为什么被折叠?



