实验八 函数(二)
一. 实验目的
1. 进一步熟悉怎样利用函数实现指定任务。
2. 熟悉函数的嵌套运用和递归调用的方法。
3. 熟悉全局变量和局部变量的概念和用法。
二. 实验内容
1) 写一个函数,用“起泡法”对输入的10个字符按由小到大顺序排列。
1. 输入程序,进行编译和运行,分析结果。
#include
#include
#define N 10
char str[N];
int main()
{
void sort(char[]);
int i,flag;
for(flag=1;flag==1;)
{
printf("input string:\n");
scanf("%s",&str);
if(strlen(str)>N)
printf("string too long,input again!\n");
else
flag=0;
}
sort(str);
printf("string sorted:\n");
for (i=0;istr[i+1])
{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
2.将要排列的字符串改成5个,按由大到小的顺序排列。
2) 用递归法将一个整数n转换成任意字符串,如,输入483,应输出字符串“483”。
n的位数不确定,可以是任意的整数。
1. 输入程序,进行编译和运行,分析结果。
#include
int main()
{
void convert(int n);
int num;
print("please input an integer");
scanf("%d",&num);
print("output");
if(num<0)
{
putchar('-');putchar(' ');
num=-num;
}
convert(num);
print("\n");
return 0;
}
void convert(int n)
{
int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
putchar(32);
}
3) 编写一个程序,由实参传来一个字符串,统计此字符串中字母,数字,空格和其他字符的个数,在主函数中输入字符串以及上述的结果。
#include
int main()
{
char a[100];
void fun_char(char a[]);
printf("请输入字符串:");
gets(a);
fun_char(a);
}
void fun_char(char a[])
{
int i,letter=0,digit=0,space=0,other=0;
for(i=0;a[i]!='\0';i++)
{
if((a[i]<='z'&&a[i]>='a')||(a[i]<='Z'&&a[i]>='A'))
letter++;
else if(a[i]<='9'&&a[i]>='0')
digit++;
else if(a[i]==' ')
space++;
else
other++;
}
printf("letter=%d;\tdigit=%d;\tspace=%d;\tother=%d\n",letter,digit,space,other);
}
4) 求两个整数的最大公约数和最小公倍数,用一个函数求最小公约数,用另一个函数根据求出的最大公约数求最小公倍数。
#include
int main()
{
int m, n;
int m_cup, n_cup, res;
printf("请输入两个数:\n");
scanf("%d %d", &m, &n);
if (m > 0 && n >0)
{
m_cup = m;
n_cup = n;
res = m_cup % n_cup;
while (res != 0)
{
m_cup = n_cup;
n_cup = res;
res = m_cup % n_cup;
}
printf("最大公约数: %d\n", n_cup);
printf("最小公倍数: %d\n", m * n / n_cup);
}
else
printf("Error!\n");
return 0;
}