第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;
}

考查要点:

  1. 基本的循环结构
  2. 基本的逻辑判断

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;
}

考查要点:

  1. 基本的循环控制
  2. 基本的逻辑与运算

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;
}

考查要点:

  1. 数组的控制
  2. 数组与循环的配合
  3. 下标的对应关系,注意,下标是从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;
}

考查要点:

  1. 交换排序法的核心,从小到大如何比较,从大到小排又如何比较
  2. 交换排序法实现时,基本的步骤

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++;
	}
}

考查要点:

  1. 函数
  2. 函数的参数
  3. 函数的参数为数组时的情况
  4. 通常,数组为参数时,会带上数组元素的个数

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;
}

考查要点:

  1. 不可以直接定义成动态数组,n的值必须是常量,不能是变量
  2. 整个数组的下标取值范围是[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;
}

考查要点:

  1. 数组的操作,是操作数组里面的元素,对于元素的操作,与普通变量无异
  2. 用打擂算法实现求最大和最小

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';
}

考查要点:

  1. 函数原型和调用方法,入口参数类型要匹配
  2. 不建议将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;
}

考查要点:

  1. 累加算法,有起点,有累加过程
  2. 函数的声明和定义的头部,要一致,按功能要求,返回相应的类型

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);
}

考查要点:

  1. main函数头不能乱加;
  2. 按题意要求,递归返回的值应该是1,而不是2
Logo

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

更多推荐