C_Code

C语言实验作业代码背诵笔记

2017

完数

  • 如果一个整数恰好等于它的各因子之和,这个数就是“完数”。例如,6 的所有因子为 1、2、3,而 6=1+2+3,因此 6 是“完数”。编写程序输出 500 之内的所有完数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int main() {
int n, i, sum;

// 遍历 1~1000 的所有整数
for (n = 1; n <= 500; n++) {

sum = 0; // 每个 n 都重新计算真因子累加和

// 找 n 的真因子,并求和
for (i = 1; i <= n / 2; i++) {
if (n % i == 0)
sum += i;
}

// 真因子之和等于自身 → 完数
if (sum == n)
printf("%d ", n);
}

return 0;
}

数组排序

  • 编写程序,从键盘随机输入十个整数存入数组 a 中,按由大到小顺序排序后输出

  • 选择排序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    #include <stdio.h>

    int main() {
    int a[10];
    int i, j, t;

    // 输入 10 个整数
    for (i = 0; i < 10; i++) {
    scanf("%d", &a[i]);
    }

    // 排序:从大到小(选择排序)
    for (i = 0; i < 9; i++) {
    for (j = i + 1; j < 10; j++) {
    if (a[j] > a[i]) { // 想要从大到小,只要 > 就交换
    t = a[i];
    a[i] = a[j];
    a[j] = t;
    }
    }
    }

    // 输出排序后的数组
    for (i = 0; i < 10; i++) {
    printf("%d ", a[i]);
    }

    return 0;
    }
  • 冒泡排序(从大到小)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    #include <stdio.h>

    int main() {
    int a[10];
    int i, j, t;

    // 输入
    for (i = 0; i < 10; i++)
    scanf("%d", &a[i]);

    // 冒泡排序:从大到小
    for (i = 0; i < 9; i++) {
    for (j = 0; j < 9 - i; j++) {
    if (a[j] < a[j + 1]) { // 想降序,把 < 换为 >
    t = a[j];
    a[j] = a[j + 1];
    a[j + 1] = t;
    }
    }
    }

    // 输出
    for (i = 0; i < 10; i++)
    printf("%d ", a[i]);

    return 0;
    }

素数

  • 一个大于 1 的整数,如果不能被除了 1 和它本身之外的任意自然数整除,那么这个整数就是素数。编写函数 int prime(int n),该函数用于判断整数 n 是否为素数,如果 n 是素数返回值为 1,否则返回 0。调用该函数输出 100~200 之间的所有素数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>

int prime(int n) {
int i;
if (n <= 1) return 0;

for (i = 2; i * i <= n; i++) {
if (n % i == 0)
return 0;
}

return 1;
}

int main() {
int i;

for (i = 100; i <= 200; i++) {
if (prime(i)) // prime(i) 为 1 就是素数
printf("%d ", i);
}

return 0;
}

输入华氏温度,输出设置温度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>

int main() {
float f, c;

printf("Input Fahrenheit: ");
scanf("%f", &f);

c = (f - 32) * 5.0 / 9.0;

printf("Celsius = %.2f\n", c);

return 0;
}

第四周实验

1. C和C++基本输入输出

1
2
3
4
#include<stdio.h>
void main() {
printf("hello world\n");
}

2. 不同类型的基本输入输出

整型示例

1
2
3
4
5
#include<stdio.h>
void main() {
int a=5, b=7, c=2, e=0, f=5;
printf("a=%d,b=%d,c=%d,e=%d,f=%d\n", a,b,c,e,f);
}

浮点型示例

1
2
3
4
5
6
7
8
9
#include<stdio.h>
void main() {
double a=5.21, b, c, d, e;
b = a + 2;
c = b - a;
d = a * c;
e = 0.5;
printf("a=%.6f,b=%.6f,c=%.6f,d=%.6f,e=%.6f\n", a,b,c,d,e);
}

3. 三个数从小到大排序

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
void main() {
int a, b, c, t;
printf("input number:");
scanf("%d%d%d", &a, &b, &c);
if (a > b) { t=a; a=b; b=t; }
if (a > c) { t=a; a=c; c=t; }
if (b > c) { t=b; b=c; c=t; }
printf("排序后%d,%d,%d\n", a,b,c);
}

