《程序设计基础》期中测验

判断题

(下列各题你认为正确的,请在题干的括号内打“√”,错的打“×”,每题2分,共10分)

1、在C语言中,注释可以出现在代码的任何位置。 ( )

2、C语言中的main()函数必须放在程序的开始位置。 ( )

3、变量在使用前必须先声明。 ( )

4、使用”=”进行等于判断是正确的。 ( )

5、内层break语句可以终止嵌套的switch,使最外层的switch结束。( )

答案:√ 正确
注释应该放在合适的位置,让程序员容易地找到并理解注释的含义。注释应该放在需要解释的代码附近,而不是放在代码的任意位置

答案:X 错误
虽然程序的执行从main()函数开始,但在源代码文件中,main()函数不一定非要放在最前面。C编译器会先解析所有的声明和定义,之后才执行main()。因此,函数、变量声明、其他函数定义等都可以放在main()之前

答案:√ 正确
在C语言中,变量需要在其作用域内被声明后才能使用。这包括明确指定类型和可选的初始化。如果尝试使用一个未声明的变量,编译时会报错

答案:X 错误
在C语言中,”=”是赋值运算符,而非比较运算符。用于判断两个表达式是否相等的运算符是”==“。因此,应该使用”==“来进行等于判断

答案:× 错误
break语句的作用是立即退出最内层的循环或switch语句。如果break位于嵌套的switch语句内部,它只会终止当前所在的那个switch语句块,并不会影响到外层的switch结构。要跳出多层结构,需要配合使用标签(labeled statements)或者重新考虑控制流程的设计

单选题

(在本题的每一小题的备选答案中,只有一个答案是正确的,请把你认为正确的答案的题号,填入题干的括号内,多选不给分。每题 2 分,共 20 分)

  1. C 语言不支持的数据类型有( )

A、char B、string C、int D、 double

A、char:错误。char是C语言的基本数据类型之一,用于存储单个字符

B、string:正确。严格来说,C语言没有直接的string数据类型,字符串通常通过字符数组(char array)实现

C、int:错误。int也是C语言的基本数据类型,用于存储整数

D、double:错误。double是C语言的浮点数类型,用于存储双精度浮点数


  1. 控制字符“\n”的作用是: ( )

A、换页 B、换行 C、水平制表 D、回车,光标移动到本行首行

A、换页:不正确。\f才是换页的控制字符

B、换行:正确。\n表示新的一行开始,是换行控制字符

C、水平制表:不正确。\t代表水平制表

D、回车,光标移动到本行首行:不完全正确。\r单独表示回车,但通常\n在许多系统上具有回车并换行的效果


  1. 关于函数,描述错误的是 ( )

A、函数是一段具有特定功能的、可重用的语句组

B、调用函数时不需要了解函数内部的实现原理,只要了解函数的输入输出方式即可

C、一个C源程序可以包含两个main函数

D、使用函数的目的是减低编程的难度和实现代码的重用

A、函数是一段具有特定功能的、可重用的语句组:正确描述

B、调用函数时不需要了解函数内部的实现原理,只要了解函数的输入输出方式即可:正确做法,体现了封装的思想

C、一个C源程序可以包含两个main函数:错误。一个C程序只能有一个main()函数作为程序的入口点

D、使用函数的目的是减低编程的难度和实现代码的重用:正确描述


  1. 下列while循环的执行次数是( )
    while(i=0)
    {
    i--;
    }
    A.0 B.1 C.5 D.死循环
while(i=0)
{
i--;
}

A.0:正确。由于i=0是赋值操作,使得循环条件始终为假,循环不会执行

B/C/D均不正确,因为循环根本不会进入执行体


  1. 请选出合法的C语言赋值语句( )

A.a=b=58; B.i++; C.a=58,b=58 D.k=int(a+b);

A.a=b=58;:正确,链式赋值,先将58赋给b,再将b的值赋给a

B.i++;:虽然合法,但严格来说是自增运算符,不是典型的赋值语句

C.a=58,b=58:不正确,这在C语言中是两个独立的语句,中间以逗号隔开,但作为单个赋值语句是不合法的

D.k=int(a+b);:不正确,类型转换应该使用括号(int),如k=(int)(a+b)


  1. 下面是 C 语言合法的变量名的是( )

