大学MOOC C语言程序设计(长安大学)1452242165 最新慕课完整章节测试答案
一堆数据来了你准备好了吗
文章目录
二分查找算法的基本思想
1、判断题:
二分查找算法就是先将表的中间位置记录的关键字与查找关键字相比较,如果两者相等,则查找成功,否则将表分成前、后两个子表,根据比较结果,决定查找前一子表还是后一子表。
选项:
A: 正确
B: 错误
答案: 【 正确】
数组做函数参数
1、单选题:
下列说法错误的是()。
选项:
A: 简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。
B: 数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。
C: 在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。
D: 在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。
答案: 【 在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。】
数组的定义和初始化
1、单选题:
下列说法错误的是()。
选项:
A: C语言中的二维数组在内存中是按列存储的。
B: 在C语言中,数组的下标都是从0开始的。
C: 在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。
D: 不能使用变量定义数组的大小,但是在访问数组元素时在下标中可以使用变量或表达式。
答案: 【 C语言中的二维数组在内存中是按列存储的。】
测验
1、单选题:
输入某班学生某门课的成绩(最多不超过40人,具体人数由用户键盘输入),用函数编程统计不及格人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#define N 40
intGetFailNum(int score[], int n);
int main()
{
int i, n, fail, score[N];
printf("How many students?");
scanf("%d", &n);
for (i=0; i<n; i++)
{
scanf("%d", _________);
}
fail = _____________;
printf("Fail students = %dn", fail);
return 0;
}
/* 函数功能:统计不及格人数 */
int GetFailNum(int score[], int n)
{
int i, count = 0;
for (i=0; i<n; i++)
{
if (_________) count++;
}
return count;
}
选项:
A: 第11行: &score[i]第13行: GetFailNum(score, n)第23行: score[i] < 60
B: 第11行: score[i]第13行: GetFailNum(score, n)第23行: score[i] <= 60
C: 第11行: score[i]第13行: GetFailNum(n,score)第23行: score[i] < 60
D: 第11行: &score[i]第13行: GetFailNum(score[i], n)第23行: score[i] >= 60
答案: 【 第11行: &score[i]第13行: GetFailNum(score, n)第23行: score[i] < 60】
2、单选题:
输入n×n阶矩阵,用函数编程计算并输出其两条对角线上的各元素之和。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#define N 10
void InputMatrix(int a[N][N], int n);
int AddDiagonal(int a[N][N], int n);
int main()
{
int a[N][N], n, sum;
printf("Input n:");
scanf("%d", &n);
InputMatrix(a, n);
sum = AddDiagonal(a, n);
printf("sum = %dn", sum);
return 0;
}
/* 函数功能: 输入n×n矩阵的元素值,存于数组a中 */
void InputMatrix(___________, int n)
{
int i, j;
printf("Input %d*%d matrix:n", n, n);
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
scanf("%d",___________);
}
}
}
/* 函数功能: 计算n×n矩阵中两条对角线上的元素之和 */
int AddDiagonal(int a[N][N], int n)
{
int i, j, sum = 0;
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
if (________________)
sum = sum + a[i][j];
}
}
return ____________;
}
选项:
A: 第17行: int a[N][N]第25行: &a[i][j]第38行: i==j || i+j==n-1第42行: sum
B: 第17行: int a[N][N]第25行: &a[i][j]第38行: i==j && i+j==n-1第42行: a[i][j]
C: 第17行: int a[N][N]第25行: a[i][j]第38行: i==j || i+j==n-1第42行: a[N][N]
D: 第17行: int a[][]第25行: &a[i][j]第38行: i==j && i+j==n-1第42行: sum
答案: 【 第17行: int a[N][N]第25行: &a[i][j]第38行: i==j || i+j==n-1第42行: sum】
3、单选题:
输入某班学生某门课的成绩(最多不超过40人),当输入为负值时,表示输入结束,用函数编程统计成绩高于平均分的学生人数。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#define N 40
int Average(int score[], int n);
int ReadScore(int score[]);
int GetAboveAver(int score[], int n);
int main()
{
int score[N], m, n;
n = ReadScore(score); /* 输入成绩,返回学生人数 */
printf("Total students are %dn", n);
m = GetAboveAver(score, n); /* 统计成绩在平均分及其上的学生人数 */
if (______________) printf("Students of above average is %dn", m);
return 0;
}
/* 函数功能:若n>0,则计算并返回n个学生成绩的平均分,否则返回-1 */
int Average(int score[], int n)
{
int i, sum = 0;
for (i=0; i<n; i++)
{
sum += score[i];
}
return ______________;
}
/* 函数功能:输入学生某门课成绩,当输入成绩为负值时,结束输入,返回学生人数 */
int ReadScore(int score[])
{
int i = -1;
do{
i++;
printf("Input score:");
scanf("%d", &score[i]);
}while (__________);
return _______;
}
/* 函数功能:若n>0,则统计并返回成绩在平均分及平均分之上的学生人数,否则返回-1 */
int GetAboveAver(int score[], int n)
{
int i, count = 0, aver;
aver = ______________; /* 计算并打印平均分 */
if (aver == -1) return -1;
printf("Average score is %dn", aver);
for (i=0; i<n; i++)
{
if (score[i] >= aver) count++;
}
return __________;
}
选项:
A: 第12行: m != -1第24行: n>0 ? sum/n : -1第35行: score[i] >= 0第36行: i第43行: Average(score, n)第50行: count
B: 第12行: m == -1第24行: n>0 ? sum/n : -1第35行: score[i] >= 0第36行: i第43行: Average(score, n)第50行: i
C: 第12行: m != -1第24行: n>0 ? -1 : sum/n第35行: score[i] >= 0第36行: i第43行: Average(n,score)第50行: count
D: 第12行: m == -1第24行: n<=0 ? sum/n : -1第35行: score[i] >= 0第36行: score第43行: Average(score, n)第50行: aver
答案: 【 第12行: m != -1第24行: n>0 ? sum/n : -1第35行: score[i] >= 0第36行: i第43行: Average(score, n)第50行: count】
4、单选题:
模拟骰子的6000次投掷,编程统计并输出骰子的6个面各自出现的概率。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include _________
#include <time.h>
#include <stdio.h>
int main()
{
int face, roll, frequency[7] = {0};
srand(time (NULL));
for (roll=1; roll<=6000; roll++)
{
face = _____________;
__________________;
}
printf("%4s%17sn", "Face", "Frequency");
for (face=1; face<=6; face++)
{
printf("%4d%17dn", face, frequency[face]);
}
return 0;
}
选项:
A: 第1行: <stdlib.h>第11行: rand()%6 + 1第12行: frequency[face]++
B: 第1行: <math.h>第11行: rand()/6 + 1第12行: frequency[face]++
C: 第1行: <stdlib.h>第11行: rand()%6 + 1第12行: frequency[roll]++
D: 第1行: <math.h>第11行: rand()/6 + 1第12行: frequency[roll]++
答案: 【 第1行: <stdlib.h>第11行: rand()%6 + 1第12行: frequency[face]++】
5、单选题:
以下程序中函数Fun的功能是对b所指数组中的第m至第n个数据取累加和,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
Fun(________,int m,int n)
{
int i,s=0;
for( ______;i<n;i++)
s=s+b[i];
return _______;
}
int main()
{
int x,a[]={1,2,3,4,5,6,7,8,9};
x=Fun(a,3,7);
printf("%dn",x);
return 0;
}
选项:
A: 第2行: int b[]第5行: i=m-1第7行: s
B: 第2行: int b[]第5行: i=1第7行: i
C: 第2行: int b第5行: i=0第7行: s
D: 第2行: int b[]第5行: i=n-1第7行: b[i]
答案: 【 第2行: int b[]第5行: i=m-1第7行: s】
6、单选题:
下面代码的功能是将数组a中存放的5个整型数据逆序后在屏幕上输出,具体输出内容如下:5 4 3 2 1按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h>
void Fun(int b[],int i,int j)
{
int t;
if(i<j)
{
_________;
b[i]=b[j];
_________;
Fun(b,i+1,j-1);
}
}
int main( )
{
int i,a[5]={1,2,3,4,5};
_________;
for(i=0;i<5;i++) printf("%dt",a[i]);
printf("n");
return 0;
}
选项:
A: 第7行: t=b[i]第10行: b[j]=t第19行: Fun(a,0,4)
B: 第7行: t=b[i]第10行: b[i]=t第19行: Fun(a,0,5)
C: 第7行: t=b[j]第10行: b[j]=t第19行: Fun(a,1,4)
D: 第7行: t=b[i]第10行: b[i]=t第19行: Fun(a,1,5)
答案: 【 第7行: t=b[i]第10行: b[j]=t第19行: Fun(a,0,4)】
7、单选题:
某人有5张2分的邮票和5张3分的邮票,问使用这些邮票可以组合出多少种不同面值的邮资。(例如:1张2分邮票加1张3分邮票可以组成5分的邮资;3张2分的邮票或2张3分的邮票都可以组成同样的6分邮资。)按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
int i,j,k,s,n=0;
int a[100]={0};
for(i=0;_________;i++)
for(j=0;________;j++)
{
s=_____________;
for(k=0;a[k]!=0;k++)
if(s==a[k])
_________;
if(a[k]==0 && s>0)
{
_________;
n++;
}
}
printf("n %d kinds:",n);
for(k=0;a[k];k++)
printf("%2d,",a[k]);
return 0;
}
选项:
A: 第7行: i<=5第8行: j<=5第10行: 2*i+3*j第14行: break第18行: a[k]=s
B: 第7行: i<5第8行: j<5第10行: 2*i+3*j第14行: break第18行: s=a[k]
C: 第7行: i<=5第8行: j<=5第10行: 2i+3j第14行: continue第18行: a[k]=s
D: 第7行: i<5第8行: j<5第10行: 2*i+3*j第14行: continue第18行: s=a[k]+1
答案: 【 第7行: i<=5第8行: j<=5第10行: 2*i+3*j第14行: break第18行: a[k]=s】
8、单选题:
以下程序中函数Sort的功能是对a所指数组中的数据进行由大到小的排序,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void Sort(int a[],int n)
{
int i,j,t;
for(i=0;_________;i++)
for(________;j<n;j++)
if(a[i]<a[j])
{
t=a[i];
__________;
a[j]=t;
}
}
int main()
{
int aa[10]={1,2,30,4,5,6,7,8,9,10},i;
__________;
for(i=0;i<10;i++)
printf("%d,",aa[i]);
printf("n");
return 0;
}
选项:
A: 第5行: i<n-1第6行: j=i+1第10行: a[i]=a[j]第18行: Sort(aa,10)
B: 第5行: i<n-1第6行: j=i第10行: a[i]=a[j]第18行: Sort(aa[],10)
C: 第5行: i<n第6行: j=i+1第10行: a[j]=a[i]第18行: Sort(aa,10)
D: 第5行: i<=nj第6行: =i第10行: a[i]=a[j]第18行: Sort(10,aa)
答案: 【 第5行: i<n-1第6行: j=i+1第10行: a[i]=a[j]第18行: Sort(aa,10)】
9、单选题:
以下程序的功能是:按顺序读入10名学生4门课程的成绩,计算出每位学生的平均分并输出。程序运行后结果不正确,调试中发现有一条语句出现在程序中的位置不正确。这条语句是#include <stdio.h>
int main()
{
int n,k;
float score ,sum,ave;
sum=0.0;
for(n=1;n<=10;n++)
{
for(k=1;k<=4;k++)
{
scanf("%f",&score);
sum+=score;
}
ave=sum/4.0;
printf("NO%d:%fn",n,ave);
}
return 0;
}
选项:
A: sum=0.0;
B: sum+=score;
C: ave=sun/4.0;
D: printf("NO%d:%fn",n,ave);
答案: 【 sum=0.0;】
10、单选题:
下面代码的功能是在屏幕上输出以下内容013程序中空白处缺少的代码由下列选项给出,其中有一个不能满足题目要求,请将其找出。#include <stdio.h>
int main()
{
int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;
for(i=0;i<3;i++)
for(j=i;j<=i;j++)
{
t=t+____________;
printf("%dn",t);
}
return 0;
}
选项:
A: b[j][t]
B: b[i][b[j][j]]
C: b[t][j]
D: b[i][j]
答案: 【 b[j][t]】
11、单选题:
以下程序的输出结果是void swap1(int c[])
{
int t;
t=c[0];
c[0]=c[1];
c[1]=t;
}
void swap2(int c0,int c1)
{
int t;
t=c0;
c0=c1;
c1=t;
}
int main( )
{
int a[2]={3,5},b[2]={3,5};
swap1(a);
swap2(b[0],b[1]);
printf("%d %d %d %dn",a[0],a[1],b[0],b[1]);
return 0;
}
选项:
A: 5 3 3 5
B: 5 3 5 3
C: 3 5 3 5
D: 3 5 5 3
答案: 【 5 3 3 5】
12、单选题:
以下程序中函数Reverse的功能是对数组a中的前一半元素逆序、后一半元素逆序,再将逆序后的前、后两部分数据位置交换。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。例如:主程序中数组b中的元素为{16,22,13,41,50,62,27,18,9,10},调用函数Reverse后,数组b中元素变为{10 9 18 27 62 50 41 13 22 16}#include <stdio.h>
void Reverse(int a[],int n)
{
int i,t;
for(i=0;________;i++)
{
t=a[i];
__________;
a[n-i]=t;
}
}
int main()
{
int b[10]={16,22,13,41,50,62,27,18,9,10};
int i,s=0;
__________;
for(i=0;i<10;i++)
{
printf("%4d",b[i]);
}
return 0;
}
选项:
A: 第5行: i<=n/2第8行: a[i]=a[n-i]第17行: Reverse(b,9)
B: 第5行: i<=n第8行: a[n-i]=a[i]第17行: Reverse(b,9)
C: 第5行: i<=n/2第8行: a[n]=a[i]第17行: Reverse(9,b)
D: 第5行: i<=n/2第8行: a[i]=a[n]第17行: Reverse(b,9)
答案: 【 第5行: i<=n/2第8行: a[i]=a[n-i]第17行: Reverse(b,9)】
13、单选题:
某矩阵m存储的数据如下:1 4 72 5 83 6 9现将该矩阵最后一行的所有数据输出到屏幕,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
int m[][3]={1,4,7,2,5,8,3,6,9};
int i,j,k=____;
for(i=0;_______;i++)
{
printf("%d",_________);
}
return 0;
}
选项:
A: 第5行: 2第7行: i<3第9行: m[k][i]
B: 第5行: 3第7行: i<=3第9行: m[k][i]
C: 第5行: 2第7行: i<2第9行: m[i][k]
D: 第5行: 3第7行: i<3第9行: m[i][k]
答案: 【 第5行: 2第7行: i<3第9行: m[k][i]】
14、单选题:
下列说法正确的是
选项:
A: 在C语言中,数组的下标都是从0开始的。
B: 在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。
C: 简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。
D: 数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。
E: 在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。
F: C语言中的二维数组在内存中是按列存储的。
G: 可以按任意的顺序对二维数组元素进行赋值,并且也可以按任意的屏幕输出顺序来输出二维数组元素。
H: 在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。
I: 定义数组的大小、访问数组元素时在下标中都可以使用变量或表达式。
答案: 【 在C语言中,数组的下标都是从0开始的。;
在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。;
简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。;
数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。;
在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。】
15、单选题:
用函数编程计算并输出如图所示的杨辉三角形。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。