4. 判断是否为闰年

1
2
3
4
5
6
7
8
9
#include<stdio.h>
void main() {
int year;
scanf("%d", &year);
if ((year%4==0 && year%100!=0) || (year%400==0))
printf("是");
else
printf("不是");
}

5. 大写字母转小写字母

方法1:直接赋值转换

1
2
3
4
5
6
7
8
#include<stdio.h>
void main() {
char a='B', b='O', c='Y';
a = a + 32;
b = b + 32;
c = c + 32;
printf("%c,%c,%c\n", a,b,c);
}

方法2:输入转换(条件判断)

1
2
3
4
5
6
7
8
9
#include<stdio.h>
void main() {
char ch;
printf("请输入一个英文字母:");
scanf("%c", &ch);
if (ch >= 'A' && ch <= 'Z')
ch = ch + 32;
printf("%c\n", ch);
}

方法3:三目运算符转换

1
2
3
4
5
6
7
#include<stdio.h>
void main() {
char ch;
scanf("%c", &ch);
ch = (ch >= 'A' && ch <= 'Z') ? (ch + 32) : ch;
printf("%c\n", ch);
}

6. 判断字符类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
int main() {
char ch;
printf("请输入字符:");
while ((ch = getchar()) != EOF) {
if (ch >= '0' && ch <= '9')
printf("%c是数字字符:\n", ch);
else if (ch >= 'A' && ch <= 'Z')
printf("%c是大写字母:\n", ch);
else if (ch >= 'a' && ch <= 'z')
printf("%c是小写字母:\n", ch);
else if (ch == ' ')
printf("%c是空格:\n", ch);
else
printf("%c是其他字符:\n", ch);
}
return 0;
}

7. 转义符使用

1
2
3
4
5
6
7
8
#include<stdio.h>
int main() {
printf("偷偷藏不住\n");
printf("偷偷\"藏不住\n");
printf("偷偷\\藏不住\n");
printf("偷\t偷藏不住\n");
return 0;
}

第五周实验

1. 百分制与等级制相互转换

等级转百分制

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
void main() {
char c;
printf("请输入学生成绩等级:");
scanf("%c", &c);
switch(c) {
case 'A': printf("对应百分制成绩范围:85~100\n"); break;
case 'B': printf("对应百分制成绩范围:76~84\n"); break;
case 'C': printf("对应百分制成绩范围:60~69\n"); break;
case 'D': printf("对应百分制成绩范围:0~59\n"); break;
default: printf("error\n"); break;
}
}

百分制转等级制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
void main() {
int x;
printf("请输入学生成绩:");
scanf("%d", &x);
if (x >= 0 && x <= 100) {
switch(x/10) {
case 10:
case 9: printf("成绩等级:A\n"); break;
case 8: printf("成绩等级:B\n"); break;
case 7: printf("成绩等级:C\n"); break;
case 6: printf("成绩等级:D\n"); break;
default: printf("成绩等级:E\n"); break;
}
} else {
printf("error\n");
}
}

2. 简易算数计算器

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
void main() {
int x, y;
char op;
scanf("%d%c%d", &x, &op, &y);
switch(op) {
case '+': printf("x+y=%d\n", x+y); break;
case '-': printf("x-y=%d\n", x-y); break;
case '*': printf("x*y=%d\n", x*y); break;
case '/': printf("x/y=%d\n", x/y); break;
default: printf("无效运算符\n"); break;
}
}

3. 求一元二次方程的根

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
#include<math.h>
void main() {
float a, b, c, disc, realpart, imagpart, x1, x2;
scanf("%f%f%f", &a, &b, &c);
if (a == 0)
printf("不是一元二次方程\n");
else {
disc = b*b - 4*a*c;
if (disc == 0)
printf("有两个相等的根:%.4f\n", -b/(2*a));
else if (disc > 0) {
x1 = (-b + sqrt(disc))/(2*a);
x2 = (-b - sqrt(disc))/(2*a);
printf("有两个实根:%.4f and %.4f\n", x1, x2);
} else {
realpart = -b/(2*a);
imagpart = sqrt(-disc)/(2*a);
printf("有两个虚数根:\n");
printf("%.4f+%.4fi\n", realpart, imagpart);
printf("%.4f-%.4fi\n", realpart, imagpart);
}
}
}

