C++实用的程序有什么?

C++实用的程序有什么?,第1张

}五:值交换:

1、输入10个整数,将其中最小的数与第一个数对换,把最大的一个数与最后一个对换。写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。

解:

main ( )

{int number[10]

input(number)

max_min_value(number)

output(number)

}

input(int number[10])

{int i

print(“Input 10 number:”)

for (i=0i<10i++)

scanf(“%d”,&number[i])

}

max_min_value(int array[10])

{int * max,* min, * p, * array_end

array_end=array+10

max=min=array

for (p=array+1p<array_endp++)

if (* p>* max) max=p

else if (* p<* min) min=p

* p=array[0]array[0]=* minmin=* p

* p=array[9]array[9]=* maxmax=* p

return

}

output(int array[10])

{int * p

printf(“Now,they are:”)

for (p=arrayp<=array+9p++)

printf(“%d”,* p)

}

补充:5、给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。

解:程序如下

#include "stdio.h"

void main()

{

float score

char grade

printf("请输入学生成绩:")

scanf("%f",&score)

while(score>100 || score<0)

{

printf("\n输入有误,请重输")

scanf("%f",&score)

}

switch((int)(score/10))

{

case 10:

case 9:grade='A'break

case 8:grade='B'break

case 7:grade='C'break

case 6:grade='D'break

case 5:

case 4:

case 3:

case 2:

case 1:

case 0:grade='E'

}

printf("\n成绩是%5.1f,相应的等级是%c。\n",score,grade)

}

6.14打印出以下图案:

解:

main ( )

{ int I,j,k

for (i=0i<=3i++)

{for (j=0j<=2-ij++)

printf(“ ”)

for (k=0k<=2*ik++)

printf(“*”)

printf(“\n”)

}

for (i=0i<=2i++)

{for (j=0j<=ij++)

printf (“ ”)

for (k=0k<=4-2*ik++)

printf(“*”)

printf(“\n”)

}

}

运行结果:*

* * *

* * * * *

* * * * * * *

* * * * *

* * *

*

printf(“请输入3个整数:”)

scanf(“%d,%d,%d”,&a,&b,&c)

if (a<b)

if (b<c)

printf(“max=%d\n”,c)

else

printf(“max=%d\n”,b)

else if (a<c)

printf(“max=%d\n”,c)

else

printf(“max=%d\n”,a)

}

方法二:使用条件表达式,可以使程序更简明,清晰。

main ( )

{ int a,b,c,temp,max

printf(“请输入3个整数:”)

scanf(“%d,%d,%d”,&a,&b,&c)

temp=(a>b)? a:b

max=(temp>c)? temp:c

printf(“3个整数中最大数是%d\n”,max)

}

2、输入4个整数,要求按由小到大的顺序输出。

解:程序如下

#include "stdio.h"

void main()

{

int t,a,b,c,d

printf("请输入4个整数:")

scanf("%d,%d,%d,%d",&a,&b,&c,&d)

printf("a=%d,b=%d,c=%d,d=%d",a,b,c,d)

if(a>b)

{t=aa=bb=t}

if(a>c)

{t=aa=cc=t}

if(a>d)

{t=aa=dd=t}

if(b>c)

{t=bb=cc=t}

if(b>d)

{t=bb=dd=t}

if(c>d)

{t=cc=dd=t}

printf("排序结果如下:\n")

printf("%d %d %d %d\n",a,b,c,d)

}

3、输入3个整数,按由小到大的顺序输出。

main ( )

{int n1,n2,n3

int * p1,* p2,* p3

printf(“Input three integers n1,n2,n3:”)

scanf(“%d,%d,%d”,&n1,&n2,&n3)

p1=&n1

p2=&n2

p3=&n3

if (n1>n2) swap (p1,p2)

if (n1>n3) swap (p1,p3)

if (n1>n3) swap (p2,p3)

printf(“Now,the order is:%d,%d,%d\n”,n1,n2,n3)

}

swap (int * p1,int * p2)

{int p

p=* p1* p1= * p2* p2=p

}

4、用选择法对10个整数排序(从小到大)。

解:选择排序的思路如下:

设有10个元素a[1]~a[10],将a[1]与a[2]~a[10]比较,若a[1]比a[2]~a[10]都小,则不进行交换,即无任何 *** 作。若a[2]~a[10]中有一个以上比a[1]小,则将其中最小的一个(假设为a[i])与a[1]交换,此时a[1]中存放了10个中最小的数。第二轮将a[2]与a[3]~a[10]比较,将剩下9个数中的最小者a[i]与a[2]对换,此时a[2]中存放的是10个中第2小的数。依此类推,共进行9轮比较,a[1]到a[10]就已按由小到大的顺序存放。

