1.单选题
1.1 关于注释说法不正确的是 ( B )
A .注释是用来解释代码的,在代码中是适当的加上注释有利于代码的阅读和多人协作
B .注释基本没啥用,主要给自己看的
C .注释是给程序员看的,编译器在预处理阶段就会删除注释的
D .注释有C++注释风格,有C语言注释风格,推荐C++注释风格
1.2 关于C语言布尔类型错误的是 ( D )
A .C语言布尔类型是_Bool,使用需要包含头文件stdbool.h
B .布尔类型变量的取值是:true或者false
C .布尔类型是专门用来表示真和假的类型
D .布尔类型是C99标准之前就有的
1.3 下面哪个不是C语言内置的数据类型 ( C )
A .char
B .double
C .struct Stu
D .short
解析:C属于自定义类型。
1.4 下面代码输出的结果是: ( B )
#include <stdio.h>
int num = 10;
int main()
{
int num = 1;
printf("num = %d\n", num);
return 0;
}
A . 程序有问题,不能编译
B .输出1
C .输出10
D .输出0
解析:局部变量优先使用。int num=10是全局变量,int num=1是局部变量。
1.5 关于C语言变量说法错误的是 ( C )
A .变量是用来描述生活中经常发生变化的值
B .变量可以分为局部变量和全局变量
C .局部变量是放在内存的静态区的,全局变量是放在内存的栈区
D .当全局变量和局部变量名字相同的情况,且都可以使用的时候,局部变量优先
解析:局部变量是放在内存的栈区的,全局变量是放在内存的静态区。
1.6 关于C语言算术操作符说法正确的是 ( D)
A .除号两边都是小数才能执行小数除法
B .%操作符的操作数可以是整数,也可以是小数
C .%操作符计算的结果是两个操作数整除之后的商
D .负数求模的规则是,结果的正负号由第一个运算数的正负号决定。
解析:A.除号两边其中一个是小数就可以执行小数除法;B .%操作符的操作数只能是整数;C .%操作符计算的结果是两个操作数整除之后的余数。
1.7 下面代码输出的结果是 ( A )
#include <stdio.h>
int main()
{
int a = 7;
int b = 2;
float c = 2.0f;
printf("%d\n", a / b);
printf("%f\n", a / c);
return 0;
}
A .3 3.500000
B .3.500000 3.500000
C .3.500000 3
D .3 3
1.8 下面代码的结果是 ( B )
#include <stdio.h>
int main()
{
int a, b, c;
a = 5;
c = ++a;
b = ++c, c++, ++a, a++;
b += a++ + c;
printf("a = %d b = %d c = %d\n:", a, b, c);
return 0;
}
A .a = 8 b = 23 c = 8
B .a = 9 b = 23 c = 8
C .a = 9 b = 25 c = 8
D .a = 9 b = 24 c = 8
解析:
c = ++a; //前置++,先++,后使用。a=a+1=6,c=6
b = ++c, c++, ++a, a++;//第一次执行:++c:前置++,先++,后使用。c=c+1=7,b=7
//第二次执行:c++:后置++,先使用,后++。b=c=7 c=c+1=8
//第三次执行:++a:前置++,先++,后使用。 a=a+1=7 b=a=7
//第四次执行:a++:后置++,先使用,后++。 b=a=7 a=7+1=8
//a=8 b=7 c=8
b += a++ + c;//第一步:b=b+(a++ +c)
//第二步: b=7+(a++ +8) 后置++,先取a值
//第三步: b=7+(a +8)=23;
//第四步: a=a++=9
//a=9 b=23 c=8
printf("a = %d b = %d c = %d\n:", a, b, c);
return 0;
2. 函数单选题
2.1 关于scanf函数说法正确的是 ( A )
A .scanf中也有占位符,占位符和后边的参数提供的地址一一对应。
B .scanf()处理所有占位符时,会自动过滤起首的空白字符,包括空格、制表符、换行符
C .scanf的占位符%s表示读取一个字符串,遇到空白字符也全部读取
D .scanf是库函数,库函数不需要包含头文件
解析:B .scanf()处理所有占位符时,%c不会自动过滤起首的空白字符;C .scanf的占位符%s表示读取一个字符串,遇到空白字符不会读取;D .scanf是库函数,库函数需要包含头文件
2.2 关于printf函数说法错误的是 ( D )
A .printf()的作用是将参数文本输出到屏幕。它名字里面的f代表format(格式化),表示可以定制输出文本的格式
B .printf()不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行
C .printf()可以在输出文本中指定占位符,“占位符”,就是这个位置可以用其他值代入
D .printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n个
解析:D .printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个。
2.3 下面程序输出的结果是什么 ( B )
#include <stdio.h>
int main()
{
printf("%5d\n", 123456);
return 0;
}
A .12345
B .123456
C .23456
D .0
解析:%5d表示占位符至少为5位,不满5位,对应的值前面添加空格,满5位,正常输出。
2.4 关于if语句说法正确是 ( C )
A .if语句后面只能跟一条语句
B .if语句中0表示假,1表示真
C .if语句是一种分支语句,可以实现单分支,也可以实现多分支
D .else语句总是和它的对齐的if语句匹配
解析:A .if语句后面可以跟多条语句;B .if语句中0表示假,非0表示真;D .else总是跟最接近的if匹配,但是还有其他情况,详情见C语言:选择/分支结构————if语句的exe8例题。
2.5下面代码执行的结果是 ( C )
#include <stdio.h>
int main()
{
int i = 0;
for (i = 0; i<10; i++)
{
if (i = 5)
printf("%d ", i);
}
return 0;
}
A .1 2 3 4 5 6 7 8 9 10
B .5 5 5 5 5 5 5 5 5 5
C .死循环的打印5
D .0 1 2 3 4 5 6 7 8 9
解析:有=,为赋值语句,==才是判断语句,每循环一次,赋值为5,打印5,若i为9,通过赋值i变成5,i++为6,6<10,再次成立循环,形成死循环。
for循环 :
for(表达式1;表达式2;表达式3)
{
循环体;
}
for循环的执行顺序:
第一次循环:先执行表达式1,然后执行表达式2,再执行循环体,最后执行表达式3。
第二次循环:先执行执行表达式2,再执行循环体,最后执行表达式3。
……
3. 编程题
exe1:给定两个整数a和b (0 < a,b < 10,000),计算a除以b的整数商和余数。
输入描述:一行,包括两个整数a和b,依次为被除数和除数(不为零),中间用空格隔开。
输出描述:一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。
示例1
输入:15 2
输出:7 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a, b;
while (scanf("%d %d", &a, &b)!=EOF) {
int ret1 = a / b;
int ret2 = a % b;
printf("%d %d", ret1, ret2);
}
return 0;
}
解析:while循环,只有当表达式为真时才会执行。
while(表达式)
{
循环体;
}
exe2:输入一个整数表示一个人的智商,如果大于等于140,则表明他是一个天才,输出“Genius”。
输入描述:多组输入,每行输入包括一个整数表示的智商。
输出描述:针对每行输入,输出“Genius”。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 0;
printf("请输入智商值:", a);
while (scanf("%d", &a)!=EOF) {
if (a >= 140)
printf("%s\n","Genius");
}
return 0;
}
解析:多组输入用while循环。
exe3: 两个数的大小关系。
输入描述:题目有多组输入数据,每一行输入两个整数(范围-231~231-1),用空格分隔。
输出描述:针对每行输入,输出两个整数及其大小关系,数字和关系运算符之间没有空格,详见输入输出样例。
示例1
输入:1 1
输出:1=1
示例2
输入:1 0
输出:1>0
示例3
输入:0 1
输出:0<1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main(){
int a, b;
while (scanf("%d %d", &a, &b) != EOF) {
if (a > b)
printf("%d>%d\n", a, b);
else if (a == b)
printf("%d=%d\n", a, b);
else
printf("%d<%d\n", a, b);
}
return 0;
}
解析:使用if语句
if( 表达式 )
语句1;
else if
语句2;
else
exe4:判断一个整数是否能5整除。
输入描述:输入包括一个整数M(1≤M≤100,000)。
输出描述:输出包括一行,如果M可以被5整除就输出YES,否则输出NO(结果大小写敏感)。
示例1
输入:10
输出:YES
示例2
输入:9
输出:NO
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int a;
printf("请输入一个整数:");
while (scanf("%d", &a) != EOF) {
if (a % 5 == 0)
printf("YES\n");
else
printf("NO\n");
}
return;
}
exe5:打印用“*”组成的线段图案。
输入描述:多组输入,一个整数(1~100),表示线段长度。即“*”的数量。
输出描述:针对每行输入,输出占一行,用“*”组成的对应长度的线段。
示例1
输入:10 2
输出:********** **
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main() {
int a;
while (scanf("%d", &a) != EOF) {
int i = 0;
while (i < a)
{
printf("%c", '*');
i++;
}
printf("\n");
}
return 0;
}
exe6:打印3的倍数的数,写一个代码打印1-100之间所有3的倍数的数字。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int num=1;
while (num < 100)
{
if (num % 3 == 0)
printf("%d是3的倍数!\n", num);
num++;
}
return 0;
}
exe7:将三个整数数按从大到小输出。
输入:2 3 1
输出:3 2 1
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 1;
int b = 3;
int c = 2;
if (a < b) {
int tmp = a;
a = b;
b = tmp;
}
if (a < c) {
int tmp = a;
a = c;
c = tmp;
}
if (b < c) {
int tmp = b;
b = c;
c = tmp;
}
printf("a=%d,b=%d,c=%d\n", a, b, c);
return 0;
}