程序改错(1)
- 格式:doc
- 大小:152.00 KB
- 文档页数:25
实验三 选择结构程序设计一、实验目的与要求1. 理解C 语言表示逻辑量的方法,学会正确使用逻辑运算符和逻辑表达式。
2. 掌握利用if 结构实现选择结构的方法。
3. 掌握利用switch 结构实现多分支选择结构。
4. 结合程序掌握一些简单的算法,学习调试程序5. 实验4学时二、实验内容1.程序改错题改正下面程序中的错误。
输入实数x ,计算并输出下列分段函数f(x)的值(保留1位小数)。
)100(1=x x==)(x f y)100(≠x x输入输出示例1(改正后程序的运行结果)Enter x :100f )=输入输出示例2(改正后程序的运行结果)Enter x :23f )=源程序(有错误的程序)#include<>#include<>void main(void){double x;printf("Enter x: \n");scanf("=%f", x);if (x = 100) {y = 1/sqrt(x)}else (x != 100) {y = x;}printf("f(%.2f) = %.1f\n",x,y);}答:#include<>#include<>void main(void){double x,y;printf("Enter x:\n");scanf("%lf",&x);if (x=100)y = 1/sqrt(x);elsey= x;printf("f(%.2lf)=%.1lf\n",x,y);}2.一般编程题编程题1输入任意三个整数a,b,c ,求3个数中的最大值和最小值。
答:#include <>void main(){int a,b,c;printf("请输入三个整数:");scanf("%d %d %d",&a,&b,&c);if (a>=b)t=a,a=b,b=t;if (a>=c)t=a,a=c,c=t;if (b>=c)t=b,b=c,c=t;printf("最小值为:%d\n",a);printf("最大值为:%d\n",c);}编程题2输入x ,计算并输出下面分段函数f(x)的值(保留2位小数)。
实验2答案五.程序改错#include<stdi o.h>int main(void){int x=3,y;y = x*x;printf("%d = %d * %d\n",y,x,x); /* 输出*/printf("%d * %d = %d\n",x,x,y);return 0;}六、一般编程题6.1#include<stdio.h>int main(void){int x,y;printf("Input x: ");scanf("%d",&x);printf("Input y: ");scanf("%d",&y);printf("%d + %d = %d\n",x,y,x+y);printf("%d - %d = %d\n",x,y,x-y);printf("%d * %d = %d\n",x,y,x*y);printf("%d / %d = %d\n",x,y,x/y);printf("%d %% %d = %d\n",x,y,x%y);return 0;}6.2#include<stdio.h>int main(void){ float x; double y;printf("Input x: ");scanf("%f",&x);printf("Input y: ");scanf("%lf",&y);printf("%f + %f = %f\n",x,y,x+y);printf("%f - %f = %f\n",x,y,x-y);printf("%f * %f = %f\n",x,y,x*y);printf("%f / %f = %f\n",x,y,x/y);return 0;}6.3#include<stdio.h>int main(void){ char c;printf("Input c: ");scanf("%c",&c);printf("%c\n",c+32);return 0;}6.4#include<stdio.h>int main(void){int celsius,fahr;fahr = 150;celsius = 5*fahr/9 - 5*32/9;printf("fahr = %d, celsius = %d\n", fahr, celsius);return 0;} 如果使用公式9)32(5-⨯=f c 计算结果不一样,celsius = 65。
二级C语言上机改错题常见错误类型※(1) 漏写“ ; ”(所有完整语句后面都应该有“ ; ”)※(2) 数据类型定义错误(包括int, long, char, float, double, 字符串, 数组和指针等类型互相不能用错)(3) 定义函数时后面多加“ ; ”(如: void fun (char *s); 后面的分号不能加)※(4) 当判断相等的时候,误把“ == ” 写成赋值的“ = ”※(5) 函数类型定义错误(比如说自定义一个没有返回值的函数却定义成int fun() )※(6) 条件语句漏写“ () ”(包括for语句、if语句、while语句等等)(7) 符号写错(如除法的“ / ” 写成“\” 等等)(8) 字符串符号" " 与字符符号' ' 弄错(9) 函数行参类型定义错误(比如:本意为带入指针类型的实参,却写成 void fun (char s) 正确应为 void fun (char *s) )(10) 漏写大括号“ { ” 或“ } ”中的一个第二大类:逻辑错误(此类错误都和题意有关,需结合具体题意改正)※(1) 大小关系弄反(比如本该为if(x<y) ...... 误写成if(x>y) ...... )(2) “ ++ ” 和“ -- ” 弄反(比如本该为 for(i=j; i!=k; i++) 误写成for(i=j; i!=k; i--) )(3) 变量赋值错误(包括赋初值错误或没有赋初值等,如:依题意,本该赋值 int i=0; 却赋错值 int i=1; )(4) 依次载入数据时没有写“ ++ ” 或“ -- ”(如: for(i=0;i<n;i++) s[j++]=i; 写错成for(i=0;i<n;i++) s[j]=i; )※(5) 代换关系弄错(如: p=q; 误写成q=p; 或p=q+i; 误写成q=p+i; )(6) 循环中初值或终值写错(如:依题意应为 for(i=0; i<n; i++) ...... 写错为for(i=0; i<m; i++) ...... )(7) “ == ” 和“ != ”逻辑关系弄错(8) 逻辑与“ && ” 和逻辑或“ || ”弄错(9) 临界值弄错(如“ <= ” 和“ < ” 等)(10) 其他逻辑错误:原语句不符题意或与题意相悖的一切逻辑错误。
【程序改错】--------------------------------------------------------注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/题目1:以下程序的功能是求如下表达式:1 1 1S = 1 + —— + ——— + ...... + ———————1+2 1+2+3 1+2+3+......+n#include <stdio.h>main(){int n;float fun();printf("Please input a number:");/**********FOUND**********/print("%d",n) ;printf("%10.6f\n",fun(n));}/**********FOUND**********/fun(int n){int i,j,t;float s;s=0;/**********FOUND**********/while(i=1;i<=n;i++);{t=0;for(j=1;j<=i;j++)t=t+j;/**********FOUND**********/=s+1/t;}return s;}题目2:函数fun的功能是:计算正整数num的各位上的数字之积。
例如,输入252,则输出应该是20。
请改正程序中的错误,使它能得出正确的结果。
long fun (long num){/**********FOUND**********/long k;do{k*=num%10;/**********FOUND**********/num\=10;}while (num);return k;}main(){long n;printf("\nPlease enter a number:");/**********FOUND**********/scanf("%ld", n);/**********FOUND**********/printf("\n%ld\n",fun(long n));}题目3:用"冒泡法"对输入的十个字符排序后按从小到大的次序输出.#define N 10main( ){int i;char str[N];/***********FOUND***********/scanf("%s",&str);/***********FOUND***********/sort(str[N]);for(i=0;i<N;i++)printf("%c",str[i]);printf("\n");}sort(char str[N]){int i,j; char t;for(j=1;j<N;j++)/***********FOUND***********/for(i=0;(i<N-j)||(str[i]!='\0');i++)/***********FOUND***********/if(str[i]<str[i+1]){t=str[i];str[i]=str[i+1];str[i+1]=t;}}题目4:函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。
c语言改错题题库及详解答案C语言是一种广泛使用的计算机编程语言,它以其高效性、灵活性和强大的功能而受到程序员的青睐。
然而,即使是经验丰富的程序员也难免会在编写C语言程序时犯一些错误。
下面是一个C语言改错题题库及其详解答案,帮助学习者识别并改正常见的编程错误。
题目1:错误的变量初始化```cint main() {int a;printf("%d", a); // 错误:变量a未初始化return 0;}```详解答案:在C语言中,如果一个变量在使用前没有被显式地初始化,它的值是不确定的。
为了修复这个错误,我们应该在声明变量时对其进行初始化。
```cint main() {int a = 0; // 正确的初始化printf("%d", a);return 0;}```题目2:错误的数组索引```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[5]); // 错误:数组索引越界return 0;}```详解答案:数组索引是从0开始的,所以对于一个有5个元素的数组,有效的索引范围是0到4。
访问数组的第6个元素会导致越界错误。
```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[4]); // 正确的索引return 0;}```题目3:错误的循环使用```cint main() {int i;for (i = 0; i <= 10; i++) {printf("%d ", i);} // 错误:循环条件错误return 0;}```详解答案:循环条件应该是`i < 10`,以确保循环不会无限执行。
```cint main() {int i;for (i = 0; i < 10; i++) {printf("%d ", i);}return 0;}```题目4:错误的函数调用```cint main() {int result = add(5, 3); // 错误:add函数未定义printf("%d", result);return 0;}```详解答案:在调用一个函数之前,需要确保该函数已经被定义。
选折题1. int a=1,b=2,c=3; if(a>b)a=b; if(a>c)a=c; 则a的值为(A)。
A、1B、不一定C、3D、22.以下选项中不合法的用户标识符是 BA、DimB、printfC、_123D、A$3. int i,j,a[2][3];按照数组a的元素在内存的排列次序,不能将数1,2,3,4,5,6存入a数组的是(C)。
A、for(i=0;i<2;i++)for(j=0;j<3;j++)a[i][j]=i*3+j+1;B、for(i=0;i<6;i++)a[i/3][i%3]=i+1;C、for(i=1;i<=6;i++)a[i][i]=i;D、for(i=0;i<3;i++)for(j=0;j<2;j++)a[j][i]=j*3+i+1;4.以下所列的C语言常量中,错误的是___A___。
A、1.2e0.5B、0xFFC、2LD、'\72'5.若有说明: int a[3][4]={0};则下面正确的叙述是(A)。
A、数组a中每个元素均可得到初值0B、只有元素a[0][0]可得到初值0C、此说明语句不正确D、数组a中各元素都可得到初值,但其值不一定为06.以下正确的字符串常量是 DA、'abc'B、'A'C、OlympicGamesD、"\\\"7. C语言中,char类型数据占(C)。
A、8个字节B、4个字节C、1个字节D、2个字节8.已知大写字母A的ASCII码是65,小写字母a的ASCII码是97,则用八进制表示的字符常量'\101'是____D__。
A、非法的常量B、字符aC、字符eD、字符A9.以下函数的类型是(D)fff(float x){return 5;}A、与参数x的类型相同B、void 类型C、无法确定D、int类型10.以下叙述中正确的是(A)。
3.2基础实验一、程序分析1.以下程序若输入’a’,则输入格式为:__c1=a____;运行结果为:___a,A↙_____。
#include<stdio.h>intmain( ){char c1,c2;scanf(“c1=%c”,&c1);c2=c1-32;printf(“%c,%c\n”,c1,c2);return 0;}2.以下程序如果使得a的值为2、b的值为3,则输入格式为:_a=2,b=3__;运行结果为:_2,3↙_。
#include<stdio.h>intmain( ){ int a,b;scanf(“a=%d,b=%d”,&a,&b);printf(“%d,%d\n”,a,b);return 0;}3.以下程序若输入12.3、7.6、1.1,则输入格式为:_12.3 7.6 1.1__;运行结果为:_aver=7.00___。
#include<stdio.h>intmain( ){ floata,b,c,d;scanf(“%f%f%f”,&a,&b,&c);d=(a+b+c)/3;printf(“aver=%.2f”,d);return 0;}二、程序填空1.输入一个四位整数,求各位数字之和(如1234,则结果为1+2+3+4=10)。
若输入3562,则运行结果为:___3+5+6+2=16↙____________。
#include <stdio.h>intmain( ){ int n,a,b,c,d,m;scanf(“%d”,&n);a=n%10;b=(n/10)%10;c=(n/100)%10;d=__n/1000________;m=__a+b+c+d________;printf(“%d+%d+%d+%d=%d\n ”, d,c,b,a,m);return 0;}2.给定一个华氏法表示的温度值,将其转换为摄氏法表示的温度,转换公式为则运行结果为:__f=64.00,c=17.78↙__。
北京石油化工学院12级复习题程序改错一、下面每个程序的划线处有语法或逻辑错误,请找出并改正,使其得到符合题意的执行结果。
1.求1234nmain(){long int sum;int n,i=1;scanf(”%d”,n);printf(“\n”);while(i<n){ sum=sum*i;i++;}printf(”sum=%d”,sum);}2.求一个数组中最大值及其下标。
main(){ int max,j,m;int a[5];for(j=1;j〈=5;j++)scanf(“%d",a);max=a[0];for(j=1;j〈=5;j++)if(max〉a[j]){max=a[j];m=j;}printf(“下标:%d\n最大值:%d”, j,max)}*3. 求3+4int a=3,b=4;main(){int a,c;c=a+b;printf(“c=%d”);}4.用一个函数求两个数之和.sum(x,y){float z;z=x+y;return;}main(){float a,b;int c;scanf(”%f,%f",&a,&b);c=sum(a,b);printf("\nSum is %f",sum);}5.用指针作函数参数,对输入的两个整数按大小顺序输出。
swap(int *p1,*p2){ int *p;*p=*p1;*p1=*p2;*p2=*p;}main(){int a,b;int *q1,*q2;scanf("%d,%d”,&a,&b);&q1=a,&q2=b;if(a<b)swap(*q1,*q2);printf("\n%d,%d\n",q1,q2);}前五题答案:1.sum应初始化即加入sum=1第四行改为:scanf(“%d",&n);第六行改为:while(i〈=n)第十行改为:printf("sum=%ld”,sum);2. 第四行改为:for(j=0;j〈5;j++)第五行改为:scanf(“%d",&a[j]);第七行改为:for(j=0;j〈5;j++)第八行改为:if(max<a[j])第十三行改为:printf(“下标:%d\n最大值:%d", m,max)3。
/*------------------------------------------------------ 【程序改错】 --------------------------------------------------------
功能:将 m(1≤m≤10)个字符串连接起来,组成一个新串,放 入pt所指字符串中。 例如:把3个串:“abc”,“CD”,“EF”串连起来,结果是 “The result is: abcCDEF”。
------------------------------------------------------*/ #include #include #include
int fun ( char str[][10], int m, char *pt ) { /**********ERROR**********/ int k, q, i for ( k = 0; k < m; k++ ) { q = strlen ( str [k] ); for (i=0; i /**********ERROR**********/ pt[i] = str[k,i] ; /**********ERROR**********/ pt = q ; pt[0] = 0 ; } }
main( ) { int m, h ; char s[10][10], p[120] ;
printf( "\nPlease enter m:" ) ; scanf("%d", &m) ; gets(s[0]) ; printf( "\nPlease enter %d string:\n", m ) ; for ( h = 0; h < m; h++ ) gets( s[h]) ; fun(s, m, p) ; printf( "\nThe result is : %s\n", p) ; } 【改错1】 正确 【学生答案】 int k, q, i;
【参考答案】 int k, q, i; ============================================================ 【改错2】 错误 【学生答案】 pt[i] = str[k,i] ;
【参考答案】 pt[i] = str[k][i] ;
============================================================ 【改错3】 错误 【学生答案】 pt = q ;
【参考答案】 pt += q ; pt=pt+q;
============================================================ /*------------------------------------------------------ 【程序改错】 --------------------------------------------------------
功能:使数组左下三角元素中的值乘以n 。 ------------------------------------------------------*/ #include #include #include #define N 3
int fun ( int a[][N], int n ) { /**********ERROR**********/ int i;j; for(i=0; i < N; i++) /**********ERROR**********/ for(j=0; j /**********ERROR**********/ a[i][j]=*n; }
main ( ) { int a[N][N], n, i, j;
printf("***** The array *****\n"); for ( i =0; i<3;i++) { for ( j =0; j<3;j++) { a[i][j] = rand()%10; printf( "%4d", a[i][j] ); } printf("\n"); } do n = rand(); while ( n >=5||n<1 ); printf("n = %4d\n",n); fun ( a, n ); printf ("***** THE RESULT *****\n"); for ( i =0; i<3;i++) { for ( j =0; j<3;j++) printf( "%4d", a[i][j] ); printf("\n");
}
【改错1】 正确 【学生答案】 int i,j;
【参考答案】 int i,j;
============================================================ 【改错2】 错误 【学生答案】 for(j=1; j
【参考答案】 for(j=0; j<=i; j++)
============================================================ 【改错3】 错误 【学生答案】 a[i][j]==n; 【参考答案】 a[i][j]*=n;
============================================================ /*------------------------------------------------------- 【程序填空】 ---------------------------------------------------------
功能:以下程序是用选择法对10个整数按升序排序。 -------------------------------------------------------*/ #include /**********FILL**********/ _____
main() { int i,j,k,t,a[N]; for(i=0;i<=N-1;i++) scanf("%d",&a[i]); for(i=0;i { /**********FILL**********/ _____ /**********FILL**********/ for(j=i+1; _____;j++) if(a[j] /**********FILL**********/ if(_____) { t=a[i]; a[i]=a[k]; a[k]=t; } } printf("output the sorted array:\n"); for(i=0;i<=N-1;i++) printf("%5d",a[i]); printf("\n"); }
【空1】 错误 【学生答案】 _____
【参考答案】 #define N 10
============================================================ 【空2】 错误 【学生答案】 _____ 【参考答案】 k=i
============================================================ 【空3】 错误 【学生答案】 for(j=i+1; _____;j++)
【参考答案】 jN>j j<=N-1 N-1>=j
============================================================ 【空4】 错误 【学生答案】 if(_____)
【参考答案】 k!=i i!=k
============================================================ /*------------------------------------------------------- 【程序填空】 ---------------------------------------------------------
功能:文件操作。 -------------------------------------------------------*/ # include # include
void main() { /* 定义一个文件指针fp */ /**********FILL**********/ _____ *fp; char ch, filename[10]; printf("Please input the name of file: "); scanf("%s", filename); /* 输入字符串并赋给变量filename */ /* 以读的使用方式打开文件filename */