#include<stdio.h>
#define N 20
void CaculateYH(int a[][N], int n);
void PrintYH(int a[][N], int n);
int main()
{
int a[N][N] = {0}, n;
printf("Input n(n<20):");
scanf("%d", &n);
CaculateYH(a, n);
PrintYH(a, n);
return 0;
}
/* 函数功能:计算杨辉三角形前n行元素的值 */
void CaculateYH(__________, int n)
{
int i, j;
for (i=0; i<n; i++)
{
a[i][0] = 1;
___________;
}
for (_______; i<n; i++)
{
for (j=1; j<=i-1; j++)
{
a[i][j] = __________________;
}
}
}
/* 函数功能:输出杨辉三角形前n行元素的值 */
void PrintYH(int a[][N], int n)
{
int i, j;
for (i=0; i<n; i++)
{
for (j=0; _________; j++)
{
printf("%4d", a[i][j]);
}
printf("n");
}
}
选项:
A: 第16行: int a[][N]第22行: a[i][i] = 1第24行: i=2第28行: a[i-1][j-1] + a[i-1][j]第38行: j<=i
B: 第16行: int a[][]第22行: a[i][i] = 1第24行: i=1第28行: a[i-1][j-1] + a[i-1][j]第38行: j<=i
C: 第16行: int a[][N]第22行: a[0][i] = 1第24行: i=2第28行: a[i-1][j-1] + a[i-1][j]第38行: j<i
D: 第16行: int a[N][]第22行: a[i][i] = 1第24行: i=2第28行: a[j-1][i-1] + a[j][i-1]第38行: j<=i
答案: 【 第16行: int a[][N]第22行: a[i][i] = 1第24行: i=2第28行: a[i-1][j-1] + a[i-1][j]第38行: j<=i】
16、单选题:
假设有40个学生被邀请来给餐厅的饮食和服务质量打分,分数划分为1~10这10个等级(1表示最低分,10表示最高分),编程统计并按如下格式输出餐饮服务质量调查结果。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。