程序如下:

main ( )

{ int i,j,min,a[11]

printf(“Enter data:\n”)

for (i=1i<=10i++)

{printf(“a[%d]=”,i)

scanf(“%d”,&a[i])

}

printf(“\n”)

for (i=1i<=10i++)

pritnf(“]”,a[i])

printf(“\n”)

for (i=1i<=9i++)

{min=i

for (j=i+1j<=10j++)

if (a[min]>a[j]) min=j

a[0]=a[i]

a[i]=a[min]

a[min]=a[0]

}

printf(“\n The sorted numbers:\n”)

for (i=1i<=10i++)

printf(“]”,a[i])

}

5、写一函数,用“起泡法”对输入的10个字符按由小到大的顺序排列。

解:sort ( )函数的作用是排序。程序如下:

#define N 10

char str[N]

main ( )

{void sort(char str[])

int i,flag

for (flag=1flag==1)

{printf("\nInput string:\n")

scanf("%s",&str)

if (strlen(str)>N)

printf("String too long,input again!")

else

flag=0

}

sort(str)

printf("string sorted:\n")

for (i=0i<Ni++)

printf("%C",str[i])

}

void sort(char str[])

{int i,j

char t

for (j=1j<Nj++)

for (i=0(i<N-j) &&(str[i]!='\0')i++)

if (str[i]>str[i+1])

{t=str[i]

str[i]=str[i+1]

str[i+1]=t

}

}

二:最大公约数

1、输入两个正整数m和n,求其最大公约数和最小公倍数。

解:用辗转相除法求最大公约数

main ( )

{ int p,r,n,m,temp

printf(“请输入两个正整数n,m:”)

scanf(“%d,%d”,&n,&m)

if (n<m)

{ temp=n

n=m

m=temp

}

p=n*m

while (m!=0)

{ r=n%m

n=m

m=r

}

printf(“它们的最大公约数为:%d\n”,n)

printf(“它们的最小公倍数为:%d\n”,p/n)

}

2、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。

解:设两个整数为u和v,用碾转相除法求最大公约数的算法如下:

最小公倍数=u×v/最大公约数。据此写出程序:

int hcf(int u,int v)

{int t,r

if (v>u)

{t=uu=vv=t}

while ((r=u%v)!=0)

{u=v

v=r}

return(v)

}

int lcd(int u,int v,int h)

{

return(u*v/h)

}

main ( )

{int u,v,h,l

scanf(“%d,%d”,&u,&v)

h=hcf(u,v)

printf(“H.C.F=%d\n”,h)

l=lcd(u,v,h)

printf(“L.C.D=%d\n”,l)

}

6.14打印出以下图案:

解:

main ( )

{ int I,j,k

for (i=0i<=3i++)

{for (j=0j<=2-ij++)

printf(“ ”)

for (k=0k<=2*ik++)

printf(“*”)

printf(“\n”)

}

for (i=0i<=2i++)

{for (j=0j<=ij++)

printf (“ ”)

for (k=0k<=4-2*ik++)

printf(“*”)

printf(“\n”)

}

}

运行结果:*

* * *

* * * * *

* * * * * * *

* * * * *

* * *

*

三:字符数组复制:

1、编写一个程序,将字符数组s2的全部字符拷贝到字符数组s1中,不用strcpy函数。拷贝时,’\ 0’也要拷过去,’\0’后面的字符不拷贝。

# include <stdio.h>

main ( )

{ char s1[80],s2[80]

int i

printf(“Input s2:”)

scanf(“%s”,s2)

for (i=0i<=strlen(s2)i++)

s1[i]=s2[i]

printf(“s1: %s\n”,s1)

}

2、有一字符串,包含n个字符。写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。

解:

main ( )

{int m

char * str1[20], * str2[20]

printf(“input string:”)

gets(str1)

printf(“Which character that begin to copy?”)

scanf(“%d”,&m)

if (strlen(str1)<m)

printf(“input error!”)

else

{copystr(str1,str2,m)

printf(“result:%s”,str2)

}

}

copystr(char * p1,char * p2,int m)

{int n

n=0

while (n<m-1)

{n++

p1++

}

while (* p1!=’\0’)

{* p2= * p1

p1++

p2++

}

* p2=’\0’

}

四:转置

1、写一函数,使给定的一个二维数组(3×3)转置,即行列互换。

# define N 3

int array[N][N]

convert(int array[3][3])

{int i,j,t

for (i=0i<Ni++)

for (j=i+1j<Nj++)

{t=array[i][j]

array[i][j]=array[j][i]

array[j][i]=t

}

}

main ( )

