郑州轻工业大学 2021-2022(1)期末模拟测试一 答案

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 <stdio.h>
#include <string.h>

#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 <stdio.h>
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<stdio.h>
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<stdio.h>
#include<math.h>
#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<stdio.h>
#include<math.h>
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<stdio.h>
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<stdio.h>
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”。

输入样例1:

5 7
3 5 7 1 9

结尾无空行

输出样例1:

2

结尾无空行

输入样例2:

5 7
3 5 8 1 9

输出样例2:

Not Found

代码: 

#include<stdio.h>
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<stdio.h>
#include<ctype.h>
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<stdio.h>
#include<ctype.h>
#include<math.h>
#include<string.h>
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<lon ; i++)
		if (n[i] == '2') sum++;
    int l = ( n[lon - 1] - '0' ) % 2;
	if ( l == 0 ) bit *= 2;
	printf("%.2lf%c", 100 * sum / t * bit,ch);
	return 0;
}

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿白|

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值