300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > -成信大-C语言程序设计-1学期《C语言程序设计B》C-trainingExercises29

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

时间:2021-02-16 09:37:53

相关推荐

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

文章目录

-成信大-C语言程序设计-1学期《C语言程序设计B》C-trainingExercises29程序改错与填空要求具体要求具体题面D1D2D3D4D5D6D7D8D10D11D12D13D14D15D16D18D1000D1001D1002D1003D1004D1005D1006D1007D1008

-成信大-C语言程序设计-1学期《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*bjint 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);// 输出字符串的格式是%sreturn 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 NEXTint main(void){char *str2 = "13125176247";const int i = 0;for (printf("\n"); str2[i]; )STARTputchar(str2[i]);/*********Found************/i++;NEXTreturn 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]; )STARTputchar(str2[i]);/*********Found************/str2++;// i已经锁死为0,不能偏移,只能移动指针本身NEXTreturn 0;}

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

D11

原题

#include<stdio.h>#define N 10int 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 10int 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 20int 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 20int 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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。