{int i,j

printf(“Input array:\n”)

for (i=0i<Ni++)

for (j=0j<Nj++)

scanf(“%d”,array[i][j])

printf(“\noriginal array : \n”)

for (i=0i<Ni++)

{for (j=0j<Nj++)

printf(“]”,array[i][j])

printf(“\n”)

}

2、写一个函数,将一个3×3的矩阵转置。

main ( )

{int a[3][3],* p,i

printf(“Input matrix:\n”)’

for (i=0i<3i++)

scanf(“%d,%d,%d”,&a[i][0],&a[i][1],&a[i][2])

p=&a[0][0]

move(p)

printf(“Now,matrix:\n”)

for (i=0i<3i++)

printf(“%d %d %d\n”,a[i][0],&a[i][1],&a[i][2])

}

move(int * pointer)

{int i,j,t

for (i=0i<3i++)

for (j=ij<3j++)

{t= * (pointer+3*i+j)

* (pointer +3*i+j)= * (pointer + 3*j +i)

* (pointer +3*j+i)=t

}

}

convert (array)

{printf(“convert array:\n”)

for (i=0i<Ni++)

{for (j=0j<Nj++)

printf(“%sd”,array[i][j])

printf(“\n”)

}

}五:值交换:

1、输入10个整数,将其中最小的数与第一个数对换,把最大的一个数与最后一个对换。写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。

解:

main ( )

{int number[10]

input(number)

max_min_value(number)

output(number)

}

input(int number[10])

{int i

print(“Input 10 number:”)

for (i=0i<10i++)

scanf(“%d”,&number[i])

}

max_min_value(int array[10])

{int * max,* min, * p, * array_end

array_end=array+10

max=min=array

for (p=array+1p<array_endp++)

if (* p>* max) max=p

else if (* p<* min) min=p

* p=array[0]array[0]=* minmin=* p

* p=array[9]array[9]=* maxmax=* p

return

}

output(int array[10])

{int * p

printf(“Now,they are:”)

for (p=arrayp<=array+9p++)

printf(“%d”,* p)

}

补充:5、给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。

解:程序如下

#include "stdio.h"

void main()

{

float score

char grade

printf("请输入学生成绩:")

scanf("%f",&score)

while(score>100 || score<0)

{

printf("\n输入有误,请重输")

scanf("%f",&score)

}

switch((int)(score/10))

{

case 10:

case 9:grade='A'break

case 8:grade='B'break

case 7:grade='C'break

case 6:grade='D'break

case 5:

case 4:

case 3:

case 2:

case 1:

case 0:grade='E'

}

printf("\n成绩是%5.1f,相应的等级是%c。\n",score,grade)

}

6.14打印出以下图案:

解:

main ( )

{ int I,j,k

for (i=0i<=3i++)

{for (j=0j<=2-ij++)

printf(“ ”)

for (k=0k<=2*ik++)

printf(“*”)

printf(“\n”)

}

for (i=0i<=2i++)

{for (j=0j<=ij++)

printf (“ ”)

for (k=0k<=4-2*ik++)

printf(“*”)

printf(“\n”)

}

}

运行结果:*

* * *

* * * * *

* * * * * * *

* * * * *

* * *

*

#include <iostream>

#include <stdlib.h>

#include <conio.h>

#include <ctype.h>

using namespace std

 void xuanzepaixu()           //选择排序函数

 {

  printf("待添加,请按任意键继续...")

   getchar()

 }

 void erfenpaixu()           //二分查找函数

 {

  printf("待添加,请按任意键继续...")

  getchar()

 }

void menu()    //主菜单

{

    system("cls") //清屏

 printf("\n\t\t\t        菜单\n")

 printf("\t\t\t#***********************#\n")

 printf("\t\t\t#    1选择排序          #\n")

 printf("\t\t\t#    2二分查找          #\n")

 printf("\t\t\t#    3返回              #\n")

 printf("\t\t\t#    4---关闭           #\n")

 printf("\t\t\t#***********************#\n")

 printf("\t\t\t      请选择(1-4) =:")

}

void main()

{

 char select

 while(1)

 {  

     menu()

  system("COLOR 9f")       

  scanf("%c",&select)

  if(select=='3')

   break      //返回上级菜单

  else

  {

   getchar() //读入回车符

   if(!isdigit(select)) //如果不是数字字符

   {

    printf("\n\7Your select may be wrong, must enter the digit!\n")_getch()

   }

   else

   {

    

    switch (select)

    {

     case '1': xuanzepaixu()break

        case '2': erfenpaixu()break

     case '4':exit(0)             //直接退出

     default: 

     {

      printf("\n\7\7Your selected digit may be wrong, select again!\n")

      _getch()

      break

     }

    }

   }

  }

 }

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11111408.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-13
下一篇2023-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存