大一C语言程序设计试题解析[试题详解]

温馨提示:本文最后更新于2024-10-06 11:40:36,某些文章具有时效性,若有错误或已失效,请联系星雨站长

一、选择题

1.下面程序的输出是(D)

#include <stdio.h>

void main()
{
  int k = 11;
  printf("K=%d,k=%o,k=%x\n", k, k, k);
}
A. k=11 , k=12 , k=11B. k=11 , k=13 , k=13
C. k=11 , k=013 , k=oxbD. k=11 , k=13 , k=b

2.在下列选项中,不正确的赋值语句是(D)

A. ++t;B. n1=(n2=(n3=0));
C. k=i=j;D. a=b+c=1;

3.下面合法的C语言字符常量是(A)

A. '\t'B. "A"
C. 65D. A

4. 表达式:10!=9 的值是(D)

A. trueB. 非零值
C. 0D. 1

5.C语言提供的合法的数据类型关键字是(B)

A. DoubleB. short
C integerD. Char

6.字符(char)型数据在微机内存中的存储形式是(D)

A. 反码B. 补码
C. EBCDIC码D. ASCII码

7.C语言程序的基本单位是(C)

A. 程序行B. 语句
C. 函数D. 字符

8.设int a = 12 ,则执行完语句a+=a-=a*a 后,a的值是(D)

A. 552B. 264
C. 144D. -264

9.执行下面程序中的输出语句后,输出结果是(B)

#include <stdio.h>

void main()
{
  int a;
  printf("%d\n", (a = 3 * 5, a * 4,a + 5));
}
A. 65B. 20 
C. 15 D. 10

10.下面程序的输出是(B)

#include <stdio.h>

void main()
{
  int x = 023;
  printf("%d\n", --x);
}
A. 17B. 18
C. 23D. 24

11.下面程序的输出的是(C)

#include <stdio.h>

void main()
{
  int x = 10, y = 3;
  printf("%d\n", y = x / y);
}
A. 0B. 1
C. 3D. 不确定的值

12.已知字母A的ASCII码为十进制的65,下面程序的输出是(A)

#include <stdio.h>

void main()
{
  char ch1, ch2;
  ch1 = 'A' + '5' - '3';
  ch2 = 'A' + '6' - '3';
  printf("%d,%c\n", ch1, ch2);
}
A. 67,DB. B,C
C. C,DD. 不确定的值

13. 若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为(D)

A. a<>0B. !a
C. a=0D. a

14.以下程序的输出结果是(D)

#include <stdio.h>

void main()
{
  int x = 10, y = 10;
  printf("%d%d\n", x--, --y);
}
A. 10 10B. 9 9 
C. 9 10D. 10 9

15.设有如下定义:int x =10 , y=3,z;则语句printf("%d\n",z=(x%y,z/y));的输出结果是(B)

A. 1 B. 0
C. 4D. 3

16.为表示关系x≥y≥z,应使用C语言表达式(A)

A. (X>Y)&&(Y>=Z)B. (X>=Y)AND(Y>=Z)
C. (X>=Y>=Z)D. (X>=Y)&(Y>=Z)

17.C语言中非空的基本数据类型包括(B)

A. 整数,实型,逻辑型B. 整型,实型,字符型
C. 整型,实型,逻辑型D. 整型,实型,逻辑型,字符型

18.若x和y都是int型变量,x=100,y=200,且有下面的程序片段。printf("%d",(x,y));上面程序片段的输出结果为(A)

A. 200B. 100
C. 100 200D. 输出格式符不够,输出不确定的值

19.阅读下面的程序,如果在键盘上输入abc<回车>,则程序的运行结果是(A)

#include <stdio.h>

void main() 
{
	char ch;
	scanf_s("%3c", &ch);
	printf("%c", ch);
}
A.aB.b
C.cD.程序语法错误

20.阅读下面的程序,则程序的运行结果是(D)

#include <stdio.h>

