20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises29

20201022-成信大-C语言程序设计-20201学期《C语言程序设计B》C-trainingExercises29

程序改错与填空要求

    给出的程序可能存在语法或算法上的问题或需要补充完整,但需要修改的地方肯定在/*******Found*******/下的第一行上,不能修改其它地方,不能修改或删除/*******Found*******/本身,遵循最少修改、符合编程规范、较通用(非别出心裁)、保持一行一条语句及{与}单独一行的原则。由于是计算机自动阅卷,修改时不能增加行或删除行,哪怕是一个空行都不行,否则可能得0分。
  注意:(1)若/*******Found*******/下有___________,则应当将___________去掉并填上相应的程序代码。
      (2)程序应当在Turbo C V2/V3、MS VC V6或GCC V3中完成编译链接并能正常运行。

具体要求

程序改错与填空:给出的程序可能存在语法或算法上的问题或需要补充完整,答题时请务必遵循以下原则:
 (1)需要修改的地方肯定在/*******Found*******/下的第一行上,不能修改其它地方,不能修改或删除/*******Found*******/本身;
 (2)若/*******Found*******/下有___________,则应当将___________去掉并填上相应的程序代码;
 (3)修改时不能增加行或删除行,哪怕是一个空行都不行,否则可能得0分;
 (4)遵循算法处理较通用(不能别出心裁)、最少修改的原则,例如对程序正确性无影响的修改就不能实施,明显不该加的括号就不能加,尽可能去掉不必要的括号;
 (5)修改要符合编程规范、保持一行一条语句及{与}单独一行的原则;
 (6)程序应当在Turbo C V2/V3、MS VC V6或GCC V3中完成编译链接并能正常运行。
本题共有 25 个小题,每小题 4 分。

具体题面

程序D1.c的功能是从键盘读入一个数并在屏幕上显示。

D1

原题

#include<stdio.h>

int main(void)
{
        int xy2;

        /*********Found************/
        scanf("%s", &xy2);
        /*********Found************/
        printf("xy2=%5d\n", &xy2);

	return 0;
}

改后:

#include<stdio.h>

int main(void)
{
        int xy2;

        /*********Found************/
        scanf("%d", &xy2);		// 知识点:整数格式化输出
        /*********Found************/
        printf("xy2=%5d\n", xy2);	//知识点:地址输出与地址里的值输出是不一样的

	return 0;
}

程序D2.c的功能是调用函数,显示两个实数间最大的一个。

D2

原题

#include<stdio.h>

float fmax(float x, float y);

int main(void)
{
        /*********Found************/
        float l, 1;

        l = 3.0;
        i = 5.6f;
        /*********Found************/
        printf("fmax(%5.2f, %5.2f)=%5.2f\n", i, l, fMax(i, l));

	return 0;
}

/*********Found************/
int fmax(float x, float y)
{
        if (x < y) return y;
        else return x;
}

改后

#include<stdio.h>

float fmax(float x, float y);

int main(void)
{
        /*********Found************/
        float l, i;			// 知识点:变量要先定义,再使用,常量不需要定义,直接使用

        l = 3.0f;
        i = 5.6f;
        /*********Found************/
        printf("fmax(%5.2f, %5.2f)=%5.2f\n", i, l, fmax(i, l));	// C语言对大小写敏感

	return 0;
}

/*********Found************/
float fmax(float x, float y)		// 函数头,返回值要与需求一致
{
        if (x < y) return y;
        else return x;
}
程序D3.c的功能是将字符串yy在屏幕上输出。

D3

原题

#include<stdio.h>

int main(void)
{
        /*********Found************/
        char yy[200] = "ok??\n";

        /*********Found************/
        fol (; *yy; yy++)
        {
                putchar(*yy);
        }

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
        /*********Found************/
        char *yy = "ok??\n";		// 后面的使用,是可以移动的指针,这里使用指针,不用数组名

        /*********Found************/
        for (; *yy; yy++)		// 关键字不能写错,for
        {
                putchar(*yy);
        }

	return 0;
}
程序D4.c的功能是计算半径为2+3的圆的面积。

D4

原题

#include<stdio.h>

#define PI 3.14
/*********Found************/
#define S(bj) PI*bj*bj

int main(void)
{
        /*********Found************/
        int mianJi;

        mianJi = S(2+3);
        printf("mian ji=%5.2f\n", mianJi);

	return 0;
}

改后

#include<stdio.h>

#define PI 3.14
/*********Found************/
#define S(bj) PI*(bj)*(bj)		// 宏定义要给参数加上括号

