c++

来源:互联网 发布:淘宝有没有电脑客户端 编辑:程序博客网 时间:2024/06/06 05:41
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;
}
0 0