#include <stdio.h>
#define M 40
#define N 11
int main()
{
int i, j, grade, feedback[M], count[N] = {0};
printf("Input the feedbacks of 40 students:n");
for (i=0; i<M; i++)
{
scanf("%d", &feedback[i]);
}
for (i=0; i<M; i++)
{
_____________;
}
printf("FeedbacktCounttHistogramn");
for (_________; grade<=N-1; grade++)
{
printf("%8dt%5dt", grade, count[grade]);
for (j=0; ___________; j++)
{
printf("%c",'*');
}
printf("n");
}
return 0;
}
选项:
A: 第16行: count[feedback[i]]++第21行: grade=1第24行: j<count[grade]
B: 第16行: feedback[i]++第21行: grade=1第24行: j<N-1
C: 第16行: count[i]++第21行: grade=0第24行: j<N-1
D: 第16行: count[feedback[i]]++第21行: grade=0第24行: j<grade
答案: 【 第16行: count[feedback[i]]++第21行: grade=1第24行: j<count[grade]】
线性查找与二分查找
1、判断题:
线性查找算法不要求数据表是已排好序的,而二分查找算法要求数据表是已排好序的。
选项:
A: 正确
B: 错误
答案: 【 正确】
计算最大值
1、判断题:
在计算一组数据的最大值之前,通常假设这组数据中的第一个数为最大,即用这组数据中的第一个数为存放最大值的变量初始化。
选项:
A: 正确
B: 错误
答案: 【 正确】
从键盘中来到键盘中去开始输入和输出啦
%c格式转换说明
1、判断题:
用c格式符输入字符型数据的时候,为了避免将输入缓冲区中的空白字符(空格、回车换行符、Tab键)作为有效字符读入,可以在%c前面加一个空格。
选项:
A: 正确
B: 错误
答案: 【 正确】
单个字符的输入输出
1、判断题:
单个字符既可以以c格式符也可以以d格式符输出,前者是输出这个字符,后者是输出这个字符的ASCII码值。
选项:
A: 正确
B: 错误
答案: 【 正确】
格式字符
1、判断题:
在调用printf函数输出数据时,当数据的实际位宽大于printf函数中的指定位宽时,将按照数据的实际位宽输出数据。
选项:
A: 正确
B: 错误
答案: 【 正确】
测验
1、单选题:
分析下列程序,写出程序运行结果#include <stdio.h>
int main()
{
char c1 = 'a', c2 = 'b', c3 = 'c';
printf("a%cb%cc%cabcn", c1, c2, c3);
return 0;
}
选项:
A: aabbccabc
B: acbcabc
C: aabcabc
D: acbbcabc
答案: 【 aabbccabc】
2、单选题:
有如下语句,为使变量a的值为1,b的值为2,从键盘输入数据的正确形式是scanf("a=%d,b=%d",&a,&b);
选项:
A: a=1,b=2
B: 1 2
C: 1,2
D: a=1 b=2
答案: 【 a=1,b=2】
3、单选题:
#include <stdio.h>
int main()
{
int a,b,c,d;
scanf("%c%c%d,%d",&a,&b,&c,&d);
printf("%c,%c,%c,%cn",a,b,c,d);
return 0;
}若运行以上程序时从键盘上输入:6565,66<回车>。则输出结果是
选项:
A: 6,5,A,B
B: 6,5,65,66
C: 6,5,6,5
D: 6,5,6,6
答案: 【 6,5,A,B】
4、单选题:
给出程序的运行结果,程序运行时从键盘输入:54321<回车>#include <stdio.h>
int main()
{
int a,b,s;
scanf("%2d%2d",&a,&b);
s=a/b;
printf("s=%d",s);
return 0;
}
选项:
A: 1
B: 1.6875
C: 2
D: 0
答案: 【 1】
5、单选题:
以下程序的输出结果为#include <stdio.h>
int main()
{
float a = 1234.567,b = 55.32;
printf("a = %4.2f, b = %5.1fn", a,b);
return 0;
}
选项:
A: a = 1234.57, b = 55.3
B: a =1234, b =55
C: a = 1234.6, b = 5.32
D: a =1234.567, b = 55.32
答案: 【 a = 1234.57, b = 55.3】
6、单选题:
以下程序的输出结果为#include <stdio.h>
int main()
{
int a=2, c=5;
printf("a = %%d, b = %%dn", a, c);
return 0;
}
选项:
A: a = %d, b = %d
B: a = %2, b = %5
C: a = 2, b = 5
D: a = %%d, b = %%d
答案: 【 a = %d, b = %d】
7、单选题:
有以下程序,运行时若输入为B,则输出是#include <stdio.h>
int main()
{
char ch;
ch=getchar();
ch=ch+32;
printf("%c",ch);
return 0;
}
选项:
A: b
B: 98
C: 32
D: 66
答案: 【 b】
8、单选题:
在调用printf函数输出数据时,当数据的实际位宽小于printf函数中的指定位宽时,下面叙述正确的是
选项:
A: 如果格式字符前面没有负号,那么输出的数据将会右对齐、左补空格;如果格式字符前面有负号,那么输出的数据将会左对齐、右补空格。
B: 如果格式字符前面没有负号,那么输出的数据将会左对齐、右补空格;如果格式字符前面有负号,那么输出的数据将会右对齐、左补空格。
C: 如果格式字符前面没有负号,那么输出的数据将会右对齐、左补0;如果格式字符前面有负号,那么输出的数据将会左对齐、右补0。
D: 如果格式字符前面没有负号,那么输出的数据将会左对齐、右补0;如果格式字符前面有负号,那么输出的数据将会右对齐、左补0。
答案: 【 如果格式字符前面没有负号,那么输出的数据将会右对齐、左补空格;如果格式字符前面有负号,那么输出的数据将会左对齐、右补空格。】
9、单选题:
设有语句“char c='72';”,则变量c
选项:
A: 包含1个字符
B: 包含2个字符
C: 包含3个字符
D: 不合法
答案: 【 包含1个字符】
10、单选题:
在下列语句中存在错误的是
选项:
A: int a,b;scanf("%d %f",&a,&b);
B: int a,b;scanf("%d %d",a,b);
C: int a,b;scanf("%d%dn",&a,&b);printf("%d %d",a,b);
D: float a,b;scanf("%3.2f %4.2f",&a,&b);printf("%f %f",a,b);
E: float a,b;scanf("%f %f",&a,&b);printf("%f %f",a,b);
F: float a,b;scanf("%f %f",&a,&b);printf("a=%4.3f,b=%4.3f",a,b);
G: int a,b;scanf("%2d%2d",&a,&b);printf("a=%d,b=%d",a,b);
H: int a,b;scanf("%d,%d",&a,&b);printf("a=%2d,b=%2d",a,b);
I: int a,b;scanf("a=%d,b=%d",&a,&b);printf("a=%d,b=%d",a,b);
答案: 【 int a,b;scanf("%d %f",&a,&b);;
int a,b;scanf("%d %d",a,b);;
int a,b;scanf("%d%dn",&a,&b);printf("%d %d",a,b);;
float a,b;scanf("%3.2f %4.2f",&a,&b);printf("%f %f",a,b);】
11、单选题:
程序运行后的输出结果是#include <stdio.h>
int main()
{
int a=666,b=888;
printf("%dn",a,b);
return 0;
}
选项:
A: 666
B: 错误信息
C: 888
D: 666,888
答案: 【 666】
12、单选题:
有以下语句段#include <stdio.h>
int main()
{
int n1=10,n2=20;
printf("_________",n1,n2);
return 0;
}要求按以下格式输出n1和n2的值,每个输出行都是从第一列开始,则空白处代码填写正确的是运行结果示例如下:n1=10n2=20
选项:
A: n1=%dnn2=%d
B: n1=%dn2=%dn
C: n1=%d,n2=%d
D: n1=%d n2=%dn
答案: 【 n1=%dnn2=%d】
13、单选题:
以下选项中合法的字符常量是
选项:
A: '10'
B: "B"
C: 68
D: D
答案: 【 '10'】
14、单选题:
写出下面程序的输出结果#include<stdio.h>
int main()
{
int x=6,y,z;
x*=18+1;
printf("%d,",x--);
x+=y=z=11;
printf("%d",x);
return 0;
}
选项:
A: 114,124
B: 113,124
C: 109,116
D: 110,116
答案: 【 114,124】
15、单选题:
给出程序的运行结果,程序运行时从键盘输入:45-12<回车>#include <stdio.h>
int main()
{
int a,b,sum;
scanf("%d%*c%d",&a,&b);
sum=a+b;
printf("sum=%d",sum);
return 0;
}
选项:
A: 57
B: 输出报错
C: 33
D: 输出一个随机数
答案: 【 57】
16、单选题:
给出程序的运行结果#include <stdio.h>
int main()
{
int a,b,s;
char op;
scanf("%d %c%d",&a,&op,&b);
s=a%b;
printf("s=%d",s);
return 0;
}程序运行时从键盘输入:15<回车>%5<回车>
选项:
A: 0
B: 程序报错
C: 输出一个随机数
D: 3
答案: 【 0】
17、单选题:
给出程序的运行结果#include <stdio.h>
int main()
{
int a,b,c,d;
char op1,op2,op3;
int sum;
printf("please input:a+b+c+dn");
scanf("%d%c%d%c%d%c%d",&a,&op1,&b,&op2,&c,&op3,&d);
sum=a+b+c+d;
printf("sum=%d",sum);
return 0;
}程序运行时从键盘输入:1<回车>2+3+1<回车>
选项:
A: 7
B: 1
C: 3
D: 6
答案: 【 7】
18、单选题:
在C语言中,字符型数据在内存中以( )形式存放
选项:
A: ASCII码
B: 国标码
C: BCD码
D: 反码
答案: 【 ASCII码】
19、单选题:
以下程序的执行结果是#include <stdio.h>
int main()
{
int a = 5, b = 4, x, y;
x = 2 * a++;
y = --b * 2;
printf("a=%d, x=%dn", a, x);
printf("b=%d, y=%dn", b, y);
return 0;
}
选项:
A: a=6, x=10b=3, y=6
B: a=6, x=10b=3, y=8
C: a=6, x=12b=3, y=6
D: 以上均不对
答案: 【 a=6, x=10b=3, y=6】
20、单选题:
以下程序运行后的输出结果是#include <stdio.h>
int main()
{
int a;
int c=10;
float f=100.0;
double x;
a=f/=c*=(x=6.5);
printf("%d,%d,%3.1f,%3.1fn",a,c,f,x);
return 0;
}
选项:
A: 1,65,1.5,6.5
B: 1,65,1,6.5
C: 1,65,1.0,6.5
D: 2,65,1.5,6.5
答案: 【 1,65,1.5,6.5】
21、单选题:
给出程序的运行结果#include <stdio.h>
int main()
{
char a,b;
int s;
printf("please input a and b:n");
a=getchar();
b=getchar();
s=a+b;
printf("a=%c,b=%c",a,b);
return 0;
}程序运行时从键盘输入:1<空格>2<回车>
选项:
A: a=1,b=
B: a=1,b=2
C: a= ,b=2
D: 输出乱码
答案: 【 a=1,b=】
22、单选题:
以下程序的输出结果是#include <stdio.h>
int main()
{
int a=1234;
printf("%2dn",a);
return 0;
}
选项:
A: 1234
B: 12
C: 34
D: 提示出错、无结果
答案: 【 1234】
练兵区——单选题——不计入总分
1、单选题:
以下程序的输出结果为#include <stdio.h>
int main()
{
float a = 1234.567,b = 55.32;
printf("a = %4.2f, b = %5.1fn", a,b);
return 0;
}
选项:
A: a = 1234.57, b = 55.3
B: a =1234, b =55
C: a = 1234.6, b = 5.32
D: a =1234.567, b = 55.32
答案: 【 a = 1234.57, b = 55.3】
2、单选题:
以下选项中合法的字符常量是
选项:
A: '10'
B: "B"
C: 68
D: D
答案: 【 '10'】
3、单选题:
给出程序的运行结果程序运行时从键盘输入:1<空格>2<回车>#include <stdio.h>
int main()
{
char a,b;
int s;
printf("please input a and b:n");
a=getchar();
b=getchar();
s=a+b;
printf("a=%c,b=%c",a,b);
return 0;
}
选项:
A: a=1,b=
B: a=1,b=2
C: a= ,b=2
D: 输出乱码
答案: 【 a=1,b=】
4、单选题:
有如下语句,为使变量a的值为1,b的值为2,从键盘输入数据的正确形式是scanf("a=%d,b=%d",&a,&b)
选项:
A: a=1,b=2
B: 1 2
C: 1,2
D: a=1 b=2
答案: 【 a=1,b=2】
5、单选题:
#include <stdio.h>
int main()
{
int a,b,c,d;
scanf("%c%c%d,%d",&a,&b,&c,&d);
printf("%c,%c,%c,%cn",a,b,c,d);
return 0;
}若运行以上程序时从键盘上输入:6565,66<回车>。则输出结果是
选项:
A: 6,5,A,B
B: 6,5,65,66
C: 6,5,6,5
D: 6,5,6,6
答案: 【 6,5,A,B】
6、单选题:
给出程序的运行结果,程序运行时从键盘输入:54321<回车>#include <stdio.h>
int main()
{
int a,b,s;
scanf("%2d%2d",&a,&b);
s=a/b;
printf("s=%d",s);
return 0;
}
选项:
A: 1
B: 1.6875
C: 2
D: 0
答案: 【 1】
7、单选题:
在调用printf函数输出数据时,当数据的实际位宽小于printf函数中的指定位宽时,下面叙述正确的是
选项:
A: 如果格式字符前面没有负号,那么输出的数据将会右对齐、左补空格;如果格式字符前面有负号,那么输出的数据将会左对齐、右补空格。
B: 如果格式字符前面没有负号,那么输出的数据将会左对齐、右补空格;如果格式字符前面有负号,那么输出的数据将会右对齐、左补空格。
C: 如果格式字符前面没有负号,那么输出的数据将会右对齐、左补0;如果格式字符前面有负号,那么输出的数据将会左对齐、右补0。
D: 如果格式字符前面没有负号,那么输出的数据将会左对齐、右补0;如果格式字符前面有负号,那么输出的数据将会右对齐、左补0。
答案: 【 如果格式字符前面没有负号,那么输出的数据将会右对齐、左补空格;如果格式字符前面有负号,那么输出的数据将会左对齐、右补空格。】
8、单选题:
程序运行后的输出结果是#include <stdio.h>
int main()
{
int a=666,b=888;
printf("%dn",a,b);
return 0;
}
选项:
A: 666
B: 错误信息
C: 888
D: 666,888
答案: 【 666】
9、单选题:
在C语言中,字符型数据在内存中以( )形式存放
选项:
A: ASCII码
B: 国标码
C: BCD码
D: 反码
答案: 【 ASCII码】
10、单选题:
以下程序运行后的输出结果是#include <stdio.h>
int main()
{
int a;
int c=10;
float f=100.0;
double x;
a=f/=c*=(x=6.5);
printf("%d,%d,%3.1f,%3.1fn",a,c,f,x);
return 0;
}
选项:
A: 1,65,1.5,6.5
B: 1,65,1,6.5
C: 1,65,1.0,6.5
D: 2,65,1.5,6.5
答案: 【 1,65,1.5,6.5】
11、单选题:
以下程序的输出结果是#include <stdio.h>
int main()
{
int a=1234;
printf("%2dn",a);
return 0;
}
选项:
A: 1234
B: 12
C: 34
D: 提示出错、无结果
答案: 【 1234】
12、单选题:
设有语句“char c='72';”,则变量c
选项:
A: 包含1个字符
B: 包含2个字符
C: 包含3个字符
D: 不合法
答案: 【 包含1个字符】
13、单选题:
有以下语句段#include <stdio.h>
int main()
{
int n1=10,n2=20;
printf("_________",n1,n2);
return 0;
}要求按以下格式输出n1和n2的值,每个输出行都是从第一列开始,则空白处代码填写正确的是运行结果示例如下:n1=10n2=20
选项:
A: n1=%dnn2=%d
B: n1=%dn2=%dn
C: n1=%d,n2=%d
D: n1=%d n2=%dn
答案: 【 n1=%dnn2=%d】
14、单选题:
给出程序的运行结果,程序运行时从键盘输入:45-12<回车>#include <stdio.h>
int main()
{
int a,b,sum;
scanf("%d%*c%d",&a,&b);
sum=a+b;
printf("sum=%d",sum);
return 0;
}
选项:
A: 57
B: 输出报错
C: 33
D: 输出一个随机数
答案: 【 57】
15、单选题:
给出程序的运行结果#include <stdio.h>
int main()
{
int a,b,s;
char op;
scanf("%d %c%d",&a,&op,&b);
s=a%b;
printf("s=%d",s);
return 0;
}程序运行时从键盘输入:15<回车>%5<回车>
选项:
A: 0
B: 程序报错
C: 输出一个随机数
D: 3
答案: 【 0】
16、单选题:
分析下列程序,写出程序运行结果#include <stdio.h>
int main()
{
char c1 = 'a', c2 = 'b', c3 = 'c';
printf("a%cb%cc%cabcn", c1, c2, c3);
return 0;
}
选项:
A: aabbccabc
B: acbcabc
C: aabcabc
D: acbbcabc
答案: 【 aabbccabc】
17、单选题:
以下程序的输出结果为#include <stdio.h>
int main()
{
int a=2, c=5;
printf("a = %%d, b = %%dn", a, c);
return 0;
}
选项:
A: a = %d, b = %d
B: a = %2, b = %5
C: a = 2, b = 5
D: a = %%d, b = %%d
答案: 【 a = %d, b = %d】
18、单选题:
有以下程序,运行时若输入为B,则输出是#include <stdio.h>
int main()
{
char ch;
ch=getchar();
ch=ch+32;
printf("%c",ch);
return 0;
}
选项:
A: b
B: 98
C: 32
D: 66
答案: 【 b】
19、单选题:
在下列语句中存在错误的是
选项:
A: int a,b;scanf("%d %f",&a,&b);
B: int a,b;scanf("%d %d",a,b);
C: int a,b;scanf("%d%dn",&a,&b);printf("%d %d",a,b);
D: float a,b;scanf("%3.2f %4.2f",&a,&b);printf("%f %f",a,b);
E: float a,b;scanf("%f %f",&a,&b);printf("%f %f",a,b);
F: float a,b;scanf("%f %f",&a,&b);printf("a=%4.3f,b=%4.3f",a,b);
G: int a,b;scanf("%2d%2d",&a,&b);printf("a=%d,b=%d",a,b);
H: int a,b;scanf("%d,%d",&a,&b);printf("a=%2d,b=%2d",a,b);
I: int a,b;scanf("a=%d,b=%d",&a,&b);printf("a=%d,b=%d",a,b);
答案: 【 int a,b;scanf("%d %f",&a,&b);;
int a,b;scanf("%d %d",a,b);;
int a,b;scanf("%d%dn",&a,&b);printf("%d %d",a,b);;
float a,b;scanf("%3.2f %4.2f",&a,&b);printf("%f %f",a,b);】
20、单选题:
写出下面程序的输出结果#include<stdio.h>
int main()
{
int x=6,y,z;
x*=18+1;
printf("%d,",x--);
x+=y=z=11;
printf("%d",x);
return 0;
}
选项:
A: 114,124
B: 113,124
C: 109,116
D: 110,116
答案: 【 114,124】
21、单选题:
给出程序的运行结果#include <stdio.h>
int main()
{
int a,b,c,d;
char op1,op2,op3;
int sum;
printf("please input:a+b+c+dn");
scanf("%d%c%d%c%d%c%d",&a,&op1,&b,&op2,&c,&op3,&d);
sum=a+b+c+d;
printf("sum=%d",sum);
return 0;
}程序运行时从键盘输入:1<回车>2+3+1<回车>
选项:
A: 7
B: 1
C: 3
D: 6
答案: 【 7】
22、单选题:
以下程序的执行结果是#include <stdio.h>
int main()
{
int a = 5, b = 4, x, y;
x = 2 * a++;
y = --b * 2;
printf("a=%d, x=%dn", a, x);
printf("b=%d, y=%dn", b, y);
return 0;
}
选项:
A: a=6, x=10b=3, y=6
B: a=6, x=10b=3, y=8
C: a=6, x=12b=3, y=6
D: 以上均不对
答案: 【 a=6, x=10b=3, y=6】
函数分工与合作的艺术
函数原型
1、单选题:
下列说法错误的是()。
选项:
A: 当函数原型与函数定义中的形参类型不一致时,编译器一般都会指出参数类型不匹配的编译错误。因此,写上函数原型有助于编译器对函数参数进行类型匹配检查。
B: 函数声明是一条语句,不包括函数体。
C: 无论何种情况,只要把用户自定义的所有函数都放在main函数的前面,就可以不用写函数原型了。
D: 函数调用时,要求实参与形参的数量相等,它们的类型也要匹配,匹配的原则与变量赋值的原则一致。当函数调用时的实参与函数定义中的形参的类型不匹配时,有的编译器会发出警告,提示有可能出现数据信息丢失,而有的编译器则不会发出警告。
答案: 【 无论何种情况,只要把用户自定义的所有函数都放在main函数的前面,就可以不用写函数原型了。】
函数名的命名
1、多选题:
下面所列举的函数名正确且具有良好风格的是()
选项:
A: 2_abcd()
B: GetNumber()
C: change_directory()
D: chushihua@()
答案: 【 GetNumber() ;
change_directory() 】
函数封装与程序的健壮性
1、单选题:
下列说法错误的是()。
选项:
A: 我们常将程序具有遇到不正确使用或非法数据输入时仍能保护自己避免出错的能力称为程序的健壮性。
B: 在函数的入口处增加对函数参数合法性的检查以及对函数调用是否成功的检查,是一种常用的增强程序健壮性的方法。
C: 对于一个封装好的函数,外界对函数的影响仅限于入口参数,函数对外界的影响仅限于函数的返回值和数组、指针形参 。
D: 编译器给出的警告信息无关紧要,因此可以忽略。
答案: 【 编译器给出的警告信息无关紧要,因此可以忽略。】
函数的参数和返回值
1、单选题:
下列说法中错误的是()。
选项:
A: 函数中的return语句可以有多个,但是多个return语句并不表示函数可以用return返回多个值,用return返回的函数值只能有一个。
B: 在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元,此时形参值的变化会影响到实参的值。
C: 形参也是局部变量,只能在函数体内访问。
D: 在C语言中,实参与其对应的形参各占独立的存储单元,函数调用时的参数传递就是把实参的值复制一份给形参,即由实参向形参进行单向传值,因此形参值的变化不影响实参的值。
答案: 【 在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元,此时形参值的变化会影响到实参的值。】
测验
1、单选题:
下列说法中正确的是
选项:
A: 函数原型是一条语句,不包括函数体。
B: 无论何种情况,只要把用户自定义的所有函数都放在main函数的前面,就可以不用写函数原型了。
C: 在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元,此时形参值的变化会影响到实参的值。
D: 函数只有一个返回值,所以不能有多个return语句。
答案: 【 函数原型是一条语句,不包括函数体。】
2、单选题:
以下程序有语法错误,有关错误原因的正确说法是#include <stdio.h>
void prt_char(float x);
int main()
{
int G=5,k;
......
k=prt_char(G);
......
return 0;
}
int prt_char(int x)
{
......
}
选项:
A: 函数原型和函数定义不匹配
B: 变量名不能使用大写字母
C: 函数名不能使用下划线
D: 函数prt_char(int x)定义的位置不对,不能放在主函数main()的后面。
答案: 【 函数原型和函数定义不匹配】
3、单选题:
以下程序的功能是选出能被3整除且至少有一位是5的两位数的整数,输出所有满足条件的数及其个数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int Sub(int k,int n)
{
int a1,a2;
a2=k/10;
a1=k-a2*10;
if(________________)
{
printf("%4d",k);
n++;
return n;
}
else
return -1;
}
int main()
{
int n=0,k,m;
for(k=10;k<100;k++)
{
m=__________;
if(________) n=m;
}
printf("nn=%dn",n);
return 0;
}
选项:
A: 第7行: (k%3==0&&a2==5)||(k%3==0&&a1==5)第22行: Sub(k,n)第24行: m!=-1
B: 第7行:(k%3==0 &&a2==5) && (k%3==0 &&a1==5)第22行:Sub(n,k)第24行:m==-1
C: 第7行:(k%3=0 && a2=5)||(k%3=0 && a1=5)第22行:Sub(k,n)第24行:m=-1
D: 第7行:(k%3=0 && a2=5) && (k%3=0 && a1=5)第22行:Sub(n,k)第24行:m!=-1
答案: 【 第7行: (k%3==0&&a2==5)||(k%3==0&&a1==5)第22行: Sub(k,n)第24行: m!=-1】
4、单选题:
设计一个函数,用来判断一个整数是否为素数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <math.h>
#include <stdio.h>
int IsPrimeNumber(int number);
int main()
{
int n, ret;
printf("Input n:");
scanf("%d", &n);
ret = IsPrimeNumber(n);
if (___________)
{
printf("%d is a prime numbern", n);
}
else
{
printf("%d is not a prime numbern", n);
}
return 0;
}
//函数功能:判断number是否是素数,函数返回非0值,表示是素数,否则不是素数
int IsPrimeNumber(int number)
{
int i;
if (number <= 1) return 0; // 负数、0和1都不是素数
for (i=2; ________________; i++)
{
if (_______________) // 被整除,不是素数
return 0;
}
return 1;
}
选项:
A: 第11行: ret != 0第29行: i<=sqrt(number)第31行: number % i == 0
B: 第11行: ret == 0第29行: i<=number第31行: number % i == 0
C: 第11行: ret == 0第29行: i<=sqrt(number)第31行: number / i == 0
D: 第11行: ret != 0第29行: i<=number第31行: number / i == 0
答案: 【 第11行: ret != 0第29行: i<=sqrt(number)第31行: number % i == 0】
5、单选题:
以下程序执行后的输出结果是void Fun(int v , int w)
{
int t;
t=v;
v=w;
w=t;
}
int main( )
{
int x=1,y=3,z=2;
if(x>y) Fun(x,y);
else if(y>z) Fun(y,z);
else Fun(x,z);
printf("%d,%d,%dn",x,y,z);
return 0;
}
选项:
A: 1,3,2
B: 1,2,3
C: 3,1,2
D: 2,3,1
答案: 【 1,3,2】
6、单选题:
若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是
选项:
A: 函数调用可以作为一个函数的形参
B: 函数调用可以作为独立的语句存在
C: 函数调用可以作为一个函数的实参
D: 函数调用可以出现在表达式中
答案: 【 函数调用可以作为一个函数的形参】
7、单选题:
有以下函数定义:void Fun(int n, double x) { …… }若以下选项中的变量都已正确定义并赋值如下:int a,k;double b;a=12;b=0.45;则对函数Fun的正确调用语句是
选项:
A: Fun(a,b);
B: Fun(int y,double m);
C: k=Fun(10,12.5);
D: k=void Fun(a,b);
答案: 【 Fun(a,b); 】
8、单选题:
设计一个函数MinCommonMultiple(),计算两个正整数的最小公倍数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h>
int MinCommonMultiple(int a, int b);
int main()
{
int a, b, x;
printf("Input a,b:");
scanf("%d,%d", &a, &b);
x = _________________;
if (__________)
printf("MinCommonMultiple = %dn", x);
else
printf("Input error!n");
return 0;
}
//函数功能:计算两个正整数的最小公倍数,-1表示没有最小公倍数
int MinCommonMultiple(int a, int b)
{
int i;
if (_________________) return -1; // 保证输入的参数为正整数
for (i=1; i<b; i++)
{
if (________________) return i * a;
}
return b * a;
}
选项:
A: 第8行: MinCommonMultiple(a, b)第10行: x != -1第22行: a<=0 || b<=0第26行: (i * a) % b == 0
B: 第8行: MinCommonMultiple第10行: x == -1第22行: a<=0 && b<=0第26行: (i * a) % b == 0
C: 第8行: MinCommonMultiple(b, a)第10行: x != -1第22行: a<=0 || b<=0第26行: (i * a) / b == 0
D: 第8行: MinCommonMultiple(int a, int b)第10行: x = -1第22行: a<=0 || b<=0第26行: (i * a) % b == 0
答案: 【 第8行: MinCommonMultiple(a, b)第10行: x != -1第22行: a<=0 || b<=0第26行: (i * a) % b == 0】
9、单选题:
设计一个函数MaxCommonFactor(),利用欧几里德算法(也称辗转相除法)计算两个正整数的最大公约数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h>
int MaxCommonFactor(int a, int b);
int main()
{
int a, b, x;
printf("Input a,b:");
scanf("%d,%d", &a, &b);
x =_______________ ;
if (x != -1)
{
printf("MaxCommonFactor = %dn", x);
}
else
{
printf("Input error!n");
}
return 0;
}
//函数功能: 计算两个正整数的最大公约数,-1表示没有最大公约数
int MaxCommonFactor(int a, int b)
{
int r;
if (a<=0 || b<=0) return -1; // 保证输入的参数为正整数
do{
____________;
a = b;
_____________;
}while (__________);
return a;
}
选项:
A: 第8行: MaxCommonFactor(a, b)第29行: r = a % b第31行: b = r第32行: r != 0
B: 第8行: MaxCommonFactor(a, b, x)第29行: r = a % b第31行: a = r第32行: r == 0
C: 第8行: MaxCommonFactor(a, x)第29行: r = b % a第31行: b = r第32行: r = 0
D: 第8行: MaxCommonFactor(x, b)第29行: r = a / b第31行: a = r第32行: r != 0
答案: 【 第8行: MaxCommonFactor(a, b)第29行: r = a % b第31行: b = r第32行: r != 0】
10、单选题:
C语言规定:在一个源程序中,main函数的位置
选项:
A: 可以任意
B: 必须在程序的最开始
C: 必须在系统调用的库函数的后面
D: 必须在程序的最后
答案: 【 可以任意】
11、单选题:
编程计算下面组合数的值