void main()
{
	int i, j;
	i = 010; j = 9;
	printf("%d,%d", i - j, i + j);
}
A. 1,19B. -1,19
C. 1,17D. -1,17

21.阅读下面的程序,程序的运行结果是(C)

#include <stdio.h>

void main()
{
	int i, j, m, n;
	i = 8; j = 10;
	m = ++i; n = j++;
	printf("%d,%d,%d,%d", i, j, m, n);
}
A. 8,10,8,10B. 9,10,8,11
C. 9,11,9,10D. 9,10,9,11

22.已知 a=12 ,则表达式 a+=a-=a*=a 的结果是(A)

A. 0B. 144
C. 12D. -264

23.若已定义 int a ,则表达式 a=10,a+10,a++的值是(B)

A. 20B. 10
C. 21D. 11

24.阅读下面的程序,如果从键盘上输入1234567<回车>,则程序的运行结果是(D)

#include <stdio.h>

void main()
{
	int i, j;
	scanf_s("%3d%2d", &i, &j);
	printf("i=%d,j=%d\n", i, j);
}
A. i=123,j=4567B. i=1234,j=567
C. i=1,j=2D. i=123,j=45

25.下面程序的输出结果是(D)

#include <stdio.h>

void main()
{
	int a = -1, b = 4, k; k = (++a <= 0) && (b-- <= 0);
	printf("%d,%d,%d\n", k, a, b);
}
A. 1,1,2B. 1,0,3
C. 0,1,2D. 0,0,3

26.下面程序的输出结果是(A)

#include <stdio.h>

void main()
{
	int a = 5, b = 3;
	float x = 3.14, y = 6.5;
	printf("%d,%d\n", a + b != a - b, x <= (y -= 6.1));
}
A. 1,0B. 0,1
C. 1,1D. 0,0

27.执行下面程序段后,输出结果是(A)

#include <stdio.h>

void main()
{
	int a; 
	int b = 65536; a = b; 
	printf("%d\n", a);
}
A. 65536B. 0
C. -1D. 128

28.若有以下定义和语句,则输出结果为(B)

#include <stdio.h>

void main()
{
	int a = 010,b = 0x10, c = 10;
	printf("%d,%d,%d\n", a, b, c);
}
A. 10,10,10B. 8,16,10
C. 8,10,10D. 8,8,10

29.已知有double型变量 x=2.5,y=4.7,整型变量 a=7,则表达式x+a%3*(int)(x+y)%2/4的值(B)

A. 2.4B. 2.5
C. 2.75D. 0

30.若定义xy是整型变量,x=2; ,则表达式y=2.75+x/2 的值是(C)

A. 5.5B. 5
C. 3D. 4.0

31.以下程序的输出结果是(D)

#include <stdio.h>

void main()
{
	int a = 12, b = 12;
	printf("%d,%d\n", --a, ++b);
}
A. 10,10B. 12,12
C. 11,10D. 11,13

32. 有以下语句:int x = 10; x += 3 + x % (3) ,则 x 的值是(A)

A. 14B. 15
C. 11D. 12

33.若 d 为 double 型变量,则表达式 d = 1 ,d + 5 ,d++的值是(C)

A. 1B. 6.0
C. 2.0D. 1.0

34. 表达式 5!= 3 的值是(D)

A. TB. 非零值
C. 0D. 1

35. 若有定义 int a = 12,n = 5,则表达式 a % = (n % 2),运算后,a 的 值(A)

A. 0B. 1
C. 12D. 6

36.若有定义 int x = 3,y = 2float a = 2.5,b = 3.5,则表达式: (x + y) % 2 + (int) a / (int) b 的值是(D)

A. 0B. 2
C. 1.5D. 1

37、在C语言中,以下叙述不正确的是(A)

A. 在C程序中,无论是整数还是实数,都能被准确无误的表示
B. 在C程序中,变量名代表存储器中的一个位置
C. 静态变量的生存期与整个程序的生存期相同
D. C语言中变量必须先定义后引用

38.C语言中的变量名只能由字母,数字和下划线三种字符组成.且第一个字符(C)