int main(void)
{
        /*********Found************/
        float mianJi;			// 业务要求使用浮点型数据

        mianJi = S(2+3);
        printf("mian ji=%5.2f\n", mianJi);

	return 0;
}
程序D5.c的功能是将字符串yy显示在屏幕上。

D5

原题

#include<stdio.h>

int main(void)
{
        /*********Found************/
        char yy[100] = "ok??\n",

        /*********Found************/
        prntf("%s", yy);

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
        /*********Found************/
        char yy[100] = "ok??\n";		// 语句的标志是分号

        /*********Found************/
        printf("%s", yy);				// 基本的函数名不能搞错

	return 0;
}
程序D6.c的功能是从键盘读入一行字符(包括空格、TAB等字符)并在屏幕上显示。

D6

原题

#include<stdio.h>

int main(void)
{
        /*********Found************/
        char yy<128>;

        /*********Found************/
        getchar(yy);

        /*********Found************/
        printf("%y", yy);

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
        /*********Found************/
        char yy[128];			// 数组的标志是方括号

        /*********Found************/
        gets(yy);				// 输入一个字符串,不是一个字符

        /*********Found************/
        printf("%s", yy);		// 输出字符串的格式是%s

	return 0;
}
程序D7.c的功能是判断x和y是否相等,相等则显示x=y,不等则显示x<>y。

D7

原题

#include<stdio.h>

int main(void)
{
        /*********Found************/
        char x, y;

        x = 39270;
        y = 41001;
        /*********Found************/
        if (x != y)
        {
                printf("x=y");
        }
        /*********Found************/
        else;;
        {
                printf("x<>y\n");
        }

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
        /*********Found************/
        int x, y;			// 业务要求使用整数

        x = 39270;
        y = 41001;
        /*********Found************/
        if (x == y)			// 业务逻辑判断不能搞反了
        {
                printf("x=y");
        }
        /*********Found************/
        else				// 分支后直接跟分号,就成了什么也不做的空语句了
        {
                printf("x<>y\n");
        }

	return 0;
}
程序D8.c的功能是打开文件d:\te.c用于读并判断打开是否成功。

D8

原题

#include<stdio.h>

int main(void)
{
        FILE *fp;
        /*********Found************/
        char fileName[] = "d:\te.c";

        /*********Found************/
        fp = fopen(fileName, "w");

        /*********Found************/
        if (fp is NULL)
        {
                puts("File Open Error!");
                return 1;
        }
        putchar(fgetc(fp));
        fclose(fp);

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
        FILE *fp;
        /*********Found************/
        char fileName[] = "d:\\te.c";	// 这里的反斜杠,在字符串也就是双引号里,被解释为转义的开头,所以要用“双反斜杠”来表示“反斜杠”

        /*********Found************/
        fp = fopen(fileName, "r");		// 业务是读文件,不是写文件,使用“r”模式即可

        /*********Found************/
        if (fp == NULL)			// 判断为NULL使用等号,C语言没有is谓词
        {
                puts("File Open Error!");
                return 1;
        }
        putchar(fgetc(fp));
        fclose(fp);

	return 0;
}
程序D10.c的功能是将字符串str2显示在屏幕上。

D10

原题

#include<stdio.h>

/*********Found************/
#define START
/*********Found************/
#define NEXT

int main(void)
{
        char *str2 = "13125176247";
        const int i = 0;

        for (printf("\n"); str2[i]; )
        START
                putchar(str2[i]);
                /*********Found************/
                i++;
        NEXT

	return 0;
}

改后

#include<stdio.h>

/*********Found************/
#define START {				// 使用宏定义实现替换
/*********Found************/
#define NEXT }				// 使用宏定义实现替换

int main(void)
{
        char *str2 = "13125176247";
        const int i = 0;

        for (printf("\n"); str2[i]; )
        START
                putchar(str2[i]);
                /*********Found************/
                str2++;		// i已经锁死为0,不能偏移,只能移动指针本身
        NEXT

	return 0;
}
程序D11.c的功能是计算1/1 + 1/2 + … + 1/N之和并显示。

D11

原题

#include<stdio.h>

#define N 10

int main(void)
{
        /*********Found************/
        long jieguo = 0;
        int fm;

        for (fm = 1; fm <= N; fm++)
        {
                /*********Found************/
                jieguo += 1 / fm;
        }
        printf("%8.6f\n", jieguo);

	return 0;
}

改后

#include<stdio.h>

#define N 10

int main(void)
{
        /*********Found************/
        float jieguo = 0;			// 精度要求,只能是float型
        int fm;

        for (fm = 1; fm <= N; fm++)
        {
                /*********Found************/
                jieguo += 1 /(float)fm;	// 为了保证精度,一定要先转换,再计算
        }
        printf("%8.6f\n", jieguo);

	return 0;
}
程序D12.c的功能是从键盘读入a和b的值(输入格式限定为仅a,b),在屏幕上显示b行a。

