2:输出两个函数较大数
int max(int x, int y)
{
int z;
z = x > y ? x : y;
return(z);
}
int main()
{
int max(int x, int y);
int a=0, b=0, c=0;
//输入两个数字
scanf_s("%d%d", &a, &b);
c = max(a, b);
float max(float x, float y)
{
float z;
z = x > y ? x : y;
return(z);
}
求和
float add(float x, float y)
{
float z;
z = x+y;
return(z);
}
5:输入四个整数找出最大数
int max4(int a, int b, int c, int d)
{
int max2(int a, int b);
int m;
m = max2(a, b);
m = max2(m, c);
m = max2(m, d);
return m;
}
int max2(int a, int b)
{
return (a > b ? a : b);
}
6:递归求年龄
int age(int n)
{
int c;
if (n == 1)
{
c = 10;
}
else
c = age(n - 1) + 2;
return c;
}
7:用递归求n!
int age(int n)
{
int c=0;
if (n < 0)
printf("error\n");
else if (n == 1||n==0)
{
c = 1;
}
else
c = n*age(n-1);
return (c);
}
8:汉诺塔问题
void hanoi(int n, char one, char two, char three)
{
void move(char x, char y);
if (n == 1)
move(one, three);
else
{
hanoi(n - 1, one, three, two);
move(one, three);
hanoi(n - 1, two, one, three);
}
}
void move(char x, char y)
{
printf("%c-->%c\n", x, y);
}
9:输入十个数,输出最大值及其下标
m = a[0];
for (i = 1; i < 10; i++)
{
if (m < a[i])
{
m = a[i];
n = i;
}
}
10十个学生的平均成绩
float average(float array[10])
{
int i;
float aver,sum = array[0];
for (i = 1; i < 10; i++)
{
sum += array[i];
}
aver = sum / 10;
return (aver);
}
11:调用average函数输出两个班平均数
float average(float array[],int n)
{
int i;
float aver, sum = array[0];
for (i = 1; i < n; i++)
{
sum += array[i];
}
aver = sum / n;
return (aver);
}
12选择法对数组10个整数升序
void sort(int array[], int n)
{
int i, j, k, t;
for (i = 0; i < n; i++)
{
k = i;
for (j = i + 1; j < n; j++)
{
if (array[j] < array[k])
{
k = j;
t = array[k];
array[k] = array[i];
array[i] = t;
}
}
}
}
冒泡法
void sort(int array[], int n)
{
int i, j, k, t;
for (i = 0; i < n-1; i++)
{
for (j = i + 1; j < n; j++)
{
if (array[j] < array[i])
{
t = array[j];
array[j] = array[i];
array[i] = t;
}
}
}
}
14求所有元素中最大值
int max_value(int array[][4])
{
int i, j, max;
int row = 0, col = 0;
max = array[0][0];
for(i=0;i<3;i++)
for (j = 0; j < 4; j++)
{
if (array[i][j] > max)
{
max = array[i][j];
row = i;
col = j;
}
}
return (max);
}
15一个函数实现平均分最高分最低分
float average(float array[], int n)
{
int i;
float aver, sum = array[0];
max = min = array[0];
for (i = 1; i < n; i++)
{
if (array[i] > max)
max = array[i];
else if(array[i]<min)
{
min = array[i];
}
sum += array[i];
}
aver = sum / n;
return(aver);
}
ave = average(score, 10);
printf("最大数%6.2f\n最小数%6.2f\n平均数%6.2f\n",max,min,ave);//上一行相当//于已经重置了min与max
17考察静态局部变量的值
#include<stdio.h>
int f(int a)
{
auto b = 0;//自动局部变量
static int c = 3;//静态局部变量
b = b + 1;
c++;
return(a + b + c);
}
//第一次调用
//b = 1; c = 4;a+b+c=7
//b = 1; c = 5;a+b+c=8
//b = 1; c = 6;a+b+c=9
//c是静态局部变量,函数调用结束后,它并不释放,而是保留其值
int main()
{
int f(int);
int a = 2,i;
for (i = 0; i < 3; i++)
{
printf("%d\n", f(a));
}
return 0;
}
18:输出1到5阶乘值
int f(int n)
{
static int f = 1;//静态局部变量
f *= n;
return(f);
}
int main()
{
int f(int f);
int i;
for (i = 1; i < 6; i++)
{
printf("%d的阶乘%d\n", i,f(i));
}
return 0;
}
19调用函数,求三个整数中的最大者
int max()
{
int m;
m = A > B ? A : B;
if (C > m)m = C;
return(m);
}
21:外部函数实现删除输入的字符
void enter_string(char str[80])
{
gets_s(str);
}
void delete_string(char str[], char ch)
{
int i, j;
for (i = j = 0; str[i] != '\0'; i++)
{
if (str[i] != ch)
str[j++] = str[i];
}
str[j] = '\0';
}
void print_string(char str[])
{
printf("%s", str);
}
22:两个函数分别求最大公约和最小公倍
int bei(int x, int y, int o)
{
return(x * y / o);
}
int yue(int x, int y)
{
int m, t;
if (y > x)
{
t = y;
y = x;
x = t;
}//确保x>y
while (y != 0)
{
m = x % y;
x = y;
y = m;
}
return (x);
}
23:三个函数分类二元一次方程根
void greater_than_zero(float a, float b)
{
float m = sqrt(disc);
x1 = (-b + sqrt(disc)) / (2 * a);
x2 = (-b - sqrt(disc)) / (2 * a);
}
void equal_than_zero(float a, float b)
{
x1=x2 = (-b) / (2 * a);
}
void smaller_than_zero(float a, float b)
{
p = (-b) / (2 * a);
q = (sqrt(-disc)) / (2 * a);
}
24:判定素数的函数
int panduan(int n)
{
int i, temp;
temp = 1;
for (i = 2; i < n / 2 && temp == 1; i++)
if (n % i == 0)
temp = 0;
return(temp);
}
int main()
25转置3乘3矩阵的函数
void zhaunzhi(int a[3][3],int b[3][3])
{
int i, j;
printf("数组a\n");
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 2; j++)
{
printf("%5d", a[i][j]);
b[j][i] = a[i][j];
}
printf("\n");
}
/*也可以不建立b[][]
即:
for (i = 0; i <= 2; i++)
{
for (j = 0; j <= 2; j++)
{
printf("%5d", a[i][j]);
t = a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
printf("\n");
}*/
printf("数组b\n");
for (i = 0; i <= 2; i++)
{
for(j=0;j<=2;j++)
printf("%5d", b[i][j]);
printf("\n");
}
}
26逆序输出字符串函数
void nixun(char a[100],int n)
{
int i, temp;
for (i = 0; i < n / 2; i++)
{
temp = a[i];
a[i] = a[n - i - 1];
a[n - i - 1] = temp;
}
printf("逆序后的字符串\n");
for (i = 0; i < sizeof(a); i++)
printf("%c", a[i]);
}
void lianjie(char s1[80],char s2[40],char s3[120])
{
int i, j;
for (i = 0; s1[i] != '\0'; i++)
{
s3[i] = s1[i];
}
for (j = 0; s2[j] != '\0'; j++)
{
s3[i + j] = s2[j];
}
s3[i + j] = '\0';
puts(s3);
}
28复制元音字母到字符串并输出
```c
void yuanyin(char s1[100],char s2[50])
{
int i, j = 0;
for (i = 0; s1[i] != '\0'; i++)
{
if (s1[i] == 'a' || s1[i] == 'A' || s1[i] == 'e' || s1[i] == 'E' || s1[i] == 'i' || s1[i] == 'I' || s1[i] == 'o' || s1[i] == 'O' || s1[i] == 'u' || s1[i] == 'U')
{
s2[j] = s1[i];
j++;
}
}
s2[j] = '\0';
for (j = 0; s2[j] != '\0'; j++)
printf("%c", s2[j]);
}
29输出数字之间加一空格
char a[10] = { 0 };
gets_s(a);
int i;
for (i = 0; a[i] != '\0'; i++)
{
printf("%c", a[i]);
printf("%c", ' ');
}
30统计字母,数字,空格,其他的个数
void tongji(char str[80])
{
int i, j, bl, sl, num, space, others;
bl = sl = num = space = others = 0;
for (i = 0; i < 80; i++)
{
if (str[i] >= 'A' && str[i] <= 'Z')
bl++;
else if (str[i] >= 'a' && str[i] <= 'z')
sl++;
else if (str[i] >= '0' && str[i] <= '9')
num++;
else if (str[i] == ' ' || str[i] == '\t')
space++;
else
others++;
}
printf("大写数%d\n小写数%d\n数字数%d\n空格数%d\n其他字符数%d\n", bl, sl, num, space, others);
}
输出最长的单词,(问题)
void LongestWord(char str[], char word[])
{
int max_len = 0;
int len = 0;
int i = 0;
for (i; i < 100 && str[i] != 0; i++)
{
if (str[i] == ' ')
{
str[i] = '\0';
len = strlen(str);
if (len > max_len)
{
max_len = len;
strcpy(word, str);
str=str+len+1;
}
}
}
}
void longrstword(char s[])
{
char t[30], temp[30];//前者用来存储最长的单词,后者存储单词
t[0] = '\0';//先让t变成最短的单词,在比较过程中边长
int len = strlen(s), i, j = 0;
for (i = 0; i < len; i++)//利用长度函数遍历字符串
{
j = 0;
while (s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z')
temp[j++] = s[i++];//符合要求就复制单词到temp
temp[j] = '\0';//最后一个字符变成\0
if(strlen(t)<strlen(temp))
strcpy(t,temp);
}
printf("最长的单词\n");
puts(t);
}
33冒泡法函数升序
void maopao(char s[])
{
int i, j;
char temp;
int len = strlen(s);
for (i = 0; i < len - 1; i++)//-1是因为第二个循环有j+1和i=0,所有可以全部遍历到
{
for (j = 0; j < len - 1 - i; j++)
{
if (s[j] > s[j + 1])//比较的时候,自动转化成对应ASCII码的整数值
{
temp = s[j];//与整数相比较,变化的只有temp的数据类型
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
puts(s);
}
34用牛顿迭代法求解三元依次函数
void niudun()
{
double x0, x1, f, f1;
x0 = N;
while (1)
{
f = 1 * pow(x0, 3) + 2 * pow(x0, 2) + 3 * x0 + 4;
f1 = 3 * pow(x0, 2) + 4 * x0 + 3;
x1 = x0 - f / f1;
if (fabs(x0 - x1) < 1e-5)
{
break;
}
x0 = x1;
}
printf("方程在【%f】附近的根是【%f】\n", N, x1);
}
35递归求n阶勒让德多项式
int lerang(int n,float x)
{
if (n == 0)
return(1);
else if (n == 1)
return(x);
else
return(((2 * n - 1) * x - lerang(n - 1, x) - (n - 1) * lerang(n - 2, x)) / n);
}
36分别用函数实现四个功能
void aver_stu(int t[][5])
{
int i, j;
float k, ave;
for (j = 0; j < 10; j++)
{
for (i = 0, k = 0.0; i < 5; i++)
{
k += t[i][j];
}
ave = k / 5;
printf("第%d个学生的平均分是%f\n", j + 1, ave);
}
}
void aver_course(int t[][5])
{
int i, j;
float k, ave;
for (j = 0; j < 5; j++)
{
for (i = 0, k = 0.0; i < 10; i++)
{
k += t[i][j];
}
ave = k / 10;
printf("第%d门课的平均分是%f\n", j + 1, ave);
}
}
void high(int t[][5])
{
int i, j, h, stu, cour;
for (i = 0, h = 0, stu = 0, cour = 0; i < 10; i++)
{
for (j = 0; j < 5; j++)
{
if (t[i][j] > h)
{
h = t[i][j];
stu = i + 1;
cour = j + 1;
}
}
}
printf("最高分是%d,来自第%d个学生第%d门科目\n", h, stu, cour);
}
void vari(int t[][5])
{
int i, j, k, m;
float temp[10], var, x1, x2;
for (i = 0, m = 0; i < 10; i++,m++)
{
for (j = 0, k = 0; j < 5; j++)
{
k += t[i][j];
}
temp[m] = k / 5;
}
for (i = m = x1 = x2 = 0; i < 10; i++)
{
x1 += pow(temp[i], 2);
x2 += temp[i];
}
var = x1 / 10 - pow(x2 / 10, 2);
printf("方差是%f\n", var);
}
void input_stu()
{
int i, j;
for (i = 0; i < n; i++)
{
printf("\n输入第%2d个学生的分数:\n", i + 1);
for (j = 0; j < m; j++)
scanf_s("%f", &score[i][j]);
}
}
void aver_stu()
{
int i,j;
float s;
for (i = 0; i < n; i++)
{
for (j = 0, s = 0; j < m; j++)
s += score[i][j];
a_stu[i] = s / m;
}
}
void aver_cour(void)
{
int i, j;
float s;
for (j = 0; j < m; j++)
{
s = 0;
for (i = 0; i < n; i++)
s += score[i][j];
a_cour[j] = s / (float)n;
}
}
float highest()
{
float h;
int i, j;
float high = score[0][0];
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
if (high < score[i][j])
{
high = score[i][j];
r = i+1;
c = j + 1;
}
}
}
return (high);
}
float s_var(void)
{
int i;
float sumx=0.0, sumxn=0.0;
for (i = 0; i < n; i++)
{
sumx += a_stu[i] * a_stu[i];
sumxn += a_stu[i];
}
return(sumx / n - (sumxn / n) * (sumxn / n));
}
int main()
{
int i, j;
float h;
void input_stu();
void aver_stu();
void aver_cour();
float highest();
float s_var(void);
input_stu();
aver_stu();
aver_cour();
printf("\n NO. cour1 cour2 cour3 cour4 cour5 aver\n");
for (i = 0; i < n; i++)
{
printf("\n NO.%2d", i + 1);
for (j = 0; j < m; j++)
{
printf("%8.2f", score[i][j]);
}
printf("%8.2f\n", a_stu[i]);
}
printf("\naverage:");
for (j = 0; j < m;j++)
{
printf("%8.2f", a_cour[j]);
}
printf("\n");
h = highest();
printf("highest:%8.2f NO. %2d course %2d\n", h, r, c);
printf("variance %8.2f\n", s_var());
}
写三个函数
void input_num_name(double num[], char name[][16], int n)
{
int i, j;
for (i = 0; i < n; i++)
{
printf("请输入第%d位员工的工号和姓名:中间用空格隔开\n", i + 1);//同时输入实数和字符是可行的
scanf_s("%lf", &num[i]);
gets_s(name[i]);
}
printf("您所有员工的员工信息如下:\n");
for (i = 0; i < n; i++)
{
printf("工号:%lf 姓名:%s\n", num[i], name[i]);
}
}
void sort_num_name(double num[], char name[][16], int n)
{
printf("工号升序排列如下:\n");
int i, j;
double temp_num;
char temp_name[16];
for (i = 0; i < n; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (num[j] > num[j + 1])
{
temp_num = num[j];
num[j] = num[j + 1];
num[j + 1] = temp_num;
strcpy(temp_name, name[j]);
strcpy(name[j], name[j+1]);
strcpy(name[j + 1], temp_name);
}
}
}
for (i = 0; i < n; i++)
{
printf("工号:%lf 姓名:%s\n", num[i], name[i]);
}
}
void seek_num_name(double num[], char name[][16], int n, int seek_name)
{
int low = 0;
int high = n - 1;
int mid;
int i=1;
while (low<high)
{
mid = (high + low) / 2;
if (num[mid] == seek_name)
{
printf("您要找的员工信息如下:\n工号:%lf 姓名:%s", num[mid], name[mid]);
i = 0;
break;
}
else if (num[mid] > seek_name)
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
if (i)
{
printf("公司无此员工");
}
}
39十六进制转十进制函数
int h(char s[])
{
int i, n = 0;
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] >= '0' && s[i] <= '0')
n = n * 16 + s[i] + s[i] - '0';
if (s[i] >= 'a' && s[i] <= 'f')
n = n * 16 + s[i] + s[i] - 'a'+10;
if (s[i] >= 'A' && s[i] <= 'F')
n = n * 16 + s[i] + s[i] - 'A'+10;
}
return(n);
}
void convert(char a[])
{
int n, i, num = 0;
n = strlen(a);//读出字节长
for (i = n - 1; i >= 0; i--)//递减遍历
{
if (a[i] >= '0' && a[i] <= '9')
num += (a[i] - '0') * pow(16, n - 1 - i);
else if (a[i] >= 'A' && a[i] <= 'F')
num += (10 + (a[i] - 'A')) * pow(16, n - 1 - i);
else if (a[i] >= 'a' && a[i] <= 'f')
num += (10 + (a[i] - 'a')) * pow(16, n - 1 - i);
}
41递归法将整数转换成字符串
void convert(int n)
{
int i;
if ((i = n / 10) != 0)
convert(i);
putchar(n % 10 + '0');//递归的存在,会让第一个执行的函数是最深层的函数
//即输出1,然后2,最后是3
}
42给出 年月日计算第几天
if (year % 4 == 0) {
if (year % 100 == 0) {
if (year % 400 == 0)
leap = 1;
else
leap = 0;
}
else
leap = 1;
}//判断是否闰年,是闰年则leap=1
else
leap = 0;
if (leap)
m[2] = 29;//是闰年则第二个月29天
else
m[2] = 28;
for (i = 1, d = 0; i < month; i++)
d += m[i];//d指代一年的第几天,d+=m指代把前面的月份都加起来
d += day;//把这个月的第几天加起来