一、本周题目,鸡兔同笼,找最小,统计个数,最大与最小
1.鸡兔同笼 :写代码时给计算机的指令应该是具体算式,计算机在运行代码时是无法计算方程的
错误代码
#include<stdio.h>
int main()
{
int a,b,x,y;
scanf("%d %d",&a,&b);
a=x+y;
b=2*x+4*y;
printf("%d %d",x,y);
return 0;
}
运行后就发现无法运行,后面我又换成了小学的算式就解决了代码如下
#include<stdio.h>
int main()
{
int a,b,x,y;
scanf("%d %d",&a,&b);
y=(b-2*a)/2;
x=a-y;
printf("%d %d",x,y);
return 0;
}
2.找最小:
输入10个数,找出其中绝对值最小的数,将它和最后一个数交换,然后输出这10个
-
在
main
函数中,定义了四个变量:a
、c
、n
和min
。其中,a
是一个整型数组,用于存储用户输入的10个整数;c
也是一个整型数组,用于存储a
数组中每个元素的绝对值;n
是一个整型变量,用于记录绝对值最小的元素的下标;min
是一个整型变量,用于记录当前的最小绝对值。 -
使用
for
循环,从i=0
开始,依次读取用户输入的10个整数,并存储到a
数组中。同时,使用条件运算符? :
判断a[i]
的值是否大于等于0,如果是,则将a[i]
存储到c[i]
中;如果不是,则将-a[i]
存储到c[i]
中。这样,c
数组中存储的就是a
数组中每个元素的绝对值 -
完成循环后,通过交换数组元素的方式将
a[n]
的值与a[9]
的值进行交换。 -
最后,使用另一个
for
循环,遍历数组a
,依次输出排好序的数组元素。
#include <stdio.h>
int main() {
int a[10], c[10], n;
int min = 10000;
for (int i = 0; i < 10; i++) {
scanf("%d", &a[i]);
c[i] = (a[i] >= 0) ? a[i] : -a[i];
if (c[i] < min) {
min = c[i];
n = i;
}
}
int X = a[n];
a[n] = a[9];
a[9] = X;
for (int i = 0; i < 10; i++) {
printf("%d ", a[i]);
}
return 0;
}
3.统计个数
编写程序,输入一批学生的成绩,遇0或负数则输入结束,要求统计并输出优秀(大于85)、通过(60~84)和不及格(小于60)的学生人数。
-
首先定义四个变量:
a
、b
、c
和d
。其中,a
用于存储用户输入的整数;b
、c
和d
用于统计对应区间的个数。 -
使用一个无限循环
for(int i=0;;i++)
,循环变量i
从0开始递增。 -
在循环中,使用
scanf
函数读取用户输入的整数,并将其存储到变量a
中。 -
接下来,通过一系列的条件判断语句,对输入的整数进行分类统计。如果输入的整数小于等于0,则跳出循环;如果输入的整数大于85,则将变量
b
的值加1;如果输入的整数在60到84之间(包括60和84),则将变量c
的值加1;如果输入的整数小于60,则将变量d
的值加1。 -
循环结束后,使用
printf
函数输出统计结果。格式化字符串中的%d
分别对应着变量b
、c
和d
的值,分别表示大于等于85的个数、在60到84之间的个数以及小于60的个数。
#include<stdio.h>
int main()
{
int a,b=0,c=0,d=0;
for(int i=0;;i++)
{
scanf("%d",&a);
if(a<=0)break;
if(a>85)b++;
if(a>=60&&a<=84)c++;
if(a<60)d++;
}
printf(">=85:%d\n60-84:%d\n<60:%d\n",b,c,d);
return 0;
}
4.最大与最小
在float类型一维数组中查找最大值、最小值;
-
定义一些变量和常量。
N
表示数组a
的最大长度;INF
表示一个非常大的数;n
和i
都是整型变量,用于循环和记录输入的个数;a
用于存储输入的浮点数;maxx
和minn
用于记录最大值和最小值。 -
使用
scanf
函数读取用户输入的整数,并将其存储到变量n
中。 -
接下来,使用
for
循环遍历n
次,每次循环通过scanf
函数读取一个浮点数,并将其存储到数组a
的相应位置。同时,通过比较当前输入的浮点数和maxx
、minn
的值,更新maxx
和minn
的值,以找到最大值和最小值。 -
循环结束后,使用
printf
函数输出最大值和最小值。格式化字符串中的%.2f
表示输出浮点数时保留两位小数。
#include<stdio.h>
#include<math.h>
int main()
{
int N=10000;
float INF=0x3f3f3f;
int n,i;
float a[N];
float maxx=-INF,minn=INF;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%f",&a[i]);
if(maxx<a[i]) maxx=a[i];
if(minn>a[i]) minn=a[i];
}
printf("%.2f %.2f",maxx,minn);
return 0;
}