1.写一个函数,判断某一个四位数是不是玫瑰花数(所谓玫瑰花数即该四位数各位数字的四次方和恰好等于该数本身,如:1634=14+64+34+44)。在主函数中从键盘任意输入一个四位数,调用该函数,判断该数是否为玫瑰花数,若是则输出“yes”,否则输出“no”。
#include<stdio.h>
int fun(int i){
if(pow(i%10,4)+pow(i%100/10,4)+pow(i%1000/100,4)+pow(i%10000/1000,4)) return yes;
else return no;
}
void main(){
int i;
printf("请输入一个四位数:");
scanf("%d",&i);
printf("输入的是玫瑰花数吗? %d",fun(i));
system("pause");
}
2.编写一个求1——n内的偶数和的函数,在main()函数中输入n,然后调用该函数求1——n的偶数和并输出。
#include<stdio.h>
int fun(int n){
int i,sum;
for(i=1;i<=n;i++){
if(i%2==0) sum+=i;
}
return sum;
}
void main(){
int n;
printf("请输入一个数n:");
scanf("%d",&n);
printf("1到n的偶数和是:%d",fun(n));
system("pause");
}
3.若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765, c1=‘a’,c2=‘b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
#include<stdio.h>
void main(){
int a=3,b=4,c=5,u=51274,n=128765;
faoat=1.2,y=2.4,z=-3.6;
char c1='a',c2='b';
printf("a= %d b= %d c= %d\n,a,b,c");
printf("x=%.6f,y=%.6f,z= %.6f\n,x,y,z");
printf("x+y= %.3f y+z= %.2f z+x= %.2f\n,(x+y),(y+z),(z+x)");
printf("c1= %s or %ch(ASCII)\nc2= %s\n or %ch(ASCII),c1,c1,c2,c2");
system("pause");
}
4.输入两个正整数m和n,求其最大公约数和最小公倍数。
#include<stdio.h>
int main()
{
int a,b,n,r;
scanf("%d%d",&a,&b);
n=2,r=2;
while(a%n!=0||b%n!=0)
n++;
while(r%a!=0||r%b!=0)
r++;
printf("%d,%d\n",n,r);
return 0;
}
5.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include <stdio.h>
int main()
{int x=0,y=0,z=0;
char ch;
ch=getchar();
while(ch!='\n')
{ if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
x++;
else if(ch>='0'&&ch<='9')
y++;
else z++;
ch=getchar(); }
printf("英文字母有:%d个,数字有:%d个,其它字符有:%d个",x,y,z);
}
#include<stdio.h>
int main() //main后面是有括号,main是一个函数
{
char ch;
int letter=0,i,blank=0,number=0,others=0; //语句结束是有分号的。
printf("请输入一串字符:");
//scanf("%c",&ch); //既然下面用getchar()获取,何必使用scanf多此一举呢??
while((ch=getchar())!= '\n') //注意括号的位置,而且括号一一对应,不能多个,少个。
{
if('a'<=ch && ch<='z' || 'A'<=ch && ch<='Z') //怎么都少半个括号,??
{
letter++;
}
else if('0'<=ch&&ch<='9')
{
number++;
}
else if(ch==' ')
{
blank++;
}
else
{
others++;
}
}
printf("英文字母、空格、数字、其他字符的个数分别为:%d,%d,%d,%d\n",letter,blank,number,others);
return 0;
}
6.求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。
#include<stdio.h>
int fun(int n){
int Sn,i,j,a=2;
for(i=1,j=n;i<=n;i++,j--){
Sn += i*a*pow(10,j);
}
}
void main(){
int n;
printf("请输入a的数量n:");
scanf("%d",&n);
printf("一个2到n个2之和为:%d",fun(n));
system("pause");
}
7.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。编程序找出1000之内的所有完数,并按下面格式输出其因子:
6 its factors are 1、2、3
#include<stdio.h>
#define MAX 1000
void main()
{
for(int i=1;i<MAX;i++)
{
int temp=0;
for(int j=1;j<i;j++)
if(i%j==0)
temp=temp+j;
if(temp==i)
printf("%d\n",temp);
}
}
#include<stdio.h>
main()
{
int m,i,s;
for(m=2;m<1000;m++)
{
s=1;
for(i=2;i<=m/2;i++)
{
if(m%i==0)
s=s+i;
}
if(s==m)
{
printf("%d is 完数 its factors are ",m);
for(i=1;i<=m;i++)
if(m%i==0)
printf("%d ",i);
printf("\n");
}
}
}
8.猴子吃桃问题
#include<stdio.h>
int fun(int n){
int i,sum=1;
for(i=0;i<n;i++){
sum=(1+sum)*2;
}
return sum;
}
void main(){
int n=10;
printf("第一天共摘了 %d 个桃子",fun(n));
}
9.一个已按从小到大的顺序排好的数组,今输入一个数要求按原来排序的规律将它插入数组中。
#include <stdio.h>
void SelectSort(int A[],int n);
void main()
{
int B[100]={23,12,44,12,45,89,90,22,11,7};
int i,n=10;
SelectSort(B,n);
printf("原排序顺序为:\n");
for(i=0;i<n;i++)
{
printf("%d ",B[i]);
}
printf("\n");
printf("请输入一个数\n");
scanf("%d",&B[n]);
n=n+1;
SelectSort(B,n);
printf("输入一个数的排序顺序为:\n");
for(i=0;i<n;i++)
{
printf("%d ",B[i]);
}
printf("\n");
}
void SelectSort(int A[],int n)
{
int i,j;
int temp=0;
/*将第i个与之后所有元素进行比较后输出最小的那个,因为只需排n-1次*/
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(A[i]>A[j])
{
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
}
}
10.将一个数组的值按逆序重新存放来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。
#include <stdio.h>
void reverse(int a[], int n)
{
int* p=a+n-1;
int t;
while(a<p)
t=*p, *p--=*a, *a++=t;
}
void main()
{
int a[5]={8,6,5,4,1};
int i;
reverse(a,5);
for(i=0; i<5; i++)
printf("%d ", a[i]);
printf("\n");
}
11.数组的排序(升序,冒泡算法,并提供额外的一种以上的算法)。
//排序
#include<stdio.h>
void main()
{
int num[] = {8,6,5,4,1};
int temp;
int len = sizeof(num)/sizeof(int);
for(int i = 0 ; i<len-1 ; i++){
for(int j = 0 ; j <len - i -1 ; j++ ){
if(num[j]>num[j+1]){
temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
for(int i = 0 ; i<len ; i++){
printf("%d\t",num[i]);
}
}
#include<stdio.h>
void main()
{
int a[5]={8,6,5,4,1};
int i,j;
int temp=0;
for(i=0;i<5;i++)
{
printf("请输入第%d个整数\n",i+1);
scanf("%d",&a[i]);
}
for(i=1;i<5;i++)
{
for(j=0;j<5-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<5;i++)
{
printf("排序后的整数:%d\t",a[i]);
}
}
12.将字符串中的数字字符删除后输出(可以使用字符数组,或者字符串)。
#include<stdio.h>
#include<string.h>
#include<conio.h>
int main()
{
char str[256];
int i,j=0,k;
scanf("%s",str);
for(i=0;i<strlen(str);i++)
if(!((str[i]>=65&&str[i]<=90)||(str[i]>=97&&str[i]<=122)))
{
for(k=i;k<(strlen(str)-1);k++)
str[k]=str[k+1];
str[k]='\0';i--;
}
printf("%s",str);
getch();
}
13.将十进制正整数转换成十六进制。
#include<stdio.h>
int b[32],c=0;
int main()
{
int n,i;
scanf("%d",&n);
while(n>0)
{
b[c++]=n%16;
n/=16;
}
for(i=c-1;i>=0;i--)
if(b[i]<10) printf("%d",b[i]);
else printf("%c",b[i]-10+'A');
}
//二进制
#include <stdio.h>
void main()
{
int result[15] = {0};
int n,i;
printf("输入一个整数:");
scanf("%d",&n);
for(i=0;i<15;i++)
{
result[i] = n%2;
if(!(n = n/2)) break;
}
for(i=14;i>=0;i--)
{
if(1==result[i]) break;
}
if(-1==i) i = 0;
for(;i>=0;i--)
{
printf("%d",result[i]);
}
printf("\n");
}
14.在a数组中查找与x值相同的元素的所在位置。
#include<stdio.h>
void main()
{ int a[11],x,m,*p;
p=a;
printf("please input ten numers:\n");
for(m=1;m<11;m++)
scanf("%d",p+m);
printf("please input x:");
scanf("%d",&x);
m=10;
while( *(m+p)!=x)
m--;
if(m>0) printf("%5d's position is:%4d\n",x,m);
else printf("%d not been found!\n",x);
}
15.把x插到a数组中的下标为k的元素中。
#include <stdio.h>
void fun(int s[], int *n, int k, int x)
{ int i;
for(i=*n-1; i>=k; i- - ) s[i+1]=s[i];
s[k]=x;
*n=*n+1;
}
main()
{ int a[20]={1,2,3,4,5,6,7,8,9,10,11}, i, x=0, k=6, n=11;
fun(a, &n, k, x);
for(i=0; i<n; i++) printf(“%4d”,a[i]); printf(“\n”);
}
20、
#include <iostream>
using namespace std;
int main()
{
int a[5];//用数组存储5个整数
int i,max,maxi,min,mini;//max,min分别存储最大的数和最小的数,maxi,mini分别存储对应的位置
int t;
for(i=0;i<5;i++)
cin>>a[i];//输入5个整数
max=min=a[0];
maxi=mini=0;//假设第一个数是最大的和最小的
for(i=1;i<5;i++)
if(a[i]>max)
{
max=a[i];
maxi=i;
}
else if(a[i]<min)
{
min=a[i];
mini=i;
}
t=a[mini];
a[mini]=a[maxi];
a[maxi]=t;
for(i=0;i<5;i++)
cout<<a[i]<<' ';
cout<<endl;
return 0;
}
#include<stdio.h>
int fun(int i){
if(pow(i%10,4)+pow(i%100/10,4)+pow(i%1000/100,4)+pow(i%10000/1000,4)) return yes;
else return no;
}
void main(){
int i;
printf("请输入一个四位数:");
scanf("%d",&i);
printf("输入的是玫瑰花数吗? %d",fun(i));
system("pause");
}
2.编写一个求1——n内的偶数和的函数,在main()函数中输入n,然后调用该函数求1——n的偶数和并输出。
#include<stdio.h>
int fun(int n){
int i,sum;
for(i=1;i<=n;i++){
if(i%2==0) sum+=i;
}
return sum;
}
void main(){
int n;
printf("请输入一个数n:");
scanf("%d",&n);
printf("1到n的偶数和是:%d",fun(n));
system("pause");
}
3.若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765, c1=‘a’,c2=‘b’。想得到以下输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
#include<stdio.h>
void main(){
int a=3,b=4,c=5,u=51274,n=128765;
faoat=1.2,y=2.4,z=-3.6;
char c1='a',c2='b';
printf("a= %d b= %d c= %d\n,a,b,c");
printf("x=%.6f,y=%.6f,z= %.6f\n,x,y,z");
printf("x+y= %.3f y+z= %.2f z+x= %.2f\n,(x+y),(y+z),(z+x)");
printf("c1= %s or %ch(ASCII)\nc2= %s\n or %ch(ASCII),c1,c1,c2,c2");
system("pause");
}
4.输入两个正整数m和n,求其最大公约数和最小公倍数。
#include<stdio.h>
int main()
{
int a,b,n,r;
scanf("%d%d",&a,&b);
n=2,r=2;
while(a%n!=0||b%n!=0)
n++;
while(r%a!=0||r%b!=0)
r++;
printf("%d,%d\n",n,r);
return 0;
}
5.输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
#include <stdio.h>
int main()
{int x=0,y=0,z=0;
char ch;
ch=getchar();
while(ch!='\n')
{ if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z')
x++;
else if(ch>='0'&&ch<='9')
y++;
else z++;
ch=getchar(); }
printf("英文字母有:%d个,数字有:%d个,其它字符有:%d个",x,y,z);
}
#include<stdio.h>
int main() //main后面是有括号,main是一个函数
{
char ch;
int letter=0,i,blank=0,number=0,others=0; //语句结束是有分号的。
printf("请输入一串字符:");
//scanf("%c",&ch); //既然下面用getchar()获取,何必使用scanf多此一举呢??
while((ch=getchar())!= '\n') //注意括号的位置,而且括号一一对应,不能多个,少个。
{
if('a'<=ch && ch<='z' || 'A'<=ch && ch<='Z') //怎么都少半个括号,??
{
letter++;
}
else if('0'<=ch&&ch<='9')
{
number++;
}
else if(ch==' ')
{
blank++;
}
else
{
others++;
}
}
printf("英文字母、空格、数字、其他字符的个数分别为:%d,%d,%d,%d\n",letter,blank,number,others);
return 0;
}
6.求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。例如:2+22+222+2222+22222(n=5),n由键盘输入。
#include<stdio.h>
int fun(int n){
int Sn,i,j,a=2;
for(i=1,j=n;i<=n;i++,j--){
Sn += i*a*pow(10,j);
}
}
void main(){
int n;
printf("请输入a的数量n:");
scanf("%d",&n);
printf("一个2到n个2之和为:%d",fun(n));
system("pause");
}
7.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。编程序找出1000之内的所有完数,并按下面格式输出其因子:
6 its factors are 1、2、3
#include<stdio.h>
#define MAX 1000
void main()
{
for(int i=1;i<MAX;i++)
{
int temp=0;
for(int j=1;j<i;j++)
if(i%j==0)
temp=temp+j;
if(temp==i)
printf("%d\n",temp);
}
}
#include<stdio.h>
main()
{
int m,i,s;
for(m=2;m<1000;m++)
{
s=1;
for(i=2;i<=m/2;i++)
{
if(m%i==0)
s=s+i;
}
if(s==m)
{
printf("%d is 完数 its factors are ",m);
for(i=1;i<=m;i++)
if(m%i==0)
printf("%d ",i);
printf("\n");
}
}
}
8.猴子吃桃问题
#include<stdio.h>
int fun(int n){
int i,sum=1;
for(i=0;i<n;i++){
sum=(1+sum)*2;
}
return sum;
}
void main(){
int n=10;
printf("第一天共摘了 %d 个桃子",fun(n));
}
9.一个已按从小到大的顺序排好的数组,今输入一个数要求按原来排序的规律将它插入数组中。
#include <stdio.h>
void SelectSort(int A[],int n);
void main()
{
int B[100]={23,12,44,12,45,89,90,22,11,7};
int i,n=10;
SelectSort(B,n);
printf("原排序顺序为:\n");
for(i=0;i<n;i++)
{
printf("%d ",B[i]);
}
printf("\n");
printf("请输入一个数\n");
scanf("%d",&B[n]);
n=n+1;
SelectSort(B,n);
printf("输入一个数的排序顺序为:\n");
for(i=0;i<n;i++)
{
printf("%d ",B[i]);
}
printf("\n");
}
void SelectSort(int A[],int n)
{
int i,j;
int temp=0;
/*将第i个与之后所有元素进行比较后输出最小的那个,因为只需排n-1次*/
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(A[i]>A[j])
{
temp=A[i];
A[i]=A[j];
A[j]=temp;
}
}
}
}
10.将一个数组的值按逆序重新存放来顺序为:8,6,5,4,1。要求改为:1,4,5,6,8。
#include <stdio.h>
void reverse(int a[], int n)
{
int* p=a+n-1;
int t;
while(a<p)
t=*p, *p--=*a, *a++=t;
}
void main()
{
int a[5]={8,6,5,4,1};
int i;
reverse(a,5);
for(i=0; i<5; i++)
printf("%d ", a[i]);
printf("\n");
}
11.数组的排序(升序,冒泡算法,并提供额外的一种以上的算法)。
//排序
#include<stdio.h>
void main()
{
int num[] = {8,6,5,4,1};
int temp;
int len = sizeof(num)/sizeof(int);
for(int i = 0 ; i<len-1 ; i++){
for(int j = 0 ; j <len - i -1 ; j++ ){
if(num[j]>num[j+1]){
temp = num[j];
num[j] = num[j+1];
num[j+1] = temp;
}
}
}
for(int i = 0 ; i<len ; i++){
printf("%d\t",num[i]);
}
}
#include<stdio.h>
void main()
{
int a[5]={8,6,5,4,1};
int i,j;
int temp=0;
for(i=0;i<5;i++)
{
printf("请输入第%d个整数\n",i+1);
scanf("%d",&a[i]);
}
for(i=1;i<5;i++)
{
for(j=0;j<5-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(i=0;i<5;i++)
{
printf("排序后的整数:%d\t",a[i]);
}
}
12.将字符串中的数字字符删除后输出(可以使用字符数组,或者字符串)。
#include<stdio.h>
#include<string.h>
#include<conio.h>
int main()
{
char str[256];
int i,j=0,k;
scanf("%s",str);
for(i=0;i<strlen(str);i++)
if(!((str[i]>=65&&str[i]<=90)||(str[i]>=97&&str[i]<=122)))
{
for(k=i;k<(strlen(str)-1);k++)
str[k]=str[k+1];
str[k]='\0';i--;
}
printf("%s",str);
getch();
}
13.将十进制正整数转换成十六进制。
#include<stdio.h>
int b[32],c=0;
int main()
{
int n,i;
scanf("%d",&n);
while(n>0)
{
b[c++]=n%16;
n/=16;
}
for(i=c-1;i>=0;i--)
if(b[i]<10) printf("%d",b[i]);
else printf("%c",b[i]-10+'A');
}
//二进制
#include <stdio.h>
void main()
{
int result[15] = {0};
int n,i;
printf("输入一个整数:");
scanf("%d",&n);
for(i=0;i<15;i++)
{
result[i] = n%2;
if(!(n = n/2)) break;
}
for(i=14;i>=0;i--)
{
if(1==result[i]) break;
}
if(-1==i) i = 0;
for(;i>=0;i--)
{
printf("%d",result[i]);
}
printf("\n");
}
14.在a数组中查找与x值相同的元素的所在位置。
#include<stdio.h>
void main()
{ int a[11],x,m,*p;
p=a;
printf("please input ten numers:\n");
for(m=1;m<11;m++)
scanf("%d",p+m);
printf("please input x:");
scanf("%d",&x);
m=10;
while( *(m+p)!=x)
m--;
if(m>0) printf("%5d's position is:%4d\n",x,m);
else printf("%d not been found!\n",x);
}
15.把x插到a数组中的下标为k的元素中。
#include <stdio.h>
void fun(int s[], int *n, int k, int x)
{ int i;
for(i=*n-1; i>=k; i- - ) s[i+1]=s[i];
s[k]=x;
*n=*n+1;
}
main()
{ int a[20]={1,2,3,4,5,6,7,8,9,10,11}, i, x=0, k=6, n=11;
fun(a, &n, k, x);
for(i=0; i<n; i++) printf(“%4d”,a[i]); printf(“\n”);
}
20、
#include <iostream>
using namespace std;
int main()
{
int a[5];//用数组存储5个整数
int i,max,maxi,min,mini;//max,min分别存储最大的数和最小的数,maxi,mini分别存储对应的位置
int t;
for(i=0;i<5;i++)
cin>>a[i];//输入5个整数
max=min=a[0];
maxi=mini=0;//假设第一个数是最大的和最小的
for(i=1;i<5;i++)
if(a[i]>max)
{
max=a[i];
maxi=i;
}
else if(a[i]<min)
{
min=a[i];
mini=i;
}
t=a[mini];
a[mini]=a[maxi];
a[maxi]=t;
for(i=0;i<5;i++)
cout<<a[i]<<' ';
cout<<endl;
return 0;
}