A. 必须为字母
B. 必须为下划线
C. 必须为字母或下划线
D. 可以是字母,数字或下划线中的任意一种

39.设有说明: char w ; int x ; float y ; double z;则表达式: w * x + z - y 值的数据类型是(D)

A. floatB. char
C. intD. double

40、一个C语言的执行是从(A)

A. 本程序的主函数开始,到本程序的主函数结束
B. 本程序的第一个函数开始,到本程序的最后一个函数结束
C. 本程序的主函数开始,到本程序的最后一个函数结束
D. 本程序的第一个函数开始,到本程序的主函数结束

41.设a为整型变量,不能正确表达数学关系10<a<15的C语言表达式是

A. 10<a<15B. a==11 || a==12 || a==13 || a==14
C. a>10&&a<15D. !(a<=10)&&!(a>=15)

42.下列程序执行后的输出结果是(C)

#include <stdio.h>

void main()
{
	int a = 5, b = 60, c;
	if (a < b) 
	{
		c = a * b;;
		printf("%d*%d=%d\n", b, a, c);
	}
	else
	{
		c = b / a;
		printf("%d/%d=%d\n", b, a, c);
	}
}
A. 60 / 5 = 12B. 300
C. 60 * 5 = 300D. 12

43.如果c为字符型变量,判断c是否为空格,(假设已知空格 ASCI码为32)不能使用(C)

A. if (c == '32')B. if (c == 32)
C. if (c == '\40')D. if(c == ' ')

44. 运行下面程序时,若从键盘输入"3,5<CR>",则程序的输出结果是(C)

#include <stdio.h>

void main()
{
	int x, y;
	scanf_s("%d,%d", &x, &y);
	if (x == y)printf("x==y");
	else if (x > y)printf("x > y");
	else printf("x<y");
}
A. 3 < 5B. 5 > 3
C. x > yD. x < y

45.运行下面的程序时,若从键盘输入数据为“6,5,7<CR>",则输出结果是(C)

#include <stdio.h>

void main()
{
	int a, b, c;
	scanf_s("%d,%d,%d", &a, &b, &c);
	if (a > b)
		if (a > c)
			printf("%d\n", a);
	else
		printf("%d\n", c);
	else if (b > c)
		printf("%d\n",b);
	else printf("%d\n", c);
}
A. 5B. 6
C. 7D. 不确定值

46.执行下面程序时,若从键盘输入”2<CR>",则程序的运行结果是(A)

#include <stdio.h>

void main()
{
	int k;
	char cp;
	cp = getchar();
	if (cp >= '0' && cp <= '9')
		k = cp - '0';
	else if (cp >= 'a' && cp <= 'f')
		k = cp - 'a' + 10;
	else k = cp - 'A' + 10;
	printf("%d\n", k);
}
A. 2B. 4
C. 1D. 10

47.运行下面程序时,从键盘输入“2.0<CR>",则输出结果是(B)

#include <stdio.h>

void main()
{
	float a, b;
	scanf_s("%f", &a);
	if (a < 0.0)
		b = 0.0;
	else if ((a < 0.5) && (a != 2))
		b = 1.0 / (a + 2.0);
	else if (a < 10.0)
		b = 1.0 / 2;
	else b = 10.0;
	printf("%f\n", b);
}
A. 0.000000B. 0.500000
C. 1.000000D. 0.250000

48.执行下面程序后,运行结果是(A)

#include <stdio.h>

void main()
{
	int x = 41, y = 1;
	if (x % 3 == 0 && x % 7 == 0)
	{
		y += x;
		printf("y=%d\n", y);
	}
	else
	{
		y = x;
		printf("y=%d", y);
	}
}
A. y=41B. y=43
C. y=42D. y=1

49.运行下面程序时,从键盘输入”12,34,9<CR>",则输入结果是(C)

#include <stdio.h>

