一、选择题
1.正确的输出结果是
int x=5,y=7; void swap() { int z; z=x; x=y; y=z; } int main() { int x=3,y=8; swap(); printf("%d,%d\n",x, y); return 0; }
【答案】:
3,8
【解析】:
考点:
(1)局部变量只在定义变量得到区域使用,在main函数中定义的局部变量,只能在main函数中使用
(2)当局部变量和全局变量同名的时候,局部变量优先
swap()函数交换的是全局变量的x和y,也就是全局变量的x=5,y=7交换为x=7,y=5
可以在swap函数中打印x和y,得到的结果是x=7,y=5
在输出语句这里,考虑局部变量优先
2.以下不正确的定义语句是()
A: double x[5] = {2.0, 4.0, 6.0, 8.0, 10.0};
B: char c2[] = {'\x10', '\xa', '\8'};
C: char c1[] = {'1','2','3','4','5'};
D: int y[5+3]={0, 1, 3, 5, 7, 9};
【答案】:
B
【解析】:
考点:
\ddd: ddd表示1-3个八进制数(不一定是三个d,可以是一个或者两个d)
\xdd:dd表示两个16进制数
B. \8为\ddd的形式,但是八进制没有8
D.数组名后面的[ ]中必须是整形常量或者整形表达式
3.test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】()
#define INT_PTR int* typedef int* int_ptr; INT_PTR a, b; int_ptr c, d;
A.a B.b C.c D.d
【答案】:
ACD
【解析】:
考点:define与typedef的区别
define宏定义只是简单的替换
typedef是把该类型定义了一个别名,别名是一个独立的类型
下面来理解一个重要的点:
int *p; // 用int这个单类型和表达式“*p”来定义变量p 直接的意思是*p是int类型,因此倒推p是int的指针//
(1)上面define直接替换,结果就是int *a,b(把这个*尽量靠右边写),那么*a和b都是int类型,也就是a是int *类型,b是int类型
(2)下面typedef重命名,将相当于重新定义了一个int *类型,int * a,b,也就是a和b都是int *类型
4.若给定条件表达式 (M)?(a++):(a--) ,则其中表达式 M ( )
A: 和(M==0)等价 B: 和(M==1)等价 C: 和(M!=0)等价 D: 和(M!=1)等价
【答案】 :
C
【解析】:
考点:C语言中0表示假,非0表示真
先判断表达式1也就是M是否为真,如果M为真就a++,如果M为假,那就a--
也就是M为0,那就a--;如果M非0,那就a++,正好对应C选项
5.有如下定义语句,则正确的输入语句是【多选】( )
int b; char c[10];
A: scanf("%d%s",&b,&c); B: scanf("%d%s",&b,c); C: scanf("%d%s",b,c); D: scanf("%d%s",b,&c);
【答案】:
AB
【解析】:
考点:scanf什么时候要&
对于本身无法表示地址信息的,要加&;本身表示的就是地址信息的,就不需要加&
注意:在这里&c和c两个地址是一样的,程序的效果相同,但是对于int b一定是&b
二、编程题
1. 打印从1到最大的n位数
【答案】:
* @param n int整型 最大位数 * @return int整型一维数组 * @return int* returnSize 返回数组行数 */ #include<math.h> int* printNumbers(int n, int* returnSize ) { //返回元素的个数 *returnSize=pow(10,n)-1; //动态分配空间 int *arr=(int*)malloc(*returnSize*sizeof(int)); //赋值 for(int i=0;i<*returnSize;i++) { arr[i]=i+1; } //返回 return arr; }
2.计算日期到天数转换
【答案】:
#include <stdio.h> int main() { int year,month_real,day=0; int month[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //输入年月日 scanf("%d %d %d",&year,&month_real,&day); int date=day; for(int i=0;i<month_real-1;i++) { date+=month[i]; } //闰年并且超过二月 if((year%4==0&&year%100!=0)||(year%400==0)&&month_real>2) { date+=1; } printf("%d",date); return 0; }