2026年2月23日
收获:
1.穷举法确定价格时,须进行n-1层循环,四个判断可使用一个作为循环条件,剩下三个作为判断条件。
2.交换两个数时要用地址传入,才能正确交换。
3.赋值语句的优先级最低,若判断中有赋值语句,要加括号提高优先级。
4.求满足条件的n时,要先使n++,再进行计算。若是do while则需要最后将n--。
5.定积分的计算方法,两端点的函数平均值加上各中间点的函数值,乘以均分宽度即梯形的高,得到定积分的结果。
题目:
1、Q2247.(语言: C)今有五羊四犬三鸡二兔值钱一千四百九十六,四羊二犬六鸡三兔值钱一千一百七十五,三羊一犬七鸡五兔值钱九百五十八,二羊三犬五鸡一兔值钱八百六十一。用穷举法编程计算羊犬鸡兔价各几何。
**输出格式要求:"x=%d,y=%d,z=%d,u=%d\n"
注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程。
c
#include <stdio.h>
int main()
{
int y,q,j,t;
for(y=1;y<1496/5;y++){
for(q=1;q<(1496-5*y)/4;q++){
for(j=1;j<(1496-5*y-4*q)/3;j++){
t=(1496-5*y-4*q-3*j)/2;
if(t<0){
break;
}else if( 4*y+2*q+6*j+3*t==1175 && 3*y+q+7*j+5*t==958 && 2*y+3*q+5*j+t==861){
printf("x=%d,y=%d,z=%d,u=%d\n",y,q,j,t);
return 0;
}
}
}
}
return 0;
}
2、Q288.(语言: C)下面程序的功能是从键盘任意输入两个整数,编程实现将其交换后再重新输出。目前程序中存在错误,请修改正确。
#include <stdio.h>
void Swap(int x, int y)
int main()
{
int a, b;
printf("Please enter a,b:");
scanf("%d,%d", &a, &b);
printf("Before swap: a = %d, b = %d\n", a, b);
Swap(a,b); //应传入实参,才能交换
printf("After swap: a = %d, b = %d\n", a, b);
return 0;
}
void Swap(int x, int y);
{
int temp;
temp = x;
x = y;
y = temp;
}
[/code]
注意:
(1)请将修改正确后的完整源程序拷贝粘贴到答题区内。
(2)对于没有错误的语句,请不要修改。
(3)不要改变代码的输入输出格式。
改后运行成功代码:
c
#include <stdio.h>
void Swap(int *x, int *y);
int main()
{
int a, b;
printf("Please enter a,b:");
scanf("%d,%d", &a, &b);
printf("Before swap: a = %d, b = %d\n", a, b);
Swap(&a,&b);
printf("After swap: a = %d, b = %d\n", a, b);
return 0;
}
void Swap(int *x, int *y)
{
int temp;
temp = *x;
*x = *y;
*y = temp;
}
3、Q3887.(语言: C)(2017 春 B)
某种细菌(用'*'表示)繁殖遵循一定的规律。按照如下方式繁殖:
第一天: *
第二天: * *** *
第三天: * *** ***** *** *
第四天: * *** ***** ******* ***** *** *
...
你需要计算第x天的细菌数量(x<=10)
#include "stdio.h"
int function(int x)
{
if (x == 1)
return 1;
else if (x > 1)
return function(x - 1);
else
return -1;
}
int main(void)
{
int x;
int cell_num;
do
{
scanf("%d", &x);
} while (x > 0 && x <= 10)
if (cell_num = function (x) > 0)
printf("%d", cell_num);
return 0;
}
改后运行成功代码:
c
#include<stdio.h>
int function(int x)
{
if (x == 1)
return 1;
else if (x > 1)
return function(x - 1) + 4*(x-1);
else
return -1;
}
int main(void)
{
int x;
int cell_num;
do
{
scanf("%d", &x);
} while (x <= 0 || x > 10);
if ((cell_num = function (x)) > 0)
printf("%d", cell_num);
return 0;
}
4、Q588.(语言: C)编写一个程序,求满足以下条件的最大的n:1^2 + 2^2 + 3^2 + ... + n^2 <= 1000。
x^2表示x的平方。
**输出格式要求:"n=%d\n"
c
#include <stdio.h>
int main()
{
int n=0,sum=0;
do{
n++;
sum+=n*n;
}while(sum<=1000);
n--;
printf("n=%d\n",n);
return 0;
}
5、Q6381.(语言: C)按如下函数原型,采用梯形法编程实现(分成100个小梯形,再求这100个梯形面积的和)),在积分区间[a,b]内计算函数y1=∫011+x2dxy_1=\int_{0}^{1} 1+x^2 dxy1=∫011+x2dx和y2=∫03x1+x2dxy_2=\int_{0}^{3} \frac{x}{1+x^2} dxy2=∫031+x2xdx的定积分。其中,指向函数的指针变量f用于接收被积函数的入口地址。Integral(float (*f)(float), float a, float b);**输出格式要求:"y1=%f\ny2=%f\n"
c
#include <stdio.h>
float fun1(float x);
float fun2(float x);
float Integral(float (*f)(float), float a,float b);
int main()
{
float y1,y2;
y1=Integral(fun1,0.0,1.0);
y2=Integral(fun2,0.0,3.0);
printf("y1=%.2f\ny2=%.2f\n",y1,y2);
return 0;
}
float fun1(float x){
return 1+x*x;
}
float fun2(float x){
return x/(1+x*x);
}
float Integral(float (*f)(float),float a,float b){
float s,h;
s=((*f)(a)+(*f)(b))/2; //上底加下底/2
h=(b-a)/100;
for(int i=1;i<100;i++){
s+=(*f)(a+i*h); //中间点的函数值加了两次,所以不用除以2
}
return s*h;
}