代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。
#include <stdio.h>
_________________________;
int main()
{
int m, k;
_________;
do{
printf("Please input m,k (m>=k>0):");
scanf("%d, %d", &m, &k);
} while (______________);
p = (double)Factorial(m) / (Factorial(k) * Factorial (m-k));
printf("p=%.0fn", p);
return 0;
}
//函数功能:计算无符号整型数number的阶乘
unsigned long Factorial(unsigned int number)
{
unsigned long i, result = 1;
for (________________)
{
result *= i;
}
return result;
}
选项:
A: 第2行: unsigned long Factorial(unsigned int number)第6行: double p第11行: m<k || m<0 || k<0第23行: i=2; i<=number; i++
B: 第2行: long Factorial(unsigned int number)第6行: double p第11行: m<k || m<0 || k<0第23行: i=1; i<number; i++
C: 第2行: unsigned long Factorial(int number)第6行: int p第11行: m<k && m<0 && k<0第23行: i=2; i<=number; i++
D: 第2行: unsigned Factorial(unsigned number)第6行: int p第11行: m<k || m<0 || k<0第23行: i=1; i<=number; i++
答案: 【 第2行: unsigned long Factorial(unsigned int number)第6行: double p第11行: m<k || m<0 || k<0第23行: i=2; i<=number; i++】
12、单选题:
完全数,又称完美数或完数(Perfect Number),它是指这样的一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。例如,6就是一个完全数,是因为6 = 1 + 2 + 3。请编写一个判断完全数的函数IsPerfect(),然后判断从键盘输入的整数是否是完全数。注意:1没有真因子,所以不是完全数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h>
#include <math.h>
int IsPerfect(int x);
int main()
{
int m;
printf("Input m:");
scanf("%d", &m);
if (_________________) /* 完全数判定 */
printf("%d is a perfect numbern", m);
else
printf("%d is not a perfect numbern", m);
return 0;
}
/* 函数功能:判断完全数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数 */
int IsPerfect(int x)
{
int i;
int total = 0; /* 1没有真因子,不是完全数 */
for (__________________)
{
if (___________)
total = total + i;
}
return total==x ? 1 : 0;
}
选项:
A: 第10行: IsPerfect(m)第24行: i=1; i<x; i++第26行: x % i == 0
B: 第10行: m第24行: i=1; i<=x; i++第26行: x % i != 0
C: 第10行: IsPerfect(m)!=1第24行: i=0; i<=x; i++第26行: x / i == 0
D: 第10行: IsPerfect(m)==0第24行: i=0; i<x; i++第26行: x % i != 0
答案: 【 第10行: IsPerfect(m)第24行: i=1; i<x; i++第26行: x % i == 0】
13、单选题:
以下程序执行后输出结果是#include <stdio.h>
int MaxValue(int x, int y)
{
return x>y? x:y;
}
int MinValue(int x,int y)
{
return x>y? y:x;
}
int main()
{
int a=4,b=3,c=5,d,e,f;
d=MaxValue(a,b);
d=MaxValue(d,c);
e=MinValue(a,b);
e=MinValue(e,c);
f=a+b+c-d-e;
printf("%d,%d,%dn",d,f,e);
return 0;
}
选项:
A: 5,4,3
B: 3,4,5
C: 5,3,4
D: 3,5,4
答案: 【 5,4,3 】
练兵区——单选题——不计入总分
1、单选题:
设计一个函数MaxCommonFactor(),利用欧几里德算法(也称辗转相除法)计算两个正整数的最大公约数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h>
int MaxCommonFactor(int a, int b);
int main()
{
int a, b, x;
printf("Input a,b:");
scanf("%d,%d", &a, &b);
x =_______________ ;
if (x != -1)
{
printf("MaxCommonFactor = %dn", x);
}
else
{
printf("Input error!n");
}
return 0;
}
//函数功能: 计算两个正整数的最大公约数,-1表示没有最大公约数
int MaxCommonFactor(int a, int b)
{
int r;
if (a<=0 || b<=0) return -1; // 保证输入的参数为正整数
do{
____________;
a = b;
_____________;
}while (__________);
return a;
}
选项:
A: 第8行: MaxCommonFactor(a, b)第29行: r = a % b第31行: b = r第32行: r != 0
B: 第8行: MaxCommonFactor(a, b, x)第29行: r = a % b第31行: a = r第32行: r == 0
C: 第8行: MaxCommonFactor(a, x)第29行: r = b % a第31行: b = r第32行: r = 0
D: 第8行: MaxCommonFactor(x, b)第29行: r = a / b第31行: a = r第32行: r != 0
答案: 【 第8行: MaxCommonFactor(a, b)第29行: r = a % b第31行: b = r第32行: r != 0】
2、单选题:
C语言规定:在一个源程序中,main函数的位置
选项:
A: 可以任意
B: 必须在程序的最开始
C: 必须在系统调用的库函数的后面
D: 必须在程序的最后
答案: 【 可以任意】
3、单选题:
以下程序执行后输出结果是#include <stdio.h>
int MaxValue(int x, int y)
{
return x>y? x:y;
}
int MinValue(int x,int y)
{
return x>y? y:x;
}
int main()
{
int a=4,b=3,c=5,d,e,f;
d=MaxValue(a,b);
d=MaxValue(d,c);
e=MinValue(a,b);
e=MinValue(e,c);
f=a+b+c-d-e;
printf("%d,%d,%dn",d,f,e);
return 0;
}
选项:
A: 5,4,3
B: 3,4,5
C: 5,3,4
D: 3,5,4
答案: 【 5,4,3】
4、单选题:
有以下函数定义:void Fun(int n, double x) { …… }若以下选项中的变量都已正确定义并赋值如下:int a,k;double b;a=12;b=0.45;则对函数Fun的正确调用语句是
选项:
A: Fun(a,b);
B: Fun(int y,double m);
C: k=Fun(10,12.5);
D: k=void Fun(a,b);
答案: 【 Fun(a,b); 】
5、单选题:
完全数,又称完美数或完数(Perfect Number),它是指这样的一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。例如,6就是一个完全数,是因为6 = 1 + 2 + 3。请编写一个判断完全数的函数IsPerfect(),然后判断从键盘输入的整数是否是完全数。注意:1没有真因子,所以不是完全数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
#include <math.h>
int IsPerfect(int x);
int main()
{
int m;
printf("Input m:");
scanf("%d", &m);
if (_________________) /* 完全数判定 */
printf("%d is a perfect numbern", m);
else
printf("%d is not a perfect numbern", m);
return 0;
}
/* 函数功能:判断完全数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数 */
int IsPerfect(int x)
{
int i;
int total = 0; /* 1没有真因子,不是完全数 */
for (__________________)
{
if (___________)
total = total + i;
}
return total==x ? 1 : 0;
}
选项:
A: 第10行: IsPerfect(m)第24行: i=1; i<x; i++第26行: x % i == 0
B: 第10行: m第24行: i=1; i<=x; i++第26行: x % i != 0
C: 第10行: IsPerfect(m)!=1第24行: i=0; i<=x; i++第26行: x / i == 0
D: 第10行: IsPerfect(m)==0第24行: i=0; i<x; i++第26行: x % i != 0
答案: 【 第10行: IsPerfect(m)第24行: i=1; i<x; i++第26行: x % i == 0】
6、单选题:
下列说法中正确的是
选项:
A: 函数原型是一条语句,不包括函数体。
B: 无论何种情况,只要把用户自定义的所有函数都放在main函数的前面,就可以不用写函数原型了。
C: 在C语言中,只有当实参与其对应的形参同名时,才共占同一个存储单元,此时形参值的变化会影响到实参的值。
D: 函数只有一个返回值,所以不能有多个return语句。
答案: 【 函数原型是一条语句,不包括函数体。】
7、单选题:
以下程序有语法错误,有关错误原因的正确说法是#include <stdio.h>
void prt_char();
int main()
{
int G=5,k;
......
k=prt_char(G);
......
return 0;
}
int prt_char(int x)
{
......
}
选项:
A: 函数原型和函数定义不匹配
B: 变量名不能使用大写字母
C: 函数名不能使用下划线
D: 函数prt_char(int x)定义的位置不对,不能放在主函数main()的后面。
答案: 【 函数原型和函数定义不匹配】
8、单选题:
以下程序的功能是选出能被3整除且至少有一位是5的两位数的整数,输出所有满足条件的数及其个数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int Sub(int k,int n)
{
int a1,a2;
a2=k/10;
a1=k-a2*10;
if(________________)
{
printf("%4d",k);
n++;
return n;
}
else
return -1;
}
int main()
{
int n=0,k,m;
for(k=10;k<100;k++)
{
m=__________;
if(________) n=m;
}
printf("nn=%dn",n);
return 0;
}
选项:
A: 第7行: (k%3==0&&a2==5)||(k%3==0&&a1==5)第22行: Sub(k,n)第24行: m!=-1
B: 第7行:(k%3==0 &&a2==5) && (k%3==0 &&a1==5)第22行:Sub(n,k)第24行:m==-1
C: 第7行:(k%3=0 && a2=5)||(k%3=0 && a1=5)第22行:Sub(k,n)第24行:m=-1
D: 第7行:(k%3=0 && a2=5) && (k%3=0 && a1=5)第22行:Sub(n,k)第24行:m!=-1
答案: 【 第7行: (k%3==0&&a2==5)||(k%3==0&&a1==5)第22行: Sub(k,n)第24行: m!=-1】
9、单选题:
设计一个函数,用来判断一个整数是否为素数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <math.h>
#include <stdio.h>
int IsPrimeNumber(int number);
int main()
{
int n, ret;
printf("Input n:");
scanf("%d", &n);
ret = IsPrimeNumber(n);
if (___________)
{
printf("%d is a prime numbern", n);
}
else
{
printf("%d is not a prime numbern", n);
}
return 0;
}
//函数功能:判断number是否是素数,函数返回非0值,表示是素数,否则不是素数
int IsPrimeNumber(int number)
{
int i;
if (number <= 1) return 0; // 负数、0和1都不是素数
for (i=2; ________________; i++)
{
if (_______________) // 被整除,不是素数
return 0;
}
return 1;
}
选项:
A: 第11行: ret != 0第29行: i<=sqrt(number)第31行: number % i == 0
B: 第11行: ret == 0第29行: i<=number第31行: number % i == 0
C: 第11行: ret == 0第29行: i<=sqrt(number)第31行: number / i == 0
D: 第11行: ret != 0第29行: i<=number第31行: number / i == 0
答案: 【 第11行: ret != 0第29行: i<=sqrt(number)第31行: number % i == 0】
10、单选题:
以下程序执行后的输出结果是void Fun(int v , int w)
{
int t;
t=v;
v=w;
w=t;
}
int main( )
{
int x=1,y=3,z=2;
if(x>y) Fun(x,y);
else if(y>z) Fun(y,z);
else Fun(x,z);
printf("%d,%d,%dn",x,y,z);
return 0;
}
选项:
A: 1,3,2
B: 1,2,3
C: 3,1,2
D: 2,3,1
答案: 【 1,3,2】
11、单选题:
若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是
选项:
A: 函数调用可以作为一个函数的形参
B: 函数调用可以作为独立的语句存在
C: 函数调用可以作为一个函数的实参
D: 函数调用可以出现在表达式中
答案: 【 函数调用可以作为一个函数的形参】
12、单选题:
设计一个函数MinCommonMultiple(),计算两个正整数的最小公倍数。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int MinCommonMultiple(int a, int b);
int main()
{
int a, b, x;
printf("Input a,b:");
scanf("%d,%d", &a, &b);
x = _________________;
if (__________)
printf("MinCommonMultiple = %dn", x);
else
printf("Input error!n");
return 0;
}
//函数功能:计算两个正整数的最小公倍数,-1表示没有最小公倍数
int MinCommonMultiple(int a, int b)
{
int i;
if (_________________) return -1; // 保证输入的参数为正整数
for (i=1; i<b; i++)
{
if (________________) return i * a;
}
return b * a;
}
选项:
A: 第8行: MinCommonMultiple(a, b)第10行: x != -1第22行: a<=0 || b<=0第26行: (i * a) % b == 0
B: 第8行: MinCommonMultiple第10行: x == -1第22行: a<=0 && b<=0第26行: (i * a) % b == 0
C: 第8行: MinCommonMultiple(b, a)第10行: x != -1第22行: a<=0 || b<=0第26行: (i * a) / b == 0
D: 第8行: MinCommonMultiple(int a, int b)第10行: x = -1第22行: a<=0 || b<=0第26行: (i * a) % b == 0
答案: 【 第8行: MinCommonMultiple(a, b)第10行: x != -1第22行: a<=0 || b<=0第26行: (i * a) % b == 0】
13、单选题:
编程计算下面组合数的值

