2020 C语言程序设计精髓-孙程光(天津职业技术师范大学) 最新满分章节测试答案
- 第8周—— 一堆数据来了,你准备好了吗 练兵区——单选题——不计入总分
- define M 40
- define N 11
- define N 40
- include <time.h>
- include <stdio.h>
- define N 10
- define N 20
- define N 40
- define N 40
- define N 10
- define N 40
- include <time.h>
- include <stdio.h>
- define N 20
- define M 40
- define N 11
- define N 10
- define ROW 3
- define COL 4
- define ROW 3
- define COL 4
- include <string.h>
- include <string.h>
- include <string.h>
- include <string.h>
- include <string.h>
- include <string.h>
- include <string.h>
- define STR_LEN 80
- include <string.h>
- define N 100
- include <string.h>
- define N 80
- include <string.h>
- include <string.h>
- include <string.h>
- define N 100
- define N 10
- include <string.h>
- include <string.h>
- include <string.h>
- include <string.h>
- include <string.h>
- include <string.h>
- include <string.h>
- include <string.h>
- define N 100
- include <string.h>
- define N 80
- include <string.h>
- define STR_LEN 80
- include <string.h>
- define N 100
- include <string.h>
- include <string.h>
- define NUM_ELECTORATE 10
- define NUM_CANDIDATE 3
- include <string.h>
- define NUM_ELECTORATE 10
- define NUM_CANDIDATE 3
- include <stdlib.h>
- include <stdlib.h >
- include <stdlib.h>
- include <stdlib.h >
- include <stdlib.h>
- include <stdlib.h>
- include <string.h>
- include <string.h>
本答案对应课程为:点我自动跳转查看
本课程起止时间为:2020-02-25到2020-07-16
本篇答案更新状态:已完结
第8周—— 一堆数据来了,你准备好了吗 练兵区——单选题——不计入总分
1、 问题:假设有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:");
for (i=0; i<M; i++)
{
scanf("%d", &feedback[i]);
}
for (i=0; i<M; i++)
{
___;
}
printf("Feedback\tCount\tHistogram");
for (_; grade<=N-1; grade++)
{
printf("%8d\t%5d\t", grade, count[grade]);
for (j=0; _____; j++)
{
printf("%c",’*’);
}
printf("");
}
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]】
2、 问题:输入某班学生某门课的成绩(最多不超过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 = %d", 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】
3、 问题:模拟骰子的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%17s", "Face", "Frequency");
for (face=1; face<=6; face++)
{
printf("%4d%17d", 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]++】
4、 问题:以下程序中函数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("%d",x);
return 0;
}
选项:
A:第2行: int b[]第5行: i=m第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第7行: s】
5、 问题:以下程序中函数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("");
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)】
6、 问题:以下程序的功能是:按顺序读入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:%f",n,ave);
}
return 0;
选项:
A:sum=0.0;
B:sum+=score;
C:ave=sun/4.0;
D:printf("NO%d:%f",n,ave);
答案: 【sum=0.0;】
7、 问题:以下程序中函数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)】
8、 问题:输入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 = %d", sum);
return 0;
}
/ 函数功能: 输入n×n矩阵的元素值,存于数组a中 /
void InputMatrix(__, int n)
{
int i, j;
printf("Input %d*%d matrix:", 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】
9、 问题:下面代码的功能是将数组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("%d\t",a[i]);
printf("");
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)】
10、 问题:某人有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(for(k=0;a[k]!=0;k++))
if(s==a[k])
_;
if(a[k]==0&&s>0)
{
_;
n++;
}
}
printf(" %d kinds:",n);
for(k=0;a[k];k++)
printf("%2d,",a[k]);
return 0;
选项:
A:第7行: i<=5第8行: j<=5第10行: 2i+3j第14行: break第18行: a[k]=s
B:第7行: i<5第8行: j<5第10行: 2i+3j第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行: 2i+3j第14行: continue第18行: s=a[k]+1
答案: 【第7行: i<=5第8行: j<=5第10行: 2i+3j第14行: break第18行: a[k]=s】
11、 问题:某矩阵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]】
12、 问题:下列说法正确的是
选项:
A:在C语言中,数组的下标都是从0开始的。
B:在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。
C:简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。
D:数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。
E:在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。
F:C语言中的二维数组在内存中是按列存储的。
G:对于一个二维数组,可以按任意的顺序对其进行赋值,输出二维数组元素也可以按任意的顺序来输出。
H:在声明函数的二维数组形参时,可省略数组第二维的长度,但不能省略数组第一维的长度。
I:定义数组的大小、访问数组元素时在下标中都可以使用变量或表达式。
答案: 【在C语言中,数组的下标都是从0开始的。;
在C语言中,不带下标的数组名代表数组的首地址,即第一个元素在内存中的地址。;
简单变量做函数参数时,是将实参的值传给形参,实参和形参在内存中占用不同的存储单元,因此形参值的改变不会影响实参。;
数组做函数参数时,是将实参数组的首地址传给形参,形参数组和实参数组在内存中共享相同的存储单元,因此对形参数组元素值的修改也就相当于是对实参数组元素值的修改。;
在声明函数的一维数组形参时,通常不指定数组的大小,而用另一个形参来指定数组的大小。】
13、 问题:用函数编程计算并输出如图所示的杨辉三角形。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#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("");
}
}
选项:
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】
14、 问题:输入某班学生某门课的成绩(最多不超过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 %d", n);
m = GetAboveAver(score, n); / 统计成绩在平均分及其上的学生人数 /
if (__) printf("Students of above average is %d", 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 %d", 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】
15、 问题:下面代码的功能是在屏幕上输出以下内容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("%d",t);
}
return 0;
}
选项:
A:b[j][t]
B:b[i][b[j][j]]
C:b[t][j]
D:b[i][j]
答案: 【b[j][t]】
16、 问题:以下程序的输出结果是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 %d",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】
第8周—— 一堆数据来了,你准备好了吗 第8周测验
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 = %d", 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 = %d", sum);
return 0;
}
/ 函数功能: 输入n×n矩阵的元素值,存于数组a中 /
void InputMatrix(__, int n)
{
int i, j;
printf("Input %d*%d matrix:", 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 %d", n);
m = GetAboveAver(score, n); / 统计成绩在平均分及其上的学生人数 /
if (__) printf("Students of above average is %d", 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 %d", 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%17s", "Face", "Frequency");
for (face=1; face<=6; face++)
{
printf("%4d%17d", 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("%d",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("%d\t",a[i]);
printf("");
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(" %d kinds:",n);
for(k=0;a[k];k++)
printf("%2d,",a[k]);
return 0;
}
选项:
A:第7行: i<=5第8行: j<=5第10行: 2i+3j第14行: break第18行: a[k]=s
B:第7行: i<5第8行: j<5第10行: 2i+3j第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行: 2i+3j第14行: continue第18行: s=a[k]+1
答案: 【第7行: i<=5第8行: j<=5第10行: 2i+3j第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("");
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:%f",n,ave);
}
return 0;
}
选项:
A:sum=0.0;
B:sum+=score;
C:ave=sun/4.0;
D:printf("NO%d:%f",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("%d",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 %d",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("");
}
}
选项:
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:");
for (i=0; i<M; i++)
{
scanf("%d", &feedback[i]);
}
for (i=0; i<M; i++)
{
_______;
}
printf("Feedback\tCount\tHistogram");
for (___; grade<=N-1; grade++)
{
printf("%8d\t%5d\t", grade, count[grade]);
for (j=0; _____; j++)
{
printf("%c",’*’);
}
printf("");
}
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]】
【作业】第8周—— 一堆数据来了,你准备好了吗 练兵区——编程题——不计入总分
1、 问题:三天打渔两天晒网
建议:【本题是主观题,暂无解析】
2、 问题:统计用户输入
建议:【本题是主观题,暂无解析】
3、 问题:统计正整数中指定数字的个数
建议:【本题是主观题,暂无解析】
4、 问题:玫瑰花数
建议:【本题是主观题,暂无解析】
5、 问题:四位反序数
建议:【本题是主观题,暂无解析】
6、 问题:8除不尽的自然数
建议:【本题是主观题,暂无解析】
7、 问题:矩阵转置v1.0
建议:【本题是主观题,暂无解析】
8、 问题:兔子生崽问题
建议:【本题是主观题,暂无解析】
9、 问题:抓交通肇事犯
建议:【本题是主观题,暂无解析】
10、 问题:检验并打印幻方矩阵
建议:【本题是主观题,暂无解析】
【作业】第8周—— 一堆数据来了,你准备好了吗 第8周编程题在线测试
1、 问题:摘苹果
建议:【本题是主观题,暂无解析】
2、 问题:好数对
建议:【本题是主观题,暂无解析】
3、 问题:组合三位数
建议:【本题是主观题,暂无解析】
4、 问题:求100以内的最大素数
建议:【本题是主观题,暂无解析】
第9周——指针:C语言世界中所向披靡的“金箍棒” 练兵区——单选题——不计入总分
1、 问题:下面程序的功能是输入某年某月某日,计算并输出它是这一年的第几天。程序的运行结果如下:Please enter year, month, day:2014,12,29↙yearDay = 363按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int DayofYear(int year, int month, int day);
int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{
int year, month, day, yearDay;
printf("Please enter year, month, day:");
scanf("%d,%d,%d", &year, &month, &day);
yearDay = DayofYear(year, month, day);
printf("yearDay = %d", yearDay);
return 0;
}
/ 函数功能:对给定的某年某月某日,计算并返回它是这一年的第几天 /
int DayofYear(int year, int month, int day)
{
int i, leap;
leap = ___; / 若year为闰年,即leap值为1,则用第1行元素dayTab[1][i]计算;
否则leap值为0,用第0行dayTab[0][i]计算 /
for (i=1; _; i++)
{
day = _______;
}
return day; / 返回计算出的day的值 /
}
选项:
A:第18行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第20: i<month第22行: day + dayTab[leap][i]
B:第18行: ((year % 4 == 0) || (year % 100 != 0)) || (year % 400 == 0)第20: i<month第22行: day + dayTab[i][leap]
C:第18行: ((year % 4 == 0) && (year % 100 != 0)) && (year % 400 == 0)第20: i<12第22行: day + dayTab[leap][i]
D:第18行: ((year % 4 != 0) && (year % 100 != 0)) || (year % 400 != 0)第20: i<=month第22行: day + dayTab[i][leap]
答案: 【第18行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第20: i<month第22行: day + dayTab[leap][i]】
2、 问题:下面程序中子函数MonthDay()的功能是将某年的第几天转换为某月某日。程序的运行结果如下:Please enter year, yearDay:2014,100↙month = 4, day = 10按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void MonthDay(int year, int yearDay, int pMonth, int pDay);
int dayTab[2][13] = {{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int main()
{
int year, month, day, yearDay;
printf("Please enter year, yearDay:");
scanf("%d,%d", &year, &yearDay);
_____;
printf("month = %d, day = %d", month, day);
return 0;
}
/ 函数功能:对给定的某一年的第几天,计算它是这一年的第几月第几日 /
void MonthDay(int year, int yearDay, int pMonth, int pDay)
{
int i, leap;
leap = ____;
for (i=1; yearDay>dayTab[leap][i]; i++)
{
yearDay = ___;
}
______; / 将计算出的月份值赋值给pMonth所指向的变量 /
pDay = yearDay; / 将计算出的日号赋值给pDay所指向的变量 /
}
选项:
A:第10行: MonthDay(year, yearDay, &month, &day)第19行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第23行: yearDay – dayTab[leap][i]第25行: pMonth = i
B:第10行: MonthDay(year, yearDay, month, day)第19行: ((year % 4 == 0) || (year % 100 != 0)) || (year % 400 == 0)第23行: yearDay – dayTab[leap][i]第25行: pMonth = i
C:第10行: MonthDay(&year, &yearDay, &month, &day)第19行: ((year % 4 == 0) || (year % 100 != 0)) && (year % 400 != 0)第23行: yearDay + dayTab[i][leap]第25行: pMonth = i
D:第10行: MonthDay(&year, &yearDay, month, day)第19行: ((year % 4 == 0) && (year % 100 == 0)) || (year % 400 == 0)第23行: yearDay – dayTab[i][leap]第25行: pMonth = i
答案: 【第10行: MonthDay(year, yearDay, &month, &day)第19行: ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)第23行: yearDay – dayTab[leap][i]第25行: pMonth = i】
3、 问题:子函数Fun的功能是比较形参变量x和y所指的内存单元中的数据大小,将两者中的最小值返回。以下程序执行后输出结果是7,8,7。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求#include <stdio.h>
int Fun(int x,int y)
{
if(_____) /如果形参变量x所指的内存单元中的数据小于y所指的内存单元中的数据,则返回该最小值/
return x;
else
return y;
}
int main()
{
int a=7,b=8,_,r;
p=&a;
q=&b;
r=______; /调用子函数Fun,返回变量a和b中的最小值,将其存放到变量r中。/
printf("%d,%d,%d",p,q,r);
return 0;
}
选项:
A:第4行: x<y第12行: p,q第15行: Fun(p,q)
B:第4行: x<y第12行: p,q第15行: Fun(p,q)
C:第4行: x<y第12行: p,q第15行: Fun(&p,&q)
D:第4行: x<y第12行: p,q第15行: Fun(a,b)
答案: 【第4行: x<y第12行: p,q第15行: Fun(p,q)】
4、 问题:下面程序的功能是从键盘输入10个整数,用函数编程实现计算其最大值和最小值,并互换它们所在数组中的位置。程序运行结果如下:Input n(n<=10):10↙Input 10 Numbers:1 4 3 0 –2 6 7 2 9 -1 ↙Exchange results: 1 4 3 0 9 6 7 2 -2 -1按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
void ReadData(int a[], int n);
void PrintData(int a[], int n);
void MaxMinExchang(int a[], int n);
void Swap(int x, int y);
int main()
{
int a[10], n;
printf("Input n(n<=10):");
scanf("%d", &n);
printf("Input %d numbers:", n);
ReadData(a, n);
MaxMinExchang(a, n);
printf("Exchange results:");
PrintData(a, n);
return 0;
}
/ 函数功能:输入数组a的n个元素值 /
void ReadData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
}
/ 函数功能:输出数组a的n个元素值 /
void PrintData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
printf("%5d", a[i]);
}
printf("");
}
/ 函数功能:将数组a中的最大数与最小数位置互换 /
void MaxMinExchang(__, int n)
{
int maxValue = a[0], minValue = a[0], maxPos = 0, minPos = 0;
int i;
for (i=1; i<n; i++)
{
if (a[i] > maxValue)
{
maxValue = _;
maxPos = _;
}
if (a[i] < minValue)
{
minValue = a[i];
minPos = i;
}
}
Swap(_______);
}
/ 函数功能:两整数值互换 /
void Swap(int x, int y)
{
int __;
temp = x;
___;
y = temp;
}
选项:
A:第41行: int a[]第49行: a[i]第50行: i第58行: &a[maxPos], &a[minPos]第64行: temp第66行: x = y
B:第41行: int a第49行: a[i]第50行: i第58行: a[maxPos], a[minPos]第64行: temp第66行: x = y
C:第41行: int a[]第49行: a[0]第50行: 0第58行: &a[maxPos], &a[minPos]第64行: temp第66行: x = y
D:第41行: int a[]第49行: a[n-1]第50行: n-1第58行: a[maxPos], a[minPos]第64行: &temp第66行: x = y
答案: 【第41行: int a[]第49行: a[i]第50行: i第58行: &a[maxPos], &a[minPos]第64行: temp第66行: x = *y】
5、 问题:下列函数的功能为__。void Exchange(int p1, int p2){ int p; p = p1; p1 = p2; p2 = p;}
选项:
A:交换p1和p2的值
B:正确,但无法改变p1和p2的值
C:交换p1和p2的地址
D:可能造成系统故障
答案: 【交换p1和p2的值】
6、 问题:声明语句int (*p)();的含义是__。
选项:
A:p是一个指向函数的指针,该函数的返回值是一个整型
B:p是一个指向一维数组的指针变量
C:p是指针变量,指向一个整型数据
D:以上都不对
答案: 【p是一个指向函数的指针,该函数的返回值是一个整型】
7、 问题:声明语句int *f();中f的含义是__。
选项:
A:一个返回值为指针类型的函数名
B:一个用于指向函数的指针变量
C:一个用于指向一维数组的行指针
D:一个用于指向整型数据的指针变量
答案: 【一个返回值为指针类型的函数名】
8、 问题:下面程序的功能是用函数编程实现两个数组中对应元素值的交换。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。程序的运行结果示例:Input array size(n<=10):5↙Input array a:1 2 3 4 5↙Input array b:6 7 8 9 10↙Output array a: 6 7 8 9 10Output array b: 1 2 3 4 5#include <stdio.h>
define N 10
void ReadData(int a[], int n);
void PrintData(int a[], int n);
void Swap(int x, int y);
int main()
{
int a[N], b[N], i, n;
printf("Input array size(n<=10):");
scanf("%d", &n);
printf("Input array a:");
ReadData(a, n);
printf("Input array b:");
ReadData(b, n);
for (i=0; i<n; i++)
{
Swap(______);
}
printf("Output array a:");
PrintData(a, n);
printf("Output array b:");
PrintData(b, n);
return 0;
}
/ 函数功能:输入数组a的n个元素值 /
void ReadData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
}
/ 函数功能:输出数组a的n个元素值 /
void PrintData(int a[], int n)
{
int i;
for (i=0; i<n; i++)
{
printf("%5d", a[i]);
}
printf("");
}
/ 函数功能:两整数值互换 /
void Swap(int x, int y)
{
int temp;
__;
_;
___;
}
选项:
A:第17行:&a[i], &b[i]第52行:temp = x第53行:x = y第54行:y = temp
B:第17行:a[i], b[i]第52行:temp = x第53行:x = y第54行:y = temp
C:第17行:&a[i], &b[i]第52行:temp = x第53行:x = y第54行:y = temp
D:第17行:a[i], b[i]第52行:temp = x第53行:x = y第54行:y = temp
答案: 【第17行:&a[i], &b[i]第52行:temp = x第53行:x = y第54行:y = temp】
9、 问题:给出下面程序的运行结果。#include <stdio.h>
int main(void)
{
static int x[] = {1,2,3};
int s = 1, i, *p = x;
for (i=0; i<3; i++)
{
s= (p + i);
}
printf("%d", s);
return 0;
}
选项:
A:6
B:3
C:4
D:5
答案: 【6】
10、 问题:从键盘任意输入10个整数,计算并输出最大值和最小值及其它们在数组中的下标位置。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。程序运行结果示例1:Input 10 numbers:1 2 3 4 5 6 7 8 9 10↙max=10,pos=9min=1,pos=0程序运行结果示例2:Input 10 numbers:2 4 5 6 8 10 1 3 5 7 9↙max=10,pos=5min=1,pos=6#include <stdio.h>
int FindMax(int a[], int n, int pMaxPos);
int FindMin(int a[], int n, int pMinPos);
int main()
{
int a[10], maxValue, maxPos, minValue, minPos, i;
printf("Input 10 numbers:");
for (i=0; i<10; i++)
{
scanf("%d", &a[i]); // 输入10个数
}
maxValue = FindMax(a, 10, _); // 找最大值及其所在下标位置
minValue = FindMin(a, 10, _); // 找最小值及其所在下标位置
printf("max=%d,pos=%d", maxValue, maxPos);
printf("min=%d,pos=%d", minValue, minPos);
return 0;
}
//函数功能:求有n个元素的整型数组a中的最大值及其所在下标位置,函数返回最大值
int FindMax(int a[], int n, int *pMaxPos)
{
int i, max;
max = a[0]; //假设a[0]为最大值
_; //假设最大值在数组中的下标位置为0
for (i=1; i<n; i++)
{
if (a[i] > max)
{
max = a[i];
_; //pMaxPos指向最大值数组元素的下标位置
}
}
return max ;
}
//函数功能:求有n个元素的整型数组a中的最小值及其所在下标位置,函数返回最小值
int FindMin(int a[], int n, int pMinPos)
{
int i, min;
min = a[0]; //假设a[0]为最小
_; //假设最小值在数组中的下标位置为0
for (i=1; i<10; i++)
{
if (a[i] < min)
{
min = a[i];
_; //pMinPos指向最小值数组元素的下标位置
}
}
return min ;
}
选项:
A:第13行:&maxPos第14行:&minPos第25行:pMaxPos = 0第32行:pMaxPos = i第43行:pMinPos = 0第50行:pMinPos = i
B:第13行:maxPos第14行:minPos第25行:pMaxPos = 0第32行:pMaxPos = i第43行:pMinPos = 0第50行:pMinPos = i
C:第13行:maxPos第14行:minPos第25行:pMaxPos = 0第32行:pMaxPos = i第43行:pMinPos = 0第50行:pMinPos = i
D:第13行:&maxPos第14行:&minPos第25行:pMaxPos = 0第32行:pMaxPos = i第43行:pMinPos = 0第50行:pMinPos = i
答案: 【第13行:&maxPos第14行:&minPos第25行:pMaxPos = 0第32行:pMaxPos = i第43行:pMinPos = 0第50行:*pMinPos = i】
11、 问题:采用梯形法编程实现在积分区间[a,b]内计算下面两个函数的定积分。按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。程序运行结果示例:y1=1.333350y2=1.151212#include <stdio.h>
float Fun1(float x);
float Fun2(float x);
float Integral(float (*f)(float), float a, float b);
int main()
{
float y1, y2;
y1 = Integral(Fun1, 0.0, 1.0);
y2 = Integral(Fun2, 0.0, 3.0);
printf("y1=%fy2=%f", y1, y2);
return 0;
}
/ 函数功能:计算函数1+xx的函数值 /
float Fun1(float x)
{
return 1 + x x;
}
/ 函数功能:计算函数x/(1+xx)的函数值 /
float Fun2(float x)
{
return x / (1 + x x);
}
/ 函数功能:用梯形法计算函数的定积分 /
float Integral(float (f)(float), float a, float b)
{
float s, h;
int n = 100, i;
s = _;
h = _;
for (i=1; i<n; i++)
{
s += _;
}
return _;
}
选项:
A:第31行:((f)(a) + (f)(b)) / 2第32行:(b – a) / n第36行:(f)(a + i * h)第38行:s * h
B:第31行:(f)(a+b) / 2第32行:(b – a) / n第36行:(f)(a + i * h)第38行:s
C:第31行:((f)(a) + (f)(b)) / 2第32行:(a – b) / n第36行:f(a + i * h)第38行:s * h
D:第31行:(f)(a+b) / 2第32行:(a – b) / n第36行:f(a + i * h)第38行:s
答案: 【第31行:((f)(a) + (f)(b)) / 2第32行:(b – a) / n第36行:(f)(a + i * h)第38行:s * h】
第11周——指针的孪生兄弟 第11周测验
1、 问题:下面程序的功能是用指针变量作函数参数编程计算任意m×n阶矩阵的转置矩阵。要求用指向一维数组的指针变量即二维数组的行指针作函数参数。程序的运行结果如下:Please enter matrix:1 2 3 4↙1 2 3 4↙1 2 3 4↙The transposed matrix is:1 1 12 2 23 3 34 4 4按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
define ROW 3
define COL 4
void Transpose(int (a)[COL], int (at)[ROW], int row, int col);
void InputMatrix(int (s)[COL], int row, int col);
void PrintMatrix(int (s)[ROW], int row, int col);
int main(void)
{
int s[ROW][COL];//s代表原矩阵
int st[COL][ROW];//st代表转置后的矩阵
printf("Please enter matrix:");
InputMatrix(s, ROW, COL);//输入原矩阵,s指向矩阵s的第0行,是行指针
Transpose(s, st, ROW, COL);//对矩阵s进行转置,结果存放于st中
printf("The transposed matrix is:");
PrintMatrix(st, COL, ROW); //输出转置矩阵,*st指向st的第0行,是行指针
return 0;
}
//函数功能: 对任意row行col列的矩阵a转置,转置后的矩阵为at
void Transpose(__,int (*at)[ROW], int row, int col)
{
int i, j;
for (i=0; i<row; i++)
{
for (j=0; j<col; j++)
{
_______;
}
}
}
void InputMatrix(__, int row, int col) //输入矩阵元素
{
int i, j;
for (i=0; i<row; i++)
{
for (j=0; j<col; j++)
{
scanf("%d", __);// 元素s[i][j]
}
}
}
void PrintMatrix(int _____, int row, int col) //输出矩阵元素
{
int i, j;
for (i=0; i<row; i++)
{
for (j=0; j<col; j++)
{
printf("%d\t", ((s+i)+j)); // 元素s[i][j]
}
printf(" ");
}
}
选项:
A:第20行: int (a)[COL]第27行: ((at+j)+i) = ((a+i)+j)第32行: int(s)[COL]第39行: (s+i)+j第44行: (s)[ROW]
B:第20行: int a[COL]第27行: ((at+j)+i) = ((a+i)+j)第32行: int(s)[ROW]第39行: (s+i)+j第44行: s[COL]
C:第20行: int (a)[ROW]第27行: (at+j+i) = ((a+i)+j)第32行: int(s)[COL]第39行: (s+i+j)第44行: (s)[ROW]
D:第20行: int (a)[COL]第27行: ((at+j)+i) = ((a+i+j))第32行: int(s)[ROW]第39行: (s)+i+j第44行: (s)[COL]
答案: 【第20行: int (a)[COL]第27行: ((at+j)+i) = ((a+i)+j)第32行: int(s)[COL]第39行: (s+i)+j第44行: (s)[ROW]】
2、 问题:口袋中有若干红、黄、蓝、白、黑5种颜色的球,每次从口袋中取出3个球,编程输出得到3种不同颜色的球的所有可能取法。下面程序用三重循环模拟取球过程,但每次取出的球如果与前面的球颜色相同就抛弃。程序的运行结果如下:1:RED,YELLOW,BLUE2:RED,YELLOW,WHITE3:RED,YELLOW,BLACK4:RED,BLUE,WHITE5:RED,BLUE,BLACK6:RED,WHITE,BLACK7:YELLOW,BLUE,WHITE8:YELLOW,BLUE,BLACK9:YELLOW,WHITE,BLACK10:BLUE,WHITE,BLACK按要求在空白处填写适当的表达式或语句,使程序完整并符合题目要求。#include <stdio.h>
int main()
{
char bColor[] = {"RED","YELLOW","BLUE","WHITE","BLACK"};
int i, j, k, m = 0;
for (i=0; i<5; i++)
{
for (_; j<5; j++)
{
for (_; k<5; k++)
{
m++;
printf("%d:%s,%s,%s", _______);
}
}
}
return 0;
}
选项:
A:第8行: j=i+1第10行: k=j+1第13行: m, bColor[i], bColor[j], bColor[k]
B:第8行: j=1第10行: k=1第13行: m, bColor+i, bColor+j, bColor+k
C:第8行: j=i第10行: k=j第13行: m,(bColor+i), (bColor+j), (bColor+k)
D:第8行: j=0第10行: k=0第13行: m, bColor[i], bColor[j], bColor[k]
答案: 【第8行: j=i+1第10行: k=j+1第13行: m, bColor[i], bColor[j], bColor[k]】
3、 问题:char (*p)[10];该语句定义了一个
选项:
A:指向含有10个元素的一维字符型数组的指针变量p
B:指向长度为10的字符串的指针变量p
C:有10个元素的指针数组p,每个元素可以指向一个字符串
D:有10个元素的指针数组p,每个元素存放一个字符串
答案: 【指向含有10个元素的一维字符型数组的指针变量p】
4、 问题:设有以下定义: int a[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; int (ptr)[3] = a; int p = a[0];则以下能够正确表示数组元素a[1][2]的表达式是
选项:
A:((ptr + 1) + 2)
B:((ptr + 1) + 2)
C:((p + 5))
D:(ptr + 1) + 2
答案: 【(*(ptr + 1) + 2)】
5、 问题:二维数组a有m行n列,则在a[i][j]之前的元素个数为
选项:
A:in+j
B:jn+i
C:in+j-1
D:in+j+1
答案: 【i*n+j】
6、 问题:下面关于表达式(p)++和p++的含义分析说明中,错误的是
选项:
A:(p)++指的是先取出p指向的存储单元中的内容,然后将取出的数值加1,此时p不再指向原来的存储单元。
B:(p)++指的是先取出p指向的存储单元中的内容,然后将取出的数值加1,而p仍然指向原来的存储单元。
C:p++则指的是先取出p指向的存储单元中的内容,然后将p值加1,此时p不再指向原来的存储单元。
D:表达式(p)++和p++具有不同的含义,(p)++并没有修改指针p的指向,而p++则修改了指针p的指向。
答案: 【(p)++指的是先取出p指向的存储单元中的内容,然后将取出的数值加1,此时p不再指向原来的存储单元。】
7、 问题:假设有下面定义语句:float a[10];float p=a;则p++相当于是加上()个字节
选项:
A:sizeof(float)
B:1个字节
C:sizeof(p)
D:sizeof(a)
E:sizeof(float)
答案: 【sizeof(float)】
8、 问题:下列说法中错误的是
选项:
A:char country[] = {"French", "England", "Japan", "China", "Finland"};这条语句定义了一个字符指针数组country,并将初始化列表中的字符串保存到字符指针数组中。
B:当指针变量指向一维数组的时候,sizeof(数组名)和sizeof(指针变量名)的计算结果是不相同的。
C:指针的算术运算允许通过对指针变量重复自增来访问数组的元素。
D:指针指向数组元素时,指针算术运算才是有意义的。
答案: 【char country[] = {"French", "England", "Japan", "China", "Finland"};这条语句定义了一个字符指针数组country,并将初始化列表中的字符串保存到字符指针数组中。】
9、 问题:下面程序希望得到的运行结果如下:Total string numbers = 3How are you但是现在代码存在错误,找出下面选项中修改正确的语句#include <stdio.h>
void Print(char arr[], int len);
int main()
{
char pArray[] = {"How","are","you"};
int num = sizeof(pArray) / sizeof(char);
printf("Total string numbers = %d", num);
Print(pArray, num);
return 0;
}
void Print(char arr[], int len)
{
int i;
for (i=0; i<len; i++)
{
printf("%s ", arr[i]);
}
printf("");
}
选项:
A:第6行应该是: int num = sizeof(pArray) / sizeof(char);
B:第12行应该是: void Print(char arr[], int len)
C:第5行应该是: char pArray[] = {"How","are","you"};
D:第6行应该是: int num = sizeof(pArray/char );
答案: 【第6行应该是: int num = sizeof(pArray) / sizeof(char);】
10、 问题:以下程序运行后的输出结果是#include <stdio.h>
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b;
b=p[5];
printf("%d",b);
return 0;
}
选项:
A:9
B:5
C:6
D:8
答案: 【9】
本文章不含期末不含主观题!!
本文章不含期末不含主观题!!
支付后可长期查看
有疑问请添加客服QQ 2356025045反馈
如遇卡顿看不了请换个浏览器即可打开
请看清楚了再购买哦,电子资源购买后不支持退款哦