目录
① 选择题
1. 下列程序执行后,输出的结果为( )
2. 以下程序的输出结果是?
3. 下面的代码段中,执行之后 i 和 j 的值是什么()
4. 以下程序的k最终值是:
5. 以下程序的最终的输出结果为:
6. 下列描述中正确的是()
7.C 语言规定,在一个源程序中,main函数的位置()
8.以下叙述不正确的是( )
9.以下叙述正确的是( )。
10. 执行如下代码, c 的值是:()
11. 假定 x 和 y 为 double 型,则执行 x=2 ; y=x+3/2; 后y的值为()
12. 以 下 for 循 环 的 执 行 次 数 是()
13. 若有定义语句: int year=1009 , *p=&year ;
14. 选择表达式 11|10 的结果(本题数值均为十进制)
15. char a ; int b ; flat c ; double d ; 则表达式 a*b+d-c 值的类型为()
②ACM编程题
1.求最小公倍数
2.倒置字符串
① 选择题
1. 下列程序执行后,输出的结果为( )
#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);
}
A 41
B 67
C 109
D 177
总共算出有67次递归运算,每次进入fib()都会cnt++;所以选B
2. 以下程序的输出结果是?
int x = 1;do{printf("%2d\n",x++);}while(x--);
A 1
B 无任何输出
C 2
D 陷入死循环
x=1,进入,然后后置加加变成2,在进入while,变成1.如此死循环。选D
3. 下面的代码段中,执行之后 i 和 j 的值是什么()
int i=1;
int j;
j=i++
A 1,1
B 1,2
C 2,1
D 2,2
选C
4. 以下程序的k最终值是:
int i = 10;
int j = 20;
int k = 3;
k *= i + j;
A 90
B 50
C 70
D 30
因为赋值操作符优先级较低,所以先运算i+j再*K
5. 以下程序的最终的输出结果为:
int a=1;
void test()
{
int a=2;
a+=1;}
int main(){
test();
printf("%d\n",a);
return 0;
}
A 1
B 2
C 3
D 4
局部变量出了作用域就销毁了,所以打印的是全局变量a,这里并没有将a的地址传过去。
6. 下列描述中正确的是()
A 表示m>n为true或者m<n为true的表达式为m>n&&m<n
B switch语句结构中必须有default语句
C 如果至少有一个操作数为true,则包含“]”运算符的表达式trueD if语句结构中必须有else语句
选C
7.C 语言规定,在一个源程序中,main函数的位置()
A 必须在最开始
B 必须在系统调用的库函数的后面
C 可以任意
D 必须在最后
选C
8.以下叙述不正确的是( )
A 一个C源程序可由一个或多个函数组成
B 一个C源程序必须包含一个main函数
C C程序的基本组成单位是函数
D 在C程序中,注释说明只能位于一条语句的后面
选D
9.以下叙述正确的是( )。
在C程序中,main函数必须位于程序的最前面
C程序的每行中只能写一条语句
C语言本身没有输入输出语句
在对一个C程序进行编译的过程中,可发现注释中的拼写错误
选C
10. 执行如下代码, c 的值是:()
int a=0,c=0;
do{
--c;
a=a-1;
}while(a>0);
A 0
B 1
C -1
D 死循环
c--等于-1; a = a-1 a 等于-1,while(-1>0) 为假,跳出循环,所以选C;
11. 假定 x 和 y 为 double 型,则执行 x=2 ; y=x+3/2; 后y的值为()
A 3.500000
B 3
C 2.000000
D 3.000000
3/2为整数1, 1+double型的x, 1+2.0 = 3.0;所以选D
12. 以 下 for 循 环 的 执 行 次 数 是()
for(x=0,y=0;(y=123)&&(x<4);x++);
A 是无限循环
B 循环次数不定
C 4次
D 3次
y=123恒为真,只看x<4; 只有x =0,1,2,3一共四次循环就会跳出,所以选C
13. 若有定义语句: int year=1009 , *p=&year ;
以下不能使变量 year 中的值增至 1010 的语句是
A *p+=1;
B (*p)++;
C ++(*p)
D *p++
*p++ p会先跟++结合,就会跳到下一个整型地址,题目要的是通过&year修改值 ;选D
14. 选择表达式 11|10 的结果(本题数值均为十进制)
A 11
B 10
C 8
D 2
| //按位或, 只要有一个为真就为真,1011和1010 | 后,结果为 1011;所以选A
15. char a ; int b ; flat c ; double d ; 则表达式 a*b+d-c 值的类型为()
A float
B int
C char
D double
两个不同类型进行计算时,会吧小的提 升成的,所以最后结果为double.选D
②ACM编程题
1.求最小公倍数
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小 公倍数。
输入描述: 输入两个正整数A和B。
输出描述: 输出A和B的最小公倍数。
示例1: 输入 5 7 输出 35
int main()
{long long a = 0;long long b = 0;scanf("%lld %lld", &a, &b);//求出a和b的较大值long long i = 1;while (i * a % b != 0){i++;}printf("%lld\n", i * a);return 0;
}
2.倒置字符串
将一句话的单词进行倒置,标点不倒置。
比如 I like beijing. 经过函数后变为:beijing. like I
输入描述: 每个测试输入包含1个测试用例: I like beijing.
输入用例长度不超过100 输出描述: 依次输出倒置之后的字符串,以空格分割
示例1: 输入 I like beijing.
输出 beijing. like I
void reverse(char* left, char* right)
{while (left < right){char tmp = *left;*left = *right;*right = tmp;left++;right--;}
}int main() {char arr[101] = { 0 };//abcdef ghi qwer\0//scanf("%s", arr);//gets(arr);//scanf("%[^\n]s", arr);int ch = 0;int i = 0;while ((ch = getchar()) != '\n'){arr[i++] = ch;}int len = strlen(arr);//1. 逆序整个字符串reverse(arr, arr + len - 1);//2. 逆序每个单词char* cur = arr;while (*cur){char* start = cur;while (*cur != ' ' && *cur != '\0'){cur++;}char* end = cur - 1;reverse(start, end);//逆序一个单词if (*cur == ' ')cur++;}printf("%s\n", arr);return 0;
}
【C语言】初阶已经全介绍了一遍,做完这套初阶测试,巩固,后续还会出每日一题【C语言】。
文中不足的地方,希望大佬指点改善