admin 管理员组

文章数量: 1087139


2024年4月21日发(作者:php期末考试题)

【习题1】

一、判断并改错

1.1 C程序执行的入口是main()函数,所以main函数必须放在程序的开头。

错误:main函数可以放在程序的任何位置。并不限定在程序的开头。

定义一个函数包括数据说明部分和执行语句部分,两者可以交叉出现。

错误:不可以交叉出现,数据说明部分在执行语句部分的前面。

scanf("%d,%d",&x,&y);的正确输入格式:3,4<回车>。

正确

注释内容太多会影响程序的执行效率。

错误:不会影响程序的执行效率。因为在编译时,编译系统将注释内容删除或用空格代替,

所以注释内容不会编译到目标程序中。

二、编程题

输入圆的半径,求圆的周长,并将结果保留两位小数输出到屏幕上。

提示:定义圆的半径r,圆的周长:2**r,输出结果保留2位小数可以用%.2f

输入两个整数,输出其中最大者。

提示:模仿例

【习题2】

一、单项选择题

下面四个选项中,均是不合法的用户标识符的选项是(C)。

A)BA 、x_0、do

B)float、1a0、_Y

C)x-y、goto、123

D)_123、tmp、CHAR

下列选项中不正确的常数的选项是(D)。

A)0x12F B) C) D)0388

下面正确的字符常量是(B)。

A)"a" B)'' C)"n" D)"376"

下面正确的字符串常量是(C)。

A)'a' B)'376' C)"n" D)376

表达式'A'+4*'b'的正确结果是(B)。

A)67 B) C)不确定 D)67L

执行printf("%x",100);后的输出结果是(C)。

A)100 B)0x100 C)0X64 D)64

存储字符串"'abc376"需要的字节数是(D)。

A)11 B)13 C)6 D)7

【习题3】

一、计算题

+7%3*11%2/4 (答案:

5/2+2+7%6 (答案:

3.3 a=12,a*=2+3 (答案:a=60)

3.4 a=3,b=4,c=5,a+b>c&&b= =c (答案:0)

3>53:5<825:40 (答案:25)

设a=1,b=2,c=3,d=4,m=n=1,有表达式(m=a>b)&&(n=c>d),计算表达式后m,n的值

(答案:m=0,n=1)

设int b=7;float a=,c=;求下面表达式的值。

a+(int)(b/2*(int)(a+c)/2)%4 (答案:

二、单项选择题

若有代数式

8xy

,则不正确的C语言表达式是(C)。

bc

A)x/b/c*y*8 B)8*x*y/b/c

C)8*x*y/b*c D)x*y/c/b*8

有如下类型说明:

int k,a,b;

unsigned long w=8;

double x=

则以下不符合C语言语法的表达式是(A)。

A)x%(-3) B)w*=-2

C)k=(a=6,b=4,a-b) D)a*=a+=a-=(b=4)*(a=3)

有如下类型说明:

float n;

int m;

则以下能实现将n中的数值保留小数点后两位,第三位四舍五入的表达式是(B)。

A)n=(n*100+/ B)m=n*100+,n=m/

C)n=n*100+ D)n=(n/100+*

设k=7,x=12;则下列表达式值为3的是(D)。

A)x%=(k%=5) B)x%=(k-k%5)

C)x%=k-k%5 D)(x%=k)-(k%=5)

已知m=48,ch='a',n=0;则表达式(m>=n&&ch<'b'&&!n)的值是(B)。

A)0 B)1 C)真 D)非0

下面哪个式子在b为奇数时结果为假(C)。

A)a%2==1 B)!(a%2==0) C)!(a%2) D)a%2

执行printf("%f",(x=3,y=5,x>y1:);后的输出结果是(D)。

A)语法错误 B)1 C) D)

能表示条件0≤x≤100的表达式是(D)。

A)0<=x<=100 B)x>=0,x<=100

C)0≤x≤100 D)x>=0&&x<=100

判断char型变量ch为数字的正确表达式是(B)。

A)ch>="0"&&ch<="9" B)ch>='0'&&ch<='9'

C)'0'≤ch≤'9' D)ch>='0'||ch<='9'

三、编程题(应用条件运算)

输入一个整型成绩x, 如果大于等于60分, 输出“pass”, 否则输出“fail”。

提示:printf("%s",x>60"pass":"fail");

输入一个年份y,如果是闰年,输出“y is a leap year”,否则输出“y is not a leap

year.”