代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。
#include <stdio.h>
_________________________;
int main()
{
int m, k;
_________;
do{
printf("Please input m,k (m>=k>0):");
scanf("%d, %d", &m, &k);
} while (______________);
p = (double)Factorial(m) / (Factorial(k) * Factorial (m-k));
printf("p=%.0fn", p);
return 0;
}
//函数功能:计算无符号整型数number的阶乘
unsigned long Factorial(unsigned int number)
{
unsigned long i, result = 1;
for (________________)
{
result *= i;
}
return result;
}选项:
A: 第2行: unsigned long Factorial(unsigned int number)第6行: double p第11行: m<k || m<0 || k<0第23行: i=2; i<=number; i++
B: 第2行: long Factorial(unsigned int number)第6行: double p第11行: m<k || m<0 || k<0第23行: i=1; i<number; i++
C: 第2行: unsigned long Factorial(int number)第6行: int p第11行: m<k && m<0 && k<0第23行: i=2; i<=number; i++
D: 第2行: unsigned Factorial(unsigned number)第6行: int p第11行: m<k || m<0 || k<0第23行: i=1; i<=number; i++
答案: 【 第2行: unsigned long Factorial(unsigned int number)第6行: double p第11行: m<k || m<0 || k<0第23行: i=2; i<=number; i++】
初识C语言从认识变量和常量开始
codeblocks介绍——从HelloWorld开始
1、单选题:
#include <stdio.h>是
选项:
A: 编译预处理指令
B: 语句
C: 函数
D: 程序入口
答案: 【 编译预处理指令】
debug
1、单选题:
codeblocks中运行到下一步(next line)的快捷键是
选项:
A: F7
B: F5
C: F8
D: F11
答案: 【 F7】
变量在内存中所占的字节数
1、单选题:
C语言用sizeof计算变量在内存中的字节数,其中sizeof是()
选项:
A: 函数
B: 运算符
C: 标识符
D: 语句
答案: 【 运算符】
宏常量与const常量
1、单选题:
宏定义是()
选项:
A: 一条语句
B: 一种编译预处理指令
C: 一个标识符
D: 一个变量
答案: 【 一种编译预处理指令】
2、判断题:
const常量有数据类型。
选项:
A: 正确
B: 错误
答案: 【 正确】
测验
1、单选题:
下列选项中,合法的C语言标识符是
选项:
A: _a1
B: width.x
C: #abc123
D: 123abc
E: o*k
F: a?
G: a+b
H: %a
I: b!
答案: 【 _a1】
2、单选题:
以下不适合定义为用户标识符的是
选项:
A: int
B: a2
C: def2
D: _3com_
E: PI
F: Source
G: abc
答案: 【 int 】
3、单选题:
#include <stdio.h>是
选项:
A: 编译预处理指令
B: 语句
C: 函数
D: 什么都不是
E: 有语法错误
答案: 【 编译预处理指令】
4、单选题:
在windows下,程序编译链接后形成的可执行文件是
选项:
A: .obj文件
B: .exe文件
C: .o文件
D: .c文件
E: .h文件
答案: 【 .exe文件】
5、单选题:
程序编译链接后显示" 0 error,0 warning" 代表
选项:
A: 程序中没有语法错误
B: 程序是正确的
C: 程序是不正确的
D: 程序中可能存在语法错误
E: 程序中有语义错误
答案: 【 程序中没有语法错误】
6、单选题:
用8位无符号二进制数能表示的最大十进制数为
选项:
A: 255
B: 127
C: 128
D: 256
答案: 【 255】
7、单选题:
关于可执行文件说法正确的是
选项:
A: 可执行文件是编译链接后生成的文件
B: 可执行文件就是源代码文件
C: 可执行文件后缀为.obj
D: 可执行文件就是main.c文件
答案: 【 可执行文件是编译链接后生成的文件】
8、单选题:
若变量a是int类型,并执行了语句:a='A'+1.6;,则正确的叙述是
选项:
A: 'A'+1.6的结果是浮点型
B: a的值还是整型
C: a的值是字符C
D: a的值是浮点型
E: 不允许字符型和浮点型相加
答案: 【 'A'+1.6的结果是浮点型;
a的值还是整型】
9、单选题:
C语言用sizeof计算变量在内存中的字节数,其中sizeof是()
选项:
A: 运算符
B: 一元运算符
C: 只需要一个操作数的运算符
D: 函数
E: 语句
F: 标识符
G: 变量
答案: 【 运算符;
一元运算符;
只需要一个操作数的运算符】
10、单选题:
以下不属于Codeblocks中用于调试程序的工具是
选项:
A: run
B: build
C: run to cursor
D: next line
E: stop debugger
F: watches
答案: 【 run;
build】
11、单选题:
程序的开发步骤中不包括
选项:
A: 撰写文档
B: 运行程序
C: 编译链接
D: 程序测试
E: 编辑(编写代码)
答案: 【 撰写文档】
12、单选题:
下列说法中错误的是()
选项:
A: 尾数决定了实数的表数范围,阶码决定了实数的表数精度。
B: 内存是按位编址的。
C: 有符号和无符号整数的表数范围是相同的。
D: int型在所有的计算机上都占4个字节的存储单元。
E: 编译器按变量定义的类型对不同类型的变量分配不同大小的内存空间。
F: 内存是按字节编址的。
G: 对于同样的尾数,阶码的值越大,则浮点数所表示的数值的绝对值就越大。
H: sizeof是编译时执行的运算符,不会导致额外的运行时间开销。
答案: 【 尾数决定了实数的表数范围,阶码决定了实数的表数精度。;
内存是按位编址的。;
有符号和无符号整数的表数范围是相同的。;
int型在所有的计算机上都占4个字节的存储单元。】
13、单选题:
若有定义:int a=8,b=5,c; ,执行语句c=a/b+0.4;后,c的值为
选项:
A: 1
B: 1.4
C: 2.0
D: 2
答案: 【 1】
14、单选题:
在C语言中,字符型数据在内存中以字符的( )形式存放
选项:
A: ASCII码
B: 国标码
C: BCD码
D: 反码
答案: 【 ASCII码】
15、单选题:
以下符合C语言语法的实型常量是
选项:
A: 5e-3
B: 3.14.159e
C: 1.2e0.5
D: e15
答案: 【 5e-3】
16、单选题:
以下选项中可作为C语言合法整数的是
选项:
A: 0xffa
B: 10110B
C: 038x
D: x2a2
答案: 【 0xffa】
17、单选题:
下列说法正确的是
选项:
A: 在C语言中,变量必须先定义后使用。
B: 一条变量定义语句可定义多个同类型的变量。
C: C89规定所有变量必须在第一条可执行语句前定义。
D: const常量只能在定义时赋值。
E: 实型常量的默认类型是double类型。
F: 一条变量定义语句不可以同时定义多个变量。
G: 不同类型的变量分配的存储空间大小都是相同的。
H: 在C语言中,所有变量都必须在定义时进行初始化。
I: 变量在没有初始化的时候,其值都是0
J: 宏常量有数据类型,编译器在宏替换时可以进行类型检查。
答案: 【 在C语言中,变量必须先定义后使用。;
一条变量定义语句可定义多个同类型的变量。;
C89规定所有变量必须在第一条可执行语句前定义。;
const常量只能在定义时赋值。;
实型常量的默认类型是double类型。】
18、单选题:
下列变量定义中合法的是
选项:
A: long ao=0xfdaL;
B: short _a=1-.1e-1;
C: double b=1+5e2.5;
D: float 2_and=1-e-3;
答案: 【 long ao=0xfdaL;】
练兵区——单选题——不计入总分
1、单选题:
下列选项中,合法的C语言标识符是
选项:
A: _a1
B: width
C: #abc123
D: 123abc
E: o*k
F: a?
G: a+b
H: %a
I: b!
答案: 【 _a1;
width】
2、单选题:
以下不适合定义为用户标识符的是
选项:
A: float
B: main
C: define
D: _3com_
E: PI
F: Source
G: abc
答案: 【 float ;
main;
define】
3、单选题:
#include <stdio.h>是
选项:
A: 编译预处理指令
B: 语句
C: 函数
D: 什么都不是
E: 有语法错误
答案: 【 编译预处理指令】
4、单选题:
在windows下,程序编译链接后形成的可执行文件是
选项:
A: .obj文件
B: .exe文件
C: .o文件
D: .c文件
E: .h文件
答案: 【 .exe文件】
5、单选题:
程序编译链接后显示" 0 error,0 warning" 代表
选项:
A: 程序中没有语法错误
B: 程序是正确的
C: 程序是不正确的
D: 程序中可能存在语法错误
E: 程序中有语义错误
答案: 【 程序中没有语法错误】
6、单选题:
用8位无符号二进制数能表示的最大十进制数为
选项:
A: 255
B: 127
C: 128
D: 256
答案: 【 255】
7、单选题:
关于可执行文件说法正确的是
选项:
A: 可执行文件是编译链接后生成的文件
B: 可执行文件就是源代码文件
C: 可执行文件后缀为.obj
D: 可执行文件就是main.c文件
答案: 【 可执行文件是编译链接后生成的文件】
8、单选题:
若变量a是int类型,并执行了语句:a='A'+1.6;,则正确的叙述是
选项:
A: 'A'+1.6的结果是浮点型
B: a的值还是整型
C: a的值是字符C
D: a的值是浮点型
E: 不允许字符型和浮点型相加
答案: 【 'A'+1.6的结果是浮点型;
a的值还是整型】
9、单选题:
C语言用sizeof计算变量在内存中的字节数,其中sizeof是()
选项:
A: 运算符
B: 一元运算符
C: 只需要一个操作数的运算符
D: 函数
E: 语句
F: 标识符
G: 变量
答案: 【 运算符;
一元运算符;
只需要一个操作数的运算符】
10、单选题:
以下不属于Codeblocks中用于调试程序的工具是
选项:
A: run
B: build
C: run to cursor
D: next line
E: stop debugger
F: watches
答案: 【 run;
build】
11、单选题:
程序的开发步骤中不包括
选项:
A: 撰写文档
B: 运行程序
C: 编译链接
D: 程序测试
E: 编辑(编写代码)
答案: 【 撰写文档】
12、单选题:
下列说法中错误的是()
选项:
A: 尾数决定了实数的表数范围,阶码决定了实数的表数精度。
B: 内存是按位编址的。
C: 有符号和无符号整数的表数范围是相同的。
D: int型在所有的计算机上都占4个字节的存储单元。
E: 编译器按变量定义的类型对不同类型的变量分配不同大小的内存空间。
F: 内存是按字节编址的。
G: 对于同样的尾数,阶码的值越大,则浮点数所表示的数值的绝对值就越大。
H: sizeof是编译时执行的运算符,不会导致额外的运行时间开销。
答案: 【 尾数决定了实数的表数范围,阶码决定了实数的表数精度。;
内存是按位编址的。;
有符号和无符号整数的表数范围是相同的。;
int型在所有的计算机上都占4个字节的存储单元。】
13、单选题:
若有定义:int a=8,b=5,c; ,执行语句c=a/b+0.4;后,c的值为
选项:
A: 1
B: 1.4
C: 2.0
D: 2
答案: 【 1】
14、单选题:
在C语言中,字符型数据在内存中以字符的( )形式存放
选项:
A: ASCII码
B: 国标码
C: BCD码
D: 反码
答案: 【 ASCII码】
15、单选题:
以下符合C语言语法的实型常量是
选项:
A: 5e-3
B: 3.14.159e
C: 1.2e0.5
D: e15
答案: 【 5e-3】
16、单选题:
以下选项中可作为C语言合法整数的是
选项:
A: 0xffa
B: 10110B
C: 038x
D: x2a2
答案: 【 0xffa】
17、单选题:
下列说法正确的是
选项:
A: 在C语言中,变量必须先定义后使用。
B: 一条变量定义语句可定义多个同类型的变量。
C: C89规定所有变量必须在第一条可执行语句前定义。
D: const常量只能在定义时赋值。
E: 实型常量的默认类型是double类型。
F: 一条变量定义语句不可以同时定义多个变量。
G: 不同类型的变量分配的存储空间大小都是相同的。
H: 在C语言中,所有变量都必须在定义时进行初始化。
I: 变量在没有初始化的时候,其值都是0
J: 宏常量有数据类型,编译器在宏替换时可以进行类型检查。
答案: 【 在C语言中,变量必须先定义后使用。;
一条变量定义语句可定义多个同类型的变量。;
C89规定所有变量必须在第一条可执行语句前定义。;
const常量只能在定义时赋值。;
实型常量的默认类型是double类型。】
18、单选题:
下列变量定义中合法的是
选项:
A: long ao=0xfdaL;
B: short _a=1-.1e-1;
C: double b=1+5e2.5;
D: float 2_and=1-e-3;
答案: 【 long ao=0xfdaL;】
原来内存也可以这么玩我是指针我怕谁
指针和内存
1、判断题:
指针变量所占的内存被释放了,也就意味着它所指向的动态内存也会被自动释放。
选项:
A: 正确
B: 错误
答案: 【 错误】
2、判断题:
用free释放指针变量所指向的内存以后,就意味着该指针变量变成了空指针。
选项:
A: 正确
B: 错误
答案: 【 错误】
周而复始的循环之道
嵌套循环
1、单选题:
下列说法错误的是( )。
选项:
A: 执行嵌套循环时是先执行内层循环,后执行外层循环。
B: 嵌套循环的内层和外层循环的循环控制变量不能同名。
C: 嵌套循环的循环次数等于外层循环的循环次数与内层循环的循环次数之积。
D: 如果一个循环的循环体中又完整地包含了另一个循环,则称为嵌套循环。
答案: 【 执行嵌套循环时是先执行内层循环,后执行外层循环。】
流程的转移控制
1、单选题:
下面程序段中的break语句是转移到哪里去执行()。for(...)
{
for(...)
{
switch(...)
{
case 1: ...
break;
case 2:...
...
}
A: //code
}
B: //code
}
C: //code
选项:
A: 转到标号A所在的语句行与执行
B: 转到标号B所在的语句行与执行
C: 转到标号C所在的语句行与执行
D: 不进行流程转移,而是继续执行break后面的语句
答案: 【 转到标号A所在的语句行与执行】
程序调试
1、单选题:
下列说法错误的是()。
选项:
A: 程序测试的目的就是验证程序的正确性。
B: 程序中常见的错误有三种:编译错误,链接错误,以及运行时错误。
C: 编译错误通常是由语法错误造成的。
D: 运行时错误是指在程序运行时发生的错误,运行时错误有两种:一种是导致程序的运行结果与预期的不一致,另一种是导致程序无法正常运行。
答案: 【 程序测试的目的就是验证程序的正确性。】
第5周测验
1、单选题:
程序运行后的输出结果是#include <stdio.h>
int main()
{
int i;
for(i=0;i<3;i++)
switch(i)
{
case 0: printf("%d",i);
case 2: printf("%d",i);
default: printf("%d",i);
}
return 0;
}
选项:
A: 000122
B: 022111
C: 021021
D: 012
答案: 【 000122】
2、单选题:
若变量已正确定义,要求程序段完成求5!的计算,不能完成此操作的程序段是
选项:
A: for( i=1; i<=5; i++ )
{
p=1;
p*=i;
}
B: for(i=1,p=1;i<=5;i++) p*=i;
C: i=1;
p=1;
while ( i<=5 )
{
p*=i;
i++;
}
D: i=1;
p=1;
do {
p*=i;
i++;
} while ( i<=5 );
答案: 【 for( i=1; i<=5; i++ )
{
p=1;
p*=i;
}】
3、单选题:
以下程序执行后的输出结果是#include <stdio.h>
int main( )
{
int x=0,y=5,z=3;
while(z-->0 && ++x<5)
{
y=y-1;
}
printf("%d,%d,%dn",x,y,z);
return 0;
}
选项:
A: 3,2,-1
B: 3,2,0
C: 4,3,-1
D: 5,-2,-5
答案: 【 3,2,-1】
4、单选题:
下面程序的输出是#include <stdio.h>
int main()
{
int y=9;
for( ; y>0; y--)
{
if(y%3==0)
{
printf("%d", --y);
continue;
}
}
return 0;
}
选项:
A: 852
B: 741
C: 963
D: 875421
答案: 【 852 】
5、单选题:
爱因斯坦数学题。爱因斯坦曾出过这样一道数学题:有一条长阶梯,若每步跨2阶,最后剩下1阶;若每步跨3阶,最后剩下2阶;若每步跨5阶,最后剩下4阶;若每步跨6阶,最后剩下5阶;只有每步跨7阶,最后才正好1阶不剩。请问,这条阶梯共有多少阶?代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
int x = 1, find = 0;
while (__________)
{
if (______________________)
{
printf("x = %dn", x);
find = 1;
}
x++;
}
return 0;
}
选项:
A: 第5行: !find第7行: x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0
B: 第5行: find==1第7行: x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0
C: 第5行: find!=1第7行: x/2==1 && x/3==2 && x/5==4 && x/6==5 && x/7==0
D: 第5行: find!=0第7行: x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0
答案: 【 第5行: !find第7行: x%2==1 && x%3==2 && x%5==4 && x%6==5 && x%7==0】
6、单选题:
鸡兔同笼,共有98个头,386只脚,编程求鸡、兔各多少只。代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h>
int main()
{
int x, y;
for (x=1; _______; x++)
{
____________;
if (____________)
{
printf("x = %d, y = %d", x, y);
}
}
return 0;
}
选项:
A: 第5行: x<=97第7行: y = 98 - x第8行: 2*x+4*y == 386
B: 第5行: x<97第7行: x = 98 - y第8行: 2*x+4*y == 386
C: 第5行: x<97第7行: y = 98 - x第8行: 2x+4y == 386
D: 第5行: x<=97第7行: x = 98 - y第8行: 2*x+4*y <= 386
答案: 【 第5行: x<=97第7行: y = 98 - x第8行: 2*x+4*y == 386】
7、单选题:
以下能正确计算1×2×3×4...×10的程序段是
选项:
A: i=1;
s=1;
do {
s=s*i;
i++;
} while(i<=10);
B: do
{
i=1;
s=1;
s=s*i;
i++;
} while(i<=10);
C: do
{
i=1;
s=0;
s=s*i;
i++;
} while(i<=10);
D: i=1;
s=0;
do {
s=s*i;
i++;
} while(i<=10);
答案: 【 i=1;
s=1;
do {
s=s*i;
i++;
} while(i<=10);】
8、单选题:
以下程序执行后的输出结果是#include <stdio.h>
int main( )
{
int i,n=0;
for(i=2;i<5;i++)
{
do
{
if(i%3) continue;
n++;
}while(!i);
n++;
}
printf("n=%dn",n);
return 0;
}
选项:
A: n=4
B: n=5
C: n=2
D: n=3
答案: 【 n=4】
9、单选题:
以下正确的描述是
选项:
A: 只能在循环体内和switch语句体内使用break语句
B: continue语句的作用是结束整个循环的执行
C: 在循环体内使用break语句或continue语句的作用相同
D: continue语句可以写在循环体之外
答案: 【 只能在循环体内和switch语句体内使用break语句】
10、单选题:
计算

