1、关于scanf函数说法正确的是?
A.scanf中也有占位符,占位符和后边的参数提供的地址一一对应。
B.scanf()处理所有占位符时,会自动过滤起首的空白字符,包括空格、制表符、换行符
C.scanf的占位符%s表示读取一个字符串,遇到空白字符也全部读取
D.scanf是库函数,库函数不需要包含头文件
正确答案:A
B:scanf()处理数值占位符时,会自动过滤空白字符,包括空格、制表符、换行符,scanf输出字符占位符的时候,不忽略空白字符,总是返回当前第一个字符,无论该字符是否为空格。
C:scanf的占位符%s表示读取一个字符串,遇到空白字符就停止读取。
D:scanf需要包含stdio.h这个头文件的
2、关于printf函数说法错误的是?
A.printf()的作用是将参数文本输出到屏幕。它名字里面的f代表format(格式化),表示可以定制输出文本的格式。
B.printf()不会在行尾自动添加换行符,运行结束后,光标就停留在输出结束的地方,不会自动换行。
C.printf()可以在输出文本中指定占位符,“占位符”,就是这个位置可以用其他值代入。
D.printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n个
正确答案:D
printf()参数与占位符是一一对应关系,如果有n个占位符,printf()的参数就应该有n+1个。如果参数个数少于对于的占位符,printf()可能会输出内存中的任意值。(以下为示例)
3、下面程序输出的结果是?
#include <stdio.h>
int main()
{
printf("%5d\n", 123456);
return 0;
}
A.12345
B.123456
C.23456
D.0
正确答案:D
printf()允许限定占位符的最小宽度。%5d表示这个占位符的宽度至少为5位。如果不满5位,对应的值的前面会添加空格。如果超过5位,正常输出就行,5是最少输出5位。
4、关于if语句说法正确是:( )
A.if语句后面只能跟一条语句
B.if语句中0表示假,1表示真
C.if语句是一种分支语句,可以实现单分支,也可以实现多分支
D.else语句总是和它的对齐的if语句匹配
正确答案:C
答案解析:
A:错误,if之后可以跟多条语句,跟多条语句时需要使用{}括起来
B:错误,0表示假,非零表示真
C:正确
D:不一定,要看具体的代码,如果代码不规范,可能没有对齐,比如:
if()
if()
else
;
上述else虽然是和外层if对齐,但是会和内部if进行匹配。
因此,选C
5、下面代码执行的结果是:( )
#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
正确答案:C
答案解析:
上述代码本来的想法应该是:循环10次,每次循环时如果i==5则打印i的结果。
但if语句中表达式的==写成了赋值,相当于每次循环尽量都是将i的值设置成了5,5为真,因此每次都会打印5
i每次修改成5打印后,i的值永远不会等于10,因此造成死循环
故:死循环的打印5
因此:选择C
6、BC18 计算带余除法
参考(答案不唯一):
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
scanf("%d %d", &a, &b);
int m = a/b;
int n = a%b;
printf("%d %d\n", m, n);
return 0;
}
参考(答案不唯一):
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d", &n) != EOF)
{
if(n>=140)
printf("Genius");
}
return 0;
}
参考(答案不唯一):
```c
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
while(scanf("%d%d", &num1, &num2) != EOF)
{
if(num1>num2)
printf("%d>%d\n", num1, num2);
else if(num1<num2)
printf("%d<%d\n", num1, num2);
else
printf("%d=%d\n", num1, num2);
}
return 0;
}
9、BC83 被5整除问题
参考(答案不唯一):
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n%5==0)
printf("YES\n");
else
printf("NO\n");
return 0;
}
10、BC56 线段图案
参考(答案不唯一):
#include <stdio.h>
int main()
{
int n = 0;
while(scanf("%d", &n)!=EOF)
{
int i = 0;
for(i=0; i<n; i++)
{
printf("*");
}
printf("\n");
}
return 0;
}
11、写一个代码打印1-100之间所有3的倍数的数字。
参考(答案不唯一):
/*
解题思路:
1. 3的倍数一定能够被3整除,因此i%3==0表达式成立时,则i一定是3的倍数
2. 要输出1~100之间的3的倍数,那只需要从1~100循环100次即可,每次拿到i之后,用i%3==0检测
如果成立:i是3的倍数,输出
如果不成立:i不是3的倍数
*/
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=100; i++)
{
if(i%3==0)
{
printf("%d ", i);
}
}
return 0;
}
12、写代码将三个整数数按从大到小输出。
例如:
输入:2 3 1
输出:3 2 1
参考(答案不唯一):
/*
思路:
该题比较简单,参考代码
*/
#include <stdio.h>
int main()
{
int a = 2;
int b = 3;
int c = 1;
scanf("%d%d%d",&a, &b,&c);
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;
}