① 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]!='