成信大2021自动化专业-平时自主学习-C语言改错题解题参考-整理第04页
文章目录第04页题面如下:题解如下:D1011.cD1012.cD1013.cD1014.cD1015.cD1016.cD1017.cD1018.cD1019.cD1020.c第04页题面如下:题解如下:D1011.c原文件#include<stdio.h>int main(void){int i = 0, j = 0, n;printf("\ninput numbers:");sca
·
文章目录
第04页
题面如下:
题解如下:
D1011.c
原文件
#include<stdio.h>
int main(void)
{
int i = 0, j = 0, n;
printf("\ninput numbers:");
scanf("%d", &n);
/*********Found*********/
while (______________)
{
if (n > 0)
{
i++;
}
if (n < 0)
{
j++;
}
/*********Found*********/
_________________________
}
printf("i=%d,j=%d", i, j);
return 0;
}
改后文件
#include<stdio.h>
int main(void)
{
int i = 0, j = 0, n;
printf("\ninput numbers:");
scanf("%d", &n);
/*********Found*********/
while (n!=0)
{
if (n > 0)
{
i++;
}
if (n < 0)
{
j++;
}
/*********Found*********/
scanf("%d", &n);
}
printf("i=%d,j=%d", i, j);
return 0;
}
考查要点:
- 基本的循环结构
- 基本的逻辑判断
D1012.c
原文件
#include<stdio.h>
int main(void)
{
int i, j, k;
/*********Found************/
for (i=1; ; i++)
{
for (j=1; j<5; j++)
{
for (k=1; k<5; k++)
{
/*********Found************/
if (i!=k && i!=j && ______)
{
printf("%d%d%d ", i, j, k);
}
}
}
}
return 0;
}
改后文件
#include<stdio.h>
int main(void)
{
int i, j, k;
/*********Found************/
for (i=1; i<5 ; i++)
{
for (j=1; j<5; j++)
{
for (k=1; k<5; k++)
{
/*********Found************/
if (i!=k && i!=j && j!=k)
{
printf("%d%d%d ", i, j, k);
}
}
}
}
return 0;
}
考查要点:
- 基本的循环控制
- 基本的逻辑与运算
D1013.c
原文件
#include<stdio.h>
#define N 10
int main(void)
{
int a[N], i, temp;
printf("please input %d integer numbers:\n", N);
for (i=0; i<N; i++)
{
scanf("%d", &a[i]);
}
printf("the array before reverse:\n");
for (i=0; i<N; i++)
{
printf("%d ", a[i]);
}
printf("\n");
/*********Found************/
for (i=0; i<N; i++)
{
temp = a[i];
/*********Found************/
a[i] = a[N-i];
/*********Found************/
a[N-i] = temp;
}
printf("the array after reverse:\n");
for (i=0; i<N; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
改后文件
#include<stdio.h>
#define N 10
int main(void)
{
int a[N], i, temp;
printf("please input %d integer numbers:\n", N);
for (i=0; i<N; i++)
{
scanf("%d", &a[i]);
}
printf("the array before reverse:\n");
for (i=0; i<N; i++)
{
printf("%d ", a[i]);
}
printf("\n");
/*********Found************/
for (i=0; i<N/2; i++)
{
temp = a[i];
/*********Found************/
a[i] = a[N-i-1];
/*********Found************/
a[N-i-1] = temp;
}
printf("the array after reverse:\n");
for (i=0; i<N; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
考查要点:
- 数组的控制
- 数组与循环的配合
- 下标的对应关系,注意,下标是从0到n-1
D1014.c
原文件
#include<stdio.h>
#include <string.h>
int main(void)
{
int i, j, k;
char a[] = "language", t;
k = strlen(a);
for (i=0; i<k; i++)
{
for (j=i+1; j<k; j++)
{
/*****Found*****/
if (a[i] > a[j])
{
t = a[j];
/*****Found*****/
a[i] = a[j];
a[i] = t;
}
}
}
printf("%s\n", a);
return 0;
}
改后文件
#include<stdio.h>
#include <string.h>
int main(void)
{
int i, j, k;
char a[] = "language", t;
k = strlen(a);
for (i=0; i<k; i++)
{
for (j=i+1; j<k; j++)
{
/*****Found*****/
if (a[i] < a[j])
{
t = a[j];
/*****Found*****/
a[j] = a[i];
a[i] = t;
}
}
}
printf("%s\n", a);
return 0;
}
考查要点:
- 交换排序法的核心,从小到大如何比较,从大到小排又如何比较
- 交换排序法实现时,基本的步骤
D1015.c
原文件
#include<stdio.h>
void input(int a[], int n);
int main(void)
{
int a[10], i;
/*********Found************/
input(a[10], 10);
for (i=0; i<10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
void input(int a[], int n)
{
int i;
for (i=0; i<n; )
{
scanf("%d", &a[i]);
/*********Found************/
i--;
}
}
改后文件
#include<stdio.h>
void input(int a[], int n);
int main(void)
{
int a[10], i;
/*********Found************/
input(a, 10);
for (i=0; i<10; i++)
{
printf("%d ", a[i]);
}
return 0;
}
void input(int a[], int n)
{
int i;
for (i=0; i<n; )
{
scanf("%d", &a[i]);
/*********Found************/
i++;
}
}
考查要点:
- 函数
- 函数的参数
- 函数的参数为数组时的情况
- 通常,数组为参数时,会带上数组元素的个数
D1016.c
原文件
#include<stdio.h>
int main(void)
{
/*********Found*********/
int n=5, i, a[n];
printf("\ninput 5 numbers:");
/*********Found*********/
for (i=1; i<n; i++)
{
scanf("%d", &a[i]);
}
for (i=n-1; i>=0; i--)
{
printf("%d\t", a[i]);
}
return 0;
}
改后文件
#include<stdio.h>
int main(void)
{
/*********Found*********/
int n=5, i, a[5];
printf("\ninput 5 numbers:");
/*********Found*********/
for (i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
for (i=n-1; i>=0; i--)
{
printf("%d\t", a[i]);
}
return 0;
}
考查要点:
- 不可以直接定义成动态数组,n的值必须是常量,不能是变量
- 整个数组的下标取值范围是[0,n-1]的闭区间
D1017.c
原文件
#include<stdio.h>
int main(void)
{
float a[10], max, min;
int i;
printf("Please input 10 floats");
for (i=0; i<10; i++)
{
/*********Found************/
scanf("%f", _____);
}
max = min = a[0];
for (i=1; i<10; i++)
{
/*********Found************/
if (_____)
{
max = a[i];
}
if (min > a[i])
{
min = a[i];
}
}
printf("Max number is:%.2f\nMin number is:%.2f\n", max, min);
return 0;
}
改后文件
#include<stdio.h>
int main(void)
{
float a[10], max, min;
int i;
printf("Please input 10 floats");
for (i=0; i<10; i++)
{
/*********Found************/
scanf("%f", &a[i]);
}
max = min = a[0];
for (i=1; i<10; i++)
{
/*********Found************/
if (max < a[i])
{
max = a[i];
}
if (min > a[i])
{
min = a[i];
}
}
printf("Max number is:%.2f\nMin number is:%.2f\n", max, min);
return 0;
}
考查要点:
- 数组的操作,是操作数组里面的元素,对于元素的操作,与普通变量无异
- 用打擂算法实现求最大和最小
D1018.c
原文件
#include<stdio.h>
#include<string.h>
void vowel(char str1[], char str2[]);
int main(void)
{
char str1[81], str2[81];
printf("please input the string:\n");
gets(str1);
/*********Found************/
vowel(________________);
printf("the vowel string is:\n");
puts(str2);
if (strlen(str2) == 0)
{
printf("NONE!\n");
}
return 0;
}
void vowel(char str1[], char str2[])
{
int i, j = 0;
/*********Found************/
for (i=0; ________________; i++)
{
if (str1[i]=='A' || str1[i]=='E' || str1[i]=='I'
|| str1[i]=='O' || str1[i]=='U' || str1[i]=='a'
|| str1[i]=='e' || str1[i]=='i' || str1[i]=='o'
|| str1[i]=='u')
{
str2[j] = str1[i];
j++;
}
}
str2[j] = '\0';
}
改后文件
#include<stdio.h>
#include<string.h>
void vowel(char str1[], char str2[]);
int main(void)
{
char str1[81], str2[81];
printf("please input the string:\n");
gets(str1);
/*********Found************/
vowel(str1,str2);
printf("the vowel string is:\n");
puts(str2);
if (strlen(str2) == 0)
{
printf("NONE!\n");
}
return 0;
}
void vowel(char str1[], char str2[])
{
int i, j = 0;
/*********Found************/
for (i=0; i<strlen(str1); i++)
{
if (str1[i]=='A' || str1[i]=='E' || str1[i]=='I'
|| str1[i]=='O' || str1[i]=='U' || str1[i]=='a'
|| str1[i]=='e' || str1[i]=='i' || str1[i]=='o'
|| str1[i]=='u')
{
str2[j] = str1[i];
j++;
}
}
str2[j] = '\0';
}
考查要点:
- 函数原型和调用方法,入口参数类型要匹配
- 不建议将strlen函数嵌入到for的第二个表达式中,因为效率很低,每一次都要重新计算串的长度
D1019.c
原文件
#include<stdio.h>
/*****Found*****/
average(double x, y);
int main(void)
{
int i;
double score, total;
double aver;
printf("Please enter the 1's grade\n");
scanf("%lf", &total);
for (i=2; i<=10; i++)
{
printf("Please enter the %d's grade\n", i);
scanf("%lf", &score);
/*****Found*****/
total = score;
}
aver = average(total, 10);
printf("The average: %f\n", aver);
return 0;
}
/*****Found*****/
average(double x, y)
{
return x / y;
}
改后文件
#include<stdio.h>
/*****Found*****/
double average(double x, int y);
int main(void)
{
int i;
double score, total;
double aver;
printf("Please enter the 1's grade\n");
scanf("%lf", &total);
for (i=2; i<=10; i++)
{
printf("Please enter the %d's grade\n", i);
scanf("%lf", &score);
/*****Found*****/
total += score;
}
aver = average(total, 10);
printf("The average: %f\n", aver);
return 0;
}
/*****Found*****/
double average(double x, int y)
{
return x / y;
}
考查要点:
- 累加算法,有起点,有累加过程
- 函数的声明和定义的头部,要一致,按功能要求,返回相应的类型
D1020.c
原文件
#include<stdio.h>
int f(int n);
/*****Found*****/
int main(void);
{
printf("F(7)=%d\n", f(7));
return 0;
}
int f(int n)
{
if (n <= 2)
{
/*****Found*****/
return 2;
}
return f(n - 1) + f(n - 2);
}
改后文件
#include<stdio.h>
int f(int n);
/*****Found*****/
int main(void)
{
printf("F(7)=%d\n", f(7));
return 0;
}
int f(int n)
{
if (n <= 2)
{
/*****Found*****/
return 1;
}
return f(n - 1) + f(n - 2);
}
考查要点:
- main函数头不能乱加;
- 按题意要求,递归返回的值应该是1,而不是2

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)