A:单选题:
2-1
在嵌套使用if语句时,C语言规定else总是()。(1分)
A.和之前与其具有相同缩进位置的if配对
B.和之前与其最近的if配对
C.和之前与其最近的且不带else的if配对
D.和之前的第一个if配对
答案:C
2-2
将两个字符串连接起来组成一个字符串时,选用函数( )。(1分)
A.strlen( )
B.strcpy( )
C.strcat( )
D.strcmp( )
答案:C
2-3
C语言中while和do-while循环的主要区别是()。(1分)
A.do-while的循环体至少无条件执行一次
B.while的循环控制条件比do-while的循环控制条件严格
C.do-while允许从外部转到循环体内
D.do-while的循环体不能是复合语句
答案:A
2-4
下列程序段的输出结果是()。(1分)
int main(void)
{
for(int i = 1; i < 6; i ++) {
if( i % 2 != 0) {
printf("#");
continue;
}
printf("*");
}
printf("\n");
return 0;
}
A.#*#*#
B.#####
C.*****
D.*#*#*
答案:A
2-5
能正确表示逻辑关系"a≥10 或 a≤0"的C语言表达式是()。(1分)
A.a>=10 or a<=0
B.a>=0 | a<=10
C.a>=10 && a<=0
D.a>=10 || a<=0
答案:D
2-6
有两个字符数组a,b,则以下正确的输入语句是()(1分)
A.gets(a,b);
B.scanf("%s%s",a,b);
C.scanf("%s%s",&a,&b);
D.gets("a"),gets("b");
答案:B;
2-7
以下程序的运行结果是( )。
int x = 5, y = 6;
void incxy( )
{
x++;
y++;
}
int main(void )
{
int x = 3;
incxy( );
printf("%d, %d\n", x, y);
return 0;
}
(1分)
A.3, 6
B.4, 7
C.3, 7
D.6, 7
答案;C
2-8
下面哪个表达式的值是2。(1分)
A.6%3
B.-5%3
C.5%-3
D.-5%-3
答案:C
这里补充一个负数取模运算:(19条消息) 对于负数求模取余该怎么运算?_mg1507的博客-CSDN博客_负数取余运算怎么算
2-9
为表示x≥y≥z,须用的C语言表达式为( )。(1分)
A.(x>=y)&&(y>=z)
B.(x>=y)AND(y>=x)
C.x>=y>=z
D.(x≥y)&&(y≥z)
答案:A
2-10
以下运算符优先级按从高到低排列正确的是( )。(1分)
A.算术运算、赋值运算、关系运算
B.关系运算、赋值运算、算术运算
C.算术运算、关系运算、赋值运算
D.关系运算、算术运算、赋值运算
答案:C
fn.函数题
6-1 字符串的连接 (8 分)
本题要求实现一个函数,将两个字符串连接起来。
char *str_cat( char *s, char *t );
函数str_cat
应将字符串t
复制到字符串s
的末端,并且返回字符串s
的首地址。
#include
#include
#define MAXS 10
char *str_cat( char *s, char *t );
int main()
{
char *p;
char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};
scanf("%s%s", str1, str2);
p = str_cat(str1, str2);
printf("%s\n%s\n", p, str1);
return 0;
}
/* 你的代码将被嵌在这里 */
abc
def
结尾无空行
abcdef
abcdef
代码:
char* str_cat(char* s, char* t)
{
int i=0,k=0;
while (*(s + i) != '\0')
i++;
for (i, k; k < MAXS; i++, k++)
{
*(s + i) = *(t + k);
}
return s;
}
6-3 成绩单排序 (8 分)
定义函数处理结构体数组,按成绩从高到低降序排列。
struct stu {
int num;
char name[20];
int score; };
void fun ( struct stu *p, int n );
p是结构体数组的起始地址,n是结构体单元个数。 结构体成员:num是学号,name是姓名,score是成绩。
在这里给出函数被调用进行测试的例子。例如:
#include
struct stu{
int num;
char name[20];
int score;
};
void fun( struct stu *p, int n );
int main()
{ struct stu a[20];
int n, i;
scanf("%d", &n);
for(i = 0; i < n; i++){
scanf("%d%s%d", &a[i].num, a[i].name, &a[i].score);
}
fun(a,n);
for(i = 0; i < n; i++)
printf("%d %s %d\n", a[i].num, a[i].name, a[i].score);
return 0;
}
/* 请在这里填写答案 */
在这里给出一组输入。例如:
6
1001 anny 85
1002 boy 75
1003 car 65
1004 dan 55
1005 emm 95
1006 pa 35
结尾无空行
在这里给出相应的输出。例如:
1005 emm 95
1001 anny 85
1002 boy 75
1003 car 65
1004 dan 55
1006 pa 35
结尾无空行
代码:
void fun(struct stu* p, int n)
{
int max = 0;
struct stu t;
for (int i = 0; i < n; i++)
{
for (int j = i; j < n; j++)
{
if (p[i].score < p[j].score)
{
t = *(p + i);
*(p + i) = *(p + j);
*(p + j) = t;
}
}
}
}
>编程题
7-1 简单题 (6 分)
这次真的没骗你 —— 这道超级简单的题目没有任何输入。
你只需要在一行中输出事实:This is a simple problem.
就可以了。
无
结尾无空行
This is a simple problem.
结尾无空行
代码:
#include
int main()
{
printf("This is a simple problem.");
return 0;
}
7-2 计算圆的面积 (8 分)
本题目要求读入圆的半径1个整数r,计算并输出圆的面积。圆周率取值为3.14。
输入在一行中给出1个圆的半径整数值r。
area=圆的面积,面积值保留2位小数。
在这里给出一组输入。例如:
2
结尾无空行
在这里给出相应的输出。例如:
area=12.56
结尾无空行
代码:
#include
#include
#define PI 3.14
int main()
{
double r, area;
scanf("%lf", &r);
printf("area=%.2lf", PI * r * r);
return 0;
}
7-3 比较大小 (10 分)
本题要求将输入的任意3个整数从小到大输出。
输入在一行中给出3个整数,其间以空格分隔。
在一行中将3个整数从小到大输出,其间以“->”相连。
4 2 8
结尾无空行
2->4->8
结尾无空行
代码:
#include
#include
void swap(int *a, int *b)
{
if (*a > *b)
{
int t = *a; *a = *b; *b = t;
}
}
int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
swap(&a, &b);
swap(&a, &c);
swap(&b, &c);
printf("%d->%d->%d", a, b, c);
return 0;
}
7-4 求整数段和 (10 分)
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X
的格式输出全部数字的和X
。
-3 8
结尾无空行
-3 -2 -1 0 1
2 3 4 5 6
7 8
Sum = 30
结尾无空行
代码:
#include
int main()
{
int a, b,k=0,sum=0;
scanf("%d %d", &a, &b);
for (int i = a; i <= b; i++)
{
printf("%5d", i);
k++,sum+=i;
if (k % 5 == 0||i==b) printf("\n");
}
printf("Sum = %d", sum);
return 0;
}
7-5 电子汪 (10 分)
据说汪星人的智商能达到人类 4 岁儿童的水平,更有些聪明汪会做加法计算。比如你在地上放两堆小球,分别有 1 只球和 2 只球,聪明汪就会用“汪!汪!汪!”表示 1 加 2 的结果是 3。
本题要求你为电子宠物汪做一个模拟程序,根据电子眼识别出的两堆小球的个数,计算出和,并且用汪星人的叫声给出答案。
输入在一行中给出两个 [1, 9] 区间内的正整数 A 和 B,用空格分隔。
在一行中输出 A + B 个Wang!
。
2 1
结尾无空行
Wang!Wang!Wang!
结尾无空行
代码:
#include
int main()
{
int a, b;
scanf("%d %d", &a, &b);
int s = a + b;
while (s--)
{
printf("Wang!");
}
return 0;
}
7-6 查找整数 (10 分)
本题要求从输入的N个整数中查找给定的X。如果找到,输出X的位置(从0开始数);如果没有找到,输出“Not Found”。
输入在第一行中给出两个正整数N(≤20)和X,第二行给出N个整数。数字均不超过长整型,其间以空格分隔。
在一行中输出X的位置,或者“Not Found”。
5 7
3 5 7 1 9
结尾无空行
2
结尾无空行
5 7
3 5 8 1 9
Not Found
代码:
#include
int main()
{
int n, num,answer,k=0,s=-1;
scanf("%d %d", &n, &answer);
while(n--)
{
scanf("%d", &num);
if (num == answer) s=k ;
k++;
}
if (s == -1) printf("Not Found");
else printf("%d", s);
return 0;
}
7-7 字符串字母大小写转换 (10 分)
本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。
输入为一个以“#”结束的字符串(不超过30个字符)。
在一行中输出大小写转换后的结果字符串。
Hello World! 123#
结尾无空行
hELLO wORLD! 123
结尾无空行
代码:
#include
#include
int main()
{
char ch='\0';
char put[31] = { 0 };
int i = 0;
while (scanf("%c", &ch),ch != '#')
{
if (isupper(ch)) ch += 32;
else if (islower(ch)) ch -= 32;
put[i++] = ch;
}
puts(put);
return 0;
}
7-8 到底有多二 (10 分)
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336
是个11位数,其中有3个2,并且是负数,也是偶数,则它的犯二程度计算为:3/11×1.5×2×100%,约为81.82%。本题就请你计算一个给定整数到底有多二。
输入第一行给出一个不超过50位的整数N
。
在一行中输出N
犯二的程度,保留小数点后两位。
-13142223336
结尾无空行
81.82%
结尾无空行
代码:
#include
#include
#include
#include
int main()
{
char n[52] = { 0 },ch='%';
gets(n);
double bit = 1;
double sum = 0;
int lon = strlen(n);
double t=lon*1.0;
if (n[0] == '-')
{
bit *= 1.5;
t--;
}
for (int i = 0; i