① c语言程序改错
//正确程序,已经测试过了。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct student
{
int xh;
char name[10];
char sex[5];
struct date
{
int year,month,day;
} birth[3];
int tele;
char add[20];
int math,english;
}stu[3];
void main()
{
int i,aver[3],sm=0,se=0,avere,averm,m[3],e[3],mmax,mmin,emax,emin;
char *mmaxn=(char*)malloc(10),*mminn=(char*)malloc(10),*emaxn=(char*)malloc(10),*eminn=(char*)malloc(10);
for(i=0;i<3;i++)
{
printf("请输入第%d个学生的学号,姓名,性别,出生年月,电话,住址,数学成绩,英语成绩",i+1);
printf("\n");
scanf("%d%s%s%d%d%d%d%s%d%d",&stu[i].xh,stu[i].name,stu[i].sex,&stu[i].birth[i].year,&stu[i].birth[i].month,&stu[i].birth[i].day,&stu[i].tele,stu[i].add,&stu[i].math,&stu[i].english);
}
for(i=0;i<3;i++)
{
aver[i]=(stu[i].math+stu[i].english)/2;
printf("学号%d 姓名%s 性别%s 出生年月%d-%d-%d 电话%d 住址%s 数学成绩%d 英语成绩%d 平均成绩%d \n",stu[i].xh,stu[i].name,stu[i].sex,stu[i].birth[i].year,stu[i].birth[i].month,stu[i].birth[i].day,stu[i].tele,stu[i].add,stu[i].math,stu[i].english,aver[i]);
}
for(i=0;i<3;i++)
{
sm=sm+stu[i].math;
se=se+stu[i].english;
}
printf("数学平均%d \n英语平均%d \n",averm=sm/3,avere=se/3);
for(i=0;i<3;i++)
{
m[i]=stu[i].math;
e[i]=stu[i].english;
}
mmax=m[0];
mmin=m[0];
emax=e[0];
emin=e[0];
//赋初始值
strcpy(mmaxn,stu[0].name);
strcpy(mminn,stu[0].name);
strcpy(emaxn,stu[0].name);
strcpy(eminn,stu[0].name);
for(i=0;i<3;i++)
{
if(m[i]>mmax)//
{
mmax=m[i];
strcpy(mmaxn,stu[i].name);//字符串赋值方式
}
if(m[i]<mmin)//
{
mmin=m[i];
strcpy(mminn,stu[i].name);//字符串赋值方式
}
if(e[i]>emax)//
{
emax=e[i];
strcpy(emaxn,stu[i].name);//字符串赋值方式
}
if(e[i]<emin)//注意看清条件
{
emin=e[i];
strcpy(eminn,stu[i].name);//字符串赋值方式
}
}
printf("获得数学最高分的同学是%s得分为%d:\n",mmaxn,mmax);
printf("获得数学最低分的同学是%s得分为%d:\n",mminn,mmin);
printf("获得英语最高分的同学是%s得分为%d:\n",emaxn,emax);
printf("获得英语最低分的同学是%s得分为%d:\n",eminn,emin);
}
② 一个C语言程序改错题
#include "string.h"
void sub(char*s,char*t)
{
int i,d;
d=strlen(s);
for(i=0;i<d;i++) \*把s中字符倒序存入t数组*\
t[i]=s[d-1-i];
for(i=0;i<d;i++) \*把 s中字符正序存入t数组 不过有点麻烦,可以直接拷贝strcmp(t,s),加快运行速度*\
t[d+i]=s[i];
t[2*d]='\0';
}
main()
{
char s[100], t[200];
printf( "\n Please enter string S:"); \*t数组应该是s的二倍*\
scanf("%s",s);
sub(s,t);
printf("\n The result is:%s \n ",t);
}
for(i=1;i<d;i++) i=1改为i=0 因为数组第一个元素是从零开始的;
'/n'改为 '\n' /是一个字符,而\ 后跟 n,b, ,…………是功能字符
还有如果在c++里边应该去掉clrscr()
③ C语言程序改错题
#include <stdio.h>
#include <string.h>
int main()
{
const char * input = "Hello World! Welcome To Beijing!";
char output[1024];
int i, j, input_len;
input_len = strlen(input);
j = 0;
for(i = 0; i < input_len; i++)
{
if (input[i] != ' ')
{
output[j] = input[i];
j++;
}
}
output[j] = '\0';
printf("Input string is: %s\n", input);
printf("After spaces were removed: %s\n", output);
return 0;
}
具体的输出效果为:
Input string is: Hello World! Welcome To Beijing!
After spaces were removed: HelloWorld!WelcomeToBeijing!
④ c语言程序设计改错题
错误一:static int a[M][]={{}} 的赋值格式错误,应该是a[][n]其中n为已知。否则就要采起动态输入了。这可以改为a[][N].
错误二:max=a[0,0]类似一的错误,二维数组格式为a[][].
错误三:在二重循环当中用到的m,n两个小写字母的变量为不明变量。你前面define的只是大写的,下面小写的当然认不到。
错误四:主函数没有反回值。即是在最后没有return ().
错误五:二重循环中第一重循环for(j=0;j<M;i++)要改为j++。。这个没问题吧?
错误六:二重循环的顺序颠倒了。将循环中M和N的位置对换。
另外要输出的是行数和例数,所以输出的r和c应该加1,在数组他们是以0起始的,而实际应该从1起始对吧?
改正后代码如下:
#define M 3
#define N 4
main()
{int max,i,j,r,c;
static int a[][4]={{123,94,-10,218},{3,9,10,-83},{45,16,44,-99}};
max=a[0][0];
for(i=0;i<M;i++)
for(j=0;j<N;j++)
if (a[i][j]>max)
{max= a[i][j];
r=i;
c=j;
}
printf("max=%d ,row=%d,colum=%d \n",max,r+1,c+1);
return 0;
}
⑤ 初学者C语言程序改错题
首先我指出你书写的一个错误。switch(c-'2')下面那行的( 应该改成{ 因为{是与default:putchar(c+2);下面出现的}进行配对的。
依次输入2473得到输出668977,只需修改一处地方。在case 2:putchar(c+4);后面加上 break;
分析如下:使用getchar输入,每次只能识别一个字符,而又使用了while循环,输入2473就相当于输入了4个数,while每次识别一个。
先分析输入2的情况:这里的2是字符'2',执行switch(c-'2'),‘2’-‘2’=0;因此要执行case 0的情况,case 0 和case 1 共用putchar(c+4),故2+4=6,要输出6,记住:输出的这个6其实是字符‘6’。然后继续执行case 2:putchar(c+4);输出第二个‘6’。这时后面加上了break;即跳出本层switch,本次while循环执行完毕。第一次循环完毕,输出了:66
然后是输入为4的情况:执行switch(c-'2'),‘4’-‘2’=2;所以执行case 2:putchar(c+4);即4+4=8,输出一个8(字符‘8’)。继续执行break;跳出本层switch,本次while循环执行完毕。第二次循环完毕,输出了:8
继续输入为7的情况:执行switch(c-'2'),‘7’-‘2’=5;要执行case 5,但本程序中并没有case 5,故执行缺省情况 default:putchar(c+2);‘7’+‘2’=‘9’,因此输出9(字符‘9’)。本次while循环执行完毕。第三次循环完毕,输出了:9
最后一个输入数3的情况:执行switch(c-'2'),‘3’-‘2’=1;所以执行
case 1:putchar(c+4);即‘3’+‘4’=‘7’,输出7(字符‘7’)。继续执行case 2:putchar(c+4);又输出了一个7(字符‘7’)。遇到后面的break;跳出switch,本次while循环结束。第四次循环结束,输出了:77
至此,全部四次循环均结束,所以最后的输出是668977.
⑥ C语言程序改错题改对了两个错但还有一个错而且程序不能运行可以得几分
#include<stdio.h>//加#
voidfun(char*s)
{inti,j;
for(i=j=0;s[i]!='