4. 出租车费用计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
void main() {
float dist;
int n;
float p=0;
printf("请输入里程:\n");
scanf("%f", &dist);
printf("请输入出租车类型:\n");
scanf("%d", &n);
if (dist <= 3)
p = 8;
else {
if (n == 1)
p = ((int)dist - 3)*2 + 8;
if (n == 2)
p = ((int)dist - 3)*1.5 + 8;
}
printf("打车费用%f元\n", p);
}

5. scanf与getchar输入字符差异

scanf示例

1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main() {
char a, b;
printf("请输入大写字母:\n");
scanf("%c", &a);
b = a + 32;
printf("%c的小写字母是%c\n", a, b);
return 0;
}

getchar示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
int main() {
char a, b, c;
a = getchar();
b = getchar();
c = getchar();
a = a + 32;
b = b + 32;
c = c + 32;
putchar(a);
putchar(b);
putchar(c);
putchar('\n');
return 0;
}

第六周实验

1. 累加(1~100)

1
2
3
4
5
6
7
8
9
#include<stdio.h>
void main() {
int i=1, sum=0;
do {
sum = sum + i;
i++;
} while (i <= 100);
printf("%d\n", sum);
}

2. 累乘(1~10)

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
void main() {
int n=1, cj=1, a=1;
while (n <= 10) {
cj = cj * a;
a = a + 1;
n = n + 1;
}
printf("%d\n", cj);
}

3. 累加累乘组合(1!+2!+…+10!)

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main() {
int i=1, t=1, s=1, sum=0, jc=1;
for (i=1; i<=10; i++) {
jc = jc * i;
t = jc * s;
sum += t;
s = -s;
}
printf("%d\n", sum);
}

4. 字符串字符数字统计

while循环版

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
void main() {
int x=0, y=0;
char c;
printf("请输入一段字符串,以#号结束\n");
while ((c = getchar()) != '#') {
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
x++;
else if (c >= '0' && c <= '9')
y++;
}
printf("字母个数:%d 数字个数:%d\n", x, y);
}

for循环版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
void main() {
int x=0, y=0;
char c;
printf("请输入一段字符串,以#号结束\n");
scanf("%c", &c);
for (; c != '#'; ) {
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
x++;
else if (c >= '0' && c <= '9')
y++;
scanf("%c", &c);
}
printf("字母个数:%d 数字个数:%d\n", x, y);
}

第七周实验

1. 字符串字符数字统计(回车结束)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
void main() {
char c;
int n1=0, n2=0;
n1=0;
n2=0;
printf("请输入字符串:");
while ((c = getchar()) != '\n') {
if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))
n1++;
else if (c >= '0' && c <= '9')
n2++;
}
printf("字母个数:%d,数字个数:%d\n", n1, n2);
}

2. 鸡兔同笼

1
2
3
4
5
6
7
8
#include<stdio.h>
void main() {
int i, j;
for (i=0; i<=30; i++)
for (j=0; j<=30; j++)
if (i + j == 30 && 2*i + 4*j == 80)
printf("鸡=%d,兔=%d\n", i, j);
}

3. 99乘法表

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
void main() {
int a, b;
for (a=1; a<=9; a++) {
for (b=1; b<=a; b++) {
printf("%d*%d=%-4d ", a, b, a*b);
}
printf("\n");
}
}

4. 一维数组输入输出

1
2
3
4
5
6
7
8
9
#include<stdio.h>
void main() {
int i, a[10];
for (i=0; i<=9; i++)
a[i] = i;
printf("\n");
for (i=9; i>=0; i--)
printf("%d ", a[i]);
}

5. 二维数组输入输出

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
void main() {
int i, j, a[3][2];
for (i=0; i<3; i++)
for (j=0; j<2; j++)
scanf("%d", &a[i][j]);
for (i=0; i<3; i++) {
for (j=0; j<2; j++)
printf("%d ", a[i][j]);
printf("\n");
}
}