void main()
{
	int x, y, z;
	scanf_s("%d,%d,%d", &x, &y, &z);
	if (x < y)
		if (y > z)
			printf("%d\n", z);
		else
			printf("%d\n", y);
	else if (x < z)
		printf("%d\n", z);
	else
		printf("%d\n", x);
}
A. 34B. 12
C. 9D. 不确定的值

50.运行下面程序时,从键盘输入字母H,则输出结果是(C)

#include <stdio.h>

void main()
{
	char ch;
	ch = getchar();
	switch (ch)
	{
	case 'H':
		printf("Hello!\n");
	case 'G':
		printf("Good morning!\n");
	default :
		printf("Bye_Bye!\n");
	}
}
A. Hello!
B. Hello!
Good morning!
C. Hello!
Good morning!
Bye_Bye!
D. Hello!
Bye_Bye!

51. 执行下列此程序段后的输出结果是(A)

#include <stdio.h>

void main()
{
	int x = 1, y = 1, z = 1;
	x += y += z;
	printf("%d\n", x < y ? y : x);
}
A. 3B. 2
C. 1D. 4

52.设ch是char型变量,值为‘A’,则表达式ch = (ch >= 'A' && ch <= 'Z') ? ch + 32 : ch;的值是(B)

A. ZB. a
C. zD. A

53. 下面程序的输出结果是(C)

#include <stdio.h>
void main() {
    int x=8, y=7, z=9;
    if (x < y)

        z = 0;
    else
        z = 1;
    printf("%d\n", z);
}
A. 8B. 1
C. 9D. 0

54.运行下面程序时,若从键盘输入“5<CR>”,则程序的输出结果是(B)

#include <stdio.h>
void main() {
    int a;
    scanf_s("%d", &a);
    if (a++ > 5)
        printf("%d\n", a);
    else
        printf("%d\n", a--);
}
A. 7B. 6
C. 5D. 4

55.运行下面程序时,若从键盘输入“3, 4<CR>”,则程序的输出结果是(B)

#include <stdio.h>
void main() {
    int a, b, s;
    scanf_s("%d, %d", &a, &b);
    s = a;
    if (s < b)
        s = b;
    s = s * s;
    printf("%d\n", s);
}
A. 14B. 16
C. 18D. 20

56.下列程序的执行结果是(D)

#include <stdio.h>
void main() {
    int x = 0, y = 1, z = 0;
    if (x = z = y)
        x = 3;
    printf("%d,%d\n", x, z);
}
A. 3,0B. 0,0
C. 0,1D. 3,1

57.假定等级和分数有以下对应关系,等级:A 分数 :85~100,等级:B分数:60~84,等级:C分数:60以下,对于等级grade输出相应的分数区间,能够完成该功能的程序是(D)

A.
switch (grade)
case 'A': printf("85--100\n");
case 'B': printf("60--84\n");
case 'C': printf("60以下\n");
default: printf("等级错误!"\n);
B.
switch (grade)
case 'A': printf("85--100\n");
break;
case 'B' : printf("60--84\n");
case 'C': printf("60以下\n");
default: printf("等级错误!"\n);
C.
switch (grade)
case 'A': printf("85--100\n");
break;
case 'B': printf("60--84\n");
break;
case 'C': printf("60以下\n");
default: printf("等级错误!"\n);
D.
switch (grade)
case 'A': printf("85--100\n");
break;
case 'B': printf("60--84\n");
break;
case 'C': printf("60以下\n");
break;
default: printf("等级错误!"\n);

58.能够完成如下函数计算的程序段是(B)

图片[1]-大一C语言程序设计试题解析[试题详解]-星雨博客
A.
y = 1;
if (x != 1)
if (x > 0)
y = 1;
else
y = 0;
B.
if (x >= 0)
if (x > 0)
y = 1;
else
y = 0;
else
y = -1;
C.
y = 0;
if (x >= 0)
if (x > 0)
y = 1;
else y = 0;
D.
y = -1;
if (x > 0)
y = 1;
else y = -1;

59.有如下程序,该程序的输出结果是(C)

