1. 编程实现一个输入指定范围内的整数的函数getint,其完整的函数原型为:
int getint(int min, int max);,它负责接收用户的输入,进行验证,保证接收的一定是一个介于min和max之间([min, max]区间内)的一个整数并最后返回该整数。如果用户输入不合法,则会提示继续输入,直到输入合法时为止。要求编写完整的程序并测试你所写的getint函数。已知[min, max]区间为[3,100]。
***输入提示信息***:"请输入[%d..%d]间的一个整数:\n"
***输入数据格式***:在getint()函数中输入数据用"%d"
***输出数据格式***:"请输入[%d..%d]间的一个整数:\n"
"你输入的整数为:%d\n"
程序的运行示例如下:
请输入[3..100]间的一个整数:0
请输入[3..100]间的一个整数:102
请输入[3..100]间的一个整数:200
请输入[3..100]间的一个整数:36
你输入的整数为:36
#include<stdio.h>
int getint(int min, int max);
int main()
{
int a = 3, b = 100;
getint(3, 100);
return 0;
}
int getint(int min, int max)
{
int i;
do
{
//谁能从题目中看出这里要加个\n???
printf("请输入[3..100]间的一个整数:\n");
scanf("%d",
}
while (i < 3 || i > 100);
printf("你输入的整数为:%d", i);
return 0;
}
2. 英雄卡。小明非常迷恋收集各种干脆面里面的英雄卡,为此他曾经连续一个月都只吃干脆面这一种零食,但是有些稀有英雄卡真的是太难收集到了。后来某商场搞了一次英雄卡兑换活动,只要你有三张编号连续的英雄卡,你就可以换任意编号的英雄卡。小明想知道他最多可以换到几张英雄卡(新换来的英雄卡不可以再次兑换)
输入提示信息:"Input n:", "Input card numbers:"
输入数据格式:"%d"
输出数据格式:"%d"
程序运行结果示例:
Input n:6
Input card numbers:3 1 2 4 4 5
Exchanged:1
#include<stdio.h>
#include<stdlib.h>
int count[100005] = {0};
main()
{
int i, j, k, number, n, temp;
number = 0;
printf("Input n:");
scanf("%d",
int *a;
a = (int *)malloc(n * sizeof(int));
printf("Input card numbers:");
for (i = 0; i < n; i++)
{
scanf("%d",
count[a[i]]++;
}
for (i = 0; i < n; i++)
{
temp = i;
for (j = i + 1; j < n; j++)
{
if (a[j] < a[temp])
temp = j;
}
if (temp != i)
{
k = a[i];
a[i] = a[temp];
a[temp] = k;
}
}
for (i = 0; i < n; i++)
{
while (count[a[i]] > 0 && count[a[i] + 1] > 0 && count[a[i] + 2] > 0)
{
count[a[i]]--;
count[a[i] + 1]--;
count[a[i] + 2]--;
number++;
}
}
printf("Exchanged:%d", number);
}
3. 如果一个正整数m的所有小于m的不同因子(包括1)加起来正好等于m本身,那么就被称它为完全数。它是指这样的一些特殊的自然数,它所有的真因子(即除了自身以外的约数)的和,恰好等于它本身。
注意:1没有真因子,所以不是完全数。例如,6就是一个完全数,是因为6 = 1 + 2 + 3。
请编写一个判断完全数的函数IsPerfect(),然后判断从键盘输入的整数是否是完全数。
要求:按如下原型编写判断完全数的函数,若函数返回0,则代表不是完全数,若返回1,则代表是完全数。
int IsPerfect(int x);
**要求输入提示信息为: "Input m:\n"
**要求输入格式为: "%d"
**要求输出格式为
"%d is a perfect number\n"
"%d is not a perfect number\n"
注:不能使用指针、结构体、共用体、文件、goto、枚举类型进行编程。
#include<stdio.h>
#include<math.h>
int IsPerfect(int x);
main()
{
int a;
printf("Input m:\n");
scanf("%d",
if (IsPerfect(a))
{
printf("%d is a perfect number\n", a);
}
else
{
printf("%d is not a perfect number\n", a);
}
}
int IsPerfect(int x)
{
int i, t, sum = 1;
t = sqrt(x);
if (x <= 1)
return 0;
for (i = 2; i <= t; i++)
{
if (x % i == 0)
sum += (i + x / i);
}
//若x的平方根为整数,则减去一次
if (x % t == 0)
sum -= t;
if (sum == x)
return 1;
return 0;
}
4. 任意输入一个整数m,若m不是素数,则从小到大输出其所有不包括1和自身的因子;否则输出“没有因子,是素数”的相关提示信息。
输入提示信息:"Please enter a number:"
输入格式:"%d"
输出格式:
有因子时:"%d\n"
无因子时:"It is a prime number.No divisor!\n"
输入的整数小于2时输出:"It is not a prime number.No divisor!\n"
#include<stdio.h>
int IsPerfect(int x);
int main()
{
int i, a, sum = 0;
printf("Input n:");
scanf("%d",
for (i = 2; i <= a; i++)
{
if (IsPerfect(i))
{
sum += i;
}
}
printf("sum = %d\n", sum);
}
int IsPerfect(int x)
{
int i;
for (i = 2; i < x; i++)
{
if (x % i == 0)
return 0;
}
return 1;
}
5. 矩阵乘法。编写一个C函数实现M行K列矩阵与K行N列的矩阵的乘积。设A为M行K列的矩阵,B为K行N列的矩阵,则C=A×B的积为M行N列的矩阵。
矩阵乘法的规则是:设A[m,k],B[k,n],则C[m,n]=A[m,k]×B[k,n],其中:
C[i,j]=∑kl=1A[i,l]×B[l,j], (i=1,2,…,m j=1,2,…,n)
**输出格式要求:"\t%d" "array A=\n" "array B=\n" "array C=\n"
程序运行示例如下:
array A=
1 2 3
4 5 6
array B=
1 1
0 2
2 0
array C=
7 5
16 14
#include<stdio.h>
main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2]={{1,1},{0,2},{2,0}};
int c[2][2]={0};
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
for(int k=0;k<3;k++)
{
c[i][j]+=a[i][k]*b[k][j];
}
}
}
printf("array A=\n");
for(int i=0;i<2;i++)
{
for(int j=0;j<3;j++)
{
printf("\t%d",a[i][j]);
}
printf("\n");
}
printf("array B=\n");
for(int i=0;i<3;i++)
{
for(int j=0;j<2;j++)
{
printf("\t%d",b[i][j]);
}
printf("\n");
}
printf("array C=\n");
for(int i=0;i<2;i++)
{
for(int j=0;j<2;j++)
{
printf("\t%d",c[i][j]);
}
printf("\n");
}
}