6. 水仙花数(方法1)

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
void main() {
int n, a, b, c;
for (n=100; n<1000; n++) {
a = n / 100;
b = (n / 10) % 10;
c = n % 10;
if (n == a*a*a + b*b*b + c*c*c)
printf("%d\n", n);
}
}

7. 水仙花数(方法2)

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
void main() {
int a, b, c;
for (a=1; a<=9; a++)
for (b=0; b<=9; b++)
for (c=0; c<=9; c++) {
if (a*a*a + b*b*b + c*c*c == 100*a + 10*b + c)
printf("%d ", 100*a + 10*b + c);
}
}

第八周实验

1. 判断完数

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
void main() {
int i, n, sum=0;
scanf("%d", &n);
for (i=1; i<n; i++)
if (n%i == 0)
sum = sum + i;
if (sum == n)
printf("%d 是完数\n", n);
else
printf("%d 不是完数\n", n);
}

2. 1~1000内的完数

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
void main() {
int i, n;
for (n=1; n<=1000; n++) {
int sum=0;
for (i=1; i<n; i++)
if (n%i == 0)
sum = sum + i;
if (sum == n)
printf("%d\n", n);
}
}

3. 最大公约数与最小公倍数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
void main() {
int m, n, i, t;
scanf("%d%d", &m, &n);
if (m > n) {
t = m;
m = n;
n = t;
}
for (i=m; i>=1; i--)
if ((m%i == 0) && (n%i == 0))
break;
printf("%d 最大公约数\n", i);
printf("%d 最小公倍数\n", m*n/i);
}

4. 计算sinx值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<math.h>
#include<stdio.h>
void main() {
double sinx, s, x;
int n;
printf("请输入x的值:");
scanf("%lf", &x);
s = x;
n = 1;
sinx = x;
do {
n = n + 2;
s = s * (-x*x) / ((float)(n)-1) / (float)(n);
sinx = sinx + s;
} while (fabs(s) >= 1e-7);
printf("sin(%f)=%lf\n", x, sinx);
}

5. 素数判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<math.h>
#include<stdio.h>
void main() {
int m, i, k;
scanf("%d", &m);
k = sqrt(m);
for (i=2; i<=k; i++)
if (m%i == 0)
break;
if (i > k)
printf("%d 是质数", m);
else
printf("%d 不是质数", m);
}

6. 1000内的素数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<math.h>
#include<stdio.h>
void main() {
int i, m, s;
for (m=2; m<=1000; m++) {
s = 1;
for (i=2; i<=sqrt(m); i++)
if (m%i == 0) {
s = 0;
break;
}
if (s == 1)
printf("%d ", m);
}
}

7. 电文密码(字符加密)

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
void main() {
char ch;
while ((ch = getchar()) != '\n') {
if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) {
ch = ch + 4;
if ((ch > 'Z' && ch <= 'Z'+4) || (ch > 'z'))
ch = ch - 26;
}
printf("%c", ch);
}
}

8. 累加至和≤2000

1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
void main() {
int i, sum=0;
i=1;
do {
sum = sum + i;
i++;
} while (sum <= 2000);
printf("%d\n", i);
}

第九周实验

1. 打印图形

三角形(正向)

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main() {
int i, j;
for (i=1; i<=4; i++) {
for (j=1; j<=4-i; j++)
printf(" ");
for (j=1; j<=2*i-1; j++)
printf("*");
printf("\n");
}
}

三角形(反向)

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
int main() {
int i, j;
for (i=1; i<=4; i++) {
for (j=1; j<=i-1; j++)
printf(" ");
for (j=1; j<=(5-i)*2-1; j++)
printf("*");
printf("\n");
}
}

菱形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
int main() {
int i, j;
// 上半部分
for (i=1; i<=4; i++) {
for (j=1; j<=4-i; j++)
printf(" ");
for (j=1; j<=2*i-1; j++)
printf("*");
printf("\n");
}
// 下半部分
for (i=1; i<=4; i++) {
for (j=1; j<=i-1; j++)
printf(" ");
for (j=1; j<=(5-i)*2-1; j++)
printf("*");
printf("\n");
}
}

