37-1 if语句等
1、问:输出结果
int main()
{
int i = 0;
for (i = 0; i < 10; i++)
{
if (i = 5)
{
printf("%d\n", i);
}
return 0;
}
}
答:一直输出5,死循环
解析:i=5是赋值语句,不是判断语句,每一次循环i都被赋值为5,每一次都打印5;每一次循环i都被赋值为5,加1后是6,永远小于10,要一直循环下去
2、问:关于if语句说法正确是:()
A.if语句后面只能跟一条语句
B.if语句中0表示假,1表示真
C.if语句是一种分支语句,可以实现单分支,也可以实现多分支
D.else语句总是和它的对齐的if语句匹配
答:C
解析:B:0表示假,非0表示真,并不只有1
3、关于switch说法不正确的是()
A.switct语句中的default子句可以放在任意位置
B.switch语句中case后的表达式只能是整形常量表达式
C.switch语句中case子句必须在default子句之前
D.switch语句中case表达式不要求顺序
答:C
解析:default与case的顺序不作要求;char也是属于整型家族的,因为字符存储的时候,存储的是ASCII码值
4、问:func(1)是多少?
int func(int a)
{
int b;
switch (a)
{
case 1:b = 30;
case 2:b = 20;
case 3:b = 16;
default:b = 0;
}
return b;
}
答:0
解析:没有break
5、问:switch(c)语句中,c不可以是什么类型()
A.int B.Jong C.char D .float
答:D
6、问:输出结果
int main()
{
int x = 3;
int y = 3;
switch (x % 2)
{
case 1:
switch (y)
{
case 0:
printf("first");
case 1:
printf("second");
break;
default:
printf("hello");
}
case 2:
printf("third");
}
return 0;
}
答:hellothird
解析:注意有无break
7、将三个整数按从大到小输出
代码1:
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d%d%d", &a, &b, &c);
if (a > b)
{
if (a < c)
{
printf("%d ", c);
printf("%d ", a);
printf("%d ", b);
}
else
{
if (a > c)
{
if (b > c)
{
printf("%d ", a);
printf("%d ", b);
printf("%d ", c);
}
else
{
printf("%d ", a);
printf("%d ", c);
printf("%d ", b);
}
}
}
}
else
{
if (b < c)
{
printf("%d ", c);
printf("%d ", b);
printf("%d ", a);
}
else
{
if (b > c)
{
if (a > c)
{
printf("%d ", b);
printf("%d ", a);
printf("%d ", c);
}
else
{
printf("%d ", b);
printf("%d ", c);
printf("%d ", a);
}
}
}
}
return 0;
}
代码2(推荐):
int main()
{
int a = 0;
int b = 0;
int c = 0;
int tmp = 0;
scanf("%d%d%d", &a, &b, &c);
//调整,a放最大值,b放中间值,c放最小值
if (a < b)
{
tmp = a;
a = b;
b = tmp;
}
if (a < c)
{
tmp = a;
a = c;
c = tmp;
}
if (b < c)
{
tmp = b;
b = c;
c = tmp;
}
printf("%d %d %d", a, b, c);
return 0;
}
代码3(函数版):
void Swap(int* a, int* b)
{
int tmp = 0;
tmp = *a;
*a = *b;
*b = tmp;
}
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d%d%d", &a, &b, &c);
//调整,a放最大值,b放中间值,c放最小值
if (a < b)
{
Swap(&a, &b);
}
if (a < c)
{
Swap(&a, &c);
}
if (b < c)
{
Swap(&b, &c);
}
printf("%d %d %d", a, b, c);
return 0;
}
8、写一个代码打印1-100之间所有3的倍数的数字
代码1:
int main()
{
int i = 0;
for (i = 3; i <= 100; i+=3)
{
printf("%d ", i);
}
return 0;
}
代码2:
int main()
{
int i = 0;
for (i = 1; i <= 100; i++)
{
if(i % 3 == 0)
printf("%d ", i);
}
return 0;
}
9、求两个数的最大公约数
代码1:暴力求解
int main()
{
int a = 0;
int b = 0;
int tmp = 0;
int i = 0;
scanf("%d%d", &a, &b);
if (a > b) //让a是小的数
{
tmp = a;
a = b;
b = tmp;
}
for (i = a; i > 1; i--)
{
if ((a % i == 0)&&(b % i == 0))
{
printf("最大公约数:%d\n", i);
break;
}
}
if (1 == i)
{
printf("这两个数没有公约数");
}
return 0;
}
代码2:辗转相除法
两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数。
int main()
{
int a = 0;
int b = 0;
int c = 0;
int tmp = 0;
scanf("%d%d", &a, &b);
while (c= a % b)
{
a = b;
b = c;
}
printf("%d\n", b);
return 0;
}
a和b谁大谁小不影响,可以用a=18,b=24和a=24,b=18自己测试一下
37-2 for循环语句等
1、问:关于while(条件表达式)循环练以下叙述正确的是()?
(假设循环体里面没break,continue,return,goto等等语句)
A.循环体的执行次数总是比条件表达式的执行次数多一次
B.条件表达式的执行次数总是比循环体的执行次数多一次
C.条件表达式的执行次数与循环体的执行次数一样
D.条件表达式的执行次数与循环体的执行次数无关
答:B
2、问:输出结果
int main()
{
int a = 0, b = 0;
for (a = 1, b = 1; a <= 100; a++)
{
if (b >= 20) break;
if (b % 3 == 1)
{
b = b + 3;
continue;
}
b = b - 5;
}
printf("%d\n", a);
return 0;
}
答:8
3、编程数一下1到100的所有整数中出现多少个数字9
注意:题目中说的是出现多少个9,而不是多少个数字包含9
int main()
{
int i = 0;
int count = 0; //计数
for (i = 1; i <= 100; i++)
{
if (i / 10 == 9) //十位是9
{
count++;
}
if (i % 10 == 9) //个位是9
{
count++;
}
}
printf("%d\n", count);
return 0;
}
4、计算1/1-1/2+1/3-1/4+1/5......+ 1/99 - 1/100的值,打印出结果
代码1:
int main()
{
int i = 0;
double sum = 0; //结果是小数
for (i = 1; i <= 100; i++)
{
if (i % 2 != 0)
{
sum += 1.0 / i; //要想得到小数,必须要有一个浮点数
}
else
{
sum += -1.0 / i;
}
}
printf("%lf\n", sum);
return 0;
}
代码2:
int main()
{
int i = 0;
double sum = 0; //结果是小数
int flag = 1; //用于正负变换
for (i = 1; i <= 100; i++)
{
sum += (1.0 / i)*flag;
flag = -flag;
}
printf("%lf\n", sum);
return 0;
}
5、10个数找最大值
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
int max = arr[0];
for (i = 1; i < 10; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("%d\n", max);
return 0;
}
代码2(手动输入十个数)
int main()
{
int arr[10] = { 0 };
int j = 0;
for (j = 0; j < 10; j++)
{
scanf("%d", &arr[j]);
}
int i = 0;
int max = arr[0];
for (i = 1; i < 10; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
printf("%d\n", max);
return 0;
}
6、 在屏幕上输出九九乘法表
代码1:
int main()
{
int i = 0;
//打印9行
for (i = 1; i <= 9; i++)
{
int j = 0;
//打印一行
for (j = 1; j <= i; j++)
{
printf("%d*%d=%d ", i, j, i * j);
}
printf("\n");
}
return 0;
}
代码2:
%2d:右对齐;%-2d:左对齐
int main()
{
int i = 0;
for (i = 1; i <= 9; i++)
{
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-2d ", i, j, i * j);
}
printf("\n");
}
return 0;
}
37-3 函数等
1、问:关于实参和形参描述错误的是()
A.形参是实参的一份临时拷贝
B.形参是在函数调用的时候才实例化。才开辟内存空间
C.改变形参就是改变实参
D.函数调用如果采用传值调用。改变形参不影响实参
答:C
2、问:函数调用exec(v1,v2),(v3,v4),v5,v6)中,实参的个数()
A .3 B.4 C.5 D.6
答:B
解析:表达式是一个实参
3、问:以下关于函数设计不正确的说法是()
A.函数设计应该追求高内聚低耦合
B.要尽可能多的使用全局变量
C.函数参数不易过多
D.设计函数时,尽量做到谁申请的资源就由谁来释放
答:B
解析:高内聚低耦合,功能单一,不要与其他的产生过多关联;过多使用全局变量,不安全。
4、问:关于C语言函数描述正确的是()
A.函数必须有参数和返回值
B.函数的实参只能是变量
C.库函数的使用必须要包含对应的头文件
D.有了库函数就不需要自定函数了
答:C
5、问:C语言规定,在一个源程序中,main函数的位置()
A.必须在最开始
B.必须在库函数的后面
C.可以任意
D.必须在最后
答:C
6、问:以下叙述中不正确的是()
A.在不同的阂数中可以使用相同名字的变量
B.函数中的形式参数是在栈中保存
C.在一个函数内定义的变量只在本函数范围内有效
D.在一个函数内复合语句中定义的变量在本函数范围内有效(复合语句指函数中的成对括号构成的代码)
答:D
解析:
7、 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
void print_table(int n)
{
int i = 0;
for (i = 1; i <= n; i++)
{
int j = 0;
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-2d ", i, j, i * j);
}
printf("\n");
}
}
int main()
{
int n = 0;
scanf("%d", &n);
print_table(n);
return 0;
}
37-4 函数递归等
1、问:能把函数处理结果的两个数据返回给主调函数,在下面的方法中不正确的是:()
A.return这两个数 B.形参用数组 C .形参用两个指针 D.用两个全局变量
答:A
解析:return只能返回一个数
2、问:关于函数调用说法不正境的是()
A.函数可以传值调用,传值调用的时候形参是实参的一份临时拷贝
B.函数可以传址调用,传址调用的时候。可以通过形参操作实参
C.函数可以嵌套定义,但是不能嵌套调用
D.函数可以嵌套调用,但是不能嵌套定义
答:C
3、问:在函数调用时,以下说法正确的是()
A.函数调用后必须带回返回值
B.实际参数和形式参数可以同名
C.函数间的数据传递不可以使用全局变量
D.主调函数和被调函数总是在同一个文件里
答:B