目录
3.test.c 文件中包括如下语句,文件中定义的四个变量中,是指针类型的变量为【多选】( )
5.. 若给定条件表达式 (M)?(a++):(a--) ,则其中表达式 M ( )
开设这个专栏,是因为刚更新完【 C语言】初阶的内容,马上迈入进阶,可以在学习进阶知识的时候,巩固复习基础。基础要扎实!!!
- 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); // 3 8
- }
A: 5,7 B: 7,5 C: 3,8 D: 8,3
解析:正确答案 C
swap()在调用的时候没有传参,所以函数内交换的是全局变量,而当全局变量和局部变量名字相同时,优先使用局部变量;局部优先原则
1. 作用域
通常来说,一段程序代码中所用到的名字并不是总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。
(1)局部变量的作用域就是所在的局部范围。(同一个{}内)
(2)全局变量的作用域就是整个工程(注:换一个.c文件使用全局变量,要声明(extern)一下变量)
注意:当全局变量与局部变量同名冲突时,遵循局部优先的原则。
2.生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
(1) 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
(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
选项B中考察是转义字符,八进制范围是0~7,所以'\8' err
\ddd ddd表示1到3个八进制数 如:\130 转义为 字符X
\xhh hh表示1到2位十六进制数 如:\x30 转义为 字符0补充:字符型数据在内存中存储的是字符的ASCII码值的二进制形式,一个字符的存储占用一个字节
- #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
- 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
1.scanf()是输入函数
scanf(格式控制,地址列表);
“格式控制”规定数据的输入格式,必须用双引号括起来,其内容仅仅是格式说明。
“地址列表”则由一个或多个地址组成的列表,可以是变量的地址,或字符串的首地址。
所以在scanf();中变量需要取地址,而数组名就表示首元素地址(有两个例外)
2.数组名是什么?
①.数组名是首元素的地址。
②两个例外:
1、sizeof(数组名),这里的数组名是表示整个数组,计算的是整个数组的大小,单位是字节。
2、&数组名,这里的数组名是表示整个数组,&数组名取出的是数组的地址。
A: 和(M==0)等价 B: 和(M==1)等价 C: 和(M!=0)等价 D: 和(M!=1)等价
解析: 正确答案C
考察的是三目运算符, exp1?exp2:exp3;
exp1为真,执行exp2;
exp1为假,执行exp3;
C语言规定:0为假,非0为真。
所以 若要求与M等价,则要满足M取0时为假,取非0数值时为真。
输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 ... 一直到最大的 3 位数 999。
1. 用返回一个整数列表来代替打印
2. n 为正整数,0 < n <= 5
- int* printNumbers(int n, int* returnSize) {
- static arr[100000];
- int m = 9;
- int i = 1;
- int j = 0;
- scanf("%d", &n);
- if (n >= 1 && n <= 5)
- {
- //获得最大位数字
- for (i = 1; i < n; i++)
- {
- m = m * 10 + 9;
- }
- //将数据存进数组
- for (j = 1; j <= m; j++)
- {
- arr[j - 1] = j;
- *returnSize = j; //returnSize返回数组元素个数
- }
- return arr;
- }
- else
- {
- return 0;
- }
- }
static修饰的全局变量——称为静态全局变量
根据输入的日期,计算是这一年的第几天。输入保证年份为4位数且日期合法。
输入描述:输入一行,每行空格分割,分别是年,月,日
输出描述:输出是这一年的第几天
- int Isyear(int year)
- {
- if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
- {
- return 1;
- }
- else {
- return 0;
- }
- }
- int main()
- {
- int year, month, date;
-
- // 设0可以让数组下标和月份对齐
- int month_day[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
- scanf("%d %d %d", &year, &month, &date);
- //获取当月天数
- int day = date;
- //累加之前月份天数
- int i = 0;
- for (i = 1; i < month; i++)
- {
- day += month_day[i];
- }
- //判断是否闰年且大于二月+1
- if ((Isyear(year)) && month > 2)
- {
- day++;
- }
- printf("%d", day);
-
- return 0;
- }
1、月大月小口诀:一月大,二月平,三月大,四月小,五月大,六月小,七月大,八月大,九月小,十月大,十一月小,十二月大(大:31,小:30,平:28)
2、判断闰年的条件
①能被4整除,并不能被100整除。
②能被400整除