这是自己在哔哩哔哩上听鹏哥C语言视频的一个简单的考试
现在分享给大家
选择题
题目1:求下列程序的运行结果是 67
#include<stdio.h>
int cnt = 0;
int fib(int n)
{
cnt++;
if (n == 0)
{
return 1;
}
else if (n == 1)
{
return 2;
}
else
return fib(n - 1) + fib(n - 2);
}
void main()
{
fib(8);
printf("%d", cnt);
}
解题思路:传进去一个数字8,只要n>=2,cnt就++一次,进入下面的return fib(n - 1) + fib(n - 2)会产生两种结果,分别是7和6,再继续递归时会7又会产生6和5,6产生5和4,一次下去,直到所有递归都结束
题目2:下列程序运行的结果是 :死循环
#include<stdio.h>
int main()
{
int x = 1;
do
{
printf("%d", x++); //这里会先打印一,然后x产生++的效果
} while (x--);
}
题目3:下列程序执行后i和j的值分别是 2 1
#include<stdio.h>
int main()
{
int i = 1;
int j;
j = i++;
}
题目4:一下程序的k最终值是 90
#include<stdio.h>
int main()
{
int i = 10;
int j = 20;
int k = 3;
k *= i + j; //*=的优先级低于+
printf("%d", k);
}
题目5:下列程序的最终输出结果是 1
#include<stdio.h>
#include<stdlib.h>
int a = 1;
void test()
{
int a = 2; //局部变量优先,局部的a只能在test函数内使用
a += 1;
}
int main()
{
test();
printf("%d", a);
return 0;
}
题目6:下列描述中正确的是 c
A:表示m>n为ture或者m<n为ture的表达式为m>n&&m<n
B:switch语句结构中必须有default语句
C:如果至少有一个操作数为ture,则包含“||”运算符的表达式ture
D:if语句结果中必须有else语句
题目7:C语言规定,在一个源程序中,main函数的位置 c
A:必须在最开始
B:必须在系统调用的库函数的后面
C:可以任意
D:必须在最后
题目8:以下叙述不正确的是 d
A:一个源程序可由一个或多个函数组成
B:一个源程序必须包含一个main函数
C:c程序的基本组成单位是函数
D:在c程序中,注释说明只能位于一条语句的后面
题目9:以下叙述正确的是 c
A:在c程序中,main函数必须位于程序的最前面
B:c程序的每行中只能写一条语句
C:C语言本身没有输入输出语句
D:在对一个c程序进行编译的过程中,可发现注释中的拼写错误
C语言只规定了语法规则,库函数是利用C语言语法规则写出来的
题目10:执行一下程序,c的值是 -1
#include<stdio.h>
int main()
{
int a = 0;
int c = 0;
do
{
--c;
a = a - 1;
} while (a > 0);
}
题目11:假定x和y为double类型,则执行x=2;y=x+3/2后y的值为 3.000000
3/2是两个整数相处,得到的结果是1,y为double类型
题目12:以下for循环执行的次数是 4次
#include<stdio.h>
int main()
{
int x = 0;
int y = 0;
for (x = 0, y = 0; (y = 123) && (x < 4); x++)//循环4次后,x=4
{
;
}
}
题目13:若有定义语句,int year=100,*p=&year;以下语句不能使变量year中的值增至1010的语句是
A:*p+=1; B:(*p)++;
C:++(*p); D:*p++ //++的优先级高于*,++只作用于p
题目14:选择表达式11|10的结果是(本题数值均为十进制) 11
11 00000000 00000000 00000000 00001010
10 00000000 00000000 00000000 00001000
11|10 00000000 00000000 00000000 00001010
题目15:char a;int b;float c;double d;
则表达式a*b+d-c值的类型为: double
A*b会把字符a变为整型,加上d,转化为double类型,-c还是double类型
编程题
题目1:求最小公倍数,正整数a和正整数b的最小公倍数是指能被a和b整除的最小的正数值,设计一个算法,求a和b的最小公倍数
输入描述:输入两个整数a和b
输出描述:输出a和b 的最小公倍数
第一种方法:
#include<stdio.h>
int main()
{
int a = 0, b = 0, i = 0;
printf("请输入两个整数\n");
scanf_s("%d %d", &a, &b);
int min = a > b ? a : b;//表示最小公倍数
while (1)
{
if (min % a == 0 && min % b == 0)
{
printf("%d", min);
break;
}
min++;
}
}
第二种方法:
#include<stdio.h>
int main()
{
int a = 0, b = 0;
scanf_s("%d %d", &a, &b);
int i = 1;
for (i = 1;; i++)
{
if (a * i % b == 0)
{
printf("%d", a * i);
break;
}
}
}
第三种方法:碾转相除法
自己的方法:
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
int i = 0;
printf("请输入两个大于0的整数\n");
scanf_s("%d %d", &a, &b);
int min = a > b ? a : b;
for (i = min; i <= a * b; i++)
{
if (i % a == 0&& i % b==0)
{
printf("%d", i);
break;
}
}
}
题目2:
输入描述:
将一句话的单词倒置,标点不倒置。比如 I like Beijing.经过函数后变为 bejing .like i
输出描述:
每个测试输入包含1个测试用例,输入长度不超过100个单词