#include
#include
#include
float Calc(float x);
int main()
{
float a,b,c,d,e;
scanf("%f,%f",&a,&b);
do{
c=(a+b)/2;
d=Calc(a);
e=Calc(c);
if(d*e ==0){
break;
}else if(d*e>0){
a=c;
}else{
b=c;
}
}while(e<-0.000001 || e>0.000001);
printf("x=%6.2f\n",c);
}
float Calc(float x){
return x*x*x-x-1;
}
题目内容:
某二维数组存放的数据构成一个nn的方阵,其中n<=5。写程序,从键盘输入n的值(n<=5),该nn矩阵中各元素的值按下面的公式计算:
a[i][j] = i * n + j + 1
其中,a[i][j]表示第i行第j列的元素。要求分别输出该矩阵和它的转置矩阵。
注意:定义数字大小N时,请用
#define N 10
输入格式: “%d”
输出提示:“The original matrix is:\n”
输出提示:“The changed matrix is:\n”
输出格式: 矩阵的列与列之间为%3d,行与行之间为\n
输入样例1:
5↙
输出样例1:
The_original_matrix_is:
__1__2__3__4__5
__6__7__8__9_10
_11_12_13_14_15
_16_17_18_19_20
_21_22_23_24_25
The_changed_matrix_is:
__1__6_11_16_21
__2__7_12_17_22
__3__8_13_18_23
__4__9_14_18_24
__5_10_15_20_25
(输出样例中下划线“_”代表空格)
输入样例2:
4↙
输出样例2:
The original matrix is:
__1__2__3__4
__5__6__7__8
__9_10_11_12
_13_14_15_16
The changed matrix is:
__1__5__9_13
__2__6_10_14
__3__7_11_15
__4__8_12_16
注意:为避免出现格式错误,请直接拷贝粘贴上面给出的输入、输出提示信息和格式控制字符串!
(输出样例中下划线“_”代表空格)
#include
#include
#include
#define N 10
int main()
{
int a[N][N]={0},b,c=0;
scanf("%d",&b);
printf("The original matrix is:\n");
for(int i=0;i<b;i++){
for(int j=0;j<b;j++){
c++;
a[i][j]=c;
printf("%3d",c);
}
printf("\n");
}
printf("The changed matrix is:\n");
for(int i=0;i<b;i++){
for(int j=0;j<b;j++){
printf("%3d",a[j][i]);
}
printf("\n");
}
}
题目内容:
下面程序的功能是从键盘任意输入n个数,然后找出其中的最大数与最小数,并将其位置对换。目前程序中存在错误,请修改正确。并按照给出的程序运行结果示例检查修改后的程序。
程序运行结果示例1:
Input n(n<=10):
5↙
Input 5 Numbers:
12 4 6 7 0↙
After MaxMinExchange:
0 4 6 7 12
程序运行结果示例2:
Input n(n<=10):
6↙
Input 6 Numbers:
7 -3 2 0 56 18↙
After MaxMinExchange:
7 56 2 0 -3 18
#include
#define ARR_SIZE 10
int main()
{
int a[ARR_SIZE], i, n;
printf("Input n(n<=10):\n");
scanf("%d", &n);
printf("Input %d Numbers:\n", n);
for (i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
MaxMinExchang(a, n);
printf("After MaxMinExchange:\n");
for (i=0; i<n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
void MaxMinExchang(int *a, int n)
{
int maxValue = a[0], minValue = a[0], maxPos, minPos;
int i, temp;
for (i=0; i<n; i++)
{
if (a[i] > maxValue)
{
maxValue = a[i];
maxPos = i;
}
if (a[i] < minValue)
{
minValue = a[i];
minPos = i;
}
}
temp = a[maxPos];
a[maxPos] = a[minPos];
a[minPos] = temp;
}
输入提示信息: “Input n(n<=10):\n”
“Input %d Numbers:\n”
输入格式: “%d”
输出格式:"%d " (注意:%d后面有一个空格)
输出提示信息:“After MaxMinExchange:\n”
#include
#define ARR_SIZE 10
void MaxMinExchang(int *a, int n);
int main()
{
int a[ARR_SIZE], i, n;
printf("Input n(n<=10):\n");
scanf("%d", &n);
printf("Input %d Numbers:\n", n);
for (i=0; i<n; i++)
{
scanf("%d", &a[i]);
}
MaxMinExchang(a, n);
printf("After MaxMinExchange:\n");
for (i=0; i<n; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
void MaxMinExchang(int a[], int n)
{
int maxValue = a[0], minValue = a[0], maxPos=0, minPos=0;
int i, temp;
for (i=0; i<n; i++)
{
if (a[i] > maxValue)
{
maxValue = a[i];
maxPos = i;
}
if (a[i] < minValue)
{
minValue = a[i];
minPos = i;
}
}
temp = a[maxPos];
a[maxPos] = a[minPos];
a[minPos] = temp;
}
题目内容:
从键盘任意输入一个自然数n(n表示矩阵的大小,假设不超过100),请编程输出一个n*n的蛇形矩阵。如果输入的n不是自然数或者输入了不合法的数字,则输出"Input error!"。
函数原型: void ZigzagMatrix(int a[][N], int n);
函数功能:计算n*n的蛇形矩阵
提示:用两个双重循环分别计算n*n矩阵的左上三角和右下三角,设置一个计数器从1开始记录当前要写入矩阵的元素值,每次写完一个计数器加1,在计算左上角和右下角矩阵元素时,分奇数和偶数两种情况考虑待写入的元素在矩阵中的行列下标位置。
程序运行结果示例1:
Input n:
5↙
1 2 6 7 15
3 5 8 14 16
4 9 13 17 22
10 12 18 21 23
11 19 20 24 25
程序运行结果示例2:
Input n:
4↙
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
程序运行结果示例3:
Input n:
-5↙
Input error!
程序运行结果示例4:
Input n:
105↙
Input error!
程序运行结果示例5:
Input n:
w↙
Input error!
输入提示信息:“Input n:\n”
输入错误提示信息:“Input error!\n”
输入格式: “%d”
输出格式:"%4d"
数据换行: “\n”
#include
#include
#define N 100
void ZigzagMatrix(int a[][N], int n);
int main()
{
int n,a[N][N]={0};
printf("Input n:\n");
int b = scanf("%d",&n);
if(b!=1 || n<0 || n>100){
printf("Input error!\n");
}else{
ZigzagMatrix(a,n);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf("%4d",a[i][j]);
}
printf("\n");
}
}
return 0;
}
void ZigzagMatrix(int a[][N], int n){
int count =1,flag=1;
for(int i=0;i<2*n-1;i++){
if(i<n){
//处理上三角(含斜对角线)
for(int j=0;j<=i;j++){
if(flag){ //通过标志处理从下往上赋值
a[i-j][j]=count++; //a[0][0] ;a[2][0],a[1][1],a[0][2]
}else{
a[j][i-j]=count++; //a[0][1],a[1][0]
}
}
}else{
for(int j=i-n+1;j<n;j++){
if(flag){
a[i-j][j]=count++;
}else{
a[j][i-j]=count++;
}
}
}
flag = (flag+1)%2; //控制对角线从上往下走,还是从下往上走
}
}
题目内容:
2500年前数学大师毕达哥拉斯就发现,220与284两数之间存在着奇妙的联系:
220的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284
284的真因数之和为:1+2+4+71+142=220
毕达哥拉斯把这样的数对称为相亲数。相亲数,也称为亲密数,如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。
从键盘任意输入两个整数m和n,编程判断m和n是否是亲密数。若是亲密数,则输出“Yes!”,否则输出“No!”
程序运行示例1
Input m, n:
220,284↙
Yes!
程序运行示例2
Input m, n:
224,280↙
No!
输入提示信息:“Input m, n:\n”
输入格式: “%d,%d”
输出格式:
输出提示信息:“Yes!\n”
"No!\n"
#include
#include
#define N 100
int main()
{
int a,b,sum=0,sum1=0;
printf("Input m, n:\n");
scanf("%d,%d",&a,&b);
for(int i=1;i<(a>b?a:b);i++){
if(a%i==0 && a!=i){
sum+=i;
}
if(b%i==0 && b!=i){
sum1+=i;
}
}
if(sum == b && sum1 == a){
printf("Yes!\n");
}else{
printf("No!\n");
}
return 0;
}
题目内容:
2500年前数学大师毕达哥拉斯就发现,220与284两数之间存在着奇妙的联系:
220的真因数之和为:1+2+4+5+10+11+20+22+44+55+110=284
284的真因数之和为:1+2+4+71+142=220
毕达哥拉斯把这样的数对称为相亲数。相亲数,也称为亲密数,如果整数A的全部因子(包括1,不包括A本身)之和等于B,且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。
从键盘任意输入一个整数n,编程计算并输出n以内的全部亲密数。
程序运行示例1
Input n:
3000↙
(220,284)
(1184,1210)
(2620,2924)
程序运行示例2
Input n:
1000↙
(220,284)
输入提示信息:“Input n:\n”
输入格式: “%d”
输出格式: “(%d,%d)\n”
#include
#include
#define N 100
int LoveNum(int a,int b);
int main()
{
int n;
printf("Input n:\n");
scanf("%d",&n);
for(int i=1;i<n;i++){
int sum = 0;
for(int j=1;j<i;j++){
if(i%j==0){
sum+=j;
}
}
if(sum>i){
if(LoveNum(sum,i)){
printf("(%d,%d)\n",i,sum);
i=sum+1;
}
}
}
return 0;
}
int LoveNum(int a,int b){
int sum = 0,sum1=0;
for(int i=1;i<a;i++){
if(a%i==0){
sum+=i;
}
if(b%i==0 && b!=i){
sum1+=i;
}
}
if(sum == b && sum1 == a){
return 1;
}else{
return 0;
}
}
题目内容:
完全数(Perfect Number),又称完美数或完数,它是指这样的一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身,即m的所有小于m的不同因子(包括1)加起来恰好等于m本身。注意:1没有真因子,所以1不是完全数。计算机已经证实在10300以下,没有奇数的完全数。例如,因为6 = 1 + 2 + 3,所以6是一个完全数。
从键盘任意输入一个整数m,编程判断m是否是完全数。若m是完全数,则输出“Yes!”,并同时打印出每一个完美数的全部因子,以验证这个数确实是一个完美数。若m不是完全数,则输出“No!”
程序运行示例1
Input m:
28↙
Yes!
1,2,4,7,14
程序运行示例2
Input m:
6↙
Yes!
1,2,3
程序运行示例3
Input m:
1↙
No!
输入信息提示:“Input m:\n”
输入格式: “%d”
输出格式:
输出格式: “%d”
输出信息提示:“Yes!\n”
“No!\n”
#include
#include
int FullNum(int a);
int main()
{
int n,b=0;
printf("Input m:\n");
scanf("%d",&n);
b=FullNum(n);
if(b){
printf("Yes!\n");
for(int i=1;i<n;i++){
if(n%i==0){
if(i==1)
printf("%d",i);
else
printf(",%d",i);
}
}
}else{
printf("No!\n");
}
return 0;
}
int FullNum(int a){
int sum = 0;
for(int i=1;i<a;i++){
if(a%i==0){
sum+=i;
}
}
if(sum == a){
return 1;
}else{
return 0;
}
}
题目内容:
所谓回文素数是指对一个素数n,从左到右和从右到左读是相同的,这样的数就称为回文素数,例如11,101,313等。编程计算并输出不超过n(100<=n<1000)的回文素数,并统计这些回文素数的个数,其中n的值从键盘输入。
程序运行示例1
Input n:
100↙
11
count=1
程序运行示例2
Input n:
1000↙
11 101 131 151 181 191 313 353 373 383 727 757 787 797 919 929
count=16
输入提示信息:“Input n:\n”
输入格式:"%d"
输出格式:
回文素数的输出格式:"%4d"
统计回文素数个数的输出格式: “\ncount=%d\n”
#include
#include
#include
int HuiNum(int a);
int main()
{
int n,count=1;
printf("Input n:\n");
scanf("%d",&n);
printf("%4d",11);
for(int i=100;i<=n;i++){
if(HuiNum(i)){
count++;
printf("%4d",i);
}
}
printf("\ncount=%d\n",count);
return 0;
}
int HuiNum(int a){
int flag = 1;
for(int i=2;i<=sqrt(a);i++){
if(a%i==0){
flag = 0;
break;
}
}
if(flag && a%10==a/100){
return 1;
}else{
return 0;
}
}
题目内容:
形如2i-1的素数,称为梅森尼数。编程计算并输出指数i在[2,n]中的所有梅森尼数,并统计这些梅森尼数的个数,其中n的值由键盘输入,并且n的值不能大于50。其中,2i表示2的i次方,请不要使用pow(2,i)编程计算,应采用循环累乘求积的方式计算2^i。
提示:当i 超过30以后,2^i-1的值会很大,不能用long型变量来存储,必须使用double类型来存储。对于double类型变量x(不是整型)不能执行求余运算,即不能用 x % i == 0来判断x是否能被i整除,可以使用 x / i == (int)(x/i)来判断x是否能被i整除。
程序运行示例:
Input n:
50↙
2^2-1=3
2^3-1=7
2^5-1=31
2^7-1=127
2^13-1=8191
2^17-1=131071
2^19-1=524287
2^31-1=2147483647
2^49-1=562949953421311
count=9
输入提示信息:“Input n:\n”
输入格式: “%d”
输出格式:
梅森尼数的输出格式: “2^%d-1=%.0lf\n”
统计梅森尼数个数的输出格式: “count=%d\n”
#include
#include
#include
int SuNum(double a);
int main()
{
int n,count=0;
double x=1,y;
printf("Input n:\n");
scanf("%d",&n);
for(int i=1;i<=n;i++){
x=x*2;
y=x-1;
if(SuNum(y)){
count++;
printf("2^%d-1=%.0lf\n",i,y);
}
}
printf("count=%d\n",count);
return 0;
}
int SuNum(double a){
if(a<2){
return 0;
}
int flag = 1;
for(int i=2;i<=sqrt(a);i++){
if(a/i==(int)(a/i)){
flag = 0;
break;
}
}
return flag;
}
题目内容:某公司有职员(最多50人),试编写程序打印最高工资、最低工资和平均工资。公司人数在主函数给出,职工工资输入请调用Input函数,计算最高工资、最低工资和平均工资调用Compute函数,打印最高工资、最低工资和平均工资在主函数。请在给定的框架下写出完整程序。
#include
void Input(float wage[], int n);
float Compute(float wage[], int n, float *pmaxwage, float *pminwage);
int main()
{
float wage[50],maxwage,minwage,avewage;
int n;
printf("Please input n:\n");
scanf("%d",&n);
Input( ... );
avewage=Compute( ... );
printf("maxwage=%.2f, minwage=%.2f, avewage=%.2f\n",maxwage,minwage,avewage);
return 0;
}
void Input(float wage[], int n)
{
...
}
float Compute(float wage[], int n, float *pmaxwage, float *pminwage)
{
...
}
程序运行结果示例:
Please input n:
10↙
1200.34↙
2378.48↙
8600.56↙
5372.42↙
6317.25↙
7265.88↙
2156.39↙
1876.31↙
1792.14↙
4326.22↙
maxwage=8600.56, minwage=1200.34, avewage=4128.60
输入人数提示信息:“Please input n:\n”
人数输入格式:"%d"
工资输入格式:"%f"
输出格式:“maxwage=%.2f, minwage=%.2f, avewage=%.2f\n”
#include
void Input(float wage[], int n);
float Compute(float wage[], int n, float *pmaxwage, float *pminwage);
int main()
{
float wage[50],maxwage,minwage=0,avewage=0;
int n;
printf("Please input n:\n");
scanf("%d",&n);
Input(wage,n);
avewage=Compute(wage,n,&maxwage,&minwage);
printf("maxwage=%.2f, minwage=%.2f, avewage=%.2f\n",maxwage,minwage,avewage);
return 0;
}
void Input(float wage[], int n)
{
for(int i=0;i<n;i++)
scanf("%f",&wage[i]);
}
float Compute(float wage[], int n, float *pmaxwage, float *pminwage)
{
float sum = 0.0;
*pmaxwage = wage[0];
*pminwage = wage[0];
for(int i=0;i<n;i++){
sum+=wage[i];
if(*pmaxwage < wage[i])
*pmaxwage = wage[i];
if(*pminwage > wage[i])
*pminwage = wage[i];
}
return sum/n;
}