直到最后一项的绝对值小于
为止。
代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。
#include <stdio.h>
#include <math.h>
int main()
{
int n = 1;
float term = 1, sum = 0;
______________;
while (fabs(term) >= 1e-4) //判末项大小
{
term = sign / n; //求出累加项
sum = sum + term; //累加
________________; //改变项的符号
n++; //分母加1
}
printf("sum = %fn", sum);
return 0;
}
选项:
A: 第7行代码: float sign=1第13行代码: sign = -sign
B: 第7行代码: float sign= -1第13行代码: sign = -sign
C: 第7行代码: float sign=1第13行代码: term = -term
D: 第7行代码: float sign= -1第13行代码: term = -term
答案: 【 第7行代码: float sign=1第13行代码: sign = -sign】
11、单选题:
设已定义i和k为int类型变量,则以下for循环语句for(i=0,k=-1;k=1; i++,k++)
printf( "* * * *n");
选项:
A: 是无限循环
B: 判断循环结束的条件不合法
C: 循环一次也不执行
D: 循环只执行一次
答案: 【 是无限循环】
12、单选题:
有以下程序,若从键盘给n输入的值是-3,则程序的输出结果是#include <stdio.h>
int main()
{
int s=0,a=1,n;
scanf("%d",&n);
do
{
s+=1;
a=a-2;
} while(a!=n);
printf("%dn",s);
return 0;
}
选项:
A: 2
B: -1
C: 3
D: 0
答案: 【 2】
13、单选题:
以下程序运行后的输出结果是#include <stdio.h>
int main()
{
int i=0,s=0;
for (;;)
{
if(i==3||i==5) continue;
if (i==6) break;
i++;
s+=i;
}
printf("%dn",s);
return 0;
}
选项:
A: 程序进入死循环
B: 10
C: 13
D: 21
答案: 【 程序进入死循环】
14、单选题:
下面程序的功能是输出以下形式的图案,则在下划线处应填入的是 * *** ***** *******#include <stdio.h>
int main( )
{ int i,j;
for(i=1;i<=4;i++)
{
for(j=1;j<=__________;j++)
{
printf("*");
}
printf("n");
}
return 0;
}
选项:
A: 2*i-1
B: 2*i+1
C: i+2
D: i
答案: 【 2*i-1】
15、单选题:
程序执行后的输出结果是#include <stdio.h>
int main( )
{
int i,s=0;
for(i=1;i<10;i+=2)
{
s+=i+1;
}
printf("%dn",s);
return 0;
}
选项:
A: 自然数1~10中的偶数之和
B: 自然数1~9的累加和
C: 自然数1~10的累加和
D: 自然数1~9中的奇数之和
答案: 【 自然数1~10中的偶数之和】
16、单选题:
以下程序的输出结果是#include <stdio.h>
int main()
{
int a, b;
for(a=1, b=1; a<=100; a++)
{
if(b>=10) break;
if (b%3==1)
{
b+=3;
continue;
}
}
printf("%dn",a);
return 0;
}
选项:
A: 4
B: 101
C: 6
D: 5
答案: 【 4】
17、单选题:
三色球问题。若一个口袋中放有12个球,其中有3个红色的,3个白色的,6个黑色的,从中任取8个球,问共有多少种不同的颜色搭配?代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h>
int main()
{
int i, j, k;
for (i=0; i<=3; i++)
{
for (j=0; j<=3; j++)
{
for (________________)
{
if (__________________)
{
printf("i=%d, j=%d, k=%dn", i, j, k);
}
}
}
}
return 0;
}
选项:
A: 第9行: k=0; k<=6; k++第11行: i + j + k == 8
B: 第9行: k=0; k<=6; k++第11行: i + j + k = 8
C: 第9行: k=0; k<=6; k++第11行: i + j + k <= 8
D: 第9行: k=0; k<6; k++第11行: i + j + k == 8
答案: 【 第9行: k=0; k<=6; k++第11行: i + j + k == 8】
18、单选题:
我国古代的《张丘建算经》中有这样一道著名的百鸡问题:“鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何?”其意为:公鸡每只5元,母鸡每只3元,小鸡3只1元。用100元买100只鸡,问公鸡、母鸡和小鸡各能买多少只?代码如下,按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。 #include <stdio.h>
int main()
{
int x, y, z;
for (x=0; x<=20; x++)
{
for (y=0; _________; y++)
{
_______________;
if (_______________)
{
printf("x=%d, y=%d, z=%dn", x, y, z);
}
}
}
return 0;
}
选项:
A: 第7行: y<=33第9行: z = 100 – x - y第10行: 5*x + 3*y + z/3.0 == 100
B: 第7行: y<=33第9行: z + y + x = 100第10行: 5*x + 3*y + z/3.0 = 100
C: 第7行: y<=33第9行: z = 100 – x - y第10行: 5x + 3y + z/3.0 == 100
D: 第7行: y<33第9行:&nbs
