C语言选择题

本文详细介绍了C语言的基本概念和语法,包括结构体、指针、数组、函数调用等方面的知识。通过实例解析了如何操作结构体成员、数组元素、指针变量,并讨论了C语言中的循环控制语句及其应用。此外,还涉及了输入输出函数的使用和数组作为函数参数的传递方式。对于初学者,本文提供了深入理解和实践C语言的基础。

设有以下说明和定义语句,则下面表达式中值为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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

热爱吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值