今天咱们来继续进行好题分享,难度比上次会增加哦!
前三道是选择题,后四道是OJ题
大家一键三连,多多关注,爱你们哦!
我从简单到难,一起和大家走上漫漫刷题路!
1.关于static说法不正确的是:( )
A.static可以修饰局部变量
B.static可以修全局变量
C.static修饰的变量不能改变
D.static可以修饰函数
答案解析
本题主要考察static的特性
1. static修饰变量
a. 函数中局部变量:
声明周期延长:该变量不随函数结束而结束
初始化:只在第一次调用该函数时进行初始化
记忆性:后序调用时,该变量使用前一次函数调用完成之后保存的值
存储位置:不会存储在栈上,放在数据段
b. 全局变量
改变该变量的链接属性,让该变量具有文件作用域,即只能在当前文件中使用
c. 修饰变量时,没有被初始化时会被自动初始化为0
2. static修饰函数
改变该函数的链接属性,让该函数具有文件作用域,即只能在当前文件中使用
A:正确,原因参考上述注解
B:正确,原因参考上述注解
C:错误,const修饰的变量不能改变
D:正确,原因参考上述注解
因此:选择C
2.下面代码的结果是什么?( )
#include <stdio.h>
int sum(int a)
{
int c = 0;
static int b = 3;
c += 1;
b += 2;
return (a + b + c);
}
int main()
{
int i;
int a = 2;
for (i = 0; i < 5; i++)
{
printf("%d,", sum(a));
}
}
A. 6,8,10,12,14
B.8,10,12,14,16
C.10,12,14,16,18
D.12,14,16,18,20
答案解析
本题主要考察static修饰局部变量的特性,static修饰局部变量,该变量不会随函数的结束而消失,并且只在第一次调用时进行初始化,后序调用该函数时,使用的都是上次结束前该变量的值。
第一次循环:a=2 b=5 c=1 a+b+c=8
第二次循环:a=2 b=7 c=1 a+b+c=10
第二次循环:a=2 b=9 c=1 a+b+c=12
第二次循环:a=2 b=11 c=1 a+b+c=14
第二次循环:a=2 b=13 c=1 a+b+c=16
因此:选择B
3. 关于指针说法正确的是:( )
A.sizeof(char*)大小一定是1
B.指针变量是个变量,用来存放地址
C.指针变量的大小都是4个字节
D.指针不是变量
答案解析
A:错误,指针是一种复合数据类型,指针变量内容是一个地址,因此一个指针可以表示该系统的整个地址集合,
故按照32位编译代码,指针占4个字节,按照64位编译代码,指针占8个字节(注意:不是64位系统一定占8个字 节,关键是要按照64位方式编译)
B:正确
C:错误,参考A选项解释
D:错误,该条描述比较模糊 指针可以认为是一种数据类型,也可以认为是定义出来的指针变量
因此,选择B
描述
小乐乐学会了自定义函数,BoBo老师给他出了个问题,根据以下公式计算m的值。
其中 max3函数为计算三个数的最大值,如: max3(1, 2, 3) 返回结果为3。
输入描述:
一行,输入三个整数,用空格隔开,分别表示a, b, c。
输出描述:
一行,一个浮点数,小数点保留2位,为计算后m的值。
题解:
#include<stdio.h>
float max3(float a, float b, float c) {
if (a > b && a > c) {
return a;
}
else if (b > a && b > c) {
return b;
}
else {
return c;
}
}
int main() {
float a, b, c;
scanf("%f %f %f", &a, &b, &c);
double m = max3((a + b), b, c) / (max3(a, (b + c), c) + max3(a, b, (b + c)));
printf("%f", m);
return 0;
}
描述
输入一个班级5个学生各5科成绩,输出5个学生各5科成绩及总分。
输入描述:
五行,每行输入一个学生各5科成绩(浮点数表示,范围0.0~100.0),用空格分隔。
输出描述:
五行,按照输入顺序每行输出一个学生的5科成绩及总分(小数点保留1位),用空格分隔
题解:
#include<stdio.h>
void fen()
{
static int count = 1;
static float a[30] = { 0 };
if (count <= 30) {
scanf("%f %f %f %f %f", &a[count], &a[count + 1], &a[count + 2], &a[count + 3], &a[count + 4]);
a[count + 5] = a[count] + a[count + 1] + a[count + 2] + a[count + 3] + a[count + 4];
count += 6;
}
else
{
for (int i = 1; i <= 30; i += 5) {
printf("%.1f %.1f %.1f %.1f %.1f\n", a[i], a[i + 1], a[i + 2], a[i + 3], a[i + 4], a[i + 5]);
}
}
}
int main()
{
for (int i = 0; i < 6; i++) {
fen();
}
}
描述
从键盘输入5个人的身高(米),求他们的平均身高(米)。
输入描述:
一行,连续输入5个身高(范围0.00~2.00),用空格分隔。
输出描述:
一行,输出平均身高,保留两位小数。
题解:
#include<stdio.h>
int main() {
float a, b, c, d, e, ave;
scanf("%f %f %f %f %f", &a, &b, &c, &d, &e);
ave = (a + b + c + d + e) / 5;
printf("%.2f", ave);
}
描述
KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的线段图案。
输入描述:
多组输入,一个整数(1~100),表示线段长度,即“*”的数量。
输出描述:
针对每行输入,输出占一行,用“*”组成的对应长度的线段。
题解:
int main() {
int a;
while (scanf("%d", &a) != EOF) {
for (int i = 0; i < a; i++) {
printf("*");
}
printf("\n");
}
}