C_9练习题答案
一、单项选择题(本大题共20小题,每小题2分,共40分。在每小题给出的四个备选项中,选出一个正确的答案,并将所选项前的字母填写在答题纸的相应位置上。)
- C语言程序中,要使用数学库函数(例sqrt、sin等),需要在程序最前面加上包含文件的预处理命令(C)。
A. #include <string.h>
B. #include <stdio.h>
C. #include <math.h>
D.不需要加什么
2下面四个选项中,均是不合法的用户标识符的选项是(C)
A.A、P_0、do
B. float 、1a0、A
C.b-a、goto、int
D._123、temp、INT
- 以下叙述中正确的是(D)
A. C语句必须在一行内写完
B. C程序中的每一行只能写一条语句
C.C语言程序中的注释必须与语句写在同一行
D. C语句必须以分号结束
4.下面四个选项中,均是合法整形常量的选项是(A)
A.160、-O、011al
B.-Oxcdf、01a、Oxe
C.-01、986,012、0668
D.-0x48a、2e5、0x
5.如果变量 x、y已经正确定义,下列哪个选项的语句不能正确将x、y的值进行交换(D)。
A. x=x+y, y=x-y, x=x-y;
B. t=x, x=y; y=t;
C. t=y, y=x, x=t;
D. x=t, t=y, y=x;
6,下列运算符中,优先级最低的是(B)
A.*
B.=
C.==
D.%
7.执行printf(“%f”,(x=3,y=5,x>y?1:1.5);后的输出结果是(D)
A.语法错误
B.1
C. 1.5
D.1.500000
8.设a=1,b=2,c=3,d=4,则表达式:a<b?a:c<d?a:d的结果为(A)
A.1
B.2
C.3
D.4
9.设字符型变量x的值是064,表达式-x><28x的值对应的8进制值是(B)。
A. 333
B. 0333
C. X333
D.020
10.若变量已正确定义,执行scanf(“%d%c%f”,&opl,&op,&op2);输入()之后,op1的值为1,op的值为’*,op2的值为2.0。D
A.12.
B.12
C.1 2.0
D.12
11.有如下程序:
#include <stdio.h>
int main() {
int a = 2, b = -1, c = 2;
if (a)
if (b < 0)
c = 0;
else
c++;
printf("%d\n", c);
return 0;
}
该程序的输出结果是(A)
A.0
B.1
C.2
D.3
12.以下正确的描述是(B)
A. continue语句的作用是结束整个循环的执行
B.只能在循环体内和switch语句体内使用break语句
C.在循环体内使用break语句或continue语句的作用相同
D.从多层循环嵌套中退出时,只能使用 continue语句
- 假定char类型变量占用1个字节,且数组定义如下char str[81];,则数组str在内存中所占字节数是(D)
A.0
B.10
C. 80
D.81
14.以下关于二维数组初始化的说法,正确说法的个数是?。
(1)语句int a[2][3]=(0);能将 int型数组a中的每个元素全部初始化为0。
(2)语句int a[2][3]=0;能将int型数组a中的每个元素全部初始化为0。
(3)语句int a[2][3];能将int型数组中a的每个元素全部初始化为0。
(4)语句int a[2][3]={{1.2].(3.4),(5.6}]:能将 int型数组元素a[0][0],a[0][1].a[0][2].a[1][0].a[11]a[1]2]依次初始化为1,2,3,4,5,6。
(5)语句int a][3]=(1,2,3,4,5,6);能将 int型数组元素a[0][0].a0][1],a[0][2].a[1]10;a111a[1][2]依次初始化为1,2,3,4,5,6。
(6)语句int a[][3]=[(1,2,3).[4,5,6)];能将int型数组元素a[0][0],a[0][1],a[0][2],a[1][0],a[1][1].a[1][2]依次初始化为1,2,3,4,5,6。
A.1
B.2
C. 3
D.4
- 下面描述正确的是(D)
A.两个字符串所包含的字符个数相同时才能比较字符串
B.字符个数多的字符串比字符个数少的字符串大
C.字符串“STOP”和“STOP”相等
D.字符串“That”小于字符串“The”
- 下面程序运行后的输出结果是(A)。
#include <stdio.h>
int x, y;
void Fun() {
int a = 18, b = 16;
x = x + a + b;
y = y + a - b;
}
int main() {
int a = 9, b = 8;
x = a + b;
y = a - b;
Fun();
printf("%d, %d", x, y);
return 0;
}
A.51,3
B.34,2
C. 17,1
D.前面都不正确
17.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是(D)
A.函数调用可以作为独立的语句存在
B. 函数调用可以作为一个函数的实参
C.函数调用可以出现在表达式中
D.函数调用可以作为一个函数的形参
18,若有以下说明,且0<=i<10,则对数组元素的错误引用是(int a]= (0,1, 2,3,4,5, 6,7, 8,9), *p= a, i;
C
A.*(a+i)
B. a[p-a+i]
C. p+i
D. *(&a[i)
19.设有如下定义,则对data中的a成员的正确引用是(struet sk{ int a; float b;} data, *p=&data;
B
A. (*p).data.a
B. (*p).a
C. p->data.a
D. p.data.a
20,已有定义int k=2; int *ptrl, *ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是(B)
A. k= *ptrl +*ptr2;
B. ptr2 = k;
C. ptrl =ptr2;
D.k=ptrl(*ptr2);
二、程序阅读题(本大题共5小题,每小题6分,共30分。请将程序的运行结构填写在答题纸的相应位置上。)
1__________
1#7#7#7
2#0#7#70
3#9#16#709
#include <stdio.h>
void main() {
int count = 0, s = 0, new_number = 0, L_number, digit, number;
printf("Enter a number: ");
scanf("%d", &number);
L_number = number;
if (L_number < 0)
L_number = -L_number;
do {
digit = L_number % 10;
s = s + digit;
new_number = new_number * 10 + digit;
count++;
printf("%d#%d#%d#%d\n", count, digit, s, new_number);
L_number = L_number / 10;
} while (L_number != 0);
}
//输入907
2___5 11__
#include <stdio.h>
int fun(int x, int y) {
static int m = 0, i = 2;
i += m + 1;
m = i + x + y;
return m;
}
void main() {
int j = 1, m = 1, k;
k = fun(j, m);
printf("%3d", k);
k = fun(j, m);
printf("%3d", k);
}
3___you name si:Li ming___
#include <stdio.h>
#include <string.h>
int main() {
char str1[20] = "your name is: ";
char str2[10];
int i = 0, j;
j = strlen(str1);
printf("Please input your name: ");
gets(str2);
while (str2[i] != '\0') {
str1[j] = str2[i];
i++;
j++;
}
str1[j] = '\0';
puts(str1);
return 0;
}
4———nve—————
#include <stdio.h>
int main() {
int i;
char a[4][6] = {"one", "two", "three", "four"};
char *p[4], **s = p;
for (i = 0; i < 4; i++)
p[i] = a[i];
printf("%c", *(*a + 1));
printf("%c", **++s + 2);
printf("%c", (*(p + 2))[3]);
return 0;
}
5___Li____
#include <stdio.h>
struct stu {
int num;
char name[10];
int age;
};
void fun(struct stu *p) {
printf("%s\n", p->name);
}
int main() {
struct stu students[3] = {
{1001, "Zhang", 20},
{1002, "Wang", 19},
{1003, "Li", 18}
};
fun(students + 2);
return 0;
}
三、程序填空题(共35分。请将答案填写在答题纸的相应位置上。)
1.使用递归函数实现字符串的逆序输出。如输人abe,输出cba
*p
reverse_str(q)
putchar(*p)
#include <stdio.h>
void reverse_str(char *p);
int main() {
char str[80];
gets(str);
reverse_str(str);
return 0;
}
void reverse_str(char *p) {
char *q;
q = p;
if (——————————) {
q=p+1;
——————————
——————————
}
}
2.输入一个非负整数,从高位开始逐位分割并输出它的各位数字。例如,输入9837,输出 9 8 3 7
t_number >= 10
pow*10
number/pow
number % pow
#include <stdio.h>
int main() {
int digit, number, pow, t_number;
scanf("%d", &number);
t_number = number;
pow = 1;
while (__________) {
pow =________;
t_number = t_number / 10;
}
while (pow >= 1) {
digit = ________;
number = ________;
pow = pow / 10;
printf("%d ", digit);
}
printf("\n");
return 0;
}
四、编程题(本大题共2小题,1小题15分,2小题30分,共45分。请在答题纸的相应位置上作答。)
1.为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。编写程序计算电费。输入某用户的月用电量(单位:千瓦时)。输出该用户应支付的电费(元),结果保留两位小数;若量用电量小于0.则输出"Invalid Value!"。
#include <stdio.h>
int main() {
int dl;
float df;
scanf("%d", &dl);
if (dl < 0) {
printf("Invalid Value!");
} else if (dl <= 50) {
df = 0.53 * dl;
} else {
df = 0.53 * 50 + (dl - 50) * (0.53 + 0.05);
}
printf("%.2f", df);
return 0;
}
2、数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和 19都是素数。编写程序验证
#include <stdio.h>
#include <math.h>
int prime(long p);
int main() {
long n, pl, p2;
scanf("%ld", &n);
for (pl = 3; pl <= n / 2; pl += 2) {
p2 = n - pl;
if (prime(pl) && prime(p2)) {
printf("%ld = %ld + %ld\n", n, pl, p2);
break;
}
}
if (pl > n / 2) {
printf("偶数 %ld 不符合哥德巴赫猜想\n", n);
}
return 0;
}
int prime(long p) {
long e, i;
e = sqrt(p);
for (i = 2; i <= e; i++) {
if (p % i == 0) {
break;
}
}
if (i > e) {
return 1; // Prime
} else {
return 0; // Not prime
}
}
3.无记名投票统计。下面给出了main)函数,请将其他函数补充完整,即写出i void vinput(int nint vD和 void prtResult(int n,int plint v)函数的定义
。#include <stdio.h>
#define NUM 20
void vInput(int n,int v[D;/
将n个人的投票结果保存到数组v中:
void prtResult(int n,int p.int v[]);
/*将n个投票结果,响]按候选人pli]进行统计,并输出投票结果:
void main()
{
int vote[NUM);
static int candidate[4]=(0);/候选人的初始票数均为0/
printf(“请对 3个候选人投票:n”);
vInput(NUM,vote);/*将投票结果保存到数组 vote 中prtResult(NUM,candidate,vote);/统计的票数并输出投票结果
}
#include <stdio.h>
#define NUM 20
void vInput(int n, int v[]);
void prtResult(int n, int p[], int v[]);
int main() {
int vote[NUM];
static int candidate[4] = {0};
vInput(NUM, vote);
prtResult(NUM, candidate, vote);
return 0;
}
/* 将 n 个人的投票结果保存到数组 v 中 */
void vInput(int n, int v[]) {
int i;
for (i = 0; i < n; i++) {
scanf("%d", &v[i]);
if (v[i] < 1 || v[i] > 3)
v[i] = 0; /* 对候选人投票统计无效票数 */
}
}
/* 将 n 个投票结果 v[n] 按候选人 p[] 进行统计,并输出投票结果 */
void prtResult(int n, int p[], int v[]) {
int i;
for (i = 0; i < n; i++) {
++p[v[i]];
}
printf("候选人\t得票数\n");
printf("----\n");
for (i = 1; i < 4; i++) {
printf(" %d\t%d\n", i, p[i]);
}
printf("弃权票:\t%d\n", p[0]);
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!