#include <stdio.h>
void main() {
    float x = 5.0, y;
    if (x < 0.0)
        y = 0.0;
    else if (x < 10.0)
        y = 1.0 / x;
    else
        y = 1.0;
    printf("%f\n", y);
}
A. 0.000000B. 0.50000
C. 0.200000D. 1.000000

60.以下程序的执行结果是(B)

#include <stdio.h>
void main() {
    int x = 1, y = 0;
    switch (x) {
    case 1: switch (y) {
    case 0: printf("first\n"); break;
    case 1: printf("second\n"); break;
    }
    case 2: printf("third\n");
    }
}
A. first
second
B. first
third
C. firstD. second
third

61.以下程序的执行结果是(A)

#include <stdio.h>
void main() {
    int a, b, c, d, x;
    a = c = 0;
    b = 1;
    d = 20;
    if (a) d = d-10;
    else if (!b) {
        if (!c) x = 15;
        else x = 25;
    }
    printf("d=%d\n", d);
}
A. d=20B. d=10
C. d=15D. 25

62.有如下程序,该程序的输出结果是(C)

#include <stdio.h>
void main() {
    int a = 2, b = -1, c = 2;
    if (a > b) {
        if (b < 0)
            c = 0;
        else
            c++;
    }
    printf("%d\n", c);
}
A. 0B. 1
C. 2D. 3

63.下列程序执行后的输出结果是(B)

#include <stdio.h>
void main() {
    int x, y=1, z;
    if ((z = y)< 0)
        x = 4;
    else if (y == 0) 
        x = 5;
    else 
        x = 6;
    printf("%d,%d\n", x, y);
}
A. 4,1B. 6,1
D. 5,0D. 出错信息

64. 有如下程序,该程序的输出结果是(A)

#include <stdio.h>
void main() {
    int x = 1, a = 0, b = 0;
    switch (x) {
    case 0: b++; 
    case 1: a++;
    case 2: a++; b++;
    }
    printf("a=%d,b=%d\n", a, b);
}
A. a=2,b=1B. a=1,b=1
C. a=1,b=0D. a=2,b=2

65.下面程序的输出结果是(C)

#include <stdio.h>
void main() {
    int a = -1, b = 1, k;
    if ((++a > 0) && (b-- <= 0))
        printf("%d %d\n", a, b);
    else
        printf("%d %d\n", b, a);
}
A. -1 1B. 0 1
C. 1 0D. 0 0

66.假定 w、x、y、z、m 均为 int 型变量,有如下程序段,则该程序执行后,M的值是(D)

w = 1; x = 2; y = 3; z = 4;
m = (w < x) ? w : x;
m = (m < y) ? m : y;
m = (m < z) ? m : z;
A. 4B. 3
C. 2D. 1

67.以下程序的输出结果是(D)

void main() {
    int a = 100;
    if (a > 100)
        printf("%d\n", a > 100);
    else
        printf("%d\n", a <= 100);
}
A. a<=100B. 100
C. 0D. 1

68.若执行下面的程序从键盘上输入9,则输出结果是(B)

#include <stdio.h>
void main() {
    int n;
    scanf_s("%d", &n);
    if (n++ < 10)
        printf("%d\n", n);
    else
        printf("%d\n", n--);
}
A. 11B. 10
C. 9 D. 8

二、程序填空题

3.统计整数 n 的各个位上出现数字1,2,3的次数,并通过外部(全局)变量c1,c2,c3返回主函数。例如,当n=123114350时,结果应该为:c1=3 c2=1 c3=2

#include <stdio.h>

int c1, c2, c3;


void fun(long n)
{
	c1 = c2 = c3 = 0;
	while (n)
	{
		switch (n%10)
		{
		case 1:
			c1++;
			break;
		case 2:
			c2++;
			break;
		case 3:
			c3++;
			break;
		}
		n /= 10;
	}
}

void main() {
	int n = 123114250;
	fun(n);
	printf("\nn=%d c1=%d c2=%d c3=%d\n", n, c1, c2, c3);
}

