C语言考试题(考试时间:60分钟)
一、单项选择题
1、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是( D )
A、 6.500000 B、 6 C、 5.500000 D、 6.000000
2、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是 (B )
A、 INPUT x、y、z; B、 scanf("%d%d%d",&x,&y,&z);
C、 scanf("%d%d%d",x,y,z); D、 read("%d%d%d",&x,&y,&z);
3、设 int x=1, y=1; 表达式(!x||y--)的值是( B)。
A、0 B、1 C、2 D、-1
4、对两个字符数组a和b进行初始化char a[]="ABCDEF";char b[ ]={'A','B','C','D','E','F'}; 则以下叙述正确的是( D )。
A、a与b数组完全相同 B、a与b长度相同
C、a和b中都存放字符串 D、a数组比b数组长度长
5、为了避免在条件语句if―else中产生二义性,c语言规定:else子句总是与( B )配对。
A、缩排位置相同的if B、其之前最近的if C、其之后最近的if D、同一行上的if
6、下面不正确的字符串常量是( A)
A、 'abc' B、 "12'12" C、 "0" D、 " "
7、以下错误的if语句是(C )。
A、 if(x>y) z=x; B、 if(x= =y) z=0;
C、 if(x!=y) printf("%d",x) else printf("%d",y); D、 if(x<y) { x++;y--;}
8、若有说明:int a[3][4];则对a数组元素的非法引用是( D )。
A、a[0][2*1] B、a[1][3] C、a[4-2][0] D、a[0][4]
9、程序char c[5]={‘a’,’b’,’\0’,’c’c,’\0’}; printf(“%s”,c);}的运行结果是( C )。
A、'a''b' B、abc C、ab c D、ab cc
10、一个C程序的执行是从(A )。
A、本程序的main函数开始,到main函数结束
B、本程序文件的第一个函数开始,到本程序文件的最后一个函数结束
C、本程序的main函数开始,到本程序文件的最后一个函数结束
D、本程序文件的第一个函数开始,到本程序main函数结束
11、若变量已正确定义,以下非法的表达式是(B)
A、a/=b+c B、a%(4.0) C、a=1/2*(x=y=20,x*3) D、a=b=c
12、判断字符串a是否大于b,应当使用( D )。
A、if (a>b) B、if (strcmp(a,b)) C、if (strcmp(b,a)>0) D、if (strcmp(a,b)>0)
13、以下关于运算符优先顺序的描述中正确的是( C)。
A、关系运算符<算术运算符<赋值运算符<逻辑与运算符
B、逻辑与运算符<关系运算符<算术运算符<赋值运算符
C、赋值运算符<逻辑与运算符<关系运算符<算术运算符
D、算术运算符<关系运算符<赋值运算符<逻辑与运算符
14、使用语句scanf(“a=%f,b=%d”,&a,&b);输入数据时,正确的数据输入是:( A)
A、a=2.2,b=3 B、a=2.2 b=3 C、2.2 3 D、2.2,3
15、表示关系12<=x<=y的C语言表达式为:( B)
A、(12<=x)&(x<=y) B、(12<=x)&&(x<=y)
C、(12<=x)|(x<=y) D、(12<=x)||(x<=y)
16、语句for(a=0,b=0;b!=100&&a<5;a++)scanf(“%d”,&b); scanf最多可执行次数(C )
A、4 B、6 C、5 D、1
17、如下定义:struct jan{int a;float b;}c2,*p;若有p=&c2;则对c2中的成员a的正确引用( C)
A、(*p).c2.a B、(*p).a C、p->c2.a D、p.c2.a
18、设a=5,b=6,c=7,d=8,m=2,n=2,执行(m=a > b)&&(n=c>d)后n的值为( B )
A、1 B、2 C、3 D、4
19、执行下列语句后,程序的运行结果是( B)
int main()
{
int x = 10,y = 10, i;
for(i=0;x>8;y=i++)
{ printf(“%d,%d,”,x--,y); }
}
A.10,0,9,1 B.10,10,9,0 C.10,1,9,2 D.9,10,8.0
20、下列程序的运行结果是( C )
struct example1
{
short a; long b; };
struct example2
{ char c; example1 struct1; short e; };
int main()
{
printf(“%d”, sizeof(example1));
printf(“%d”, sizeof(example2));
}
A. 6,9 B. 6,10 C. 8,16 D. 8,24
二、填空题
1、a是整型变量,则执行表达式a=25/3%3后a的值为。 2
2、下面程序的运行结果是 。
main()
{ int i,x,y; i=x=y=0;
do {++i; if(i%2!=0) {x=x+i; i++;} y=y+i++; } while (i<=7);
printf("x=%d,y=%d\n",x,y); }
运行结果是: x=1,y=20
3、若int x=5;while(x>0)printf(“%d”,x--);的循环执行次数为 5 。
4、若有说明和语句:int a=5,b=6,y=6;b-=a;y=a++则b和y的值分别是 b=1,y=5 。
5、x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式: x<z || y<z
6、以下程序的输出结果为 to
main( )
{ char *a[]={“welcome”,”to”,”ruishang”};
char **pa=a; pa++;
printf(“%s”,*pa);return ; }
四、编程题
1、输入3个学生4门课的成绩{(60,70,65,75),(75,80,75,90),(95,75,90,65)},计算每个学生的总分和平均成绩并输出,结果保留一位小数
#include <stdio.h>
int main(int argc, char const *argv[])
{
int grades[3][4];
int score[3] = {0};
printf("请输入成绩\n");
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 4; j++)
{
scanf("%d", &grades[i][j]);
score[i] += grades[i][j];
}
}
for(int n = 0; n < 3; n++)
{
printf("总分:%.1f,平均分:%.1f\n",(float)score[n], score[n]/4.0);
}
return 0;
}
2、起泡法(选择法)对十个数排序
//冒泡排序
#include <stdio.h>
#define N 10
void swap( int *a, int *b)//交换两个数
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(int argc, char const *argv[])
{
int arr[N];
printf("请输入%d个整数:",N);
for(int i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
}
for(int i = 0; i < N-1; i++)
{
for(int j = 0; j < N-1-i; j++)
{
if(arr[j] > arr[j + 1])
{
swap(&arr[j], &arr[j+1]);
}
}
}
for(int n = 0; n < N; n++)
{
printf("%d ", arr[n]);
}
printf("\n");
return 0;
}
//选择排序法
#include <stdio.h>
#define N 10
void swap( int *a, int *b)//交换两个数
{
int tmp = *a;
*a = *b;
*b = tmp;
}
int main(int argc, char const *argv[])
{
int arr[N], k = 0;
printf("请输入%d个整数:",N);
for(int i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
}
for(int i = 0; i < N-1; i++)
{
k = i;//标记下标
for(int j = i+1; j < N; j++)
{
if(arr[k] > arr[j])
{
k = j;//寻找最小值的下标
}
}
if(k != i)//将最小值放入最左边
{
swap(&arr[i],&arr[k]);
}
}
for(int n = 0; n < N; n++)
{
printf("%d ", arr[n]);
}
printf("\n");
return 0;
}
3、编写strcpy函数:已知strcpy函数的原型是 char *strcpy(char *strDest, const char *strSrc); 其中strDest是目的字符串,strSrc是源字符串。
char *my_strcpy(char *strDest, const char *strSrc)
{
char *ret = strDest;
while(*strDest++ = *strSrc++)
{
;
}
return ret;
}
4. 以下为ARM下的32位C程序,请计算sizeof的值
char str[] = “Hello” ; char *p = str ; int n = 10; 请计算 sizeof (str ) = 6 sizeof ( p ) = 4 sizeof ( n ) = 4
| void Func ( char str[100]) { 请计算 sizeof( str ) = 100 } |
void *p = malloc( 100 ); 请计算 sizeof ( p ) = 100 |