D12

原题

#include<stdio.h>

int main(void)
{
        int a, b;

        /*********Found************/
        scanf("%d%d", &a, &b);
        while (b > 0)
        /*********Found************/
        ___________

                printf("%d\n", a);
                b--;
        /*********Found************/
        ___________

        printf("bye bye!\n");

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
        int a, b;

        /*********Found************/
        scanf("%d,%d", &a, &b);		// 题干的输入格式要求有逗号
        while (b > 0)
        /*********Found************/
        {							// 循环体开头
                printf("%d\n", a);
                b--;
        /*********Found************/
        }							// 循环体结束

        printf("bye bye!\n");

	return 0;
}
程序D13.c的功能是从键盘输入最多10个字符(遇换行则停止输入)到数组Buf中,然后在屏幕上显示。

D13

原题

#include<stdio.h>

int main(void)
{
        char c, Buf[11];
        int pos;

        /*********Found************/
        for (pos = 1; pos <= 10; pos++)
        {
                /*********Found************/
                if ((c = getchar() == '\n')
                {
                        break;
                }
                Buf[pos] = c;
        }
        /*********Found************/
        ___________
        printf("%s\n", Buf);

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
        char c, Buf[11];
        int pos;

        /*********Found************/
        for (pos = 0; pos < 10; pos++)	// 循环操作数组元素时,起点和终点要准,否则越界
        {
                /*********Found************/
                if ((c = getchar()) == '\n')	// 遇到回车就结束,“运算符赋值”要先完成运算
                {
                        break;
                }
                Buf[pos] = c;
        }
        /*********Found************/
        Buf[pos] = '\0';
        printf("%s\n", Buf);

	return 0;
}
程序D14.c的功能是调用函数swap,将a和b的值交换,最后在屏幕上显示交换后的a,b之值。

D14

原题

#include<stdio.h>

/*********Found************/
void swap(int x, int y);

int main(void)
{
        int a = 3, b = 4;

        /*********Found************/
        swap(a, b);
        printf("a=%d b=%d\n", a, b);

	return 0;
}

/*********Found************/
void swap(int x, int y)
{
        int tmpX;

        /*********Found************/
        ___________
        *x = *y;
        /*********Found************/
        *y = x;
}

改后

#include<stdio.h>

/*********Found************/
void swap(int *x, int *y);		// 要真正实现实参值交换,要将实参地址传入

int main(void)
{
        int a = 3, b = 4;

        /*********Found************/
        swap(&a, &b);			// 传入地址,完成对实参的值的交换
        printf("a=%d b=%d\n", a, b);

	return 0;
}

/*********Found************/
void swap(int *x, int *y)		// 函数头与声明一致
{
        int tmpX;

        /*********Found************/
        tmpX = *x;				// 交换的是值,使用取值运算符
        *x = *y;
        /*********Found************/
        *y = tmpX;				// 交换的是值,使用取值运算符
}
程序D15.c的功能是调用函数swap,将a和b的值交换,最后在屏幕上显示交换后的a,b之值。

D15

原题

#include<stdio.h>

void swap(int *x, int *y);

int main(void)
{
        int a = 3, b = 4;

        /*********Found************/
        swap(*a, *b);
        /*********Found************/
        printf("a=%d b=%d\n", &a, &b);

	return 0;
}

void swap(int *x, int *y)
{
        int *tmp, tsX;

        /*********Found************/
        *tmp = x;
        *x = *y;
        /*********Found************/
        *y = *tmp;
}

改后

#include<stdio.h>

void swap(int *x, int *y);

int main(void)
{
        int a = 3, b = 4;

        /*********Found************/
        swap(&a, &b);			// 实参传地址,要取地址来传入
        /*********Found************/
        printf("a=%d b=%d\n", a, b);	// 输出是值,不是地址编号

	return 0;
}

void swap(int *x, int *y)
{
        int *tmp, tsX;

        /*********Found************/
        tsX = *x;		//交换的是值,这个题有坑,tmp是多余的指针变量,混淆视听
        *x = *y;
        /*********Found************/
        *y = tsX;
}
程序D16.c的功能是worker2的信息使用结构体存储,从键盘读入其各项信息并显示。

D16

原题

#include<stdio.h>

int main(void)
{
        struct WKER
        {
                long ID;
                long int num;
                char name[20];
                char sex;
        /*********Found************/
        } ;

        worker2.ID = 1L;
        /*********Found************/
        scanf("%s %s %s", &worker2.num, worker2.name, &worker2.sex);
        /*********Found************/
        printf("worker's info: num=%s name=%s sex=%s\n",
                        worker2.num, worker2.name, worker2.sex);

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
        struct WKER
        {
                long ID;
                long int num;
                char name[20];
                char sex;
        /*********Found************/
        } worker2;		// 在完成结构体类型声时后,再直接完成结构体变量的定义

        worker2.ID = 1L;
        /*********Found************/
        scanf("%ld %s %c", &worker2.num, worker2.name, &worker2.sex);// 格式要一致
        /*********Found************/
        printf("worker's info: num=%ld name=%s sex=%c\n",			 // 格式要一致
                        worker2.num, worker2.name, worker2.sex);

	return 0;
}
程序D18.c的功能是从键盘上读入10个大于0的数,调用函数dispMaxNum显示其中最大的一个。

D18

原题

#include <stdio.h>

int maxiNum = 0;

void dispMaxNum();

int main(void)
{
        int i, oneNumber, maxNumber = 0;

        printf("Please input 10 int number:");
        {
                int maxNumber = 0;
                /*********Found************/
                ___________
                        for (i = 0; i < 10; i++)
                        {
                                scanf("%d", &oneNumber);
                                if (oneNumber > maxNumber)
                                {
                                        maxNumber = oneNumber;
                                }
                        }
                }
                /*********Found************/
                ___________
        /*********Found************/
        ___________
        dispMaxNum();

	return 0;
}

void dispMaxNum()
{
        /*********Found************/
        printf("maxNumber=%d\n", maxNumber);
}

改后

#include <stdio.h>

int maxiNum = 0;

void dispMaxNum();

int main(void)
{
        int i, oneNumber, maxNumber = 0;

        printf("Please input 10 int number:");
        {
                int maxNumber = 0;
                /*********Found************/
                {				// 形成作用域
                        for (i = 0; i < 10; i++)
                        {
                                scanf("%d", &oneNumber);
                                if (oneNumber > maxNumber)
                                {
                                        maxNumber = oneNumber;
                                }
                        }
                }
                /*********Found************/
                maxiNum = maxNumber;	// 使用全局变量
        /*********Found************/
        }	// 关闭作用域
        dispMaxNum();

	return 0;
}

void dispMaxNum()
{
        /*********Found************/
        printf("maxNumber=%d\n", maxiNum);	// 使用全局变量
}
程序D1000.c的功能是从键盘输入3个浮点数a,b,c(输入时abc之间以空格相隔),首先按照输入顺序显示在屏幕上,然后按从小到大顺序把它们输出到屏幕上。

D1000

原题

#include<stdio.h>

int main(void)
{
	float a, b, c, t;

	printf("please input three numbers:\n");
	/*********Found************/
	scanf("%f%f", &a, &b, &c);
	printf("before sort:a=%g,b=%g,c=%g\n", a, b, c);
	if (a > b)
	{
		t = a;
		a = b;
		/*********Found************/
		b = a;
	}
	if (a > c)
	{
		t = a;
		a = c;
		c = t;
	}
	if (b > c)
	{
		t = b;
		b = c;
		c = t;
	}
	printf("after  sort:a=%g,b=%g,c=%g\n", a, b, c);

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
	float a, b, c, t;

	printf("please input three numbers:\n");
	/*********Found************/
	scanf("%f%f%f", &a, &b, &c);	// 格式数量要与参数数量一致对应
	printf("before sort:a=%g,b=%g,c=%g\n", a, b, c);
	if (a > b)
	{
		t = a;
		a = b;
		/*********Found************/
		b = t;						// 算法要求如此
	}
	if (a > c)
	{
		t = a;
		a = c;
		c = t;
	}
	if (b > c)
	{
		t = b;
		b = c;
		c = t;
	}
	printf("after  sort:a=%g,b=%g,c=%g\n", a, b, c);

	return 0;
}
程序D1001.c的功能是求分数序列:2/1,3/2,5/3,8/5,13/8,21/13,....前20项之和,要求显示的结果中小数部分有4位。

D1001

原题

#include<stdio.h>

#define T 20

int main(void)
{
	int n;
	/*********Found************/
	long i, j, temp, sum;

	i = 2;
	j = 1;
	sum = 0;
	for (n=1; n<=T; n++)
	{
		sum = sum + i / j;
		temp = i;
		i = i + j;
		j = temp;
	}

	/*********Found************/
	printf("2/1+3/2+5/3+8/5+13/8+...=%5.2f\n", sum);

	return 0;
}

改后

#include<stdio.h>

#define T 20

int main(void)
{
	int n;
	/*********Found************/
	float i, j, temp, sum;	// 精度要求

	i = 2;
	j = 1;
	sum = 0;
	for (n=1; n<=T; n++)
	{
		sum = sum + i / j;
		temp = i;
		i = i + j;
		j = temp;
	}

	/*********Found************/
	printf("2/1+3/2+5/3+8/5+13/8+...=%5.4f\n", sum);	// 四位小数

	return 0;
}
程序D1002.c的功能是实现两数交换。

D1002

原题

#include<stdio.h>

int main(void)
{
	int x = 5, y = 9;

	x = x + y;
	y = x - y;
	/*****Found*****/
	x = y - x;
	printf("x=%d, y=%d\n", x, y);

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
	int x = 5, y = 9;

	x = x + y;
	y = x - y;
	/*****Found*****/
	x = x - y;			// 算法如此
	printf("x=%d, y=%d\n", x, y);

	return 0;
}
程序D1003.c的功能是将16进制数100转换为10进制数输出。

D1003

原题

#include<stdio.h>

int main(void)
{
	/*****Found*****/
	int i = 100;

	/*****Found*****/
	printf("%d\n", &i);

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
	/*****Found*****/
	int i = 0x100;		// 十六进制以0x开头来表示

	/*****Found*****/
	printf("%d\n", i);	// 输出值,不是地址编号

	return 0;
}
程序D1004.c的功能是输入姓名,屏幕输出问候。

D1004

原题

#include<stdio.h>

int main(void)
{
	char s[10];

	printf("please input your name:");
	/*********Found************/
	scanf("%c", s);

	printf("hello ");
	/*********Found************/
	puts(s[10]);

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
	char s[10];

	printf("please input your name:");
	/*********Found************/
	scanf("%s", s);		// %s是字符串,%c是字符

	printf("hello ");
	/*********Found************/
	puts(s);			// 输出串,给出数组名即可

	return 0;
}
程序D1005.c的功能是从键盘读入两个整数并在屏幕上显示。要求:输入时限定两数之间仅以逗号隔开。

D1005

原题

#include<stdio.h>

int main(void)
{
	int a, b;

	/*********Found*********/
	scanf("%d%d", &a, &b);
	/*********Found*********/
	printf("a=%d,b=%d\n", &a, &b);

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
	int a, b;

	/*********Found*********/
	scanf("%d,%d", &a, &b);		// 输入格式要求有逗号
	/*********Found*********/
	printf("a=%d,b=%d\n", a, b);	// 输出值

	return 0;
}
程序D1006.c的功能是判断输入的数据是否与已经给出的数据j相等。

D1006

原题

#include<stdio.h>

int main(void)
{
	long int i = 79870, j = 23;

	/*****Found*****/
	scanf("%f", &i);

	/*****Found*****/
	if (j == i);
	{
		printf("Equal!");
	}
	else
	{
		printf("Not equal!");
	}

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
	long int i = 79870, j = 23;

	/*****Found*****/
	scanf("%ld", &i);	// long类型是%ld格式

	/*****Found*****/
	if (j == i)			// 空语句不可取
	{
		printf("Equal!");
	}
	else
	{
		printf("Not equal!");
	}

	return 0;
}
程序D1007.c的功能是使用getchar方式从键盘读入一个字符,判断该字符是否大写字符。

D1007

原题

#include<stdio.h>

int main(void)
{
	char ch;

	/****Found****/
	getchar(ch);
	/*****Found*****/
	if ('A' <= ch, ch <= 'Z')
	{
		printf("yes");
	}
	else
	{
		printf("no");
	}

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
	char ch;

	/****Found****/
	ch = getchar();		// 要使用输入的方式完成对ch的初始化
	/*****Found*****/
	if ('A' <= ch && ch <= 'Z')
	{
		printf("yes");
	}
	else
	{
		printf("no");
	}

	return 0;
}
程序D1008.c的功能是判断用户是不是输入的整数0。

D1008

原题

#include<stdio.h>

int main(void)
{
	int n;

	scanf("%d", &n);
	/****Found****/
	switch (n);
	{
		/****Found****/
		case0:
			printf("Zero\n");
			break;
		default:
			printf("Non-Zero");
			break;
	}

	return 0;
}

改后

#include<stdio.h>

int main(void)
{
	int n;

	scanf("%d", &n);
	/****Found****/
	switch (n)			// 语法要求这里不能有";"
	{
		/****Found****/
		case 0:			// 语法要求
			printf("Zero\n");
			break;
		default:
			printf("Non-Zero");
			break;
	}

	return 0;
}
  • 16
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值