电大《C++语言程序设计》第1、2、3、4次作业及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一次作业一、写出下列每个程序运行后的输出结果
1。
#include〈stdio.h>
void main()
{
int x=5;
switch(2*x—3)
{
case 4:printf(”%d ",x);
case 7:printf(”%d ",2*x+1);
case 10:printf(”%d ”,3*x-1);break;
default:printf(”%s ”,”default\n");
}
printf(”%s\n","switch end。
");
}
2。
#include〈stdio.h>
void main()
{
int i,s=0;
for(i=1;i〈=6;i++)
s+=i*i;
printf(”s=%d\n”,s);
}
3。
#include〈stdio。
h〉
void main()
{
int i,s1=0,s2=0;
for(i=0;i〈10;i++)
if(i%2)s1+=i;
else s2+=i;
printf(”%d %d\n”,s1,s2);
}
4. #include<stdio。
h〉
void main()
{
int n=10,y=1;
while(n——){y++;y++;}
printf(”y=%d\n",y);
}
5。
#include〈stdio.h〉
void main()
{
int f,f1,f2,i;
f1=f2=1;
printf(”%d %d ",f1,f2);
for(i=3;i〈=10;i++){
f=f1+f2;
printf("%d ",f);
if(i%5==0)printf("\n”);
f1=f2;
f2=f;
}
printf(”\n");
}
6。
#include<stdio。
h>
#include〈math.h>
void main()
{
int i,n;
for(n=2;n〈=20;n++){
int temp=(int)sqrt(n);//sqrt(n)求出n的平方根并取整
for(i=2;i〈=temp;i++)
if(n%i==0)break;
if(i〉temp)printf(”%d ”,n);
}
printf(”\n”);
}
7。
#include〈stdio.h〉
#include〈math。
h〉
const int M=20;
void main()
{
int i,c2,c3,c5;
c2=c3=c5=0;
for(i=1;i〈=M;i++){
if(i%2==0)c2++;
if(i%3==0)c3++;
if(i%5==0)c5++;
}
printf("%d %d %d\n”,c2,c3,c5);
}
8。
#include<stdio.h>
#include〈math。
h>
const int M=20;
void main()
{
int i,s;
for(i=1,s=0;i<15;i++){
if(i%2==0 ||i%3==0)continue;
printf(”%d ”,i);
s+=i;
}
printf(”%d\n”,s);
}
参考答案:
1、答案:11 14 switch end。
2、答案:s=91.
3、答案:25 20。
4、答案:y=21.
5、答案:1 1 2 3 5
8 13 21 34 55
6、答案:2 3 5 7 11 13 17 19
7、答案:10 6 4
8、答案:1 5 7 11 13 37
第二次作业
一、根据下列每个题目要求编写程序
1.编写一个函数,函数头格式为“void fun4(char *a , int b[])",分别求出由字符指针a所指向的字符串中包含的每种十进制数字出现的次数,把统计结果保存在数组b的相应元素。
2.编写一个函数,函数头格式为“double Mean(double a[M][N],int m ,int n)”,要求返回二维数组a[m][n]中所有元素的平均值,假定在计算过程是采用变量v存放平均值。
3.编写一个递归函数“int FF(int a[], int n)”,求出数组a中所有元素n个元素之积并返回。
4.编写一个主函数,利用while循环,求出并显示满足不等式1+1/2+1/3+……+1/n>5的最小n值。
5.编写一个主函数,求满足不等式22+42+……+n2〈1000的最大n值,假定分别用i和s为取偶数值和累加值的变量,并限定使用do循环编程.
6.编写一个主函数,计算并输出n!的值,其中n值由键盘输入.
参考答案:
1、答案:
#include<stdio.h>
void fun4(char* a,int b[]){
do{
if(*a〉=’0’ &&*a〈=’9')b[*a-48]++;
}while(*a++);
}
/*void main()
{
char *a="122333444499888";
int b[10]={0};
fun4(a,b);
for(int i=0;i<10;i++)
printf("%d ”,b[i]);
}*/
2、答案:
#include〈stdio.h>
const int M=2,N=3;
double Mean(double a[M][N],int m,int n ){double v=0;
for(int i=0;i〈m;i++)
for(int j=0;j〈n;j++)
v+=a[i][j];
return v/(m*n);
}
/*void main()
{
double a[2][3]={1,2,3,4,5,6};
printf("%lf\n",Mean(a,2,3));
}*/
3、答案:
#include〈stdio。
h>
int FF(int a[],int n){
int mul=1;
if(n==1)mul*=a[0];
else mul=a[n—1]*FF(a,n-1);
return mul;
}
/*void main()
{
int a[6]={1,2,3,4,5,6};
printf("%d\n”,FF(a,6));
}*/
4、答案:
#include<stdio.h〉
void main()
{
double sum=0;
int n=1;
while(true)
{
if(sum + 1/(double)n 〉5)break;
else
sum += 1/(double)n;
n++;
}
printf("%d,%lf\n”,n,sum);
}
5、答案:
#include<stdio。
h>
void main()
{
int s=0,i=2;
do
{
s+=i*i;
if(s+(i+2)*(i+2)>=1000)break;
else i+=2;
}while(true);
printf("i=%d,s=%d”,i,s);
}
6、答案:
#include<stdio。
h>
void main()
{
int s=0,n;
printf("请输入n的值:”);
scanf(”%d",&n);
for(int i=1;i<=n;i++)
s=s*i;
printf("n=%d,s=%d",n,s);
}
第三次作业一、写出下列每个程序运行后的输出结果
1.程序代码:
#include 〈stdio.h>
void SB(char ch){
switch(ch) {
case 'A':case 'a’:
printf("WW ”);break;
case 'B’:case 'b’:
printf(”GG ”); break;
case 'C’:case ’c':
printf("PP ");break;
default:
printf(”BB ");break;
}
}
void main(){
char a1 = 'b', a2 = 'C’, a3 = ’f’;
SB(a1); SB(a2); SB(a3); SB(’A’);
printf("\n");
}
2.程序代码:
#include 〈stdio。
h〉
#include 〈stdlib.h>
double SD(int a,int b,char op){
double x;
switch(op) {
case '+': x = a + b;break;
case ’—':x = a — b;break;
case ’*’:x = a * b;break;
case '/’: if(b) x = (double)a/b; else exit(1); break;
default:{ printf("运算符错!\n"); exit(1);}
}
return x;
}
void main(){
int x = 20,y = 8;
printf("%3。
2lf ", SD(x,y,’—’));
printf("%3.2lf ", SD(x, y,’*’));
printf(”%3.2lf\n", SD(x + y, y,’/’));
}
3.程序代码:
#include <stdio。
h〉
void WF(int x,int y){
x = x + y;
y = x + y;
printf("subs:x,y = %d, %d\n”, x,y);
}
void main() {
int x = 18,y = 23;
printf(”main: x,y = %d, %d\n”,x,y);
WF(x, y);
x = 2 * x;
printf("main:x,y = %d, %d\n",x,y); }
4.程序代码:
#include 〈stdio.h>
#include <string.h>
void fun(char ss[]);
void main(){
char s[15]= ”567891234”;
fun(s);
printf("%s\n”,s);
}
void fun(char ss[]){
int i, n = strlen(ss);
for(i = 0; i < n / 2; i ++){
char c = ss[i];
ss[i] = ss[n - 1 - i];
ss[n - 1 - i] = c;
}
}
5.程序代码:
#include 〈stdio.h>
void InsertSort(int a[], int n)
{
int i,j,x;
for(i = 1;i 〈n;i ++) {// 进行n—1次循环
if(x > a[j])a[j + 1]= a[j];
else break;
a[j + 1] = x;
}
}
void main() {
int i;
int a[6] = { 20, 15,32,47, 36,28 };
InsertSort(a, 6);
for(i = 0; i < 6;i ++) printf("%d ”, a[i]);
printf(”\n");
}
6.程序代码:
#include 〈stdio.h〉
void main() {
int a[8]= { 3, 5, 7, 9, 11,13,15,17 };
int i,* p = a;
for(i = 0;i < 8; i ++){
printf("%5d", * p ++);
if((i + 1) % 4 == 0) printf("\n”);
}
}
7.程序代码:
#include 〈stdio。
h〉
int LA(int *a, int n){
int i, s = 0;
for(i = 0;i < n; i ++)
}
void main() {
int a[]= { 5,10, 15, 20, 25,30 };
int b = LA(a, 4);
int c = LA(a + 2, 3);
printf("%d %d\n”, b,c);
}
8.程序代码:
#include <stdio。
h〉
int LB(int *a,int n){
int i,s = 1;
for(i = 0;i < n;i ++)s *= * a ++;
return s;
}
void main() {
int a[]= {1,2, 3,4,2, 4,5,2 };
int b = LB(a, 4)+ LB(&a[3],4);
printf("b=%d\n”, b);
}
二、写出下列每个函数的功能
1.程序代码:
int WB(int a[], int n, int x){
int i;
for(i = 0; i < n;i ++)
if(a[i] == x) return 1;
return 0;
}
int WC(int a[], int n,int k){
int c = 0, i;
for(i = 0;i 〈n; i ++)
if(a[i] 〉= k) c ++;
return c;
}
3.程序代码:
#include 〈stdio.h〉
#include <stdlib。
h〉
#include <time.h〉
const int N = 10;
int ff(int x,int y) {
int z;
printf("%d + %d = ",x,y);
scanf("%d”, &z);
if(x + y == z)return 1;else return 0;
}
void main() {
int i, a, b, c = 0;
srand(time(0));// 初始化随机数序列
for(i = 0; i 〈N;i ++){
a = rand() %20 + 1;// rand()函数产生0~32767之间的一个随机数
b = rand() % 20 + 1;
c += ff(a, b);
}
printf(”得分:%d\n",c * 10);
}
4.*程序代码:
if(m 〈b && n 〈b) return m * n;
else if(m %b == 0 && n %b == 0) return b *fun6(m / b,n / b,b);
else return fun6(m, n, ++ b);
}
5.程序代码:
#include 〈stdio.h〉
#include 〈stdlib.h〉
void LI(int n){
int * a = malloc(n *sizeof(int));
int i;
for(i = 0; i 〈n;i ++)scanf("%d”,a + i);
for(i = n - 1;i 〉= 0; i -—) printf("%d ", *(a + i));
printf("\n");
free(a);
}
6.程序代码:
int LK(double a[], int n) {
double s = 0;
int i,m = 0;
for(i = 0;i 〈n; i ++) s += a[i];
s /= n;
for(i = 0;i < n; i ++)
if(a[i]〉= s) m ++;
return m;
}
参考答案:
一、1、答案:运行结果:
GG PP BB WW
2、答案:运行结果:
12.00 160.00 3。
50
3、答案:运行结果:
main:x, y = 18,23
subs:x,y = 41,64
main:x, y = 36,23
4、答案:运行结果:
432198765
5、运行结果:
47 36 32 28 20 15
6、答案:运行结果:
3 5 7 9
11 13 15 17
7、答案:运行结果:
50 60
8、答案:运行结果:
b=184
二、1、答案:在整型数组a的前n个元素中查找值为x的元素,找到返回1,找不到返回0。
2、答案:统计整型数组a的前n个元素中不小于k的元素个数并返回
3、答案:程序随机产生10道20以内整数加法题,请用户回答。
并统计得分,
4、答案:调用fun6(m,n,
6、答案:返回双精度数数组a的前n个元素中不小于平均值的元素个数。
第四次作业
一、写出下列每个程序运行后的输出结果
1.程序代码:
#include 〈stdio.h>
struct Worker {
char name[15]; // 姓名
int age;// 年龄
float pay; // 工资
};
void main() {
struct Worker x = { "wanghua”,52, 2350 };
struct Worker y, * p;
y = x; p = &x;
printf(”%s %d %6.2f\n”,,y。
age,y.pay);
printf("%s %d %6。
2f\n", p->name, p—〉age + 1, p—〉pay + 20);}
2.程序代码:
#include <stdio。
h>
#include 〈string.h>
struct Worker {
char name[15];// 姓名
int age;// 年龄
float pay;// 工资
};
void main(){
struct Worker x;
int d = 38; float f = 493;
strcpy(, t);
x.age = d;x.pay = f;
x。
age ++; x.pay *= 2;
printf("%s %d %6.2f\n”, ,x。
age, x。
pay);
}
3.程序代码:
#include 〈stdio.h>
struct Worker {
char name[15]; // 姓名
int age;// 年龄
float pay;// 工资
};
int Less(struct Worker r1, struct Worker r2) {
if(r1。
age < r2.age) return 1;
else return 0;
}
void main() {
struct Worker a[4] = {{ ”abc",25,420 }, { "def”, 58,638 },
{ "ghi”,49,560 },{ ”jkl",36,375 }};
struct Worker x = a[0];
int i;
for(i = 1;i 〈4;i ++)
if(Less(x, a[i]))x = a[i];
printf("%s %d %6。
2f\n", x。
name,x.age,x.pay);
}
二、写出下列每个函数的功能
char name[15];// 姓名
int age;// 年龄
float pay; // 工资
};
void QA(struct Worker a[], int n){
int i;
for(i = 1;i < n; i ++)
scanf("%s %d %f”, &a[i].name, &a[i]。
age,&a[i]。
pay); }
2.程序代码:
struct StrNode {
char name[15];// 字符串域
struct StrNode * next;// 指针域
};
struct StrNode * QB(int n) {
struct StrNode * f,* p;
if(n == 0) return NULL;
f = malloc(sizeof(struct StrNode));
scanf(”%s”, f—〉name);
p = f;
while(—— n) {
p = p—〉next = malloc(sizeof(struct StrNode));
scanf("%s”, p-〉name);
}
p-〉next = NULL;
return f;
}
int data; // 结点值域
struct IntNode *next; // 结点指针域};
struct IntNode * FindMax(struct IntNode *f) {
struct IntNode *p = f;
if(!f)return NULL;
f = f—>next;
while(f) {
if(f->data 〈p—>data) p = f;
f = f—〉next;
}
return p;
}
4.*程序代码:
struct IntNode {
int data;// 结点值域
struct IntNode *next; // 结点指针域};
int Count(struct IntNode * f)
{
int c = 0;
while(f) {
c ++;
f = f-〉next;
}
return c;
}
5.程序代码:
struct IntNode {
int data; // 结点值域
struct IntNode *next;// 结点指针域
};
struct IntNode *Input(int n)
{
struct IntNode * f,* p;
f = malloc(sizeof(struct IntNode));
if(n == 0)return NULL;
f—〉next = NULL;
printf(”从键盘输入%d个整数:",n);
while(n —-) {
scanf(”%d", &(f-〉data));
p = f;
f = malloc(sizeof(struct IntNode));
f—>next = p;
}
return f—>next;
}
6.程序代码:
#include <stdio。
h〉
#include 〈stdlib。
h〉
#include <string。
h>
void JA(char * fname)
{
FILE *fout = fopen(fname,"w");
char a[20];
printf(”输入若干个字符串,每个字符串长度小于20,字符串end作为结束标志\n”);
while(1) {
scanf("%s",a);
if(strcmp(a, "end”) == 0) break;
fputs(a, fout);
fputc(’\n',fout);
}
fclose(fout);
}
void main()
{
char * p = "d:\\xxk\\xuxk1。
txt";
JA(p);
}
参考答案:
一、1、答案:运行结果:
wanghua 52 2350。
00
wanghua 53 2370.00
2、答案:运行结果:
liouting 39 986。
00
3、答案:运行结果:
def 58 638.00
二、1、答案:从标准输入设备读入n-1个人员的信息,依次存到结构数组的a[1]到a[n-1]元素中
2、答案:创建具有n个struct StrNode结点的单向链表并返回其表头结点地址,n为0时返回NULL。
3、答案:函数功能:
查找单向链表中结点值域最大的结点,并返回其地址。
如链表为空则返回NULL
4、答案:函数功能:
统计并返回单向链表结点个数
5、答案:函数功能:
从表尾结点开始,逆序创建具有n个struct IntNode结点的单向链表并返回其表头结点地址,n为0时返回NULL
6、答案:函数功能:
将输入的若干个字符串保存到文本文件d:\xxk\xuxk1.txt中,每个字符串一行。
输入的单个字符串长度必须小于20,输入字符串end结束。