提示:printf("%d is %s",y%4==0&&y%100!=0||y%400==0"a leap year.":"not a leap

year.");

输入三条边a,b,c,如果它们能构成一个三角形,输出“Yes”,否则输出“No”。

提示:printf("%s",a+b>c&&a+c>b&&b+c>a"Yes":"No");

输入三个数x,y,z,按从小到大的输出结果。

提示:分别用max0,min0代表最大、最小值,mid0表示中间值。

max0=(x>yx:y)>z(x>yx:y):z;max0=(x

mid0=x+y+z-max0-min0;

【习题4】

编程实现,输入一个整数,判断它是否为偶数,并显示相应的信息。

提示:x代表输入的整数,if(x%2==0) printf("neven");else printf("nodd");

编程实现,输入一个平面上的点,判断它是否落在单位圆上,并显示相应的信息。

提示:x,y代表平面坐标,if(x*x+y*y==1) printf("nYes");else printf("nNo");

编程实现,输入一个成绩等级(A-E),显示相应的百分制成绩段。

A: 90-100

B: 80-89

C: 70-79

D: 60-69

E: <60

提示:char grade;

if(grade=='A') printf("n90-100");

else if(grade=='B') printf("n80-89");

....

写出下面程序的运行结果:

#include<>

main()

{

int a=-1,b=1,c=5;

switch(a>0){

case 1:switch(b-2<0){

case 1:printf("&");break;

case 2:printf("*");break;

}

case 0:switch(c= =5){

case 0:printf("!");break;

case 1:printf("#");break;

default:printf("%%");

}

default:printf("@");

}

}

运行结果:&#@

编程实现,使用循环结构打印以下图案。

*

* * *

* * * * *

* * * * * * *

* * * * *

* * *

*

提示:输出时,本图案要按向上三角形和向下三角形进行输出。每行输出中包括空格输出,

‘*’号输出。输出空格和‘*’号个数要与行循环控制变量关联起来。

【习题5】

填空题:

若有定义int a[3][5];则排列在数组中的第9个元素是( a[1][3] )。

strlen("How are youn")的值是( 12 )。

5.3 C语言中字符串结束的标志是( '0' )。

写出一个名为s的单精度实型一维数组,长度是6,所有元素初值均为0,其数组定义语

句是( float s[6]={0}; )。

strcmp("how","How")的值是( 32 或>0 )。

选择题:

若有int s[4]={1,2,3,4};,则s[s[0]+2*s[2]-s[3]]的值是( D )

.2 C

对数组的描述正确的是( B )。

A.数组一旦定义其大小是固定的,但数组元素的类型可以不同。

B.数组一旦定义其大小是固定的,但数组元素的类型必须相同。

C.数组一旦定义其大小是可变的,但数组元素的类型可以不同。

D.数组一旦定义其大小是可变的,但数组元素的类型必须相同。

对字符串"Boy"进行完整赋值的操作是( B )。

A.char s[3] = {'B','o','y'}; B. char s[] = "Boy";

C.char s[3] = {"Boy"}; s[3]; s="Boy";

在c语言中引用数组元素时,其数组下标的数据类型允许是( C )。

A.整型常量 B.整型表达式

C.整型常量或整型表达式 D.任何类型的表达式

对以下说明语句的正确理解是( B )。

int a[10]={6,7,8,9,10};

A.将5个初值依次赋给a[1]至a[5]

B.将5个初值依次赋给a[0]至a[4]

C.将5个初值依次赋给a[6]至a[10]

D.因为数组长度与初值的个数不相同,所以此语句不正确

三、看程序写结果

main()

{int a[3][3] = {{1,0,2}, {2,2},{0,2}}, c[3][3],i,j;

for(i=0; i<3; i++)

{

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

{

c[i][j] = a[a[i][j]][a[j][i]];

printf("%5d",c[i][j]);

}

}

printf("n");

}

运行结果为: 2 2 0 0 0 2 2 0 1

当运行以下程序时,从键盘输入:Ah2MA A3ha,请写出输出结果。

main()

{ char s[80], c='a';

int i=0;

scanf("%s",s);

while(s[i++]!='0')

if(s[i] == c) s[i]=s[i]-32;

else if(s[i]==c-32) s[i]=s[i]+32;

puts(s);

}

运行结果为:AH2Ma

四、编程题

用数组方法定义一个矩阵,求其转置矩阵。

提示:已知a[3][2],转置后的结果存放在b[2][3]; 则b[j][i]=a[i][j];

从键盘输入9个不同的整数,组成三行三列的二元数组,找出每一列中的最大元素,并输

出其行、列下标。

提示:已知a[3][3],max,row,col分别用来存放一列的最大值,行下标和列下标。

利用一个二维数组,打印出以下杨辉三角形,要求打印出10行。

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

提示:定义一个10行10列的二维数组,并且通过两重循环对第1列所有元素赋值1,主对

角线也赋值。根据a[i][j]=a[i-1][j]+a[i-1][j-1]求出其它元素的值。

把30个学生的学号和两门课程的成绩输入到一个二维数组中,求出的每个学生的两门课程

的总成绩也放于此数组中,请按学生总分的高低打印出成绩单(包括学号、两门课程成绩和

总分)。

提示:定义一个30行4列的数组。为了先快速测试算法是否正确可以定义一个3行4列的

数组,并且通过赋初始值,减少调试程序时反复输入数据的麻烦,算法调试成功后在加上输

入数据部分。实现从高到低打印出成绩可以通过排序(降序);也可以通过另外定义1个一

维数组作为索引,再通过索引打印成绩。

从键盘上输入一串字符,将其逆向显示。

提示:首先计算字符串的长度,在从右边逐一显示字符,直到下标等于0为止。

【习题6】

填空题

6.1 C语言程序执行的开始处是 main函数 。

6.2 C程序中的一个函数由两部分组成,即 声明部分 和 执行部分 。

为了保证被调用函数不返回任何值,其函数定义的类型应为 void 。

若一个局部变量的存储类型是static,则该变量的值在 程序执行完成 时被释放。

预处理命令#include的作用是 文件包含 。

定义一个宏,功能是判断两个数是否相等,相等为1,不等为0。

#define EQU(a,b) (a)==(b)1:0

变量的存储类别有 自动型 、 静态型 、 寄存器型 、和 外部类型 共4种,它们

分别用 auto 、 static 、 register 、 extern 标识。

选择题

下述函数定义形式正确的是(C)。

A. int f(int x; int y) B. int f(int x,y)

C. int f(int x, int y) D. int f(x,y: int)

关于函数参数,说法正确的是(A)。

A. 实参与其对应的形参各自占用独立的内存单元

B. 实参与其对应的形参共同占用一个内存单元

C. 只有当实参和形参同名时才占用同一个内存单元

D. 形参是虚拟的,不占用内存单元

用数组名作为函数的实参时,传递给形参的是(A)。

A. 数组的首地址 B. 数组的第1个元素

C. 数组中的全部元素 D. 数组的元素个数

复合语句中定义的变量的作用范围是(D)。

A. 整个源文件 B. 整个函数

C. 整个程序 D. 所定义的复合语句

一个函数的返回值由( D )确定。

A. return语句中的表达式 B. 调用函数的类型

C. 系统默认的类型 D. 被调用函数的类型

在一个C源文件中,若要定义一个只允许本源文件所有函数使用的全局变量,其他文件中

不允许使用,则该变量需要使用的存储类别是(D)。

A. auto B. register C. extern D. static

判断题

若定义的函数没有参数,则函数名后的圆括号可以省略。(′)

函数的函数体可以是空语句(?)。

只有main函数才能调用其他函数。(?)

语句中表达式的类型必须与函数定义的类型一致。(′)

函数的实参和形参可以是相同的名字。(?)

函数调用中,形参与实参的类型和个数必须保持一致。(?)

外部类型的变量只能定义一次,但可在不同地方声明多次。(?)

外部类型的变量作用范围大,编程中应多用外部变量。(′)

预处理命令行必须以#开头,且最后要用分号结尾。(′)

宏命令的处理占用编译时间,而不占用运行时间。(?)

看程序写结果

int fun(int n)

{int f=1;

f = f*n*2;

return(f);

}

main()

{ int i,j;

for(i=1; i<=5; i++)

printf("%dt", fun(i));

}

程序运行结果:2 4 6 8 10

int x1=30, x2=40;

main()

{int x3=10,x4=20;

sub(x3,x4);

sub(x2,x1);

printf("x1=%d,x2=%d,x3=%d,x4=%d", x1,x2,x3,x4);

}

sub(int x,int y)

{int x1=x;

x=y;

y=x1;

}

程序运行结果:x1=30,x2=40,x3=10,x4=20

#define A 4

#define B(x) A*x/2

main()

{float c, a = ;

c=B(a);

printf("c=%5.1f", c);

}

程序运行结果:c=

编程题

写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输

出结果。两个整数由键盘输入。

提示:最大公约数可以采用“辗转相除法”,最小公倍数将两数乘积除于最大公约数。“辗转

相除法”:设两个数分别用m,n表示且m>n,临时变量t,t=m%n;m=n;n=t;直到n等于0。

有3′3的矩阵A和3′2的矩阵B,编制一个函数,求C=AX′B。

提示:参照习题,A,B,C三个数组作为函数参数。

编写一函数,使输入的一个字符串按反序存放,在主函数中输入输出字符串。

提示:一维字符数组用来存放字符串,并且将它传递到函数,在函数中通过元素值交换来完

成反序存放。

编制一个函数,由参数传入一个字符串,统计此字串中字母、数字、和其他字符的个数,在

主函数中输入字符串并显示统计结果。

提示:参照例题。

【习题7】

语句int a,*p=&a;的含义是什么

答:定义整型变量a,和整型指针变量p,并且p指向变量a。

写出下列数组元素的指针法表示。

(1)num[3] (2) data[4][2]

答:(1)*(num+3) (2) *(*(data+4)+2)

写出下列数组元素的下标法表示。

(1) *(*(a+1)+2) (2) (*(a+3))[4] (3) *(a[2]+5)

答:(1)a[1][2] (2) a[3][4] (3) a[2][5]

分析程序,写出程序输出结果。

(1) main()

{ int a[5]={1,2,3,4,5};

int *p=&a[1];

printf("%d",p[2]);

}

输出结果:4

(2) main()

{ char a[]="I love China!";

char *p=a;

p=p+2;

printf("%s",p);

}

输出结果:love China!

(3) main()

{ int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

int (*pa)[4]=a;

pa++;

printf("%d",*(*(pa+1)+2));

}

输出结果:11

(4) main()

{ char *str[]={"zhao","qian","sun","li"};

int i;

for (i=0;i<4;i++)

printf("%c",str[i][0]);

}

输出结果:zqsl

(5) void sub(int x,int y,int *z)

{ *z=y-x; }

main()

{

int a,b,c;

sub(10,5,&a);

sub(7,a,&b);

sub(a,b,&c);

printf("%4d,%4d,%4dn",a,b,c);

}

输出结果: -5, -12, -7

(6) #include <>

fun(char *s)

{ char *p=s;

while (*p) p++;

return(p-s);

}

main()

{ char *str="abcd";

int i;

i=fun(str);

printf("%d",i);

}

输出结果:4

定义语句int *f(); 和int (*f)();的含义分别是什么

答:int *f();表示函数返回一个整型指针;int (*f)();表示f是函数指针,指向整型函数。

在二维数组中存放有4个学生,5门课程的成绩,用指针编程实现:

(1)求出每门课程的平均成绩。

(2)求每个学生的总成绩和平均成绩。

(3)在屏幕上列出各课成绩在85分以上的学生名单。

(4)在屏幕上列出补考通知单。

提示:(1)(2)(3)略,(4)根据成绩小于60分,由于有5门课程的成绩,所以需要使用else

if结构。

输入一个字符串,内有数字和非数字字符,例如:

a345dsaf412 x371+89tah74

编程将其中连续的数字作为一个证书,一次存放到一个数组d中,例如:345放在d[0],412

放在d[1],......。统计共有多少个证书,并输出这些整数。

提示:从字符串中提取"345":t=ch-'0';t=t*10+(ch-'0');t=t*10+(ch-'0');

t='3'-'0'=3;t=3*10+('4'-'0')=34;t=34*10+('5'-'0')=345

编写把十六进制数字字符串变换成整数的函数: int htoi(char *s)。

提示:同

编写把十进制整数变换成二进制数字字符串的函数: char *itob(int n)。

提示:同

用字符指针实现字符串拷贝功能,不能使用库函数。

提示:定义两个字符数组a,b,复制操作b[i]=a[i];

用字符指针实现字符串连接功能,不能使用库函数。

提示:定义两个字符数组a,b,先将下标定位到a的末尾'0',在将b的元素赋值给a的对

应元素,注意:别忘了添加字符串结束标志'0'。

用指向指针的指针的方法对5个字符串排序并输出。

提示:一个指针数组和一个指向指针的指针变量。

【习题8】

定义复数结构体,并写出复数的加、减、乘、除、的计算函数。

提示:复数包括两个部分:实部和虚部。

定义一个结构体变量(包括年、月、日)。计算该日在本年中是第几天。注意闰年问题。

提示:计算该日是本年中的第几天,是从本年1月1日起。

有5个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入5个学生数据,

要求在屏幕上显示出3门课程的平均成绩,以及最高分数的学生的数据(包括学号、姓名、

3门课程成绩、平均分)。

提示:定义结构体数组。最高分数是指每个学生3门课程的平均分最高。

编写求链表长度的函数。

提示:从链表指针头往表尾移动计算结点的个数。

已有两个链表a、b,每个链表的结点包括学号、成绩。要求把两个链表合并,按学号升序

排列。

提示:可以定义一个新的链表,先从链表a,再从链表b中取出结点,依次按学号升序插入

到新的链表中。

利用节中的struct card结构编写一个程序实现5个人员数据输入和在屏幕上显示的功能:

如果job项为't',则在position项为教师的职称(助教、讲师、副教授、教授);如果job

项为's',则class项为学生的班级号,如501。

提示:在结构体中嵌入共用体position,根据job成员确定position的具体值。

口袋中有红、黄、兰3中颜色的球若干个。每次从口袋中取出1个球,根据颜色的不同,

输入相应的颜色英文字符串。要求用枚举变量实现。

提示:参照例。


本文标签: 函数 数组 字符串 定义