电大《C语言知识学习程序设计》第1,2,3,4次作业任务及答案解析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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次循环
x = a[i];
for(j = i - 1; j >= 0; j --) // 为x顺序向前寻找合适的插入位置
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 ++)
s += a[i];
return s;
}
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;
}
2.程序代码:
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.* 程序代码:
int fun6(int m, int n, int b)
{
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, 2)求m和n的最小公倍数
5、答案:读入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;
char * t = "liouting";
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.age, x.pay);
}
二、写出下列每个函数的功能
1.程序代码:
struct Worker {
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;
}
3.程序代码:
struct IntNode {
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结束
_。

相关文档
最新文档