A. float B.wen-li C.wenli D.Wen\l

A. float:不正确,这是关键字,不能作为变量名

B.wen-li:不正确,变量名不能包含连字符

C.wenli:正确,符合变量命名规则

D.Wen\\l:不正确,虽然允许大写字母开头,但包含非法的反斜杠字符


  1. 以下程序执行后的输出结果是( )
    #include <stdio.h>

    void main()

    {

    int i,s=0;
    for(i=l;i<10;i+=2)
    {
    s+=i;
    }
    printf("%d\n", s);

    }

A、自然数1~9的累加和 B、自然数 1~9中奇数之和

C、自然数1~10的累加和 D、自然数 1~9 中偶数之和

这个C语言程序的主要功能是通过一个for循环计算一组特定数字的总和,并将结果打印出来。下面是对程序的详细解析:

  1. #include <stdio.h>:这是C语言程序的标准库文件,用于输入输出功能。

  2. void main():主函数,程序从这里开始执行。

  3. int i, s=0;:声明两个整型变量i和s,其中s初始化为0,用于存储累加的结果。

  4. for(i=1; i<10; i+=2):这是一个for循环,它的工作原理如下:

    • i=1:循环开始时,变量i被设置为1。
    • i<10:循环的条件是i小于10。只要满足这个条件,循环就会继续执行。
    • i+=2:在每次循环迭代结束时,i的值增加2。这意味着i将在1, 3, 5, 7, 9之间变化。
  5. s += i;:在循环内部,当前的i值被加到s上。这实际上是在计算1, 3, 5, 7, 9这些奇数的总和。

  6. printf("%d\n", s);:循环结束后,程序使用printf函数打印出s的值,即上述奇数的总和。

综上所述,这个程序计算的是自然数1到9中的奇数(1, 3, 5, 7, 9)的总和。因此,正确的选项是B:自然数1~9中奇数之和。


  1. 若c为char类型变量,能正确判断出c为小写字母的表达式是( )

A、 ‘a’<=c<=’z’ B、 (c>=’a’) || (c<=’z’)

C、 c>=’a’ || c<=’z’ D、 c<=’z’ && c>=’a’

A、’a’<=c<=’z’:在C语言中,这种连续比较是不合法的

B、(c>=’a’) || (c<=’z’):不正确,因为它允许c同时大于等于’a’和小于等于’z’以外的值

C、c>=’a’ || c<=’z’:同样不精确,因为它允许c是两者之外的值

D、c<=’z’ && c>=’a’:正确,使用逻辑与操作符确保c在小写字母范围内


  1. 表达式x+=y是以下哪个表达式的简写? ( )

A.x=x-y B.x=x+y C.x=x*y D.x=x/y

A.x=x-y:不正确,这是减法

B.x=x+y:正确,这是加法赋值,等同于x+=y

C.x=x*y:不正确,这是乘法

D.x=x/y:不正确,这是除法


  1. 下面C语言中的数组定义,正确的是 ( )

A、int[] a ={1, 2, 3}; B、int a[3] = {1, 2, 3};

C、int[3] a = {1, 2, 3}; D、以上都不正确

A、int[] a ={1, 2, 3};:不正确,C语言中数组定义需要指定数组长度

B、int a[3] = {1, 2, 3};:正确,指定了数组类型、名称和初始值

C、int[3] a = {1, 2, 3};:不正确,数组定义的语法顺序错误

D、以上都不正确:基于B选项正确,此选项不正确

程序阅读题 ——> 期末不考

写出下面程序的运行结果(每题5分,共10分)

第一题:

#include <stdio.h>

void main()

{

int a=0,b=0;

a=4; /\* 给a赋值 \*/

b=5; /\* 给b赋值 \*/

printf("a%%b=%d\n",a%b);

}

程序运行后的输出结果是:

a%b=4

第二题:

#include <stdio.h>

void main()

{ int a[6]={12,4,17,25,27,16},b[6]={27,13,4,25,23,16},i,j;

for(i=0;i<6;i++) {

for(j=0;j<6;j++)

if(a[i]==b[j])

{printf("i=%d,j=%d,a[i]=%d\n",i,j,a[i]);

break;}}}

输出结果

