【A组:各种数】
1、 输入两个正整数,m和n,求其最大公约数和最小公倍数。
分析:
最大公约数:如果数a能被数b整除,a就叫做b的倍数,b就叫做a的约数。如:16能被2整除,16就是2的倍数,2就是16的约数。
程序:
#include
using namespace std;
//求两个数的最大公约数
int fun1(int a, int b)
{
int temp;
while (a%b)
{
temp = b;
b = a%b;
a = temp;
}
return b;
}
//求两个数的最大公倍数
int fun2(int a, int b)
{
int temp;
if (a
{
temp = a;
a = b;
b = temp;
}
for (int i=1; i<=b; i++)
{
if (!((a*i)%b))
{
return a*i;
}
}
}
void main()
{
int a,b;
cout<
cin>>a;
cout<
cin>>b;
cout<
cout<
}
2、 打印出100~999之间的所有水仙花数。
分析:
水仙花数:水仙花数是指一个n位数( n≥3 ),它的每个位上的数字的n次幂之和等于它本身。(例如:1^3 + 5^3 + 3^3 = 153)
程序:
#include
void main()
{
int i,j,k,n;
printf("100~999之间的所有水仙花数:\n");
for(n=100;n<1000;n++)
{
i=n/100; //求百位
j=n/10-i*10; //求十位
k=n%10;//求个位
if(n==i*i*i+j*j*j+k*k*k)
{
printf("%d ",n);
}
}
printf("\n");
}
3、 编程实现:计算1到100之间的奇数之和及偶数之和。
程序:
#include
void main ()
{
int n,even=0,odd=0;
for(n=1;n<=50;n++)
{
even+=2*n;
odd+=2*n-1;
}
printf("1到100间的偶数的和为%d:\n",even);
printf("1到100间的奇数的和为%d:\n",odd);
}
4、 输入一个正整数,将其用质因子的乘积表示,并输出结果,格式为:12=2×2×3。
分析:
质数:质数又称素数。指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。
质因子:在数论里,某一正整数的质因子指能整除该数的质数整数。
程序:
#include
void factors(int number)
{
int i,factor;
for(i=2;i<=number;i++)
{
if(number%i==0)
{
factor=i;
break;
}
}
printf("%d*",factor);
if(number!=i)
{
number=number/i;
factors(number);
}
else
{
for(i=0;i<2;i++)
{
putchar('\b');
putchar(' ');
}
}
}
void main()
{
int m;
printf("Please enter a number:\n");
scanf("%d",&m);
printf("%d=",m);
factors(m);
printf("\n");
}
5、 编写一个函数,判断一个正整数是否为完数:如果一个数的除它本身以外的所有因数之和等于它本身,则它就是完数。主函数中找出1000以内的所有完数。
约数:整数a除以整数b(b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。a叫b的倍数,b叫a的约数(或因数)。在大学之前,所指的一般都是正约数。约数和倍数相互依存,不能单独说某个数是约数或倍数。一个数的约数是有限的。
完数:完全数(Perfectnumber),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
程序:
#include
using namespace std;
int main()
{
int i,j,k,sum;
cout<
for(i=2;i<=1000;i++)
{
k=i/2;
sum=0;
for(j=1;j<=k;j++)
if(i%j==0)
sum=sum+j;
if(sum==i)
cout<
}
return 0;
}
6、 编函数isprime判断正整m是否为素数;如果是素数,返回正整数1,否则返回0;主函数中调用isprime,找出2到1000之间的所有素数。
素数:见题目4。 程序:
#include
#include
void main()
{
char a[40],b[40];
int i;
printf("请输入a:\n");
scanf("%s",a);
for(i=0;i<=strlen(a);i++)
{
b[i]=a[i];
}
printf("b:%s\n",b);
}
【B组:年月日相关】
1、 给出年、月、日,计算该日是该年的第几天。
程序:
#include
void main()
{
int sum_day(int,int);
int leap(int year);
int year,month,day,days;
printf("input date(year,month,day): ");
scanf("%d,%d,%d",&year,&month,&day);
printf("%d/%d/%d ",year,month,day);
days=sum_day(month,day);
if(leap(year)&&month>=3)
{
days=days+1;
}
printf("is the %dth day in this year.\n",days);
}
int sum_day(int month,int day)
{
int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
for(i=1;i
{
day+=day_tab[i];
}
return(day);
}
int leap(int year)
{
int leap;
leap=year%4==0&&year%100!=0||year%400==0;
return(leap);
}
2、 输入年号,计算这一年的2月份的天数,将结果输出。
程序:
#include
void main()
{
int year,leap;
printf("请输入年份:\n");
scanf("%d",&year);
if(year%4==0)
{
if(year%100==0)
{
if(year%400==0)
leap=1;
else
leap=0;
}
else
leap=1;
}
else
leap=0;
if(leap)
printf("%d年的2月有29天",year);
else
printf("%d年的2月有28天",year);
}
3、 编程判断对输入的任何一个年份是否是闰年,将结果输出。
程序:
#include
void main()
{
int n;
printf("输入年份:");
scanf("%d",&n);
if (n%4==0&&n%100!=0||n%400==0)
printf("闰年\n");
else
printf ("不是闰年\n");
}
【C组:字符相关】
1、 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其他字符的个数,在主函数中输入字符串以及输出上述的结果。
程序:
#include
int letter,digit,space,others;
void main()
{
void count(char[]);
char text[80];
printf("输入字符串:");
gets(text);
printf("字符串是:");
puts(text);
letter=0;
digit=0;
space=0;
others=0;
count(text);
printf("\nletter:%d\n,digit:%d\n,space:%d\n,others:%d\n",letter,digit,space,others);
}
void count(char str[])
{
int i;
for(i=0;str[i]!='\0';i++)
{
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z'))
{
letter++;
}
else if(str[i]>='0'&&str[i]<='9')
{
digit++;
}
else if(str[i]==32)
{
space++;
}
else
{
others++;
}
}
}
2、 输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是小写字母,则把它变成大写字母;其它字符不变,请编程。
程序:
#include
void main()
{
char ch;
ch=getchar();
if ((ch>=65)&&(ch<=90))
{
ch=ch+32;
}
else if ((ch>=97)&&(ch<=122))
{
ch=ch-32;
}
printf("%c\n",ch);
}
【D组:字符串相关】
1、 编写一个程序,将两个字符串连接起来,不要使用strcat函数。
程序:
#include
void main()
{
char str1[20],str2[20];
int i=0,j=0;
printf("请输入字符串1:\n");
scanf("%s",str1);
printf("请输入字符串2:\n");
scanf("%s",str2);
while (str1[i]!='\0')
{
i++;
}
while (str2[j]!='\0')
{
str1[i++]=str2[j++];
}
str1[i]='\0';
printf("合并之后的字符串为:%s\n",str1);
}
2、 编写一个程序,将字符数组a中的全部字符复制到字符数组b中。不要使用strcpy函数。
程序:
#include
#include
void main()
{
char a[40],b[40];
int i;
printf("请输入a:\n");
scanf("%s",a);
for(i=0;i<=strlen(a);i++)
{
b[i]=a[i];
}
printf("b:%s\n",b);
}