2. 碾压法求最大公约数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
void main() {
int a, b, t;
scanf("%d%d", &a, &b);
if (a < b) {
t = a;
a = b;
b = t;
}
while (b != 0) {
t = a % b;
a = b;
b = t;
}
printf("%d\n", a);
}

3. 累加a+aa+aaa+…

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
void main() {
int i, a, count;
int t=0, s=0;
scanf("%d%d", &a, &count);
t = a;
for (i=1; i<=count; i++) {
s = s + t;
a = a * 10;
t = t + a;
}
printf("a+aa+aaa+...=%d\n", s);
}

4. 斐波那契数列(前20项)

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
void main() {
int i;
long int f[20] = {1, 1};
for (i=2; i<20; i++)
f[i] = f[i-1] + f[i-2];
for (i=0; i<20; i++) {
if (i%5 == 0)
printf("\n");
printf("%12ld", f[i]);
}
}

第十周实验

1. 一维数组求最大、最小、平均值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
int main() {
int i, a[10], min, max, sum=0;
for (i=0; i<10; i++)
scanf("%d", &a[i]);
min = max = a[0];
for (i=0; i<10; i++) {
if (max < a[i])
max = a[i];
if (min > a[i])
min = a[i];
sum += a[i];
}
printf("%d %d %f", max, min, sum/10.0);
}

2. 数组元素互换(a[i]与a[N-i-1])

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#define N 6
void main() {
int a[N], i, t;
printf("qing shu ru shu zu a[N]:");
for (i=0; i<N; i++)
scanf("%d", &a[i]);
for (i=0; i<N/2; i++) {
t = a[i];
a[i] = a[N-i-1];
a[N-i-1] = t;
}
for (i=0; i<N; i++)
printf("%d ", a[i]);
}

3. 一维数组倒序输出

1
2
3
4
5
6
7
8
#include<stdio.h>
int main() {
int i, a[10] = {0,1,2,3,4,5,6,7,8,9};
for (i=9; i>=0; i--)
printf("%d ", a[i]);
printf("\n");
return 0;
}

第十一周实验