i=0,j=2,a[i]=27
i=1,j=3,a[i]=25
i=2,j=4,a[i]=25
i=3,j=1,a[i]=12
i=4,j=3,a[i]=25
i=5,j=5,a[i]=16

编程题

(每题10分,共50分)

  1. 编程实现从键盘从输入两个整数 a,b,比较大小,输出较大值,使用函数调用实现。
#include <stdio.h>

int max(int a, int b);//// 定义一个函数,用于比较两个整数并返回较大的一个,if...else语句实现,返回较大的一个。if(a > b)括号内为true,则返回a,否则返回b。
{
if (a > b)
return a;
else
return b;
}

int main()
{
int a, b;

//从键盘输入两个整数
printf("请输入两个整数,用空格隔开: ");
scanf("%d %d", &a, &b);

//调用函数并输出较大的数
int max_value = max(a , b);
printf("较大的数是: %d\n", max_value);

return 0;
}

  1. 有数组a=[64,34,25,12,22,11,90],请使用冒泡排序实现由小到大排序
#include <stdio.h>

int main()
{
int i, j, t;
int a[7] = {64, 34, 25, 12, 22, 11, 90};
for(i=0;i<6;i++)//进行6次循环,实现6趟比较
for(j=0;j<6-i;j++)//在每一趟中进行6-i次比较
if(a[j]>a[j+1])// >为升序 <为降序
{
t=a[j];a[j]=a[j+1];a[j+1]=t;
}
printf("冒泡排序结果为:");
for(i=0;i<7;i++)
printf("%d ",a[i]);
}

  1. 编写一个程序,从用户那里接收两个整数并打印出来,然后使用第三个临时变量来交换这两个数的值,并再次打印它们。
#include <stdio.h>

int main();
{
int num1, num2, temp;

//提示用户输入两个整数
printf("请输入第一个整数: ");
scanf("%d", &num1);
printf("请输入第二个整数: ");
scanf("%d", &num2);

//打印输入的两个数
printf("输入的第一个整数: %d\n", num1);
printf("输入的第二个整数: %d\n", num2);

//交换两个数的值
temp = num1;
num1 = num2;
num2 = temp;

//打印交换后的两个数
printf("交换后的第一个整数: %d\n", num1);
printf("交换后的第二个整数: %d\n", num2);

return 0;
}

  1. 编写一个程序,从用户那里接收一段文本,然后统计其中每个字符出现的次数。
#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int letter, digit, space, other;//全局变量,记录各类字符的个数

int main()
{
void count(char[]);//声明count函数,用于统计各类字符的类型

char text[80];

printf("请输入一个字符串:\n");//提示输入字符串
gets(text);//调用gets函数,读取字符串

printf("string:\n");
puts(text);

letter = 0;
digit = 0;
space = 0;
other = 0;

count(text);//调用count函数,统计各类字符的个数

printf("该字符串中有,数字:%d个,空格%d个,字母%d个,其他字符%d个", digit, space, letter, other);

return 0;
}

//count函数,用于统计各类字符类型的数量
void count(char str[])
{
int i;
for (i = 0; str[i] != '\0'; i++)
{
if (str[i] >= '0' && str[i] <= '9')
{
digit++;
}
else if (str[i] == ' ')
{
space++;//空格
}
else if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z'))
{
letter++;//字母
}
else
{
other++;// 其他字符
}
}
}

  1. 编程实现将从键盘输入圆半径r,输出圆周长和圆面积。
#include <stdio.h>  

#define PI 3.14159 //使用 #define 指令定义了一个常量 PI 来表示圆周率,其值设为 3.14159

int main() {
double r, circumference, area;

// 从键盘输入圆的半径
printf("请输入圆的半径r: ");
scanf("%lf", &r);

// 计算圆的周长
circumference = 2 * PI * r;

// 计算圆的面积
area = PI * r * r;

// 输出结果
printf("圆的周长为: %.2lf\n", circumference);
printf("圆的面积为: %.2lf\n", area);

return 0;
}

简答题

(每题5分,共10分)

  1. 解释字符常量和字符串常量在C语言中的区别。

解释字符常量和字符串常量在C语言中的区别


  1. 列出C语言中的基本数据类型,并简述它们的用途及输出格式的调用。

列出C语言中的基本数据类型,并简述它们的用途及输出格式的调用