
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
}
}
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)