1. 冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
void main() {
int a[11], i, j, t;
for (i=1; i<=10; i++)
scanf("%d", &a[i]);
for (i=1; i<=9; i++)
for (j=1; j<=10-i; j++)
if (a[j] > a[j+1]) {
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
for (i=1; i<=10; i++)
printf("%d ", a[i]);
}

2. 选择排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
void main() {
int a[11], i, j, t, min;
for (i=1; i<=10; i++)
scanf("%d", &a[i]);
for (i=1; i<=9; i++) {
min = i;
for (j=i+1; j<=10; j++)
if (a[min] > a[j])
min = j;
if (min != i) {
t = a[min];
a[min] = a[i];
a[i] = t;
}
}
for (i=1; i<=10; i++)
printf("%d ", a[i]);
}

3. 3*3矩阵对角线元素和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
void main() {
int x[3][3], i, j, s=0;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
scanf("%d", &x[i][j]);
// 主对角线
s=0;
for (i=0; i<3; i++)
s += x[i][i];
printf("%d\n", s);
// 副对角线
s=0;
for (i=0; i<3; i++)
s += x[i][2-i];
printf("%d\n", s);
}

4. 杨辉三角(10行)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
int main() {
int a[10][10], i, j;
for (i=0; i<10; i++) {
a[i][0] = 1;
a[i][i] = 1;
}
for (i=2; i<10; i++)
for (j=1; j<i; j++)
a[i][j] = a[i-1][j-1] + a[i-1][j];
for (i=0; i<10; i++) {
for (j=0; j<=i; j++)
printf("%5d", a[i][j]);
printf("\n");
}
}

第十二周实验

1. 字符串比较(strcmp实现)

库函数版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#include<string.h>
void main() {
char str1[20], str2[20];
int i;
gets(str1);
gets(str2);
i = strcmp(str1, str2);
if (i > 0)
printf("str1>str2,zhi wei%d", i);
else if (i < 0)
printf("str1<str2,zhi wei%d", i);
else
printf("str1==str2");
}

手动实现版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
#include<string.h>
void main() {
char str1[100], str2[100];
int i, s;
gets(str1);
gets(str2);
i=0;
while (str1[i]==str2[i] && str1[i]!='\0')
i++;
s = str1[i] - str2[i];
if (s > 0)
printf("str1>str2,zhi wei%d", s);
else if (s < 0)
printf("str1<str2,zhi wei%d", s);
else
printf("str1==str2");
}

2. 查找三个字符串中的最大者

1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
#include<string.h>
void main() {
char string[20];
char str[3][20];
int i;
for (i=0; i<3; i++)
gets(str[i]);
strcpy(string, strcmp(str[0], str[1])>0 ? str[0] : str[1]);
if (strcmp(str[2], string) > 0)
strcpy(string, str[2]);
printf("\nthe largest string is:\n%s\n", string);
}

3. 统计文章字符类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
#include<string.h>
void main() {
int i, j, uppn=0, lown=0, dign=0, span=0, othn=0;
char text[3][80];
for (i=0; i<3; i++)
gets(text[i]);
for (i=0; i<3; i++)
for (j=0; j<80 && text[i][j]!='\0'; j++) {
if (text[i][j]>='A'&&text[i][j]<='Z')
uppn++;
else if (text[i][j]>='a'&&text[i][j]<='z')
lown++;
else if (text[i][j]>='0'&&text[i][j]<='9')
dign++;
else if (text[i][j]==' ')
span++;
else
othn++;
}
for (i=0; i<3; i++)
printf("%s\n", text[i]);
printf("uppn=%d\nlown=%d\ndign=%d\nspan=%d\nothn=%d\n", uppn,lown,dign,span,othn);
}

4. 国家名称按字母排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
#include<string.h>
void main() {
char st[20], cs[5][20];
int i, j, p;
printf("input countrys name:\n");
for (i=0; i<5; i++)
gets(cs[i]);
for (i=0; i<5; i++) {
p = i;
strcpy(st, cs[i]);
for (j=i+1; j<5; j++)
if (strcmp(cs[j], st) < 0) {
p = j;
strcpy(st, cs[j]);
}
if (p != i) {
strcpy(st, cs[i]);
strcpy(cs[i], cs[p]);
strcpy(cs[p], st);
}
puts(cs[i]);
}
}

第十三周实验

1. 数组各行各列及总和计算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<stdio.h>
void main() {
int a[4][5] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int i, j;
// 初始化最后一行和最后一列为0
for (j=0; j<5; j++)
a[3][j] = 0;
for (i=0; i<4; i++)
a[i][4] = 0;
// 计算各行各列及总和
for (i=0; i<3; i++)
for (j=0; j<4; j++) {
a[3][j] += a[i][j]; // 列总和
a[i][4] += a[i][j]; // 行总和
a[3][4] += a[i][j]; // 全部总和
}
// 输出结果
for (i=0; i<4; i++) {
for (j=0; j<5; j++)
printf("%3d", a[i][j]);
printf("\n");
}
}

2. 五位同学三门课成绩统计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
void main() {
int s[5][3], i, j, score[3]={0,0,0};
for (i=0; i<5; i++)
for (j=0; j<3; j++)
scanf("%d", &s[i][j]);
// 计算各门课总成绩
for (i=0; i<3; i++)
for (j=0; j<5; j++)
score[i] += s[j][i];
// 输出结果
printf("\n3门课总分,平均分分别为\n");
for (i=0; i<3; i++)
printf("%d %f\n", score[i], score[i]/5.0);
}

3. 无参函数示例

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
void printstar() {
printf("************\n");
}
void print_message() {
printf("how do you do!\n");
}
void main() {
printstar();
print_message();
printstar();
}

4. 函数声明与调用(求和)

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
// 函数声明
int sum(int x, int y);
void main() {
int a=3, b=4, c;
c = sum(a, b);
printf("c=%d", c);
}
// 函数定义
int sum(int x, int y) {
return x + y;
}

第十四周实验

1. 函数实现99乘法表

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
void printline() {
int i, j;
for (i=1; i<=9; i++) {
for (j=1; j<=i; j++)
printf("%2d*%2d=%2d", i, j, i*j);
printf("\n");
}
}
void main() {
printline();
}

2. 计算x的立方(函数返回值)

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
float cube(float x) {
return x*x*x;
}
void main() {
float a, product;
printf("please input value of a:");
scanf("%f", &a);
product = cube(a);
printf("cube of %4f is %4f\n", a, product);
}

3. 递归求n!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
long jiecheng(int n) {
if (n < 0)
printf("n<0,input error");
else if (n == 0 || n == 1)
return 1;
else
return jiecheng(n-1) * n;
}
void main() {
int n;
long y;
scanf("%d", &n);
y = jiecheng(n);
printf("%d!=%ld", n, y);
}

4. 指针作为参数(传地址)

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
int change(int *x);
void main() {
int y=4, m=-5;
printf("before calling change function,m=%d,y=%d\n", m, y);
m = change(&y);
printf("after calling change function,m=%d,y=%d\n", m, y);
}
int change(int *x) {
*x = 10;
return 0;
}

5. 函数实现数组排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<stdio.h>
#define N 10
void sort(int a[], int n);
void main() {
int i, aa[N];
printf("please input 10 int numbers:\n");
for (i=0; i<N; i++)
scanf("%d", &aa[i]);
sort(aa, N);
printf("\nafter sorted:\n");
for (i=0; i<N; i++) {
printf("%8d", aa[i]);
if ((i+1)%5 == 0)
printf("\n");
}
}
void sort(int a[], int n) {
int i, j, k, temp;
for (i=0; i<n; i++) {
k = i;
for (j=i+1; j<n; j++)
if (a[k] > a[j])
k = j;
if (k != i) {
temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}

第十五周实验

1. 函数判断素数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<math.h>
int prime(int n);
void main() {
int n;
scanf("%d", &n);
if (prime(n))
printf("%d is a prime\n", n);
else
printf("%d is not a prime\n", n);
}
int prime(int n) {
int i, f=1;
for (i=2; i<=sqrt(n); i++)
if (n%i == 0) {
f=0;
break;
}
return f;
}

2. 传地址求平均值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
float aver(float a[], int n) {
int i;
float average, s=0;
for (i=0; i<n; i++)
s += a[i];
average = s/n;
return average;
}
void main() {
float cj[5], a;
int i;
printf("\ninput 5 scores:\n");
for (i=0; i<5; i++)
scanf("%f", &cj[i]);
a = aver(cj, 5);
printf("average score is %5.2f", a);
}

3. 判断回文字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
#include<string.h>
int huiwen(char x[]);
void main() {
char c[80];
gets(c);
if (huiwen(c))
printf("%s 是回文\n", c);
else
printf("%s 不是回文\n", c);
}
int huiwen(char x[]) {
int i, n;
n = strlen(x);
for (i=0; i<n/2; i++)
if (x[i] != x[n-1-i])
return 0;
return 1;
}

4. static变量示例(累乘)

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
long fun(int n) {
static long s=1;
s = s * n;
return s;
}
void main() {
int i;
for (i=1; i<=5; i++)
printf("%d!=%ld\n", i, fun(i));
}

第十六周实验

1. 统计字符串长度(strlen实现)

1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<string.h>
void main() {
char s1[80];
int i=0;
printf("input string s1:\n");
gets(s1);
while (s1[i] != '\0')
i++;
printf("length=%d\n", i);
}

2. 字符串复制(strcpy实现)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
#include<string.h>
void main() {
char s1[80], s2[80];
int i=0;
printf("input string s2:\n");
gets(s2);
while (s2[i] != '\0') {
s1[i] = s2[i];
i++;
}
s1[i] = '\0';
puts(s1);
}

3. 统计单词个数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<string.h>
void main() {
char string[80];
int i, num=0, word=0;
char c;
gets(string);
for (i=0; (c=string[i])!='\0'; i++) {
if (c == ' ')
word = 0;
else if (word == 0) {
word = 1;
num++;
}
}
printf("there are %d words in the line\n", num);
}