6.计算两个整数n和m(n<1000) 之间所有数的和。n和m从键盘输入。例如,当n=1,m=100时,sum=5050,当n=100,m=1000时,sum=495550。

#include <stdio.h>

void main()
{
	int n, m;
	int sum;
	sum = 0;
	printf("\nInput n,m\n");
	scanf_s("%d,%d", &n, &m);
	while (n <= m)
	{
		sum += n;
		n++;
	}
	printf("sum=%d\n", sum);
}

其实思路大致都是一样的,但是个人感觉使用for循环会比较简单,易懂!

#include <stdio.h>

void main()
{
	int sum = 0;     //声明一个变量用来统计总和
	int n,m;
	scanf_s("%d,%d", &n, & m);     //接收键盘输入的n和m值
	for (;n <= m; n++)    //从n开始循环,一直循环到m结束
	{
		sum += n;      //统计每次循环得到的数
	}
	printf("%d", sum);
}
import java.util.Scanner;

/**
 * @author sunny
 */

public class Test{
	public static void main(String[] args) {
		int sum =0;
		Scanner sc =new Scanner(System.in);
		int n=sc.nextInt();
		int m=sc.nextInt();
		for(;n<=m;n++){
			sum+=n;
		}
		System.out.println("sum="+sum);
	}
}

14.查找N在数组a中最后一次出现的位置(数组首元素的位置为零),例如:如果a数组中的元素为:1,5,2,5,6,8,7,4,3,0,当 n=5 时,程序的输出结果为:5 is NO 3。当 n=10 ,程序的输出结果应为:10 not found !

#include <stdio.h>

void main()
{
    int a[10] = { 1,5,2,5,6,8,7,4,3,0 };

    int i, k, n, f = 0;

    scanf_s("%d", &n);
    for ( int i = 0; i <10; i++)
    {
        if (a[i] == n) {
            f = 1;
            k = i;
        }
    }
    
    if (f) {
        printf("%d is NO. %d\n", n, k);
    }
    else {
        printf("%d not found!\n", n);
    }
}

来说一下题目原本的解题思路,首先定义了一个整型变量 F 来作为布尔值,接着遍历数组,如果找到了则更新索引(k)和布尔值(f),接着通过 f 来判断是否找到,个人感觉这一步就有点多余了!

然后来说一下我的思路,定义一个 index 变量来记录索引的值,这里有个细节,为什么给了初始变量 -1 呢?因为我们知道数组的索引里不存在负数的索引,接着遍历数组,如果找到了则更新索引值,接着我们可以直接去判断 index 是否为 -1 ,如果为 - 1 ,则表示没有找到!

#include <stdio.h>

void main() {
    int a[10] = { 1,5,2,5,6,8,7,4,3,0 };        //定义初始数组
    int n;                  //定义变量来接收需要查找的数字
    scanf_s("%d", &n);
    int index = -1;         //定义变量来记录索引值
    for (int i = 0; i < 10; i++)        //遍历数组
    {
        if (a[i] == n)          //判断当前数字是否和查找的值相同
        {
            index = i;          //如果相同则更新索引
        }
    }
    if (index != -1)            //判断是否找到(判断索引是否更新)
    {
        printf("%d is NO. %d\n", n, index);     
    }
    else
    {
        printf("%d not found!\n", n);
    }

}
import java.util.Scanner;

/**
 * @author sunny
 */

public class Test{
	public static void main(String[] args) {
		int[] arr= { 1,5,2,5,6,8,7,4,3,0 };
		Scanner sc =new Scanner(System.in);
		int n=sc.nextInt();
		int index=-1;
		for (int i = 0; i < arr.length; i++) {
			if(arr[i]==n){
				index=i;
			}
		}
		if(index!=-1){
			System.out.println(n+" is No. "+index);
		}else{
			System.out.println(n+" not found!");
		}
	}
}

© 版权声明
THE END
喜欢就支持一下吧!
点赞31赞赏 分享