明解c语言入门篇课后练习(个人理解)

第一章

1-1

#include <stdio.h>
int main(){
printf("15减去37的结果是%d",15-37);
return 0;
}

1-2

#include <stdio.h>
int main(){
printf("天\n");
printf("地\n");
printf("人\n");
return 0;
}

1-3

#include <stdio.h>
int main(){
printf("喂\n");
printf("      \n");
printf("您好\n");
printf("再见。\n");
return 0;
}

1-4

#include <stdio.h>
int main() {
    int a = 3.14;
    printf("输出a的值:%d", a);
    return 0;
}

int是整数型的  小数点后面会被忽略  只保留整数部分

1-5

#include <stdio.h>
int main (){
    int a;
    printf("请输入一个整数:",a);
    scanf("%d",&a);
    printf("该整数加去12的结果是:%d",a+6);
    return 0;
}

1-6

#include <stdio.h>
int main (){
    int a;
    printf("请输入一个整数:",a);
    scanf("%d",&a);
    printf("该整数减去6的结果是:%d",a-6);
    return 0;
}

1-7

#include <stdio.h>
int main(){
    puts("天");
    puts("地");
    puts("人");
    return  0;
}

1-8

#include <stdio.h>
int main(){
int a,b;
int c;
puts("请输入两个整数:");
printf("整数1:");    scanf("%d",&a);
printf("整数2:");    scanf("%d",&b);
c=a*b;
printf("他们的乘积是:%d",c);
return 0;
}

1-9

#include <stdio.h>
int main(){
int a,b,c;
int d;
puts("请输入两个整数:");
printf("整数1:");    scanf("%d",&a);
printf("整数2:");    scanf("%d",&b);
printf("整数3:");    scanf("%d",&c);
d=a+b+c;
printf("他们的和是:%d",d);
return 0;
}

第二章

2-1

#include <stdio.h>
int main(){
int a,b;

puts("请输入两个整数:");
printf("整数1:");    scanf("%d",&a);
printf("整数2:");    scanf("%d",&b);
printf("a的值是b的值的%d%%",(a*100)/b);
return 0;
}

2-2

#include <stdio.h>
int main(){
int a,b;
puts("请输入两个整数:");
printf("整数1:");    scanf("%d",&a);
printf("整数2:");    scanf("%d",&b);
printf("他们的和是%d,积是%d",a+b,a*b);
return 0;
}

2-3

#include <stdio.h>
int main(){
    double a;
    printf("请输入一个实数:");    scanf("%lf",&a);
    printf("你输入的是%lf",a);
    return 0;
}

那个很像1的是小写L来的

2-4

#include <stdio.h>
int main()
{
	int n = 0;
	double m = 0;
	n = 10 / 2;
	m = 10.0 / 2.0;
	printf("整型常量除:%d\n", 10 / 2);
	printf("浮点型常量除:%f\n", 10.0 / 2.0);
	printf("int型常量除:%d\n", n);
	printf("double型常量除:%f\n", m);
	return 0;
}

2-5

#include <stdio.h>
int main(){
int a,b;

puts("请输入两个整数:");
printf("整数1:");    scanf("%d",&a);
printf("整数2:");    scanf("%d",&b);
printf("a的值是b的值的%f%%",(double)(a*100)/b);
return 0;}

2-6

#include <stdio.h>
int main(){
    int a;
    printf("请输入你的身高:");    scanf("%d",&a);
    printf("您的标准体重是%。lf公斤",(a-100)*0.9);
    return 0;
}

第三章

3-1

#include <stdio.h>
int main(){
int a,b;
printf("整数a:");    scanf("%d",&a);
printf("整数b:");    scanf("%d",&b);
if(a/b)
       puts("b不是a的约数");
else
       puts("b是a的约数");
return 0;
}

3-2

结果变得相反

3-3

#include <stdio.h>
int main(){
int a;
printf("整数a:");    scanf("%d",&a);
if(a==0)
     printf("绝对值是0");
else if(a>0)
     printf("绝对值是%d",a);
else
     printf("绝对值是%d",-a);
return 0;
}

3-4

#include <stdio.h>
int main(){
int a,b;
printf("整数a:");    scanf("%d",&a);
printf("整数b:");    scanf("%d",&b);
if(a==b)
      printf("a和b相等");
   else if(a>b)
      printf("a大于b");
else
      printf("a小于b");
return 0;
}

3-5

#include <stdio.h>
int main()
{
    int a = 2;
    int b = 3;
 
    printf("%d\n", a > b);
    printf("%d\n", a < b);
    printf("%d\n", a == b);
    printf("%d\n", a != b);
 
    return 0;
}

3-6

#include <stdio.h>
int main(){
int a,b,c,min;
puts("请输入三个整数。");
printf("整数a:");    scanf("%d",&a);
printf("整数b:");    scanf("%d",&b);
printf("整数c:");    scanf("%d",&c);
min=a;
if(b<min)  min=b;
if(c<min)  min=c;
printf("他们的最小值是%d",min);
return 0;
}

3-7

#include <stdio.h>
int main(){
int a,b,c,d,max;
puts("请输入四个整数。");
printf("整数a:");    scanf("%d",&a);
printf("整数b:");    scanf("%d",&b);
printf("整数c:");    scanf("%d",&c);
printf("整数d:");    scanf("%d",&d);
max=a;
if(b>max)  max=b;
if(c>max)  max=c;
if(d>max)  max=d;
printf("他们的最大值是%d",max);
return 0;
}

3-8

#include <stdio.h>
int main(){
    int n1,n2;
    puts("请输入两个整数");
    printf("整数n1:");   scanf("%d",&n1);
    printf("整数n2:");   scanf("%d",&n2);
    if(n1>n2)
        printf("他们的差是%d",n1-n2);
    else
        printf("他们的差是%d",n2-n1);
    return 0;
}

3-9

#include <stdio.h>
int main(){
    int n1,n2;
    puts("请输入两个整数");
    printf("整数n1:");   scanf("%d",&n1);
    printf("整数n2:");   scanf("%d",&n2);
    n1==n2?printf("他们是相等数"):printf("他们不是相等数");
    return 0;
}

3-10

#include <stdio.h>
int main(){
    int a,b,c,min;
    puts("请输入三个整数。");
    printf("整数a:");    scanf("%d",&a);
    printf("整数b:");    scanf("%d",&b);
    printf("整数c:");    scanf("%d",&c);
    if(a==b&&a==c)
        printf("三个值相等");
    else if(a!=b&&a!=c&a!=c)
        printf("三个值不相等");
    else
        printf("有两个值相等");
    return 0;
}

3-11

#include <stdio.h>
int main(){
    int a,b;
   puts("请输入两个整数");
    printf("整数a:");   scanf("%d",&a);
    printf("整数b:");   scanf("%d",&b);
    if(a-b<=10||b-a<=10)
        printf("他们的差小于10");
    else
        printf("他们的差大于10");
    return 0;
}

3-12

#include <stdio.h>
int main() {
    int no, a;
    printf("请输入一个整数:");   scanf("%d", &no);
    a=no%2;
    switch (a){
        case 0:puts("输入的整数是偶数");     break;
        case 1:puts("输入的整数是奇数");     break;
    }
    return 0;
}

3-13

#include<stdio.h>
int main()
{
    int month;
    printf("请输入月份:"); scanf("%d", &month);
    switch (month)
    {
        case 1:printf("%d月是冬季", month); break;
        case 2:printf("%d月是冬季",month); break;
        case 3:printf("%d月是春季",month); break;
        case 4:printf("%d月是春季",month); break;
        case 5:printf("%d月是春季",month); break;
        case 6:printf("%d月是夏季",month); break;
        case 7:printf("%d月是夏季",month); break;
        case 8:printf("%d月是夏季",month); break;
        case 9:printf("%d月是秋季",month); break;
        case 10:printf("%d月是秋季",month); break;
        case 11:printf("%d月是秋季",month); break;
        case 12:printf("%d月是冬季",month); break;
        default:printf("%d月不存在!",month); break;
    }
    return 0;
}

第四章

 4-1

#include <stdio.h>
int main() {
    int no, a;
    printf("请输入一个整数:");   scanf("%d", &no);
    int retry;
    do{
        if(no==0)
            puts("该整数是零");
        else if(no>0)
            puts("该整数大于零");
        else
            puts("该整数小于零");
        printf("是否继续?<yes---0,no--9>:");  scanf("%d",&retry);
    }while(retry==0);
    return 0;
}

4-2

#include <stdio.h>
int main(){
    int a,b;
    printf("请输入一个整数a:");   scanf("%d",&a);
    printf("请输入一个整数b:");  scanf("%d",&b);
    int sum=0;
    if(a>b){
        int i=b;
        do
        {
            sum=sum+i;
            i=i+1;
        }while(i<=a);
        printf("大于%d小于%d的所有整数和是%d\n",b,a,sum);
    }else{
        int i=a;
        do{
            sum=sum+i;
            i=i+1;
        }while(i<=b);
        printf("大于%d小于%d的所有整数和是%d\n",a,b,sum);
    }
    return 0;
}

4-3

#include <stdio.h>
int main(){
 int n;
 printf("请输入一个整数:");    scanf("%d",&n);
 if(n>=0){
     while(n>=0){
         printf("%d",n);
         n--;}
 }else 
         puts("");
 return 0;
 }

4-4

#include <stdio.h>
int main(){
 int n;
 printf("请输入一个整数:");    scanf("%d",&n);
 if(n>=0){
     while(n>=1){
         printf("%d",n);
         n--;}
 }else
         puts("");
 return 0;
 }

4-5

#include <stdio.h>
int main(){
 int i=1, n;
 printf("请输入一个整数:");    scanf("%d",&n);
 if(i>=0){
     while(n>=1){
         printf("%d",i++);
         n--;}
 }else
     puts("");
 return 0;
 }

4-6

#include <stdio.h>
int main(){
 int  no;
 printf("请输入一个整数:");    scanf("%d",&no);
 int i;
while(i<=no){
    printf("%d",i);
    i=i+2;
}
 return 0;
 }

4-7

#include <stdio.h>
int main(){
 int  no;
 printf("请输入一个正整数:");    scanf("%d",&no);
 int i;
while(i<=no){
    printf("%d",i);
    i=i*2;
}
 return 0;
 }

4-8

#include <stdio.h>
int main(){
 int  no;
 printf("正整数:");    scanf("%d",&no);
 int i;
if(no>=1){
    while(no-->1)
        putchar('*');
 putchar('\n');   
}
 return 0;
 }

4-9

#include <stdio.h>
int main(){
 int  n;
 printf("请输入正整数:");    scanf("%d",&n);
 int i=1;
if(n>=0){
    while(i<=n){
        if(i%2==0){
            printf("-");
        }
        else
            printf("+");
    i+=1;}

}
 return 0;
 }

4-10

#include <stdio.h>
int main(){
    int  n;
    printf("请输入正整数:");    scanf("%d",&n);
    int i=1;
    if(n>=0){
        while(n-->0){
                printf("-");}
    }
    return 0;
}

4-11

#include <stdio.h>
int main(){
    int  n;
    do {
        printf("请输入正整数:");
        scanf("%d", &n);
        if(n<=0){
            puts("请不要输入一个正整数。");
        }
    }while(n<=0);
    printf("该整数的逆向显示的结果是");
    while(n>0){
        printf("%d",n%10);
        n/=10;
    }
  puts("。");
    return 0;
}

4-12

#include <stdio.h>
int main(){
    int  n,cnt=0;
    do {
        printf("请输入正整数:");
        scanf("%d", &n);
        if(n<=0){
            puts("请不要输入一个正整数。");
        }
    }while(n<=0);
    printf("该整数的位数是");
    while(n>0){
        n/=10;
        cnt+=1;
    }
    printf("%d",cnt);
    puts("。");
    return 0;
}

4-13

#include <stdio.h>
int main(){
    int n,sum=0,i;
    printf("n的值是:",n);
    scanf("%d",&n);
    for(i=0;i<=n;i++){
        sum+=1;
    }
    printf("1到%d:%d",n,sum);
    return 0;
}

4-14

#include <stdio.h>
int main(){
 int a,i;
 printf("请输入一个整数:");
 scanf("%d",&a);
 for(i=1;i<=a;i++){
     printf ("%d",i%10);
 }
 return 0;
}

4-15

#include <stdio.h>
int main(){
 int a,b,c;
 printf("开始数值(cm):");
 scanf("%d",&a);
 printf("结束数值(cm):");
 scanf("%d",&b);
 printf("间隔数值(cm):");
 scanf("%d",&c);

    for(;a<=b;a+=c){
        printf("%dcm",a);
        printf("       ");
        printf("%.2f",(double)(a-100)*0.9);
 }
 return 0;
}

4-16

#include <stdio.h>
int main(){
 int a,i;
 printf("整数值:");
 scanf("%d",&a);
 for(i+=1;i<=a;i++){
     if(i%2!=0)
         printf("%d",i);
 }
 return 0;
}

4-17

#include <stdio.h>
int main(){
 int a,i;
 printf("整数值:");
 scanf("%d",&a);
 for(i+=1;i<=a;i++)
         printf("%d的二次方是:%d\n",i,i*i);
 return 0;
}

4-18

#include <stdio.h>
int main(){
 int a,i;
 printf("显示多少个*");
 scanf("%d",&a);
 for(i+=1;i<=a;i++){
         printf("*");
         if(i%5==0)
             printf("\n");}
 
 return 0;
}

4-19

#include <stdio.h>
int main(){
 int a,i,cnt;
 printf("整数值:");
 scanf("%d",&a);
 for(i+=1;i<=a;i++) {
     printf("*");
     if (a % i == 0) {
         printf("\n");
         cnt = 1;
     }
 }
printf("约数有:%d",cnt);
 return 0;
}

4-20

#include <stdio.h>
int main(){
printf(" |");
int i,j;
for(i=1;i<=9;i++){
    printf("%3d",i);
}
putchar('\n');
for (i=1;i<=9;i++){
    printf("----");
}
putchar('\n');
for(i=1;i<=9;i++){
    printf("%d|",i);
    for(j=1;j<=9;j++)
        printf("%3d",i*j);
    putchar('\n');
}return 0;
}

4-21

#include <stdio.h>

int main() {
    int a,b,c;
  printf("生成一个正方形。");
  printf("正方形有几层:");    scanf("%d",&a);
  for(b=1;b<=a;b++){
      for(c=1;c<=a;c++)
          putchar('*');
      putchar('\n');
  }
  return 0;
}

4-22

#include <stdio.h>
int main() {
    int a, b;
    puts("让我们来画一个长方形");
    printf("一边:");
    scanf("%d", &a);
    printf("另一边:");
    scanf("%d", &b);
    int h, w;
    if (a < b) {
        for (h = 1; h <= a; h++) {
            for (w = 1; w <= b; w++) {
                putchar('*');
            }
            putchar('\n');
        }
    } else {
        for (h = 1; h <= b; h++) {
            for (w = 1; w <= a; w++) {
                putchar('*');
            }
            putchar('\n');
        }
    }
    return 0;
}

4.23

(1)左上角的等腰三角形

#include <stdio.h>
int main(){
int  i,j,len;
puts("生成直角在左上方的等腰直角三角形。");
printf("短边:");     scanf("%d",&len);

for(i=1;i<=len;i++){
    for(j=0;j<=len-i;j++)
        putchar('*');
    putchar('\n');}

return 0;
}

内循环结束了,外循环才能继续运行。

(2)右上方的等腰三角形

#include <stdio.h>
int main(){
int  i,j,len;
puts("生成直角在右上方的等腰直角三角形。");
printf("短边:");     scanf("%d",&len);

for(i=0;i<=len;i++){
    for(j=1;j<=len-i;j++)
        putchar('*');
    for(j=0;j<=i;j++)
        putchar(' ');
putchar('\n');}

return 0;
}

4-24

#include <stdio.h>
int main(){
int  i,j,len;
puts("让我们来画一个金字塔。");
printf("金字塔有几层:");     scanf("%d",&len);
for(i=1;i<=len;i++){
    for(j=1;j<=len-i;j++)
        printf(" ");       /*输出左边的空格*/
    for(j=1;j<=(i-1);j++)
        printf("*");      /*左侧的*号*/
    printf("*");          /*中间的*号*/
    for(j=1;j<=(i-1);j++)
        printf("*");         /*右侧的*号*/
    printf("\n");
}
return 0;
}

4-25

#include <stdio.h>
int main(){
    int  i,j,len;
    puts("让我们来画一个向下金字塔。");
    printf("金字塔有几层:");     scanf("%d",&len);
    for(i=1;i<=len;i++){
        for(j=1;j<=i-1;j++)
            printf(" ");       /*输出左边的空格*/
        for(j=1;j<=len-i;j++)
            printf("%d",i%10);      /*左侧的*号*/
        printf("%d",i%10);          /*中间的*号*/
        for(j=1;j<=len-i;j++)
            printf("%d",i%10);         /*右侧的*号*/
        printf("\n");
    }
    return 0;
}

第五章

5-1

#include <stdio.h>
int main(){
    int i;
    int v[5];
    for(i=0;i<5;i++)
        v[i]=i;
    for(i=0;i<5;i++)
        printf("[%d]=%d\n",i,v[i]);
    return 0;
}

5-2

#include <stdio.h>
int main(){
    int i,c=5;
    int v[5];
    for(i=0;i<5;i++)
        v[i]=i+1;
    for(i=0;i<5;i++) {
        c--;
        printf("[%d]=%d\n", i, v[c]);
    }
    return 0;
}

5-3

#include <stdio.h>
int main(){
    int i;
    int v[5]={5,4,3,2,1};
    for(i=0;i<5;i++)
        printf("v[%d]=%d\n",i,v[i]);
    return 0;
}
#include <stdio.h>
int main(){
    int i;
    int a[5]={5,4,3,2,1};
    int b[5];
    for(i=0;i<5;i++)
      b[i]=a[i];
    puts("   a   b");
    puts("---------");
    for (i=0;i<5;i++)
        printf("%4d%4d\n",a[i],b[i]);
    return 0;
}

5-4

#include <stdio.h>
int main(){
    int i;
    int a[5]={36,23,17};
    int b[5];
    for(i=0;i<5;i++)
        b[4-i]=a[i];
    puts("   a   b");
    puts("---------");
    for (i=0;i<5;i++)
        printf("%4d%4d\n",a[i],b[i]);
    return 0;
}

5-5

#include <stdio.h>
#define NUMBER 7   /*数组元素总数*/
int main(){
 int i;
 int x[NUMBER];
 for(i=0;i<NUMBER;i++){
     printf("x[%d]:",i);
     scanf("%d",&x[i]);
 }
 for (i=0;i<NUMBER-4;i++){
     int temp=x[i];
     x[i]=x[NUMBER-1-i];
     x[NUMBER-1-i]=temp;
 }
 puts("倒序排列了。");
 for(i=0;i<NUMBER;i++)
     printf("x[%d]=%d\n",i,x[i]);
 return 0;
}

5-6

  a=1.0   b=1                 

5-7                                                                                                           

#include <stdio.h>
#define NUMBER 100    /*数组元素总数*/
int main(){
 int a,i;
 int x[NUMBER];
 printf("数据个数:");   scanf("%d",&a);

 for(i=0;i<a;i++){
     printf("x[%d]号:",i+1);
     scanf("%d",&x[i]);
 }
    putchar('{');
    printf("%d",x[0]);
    for(i=1;i<a;i++)
    {
        printf(", %d",x[i]);
    }
    printf("}\n");
 return 0;
}

 5-8

#include <stdio.h>
#define NUMBER 80   /*数组元素总数*/
int main(){
    int i,j;
    int num;
    int tensu[NUMBER];
    int bunpu[11]={0};

    printf("请输入学生的人数:");
    do{
        scanf("%d",&num);
        if(num<1||num>NUMBER)
            printf("\a请输入1~%d的数: ",NUMBER);
    }while (num<1||num>NUMBER);

    printf("请输入%d人的分数。\n",num);

    for(i=0;i<num;i++){
        printf("%2d号:",i+1);
        do{
            scanf("%d",&tensu[i]);
            if (tensu[i] < 0 || tensu[i] > 100)
                printf("\a请输入1~100的数:");
        }while(tensu[i]<0||tensu[i]>100);
        bunpu[tensu[i]/10]++;
    }

    puts("\n----分布图-----");

    for(i=0;i<=9;i++){
        printf("%3d-%3d:",i*10,i*10+9);
        for(j=0;j<=bunpu[i];j++)
            putchar('*');
        putchar('\n');
    }
    
    printf("    100:");
    for(j=0;j<bunpu[10];j++){
        putchar('*');}
    putchar('\n');
    return 0;

   5-9                                                                                                           

#include <stdio.h>

#define NUMBER 80

int main()
{
    int i,j;
    int num;
    int score[NUMBER];
    int scattergram[11]={0};
    int max;
    int max_x;

    printf("请输入学生人数:");

    do{
        scanf("%d",&num);
        if(num<1 || num>NUMBER)
            printf("请输入1~%d之间的整数:",NUMBER);
    }while(num<1 || num>NUMBER);

    printf("请输入%d人的分数。\n",num);
    for(i=0;i<num;i++)
    {
        printf("%d号:",i+1);
        do{
            scanf("%d",&score[i]);
            if(score[i]<0 || score[i]>100)
            {
                printf("请输入0~100之间的整数:");
            }
        }while(score[i]<0 || score[i]>100);
        scattergram[score[i]/10]++;
    }

    max=scattergram[0];
    for(i=1;i<11;i++)
    {
        if(scattergram[i]>max)
            max=scattergram[i];
    }     /*确定最高层数*/

    max_x=max;
    for(i=0;i<max_x;i++)
    {
        for(j=0;j<11;j++)
        {
            if(max>scattergram[j])
                printf("    ");
            else
                printf("*   ");
        }
        putchar('\n');

        max -= 1;
    }
    printf("--------------------------------------------\n");

    for(i=1;i<=11;i++)
    {
        printf(" %d ",(i-1)*10);
    }

    putchar('\n');

    return 0;
}

  垂直的直方图其实是一层一层打印出来的      if句确定他的最高层   然后再循环

  5-10                                                                                                         

#include <stdio.h>
int main() {
    int i, j, k;
    int tensu1[4][3], tensu2[3][4];
    int product[4][4] = {0};

    puts("请输入第一个矩阵的具体元素");
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
            printf("tensu1[%d][%d]: ", i, j);
            scanf("%d", &tensu1[i][j]);
        }
    }

    puts("请输入第二个矩阵的具体元素");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 4; j++) {
            printf("tensu2[%d][%d]: ", i, j);
            scanf("%d", &tensu2[i][j]);
        }
    }

    for (i = 0; i < 4; i++) {
        for (j = 0; j < 4; j++) {
            for (k = 0; k < 3; k++) {
                product[i][j] += tensu1[i][k] * tensu2[k][j];
            }
        }
    }

    puts("显示矩阵1:");
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
            printf("%6d", tensu1[i][j]);
        }
        putchar('\n');
    }

    puts("显示矩阵2:");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 4; j++) {
            printf("%6d", tensu2[i][j]);
        }
        putchar('\n');
    }

    puts("显示乘积矩阵:");
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 4; j++) {
            printf("%6d", product[i][j]);
        }
        putchar('\n');
    }

    return 0;
}

  5-11                                                                                                                                                                                                                      

#include <stdio.h>
int main() {
    int i, j=1;
    int tensu1[6], tensu2[6];
    int sum1=0, sum2=0, sum3=0;
    puts("请输入六名学生的两门成绩");

    do{j+=1;
        for (i = 0; i < 6; i++) {
            printf("%d号  ", i + 1);
            do {
                printf("语文:");
                scanf("%d", &tensu1[i]);
                if (tensu1[i] < 0 || tensu1[i] > 100)
                    printf("请输入1~100的数:");
            } while (tensu1[i] < 0 || tensu1[i] > 100);
            sum2 += tensu1[i];
        }

        for (i = 0; i < 6; i++) {
            printf("%d号  ", i + 1);
            do {
                printf("数学:");
                scanf("%d", &tensu2[i]);
                if (tensu2[i] < 0 || tensu2[i] > 100)
                    printf("请输入1~100的数:");
            } while (tensu2[i] < 0 || tensu2[i] > 100);
            sum3 += tensu2[i];
        }

        for (i = 0; i < 6; i++) {
            sum1 = tensu1[i] + tensu2[i];
            printf("%d号两门总分为%d,平均分为%.2f   ",i+1,sum1, (double) sum1 / 2);
            putchar('\n');
        }
     putchar('\n');
    }while(j>6);
    
    printf("语文的总分:%5d,平均分:%.2f\n",sum2,(double)sum2/6);
    printf("数学的总分:%5d,平均分:%.2f\n",sum3,(double)sum3/6);
    return 0;
}

  5-12   

#include <stdio.h>
int main()
{
    int i,j,k;
    int course[2][4][3]={{{91,63,78},{67,72,46},{89,34,53},{32,54,34}},
                         {{97,67,82},{73,43,46},{97,56,21},{85,46,35}}};
    
    for(i=0;i<2;i++)
    {
        printf("第%d次考试的分数\n",i+1);
        for(j=0;j<4;j++)
        {
            printf("%d:",j+1);
            for(k=0;k<3;k++)
            {
                printf("%4d",course[i][j][k]);
            }
            putchar('\n');
        }
        putchar('\n');
    }
    
    puts("总分");
    for(i=0;i<1;i++)
    {
        for(j=0;j<4;j++)
        {
            printf("%d:",j+1);
            for(k=0;k<3;k++)
            {
                printf("%4d",course[i][j][k]+course[i+1][j][k]);
            }
            putchar('\n');
        }
    }

    return 0;
}

 第六章       

6-1

#include <stdio.h>
int min2(int a,int b) {
    if (a < b)
        return a;
    else
        return b;
}
int main(){
    int a,b;
    puts("请输入两个整数:");
    printf("整数a:");   scanf("%d",&a);
    printf("整数b:");   scanf("%d",&b);
    printf("最小值是%d。\n",min2(a,b));
    return 0;
}

  6-2

#include <stdio.h>
int min3(int a,int b,int c) {
    int min=a;
    if(b<min)     b=min;
    if(c<min)     c=min;
    return min ;}

    int main(){
        int a,b,c;
        puts("请输入三个整数:");
        printf("整数a:");   scanf("%d",&a);
        printf("整数b:");   scanf("%d",&b);
        printf("整数c:");   scanf("%d",&c);
        printf("最小值是%d。\n",min3(a,b,c));
        return 0;
}

  6-3

#include <stdio.h>
int cbue(int x) {
  return x*x*x;
}
    int main(){
        int x;
        printf("请输入一个整数:");
        scanf("%d",&x);
        printf("该整数的立方是:%d",cbue(x));
        return 0;
}

6-4

#include <stdio.h>
int  spr(int x) {
  return x*x;
}
int pow4(int x){
    return spr(x*x);
}
    int main(){
        int x;
        printf("请输入一个整数:");
        scanf("%d",&x);
        printf("该整数的四次方是:%d",pow4(x));
        return 0;
}

  6-5  

#include <stdio.h>
int  sumup(int n) {
    int i;
    int tmp=0;
    for(i=1;i<=n;i++)
    tmp+=i;
  return tmp;

}
    int main(){
        int a;
        printf("请输n的值:");
        scanf("%d",&a);
        printf("从1到%d和是:%d",a, sumup(a));
        return 0;
}

6-6

#include <stdio.h>
void alert(int n) {
   while(n-->0)
       putchar('\a');

}
    int main(){
      int a;
      printf("请输入多少次铃声");
      scanf("%d",&a);
      alert(a);
      return 0;
}

6-7

#include <stdio.h>
void hello(void){
    printf("你好.\n");
}
int main(){
    hello();
    return 0;
}

6-8

#include <stdio.h>
#define NUMBER 5
int min_of(const int v[],int n){
    int i;
    int min=v[0];
    for(i=1;i<n;i++)
        if(v[i]<min)
            min=v[i];
    return min;
}
int main(){
    int i;
    int v[NUMBER]={0};
    printf("请输入%d个元素:",NUMBER);
    for (i=0;i<NUMBER;i++)
    {
        printf("%d:",i+1);
        scanf("%d",&v[i]);
    }
    printf("最小值是%d。\n",min_of(v,NUMBER));
    return 0;

}

6-9

#include <stdio.h>
#define NUMBER 7

void rev_intary(int v[],int n){
    int i;
    for(i=0;i<n-4;i++)
    {
        int temp=v[i];
        v[i] =v[n-1-i];
        v[n-1-i]=temp;
    }

}

int main(){
    int i;
    int x[NUMBER];
    for(i=0;i<NUMBER;i++) {
        printf("x[%d]", i);
        scanf("%d", &x[i]);
    }
    rev_intary(x,NUMBER);

    puts("倒序排列了!");

    for (i=0;i<NUMBER;i++)
    {
        printf("x[%d]:%d\n",i,x[i]);
    }

    return 0;

}

6-10

#include <stdio.h>
#define NUMBER 7

void rev_intary(int v[], int n) {
    int i;
    for (i = 0; i < n / 2; i++) {
        int temp = v[i];
        v[i] = v[n - 1 - i];
        v[n - 1 - i] = temp;
    }
}

void intary_rcpy(int v1[], const int v2[], int n) {
    int i;
    for (i = 0; i < n; i++) {
        v1[i] = v2[i];
    }
}

int main() {
    int i;
    int v1[NUMBER];
    int v2[NUMBER];

    for (i = 0; i < NUMBER; i++) {
        printf("v[%d]: ", i);
        scanf("%d", &v2[i]);
    }
    
    rev_intary(v2, NUMBER);
    intary_rcpy(v1, v2, NUMBER);

    puts("倒序排列了!");

    for (i = 0; i < NUMBER; i++) {
        printf("v2[%d]: %d\n", i, v2[i]);
    }

    return 0;
}

6-11

#include <stdio.h>
#define NUMBER 7
#define FAILED -1

int search_idx(const int v[], int idx[], int key, int n) {
    int i;
    int temp = 0;

    for (i = 0; i < n; i++) {
        if (v[i] == key) {
            idx[temp] = i;
            temp += 1;
        }
    }
    return (temp > 0) ? temp : FAILED;
}

int main() {
    int i, ky, y;
    int idx[NUMBER], vx[NUMBER + 1];
    for (i = 0; i < NUMBER; i++) {
        printf("vx[%d]:", i);
        scanf("%d", &vx[i]);
    }
    printf("要查找的值:");
    scanf("%d", &ky);
    y = search_idx(vx, idx, ky, NUMBER);
    if (y == FAILED)
        puts("\a查找失败。");
    else
        printf("%d", y);
    return 0;
}

6-12

#include <stdio.h>
void mat_mul(const int a[4][3],const int b [3][4],int c[4][3]){
    int i, j, k;

    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
            c[i][j] = 0; }
            for (k = 0; k < 3; k++) {
                c[i][j] += a[i][k] * b[k][j];
            }
        }
    }

int main(){
    int i,j;
    int tensu1[4][3],tensu2[3][4],tensu3[3][3];
    puts("请输入4行3列矩阵元素");
    for(i=0;i<4;i++){
        for(j=0;j<3;j++){
            printf("tensu[%d][%d]=",i,j);
            scanf("%d",&tensu1[i][j]);
        }
    }
    puts("请输入3行4列矩阵元素");
    for(i=0;i<3;i++){
        for(j=0;j<4;j++){
            printf("[tensu2[%d][%d]=",i,j);
            scanf("%d",&tensu1[i][j]);
        }
    }
    mat_mul(tensu1,tensu2,tensu3);
    printf("两个矩阵的乘积为:\n");
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
            printf("%4d", tensu3[i][j]);
        }
        putchar('\n');
    }
return 0;
}

6-13

#include <stdio.h>

void mat_add(const int a[4][3], const int b[4][3], int c[2][4][3]) {
    int i, j;

    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
            c[0][i][j] = a[i][j]; // 存储第一次考试的分数
            c[1][i][j] = b[i][j]; // 存储第二次考试的分数
        }
    }
}

void mat_print(const int m[4][3]) {
    int i, j;

    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
            printf("%4d", m[i][j]);
        }
        putchar('\n');
    }
}

int main() {
    int tensu1[4][3] = {{91, 63, 78}, {67, 72, 46}, {89, 34, 53}, {32, 54, 34}};
    int tensu2[4][3] = {{97, 67, 82}, {73, 43, 46}, {97, 56, 21}, {85, 46, 35}};
    int sum[2][4][3];

    mat_add(tensu1, tensu2, sum);
    puts("第一次考试的分数");
    mat_print(tensu1);
    puts("第二次考试的分数");
    mat_print(tensu2);
    puts("总分(储存在三维数组中)");
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 4; j++) {
            for (int k = 0; k < 3; k++) {
                printf("%4d", sum[i][j][k]);
            }
            putchar('\n');
        }
    }

    return 0;
}

6-14

#include <stdio.h>
int fx;
int main(){
    int i;
    static double sa[5];
    for(i=0;i<5;i++)
        printf("sa[%d]=%.1f\n",i,sa[i]);
    return 0;
}

6-15

#include <stdio.h>
int x;
void put_count(){
    printf("put_count:第%d次",x+1);
    x++;
    putchar('\n');
}
int main (){
    int i,j;
    printf("要调用多少次:");
    scanf("%d",&i);
    for(j=0;j<i;j++){
        put_count();

    }
    return 0;
}

第八章

8-1

#include <stdio.h>

#define diff(x,y) ((x)-(y))

int main()
{
    int x,y;

    printf("请输入两个整数:");
    scanf("%d %d",&x,&y);
    printf("两数之差为%d。\n",x>y?diff(x,y):diff(y,x));

    return 0;
}

8-3

#include <stdio.h>

#define swap(type,a,b) {type temp;temp=(a);(a)=(b);(b)=temp;}

int main()
{
    int x,y;

    printf("x = ");    scanf("%d",&x);
    printf("y = ");    scanf("%d",&y);
    swap(int,x,y);
    printf("这两个数已经互换了。\n");
    printf("x = %d\n",x);
    printf("y = %d\n",y);

    return 0;
}

8-4

#include <stdio.h>
# define NUMBER 5
void bsort(int a[],int n){
    int i,j;
    for(i=n-1;i>0;i--){
        for(j=0;j<i;j++){
            if(a[j]<a[j+1]){
                int temp =a[j];
                a[j]=a[j+1];
                a[j+1]=temp;
            }
        }
    }
}
int main(){
    int i;
    int height[NUMBER];
    printf("请输入%d人的身高。\n",NUMBER);
    for(i=0;i<NUMBER;i++){
        printf("%2d号:",i+1);
    scanf("%d",&height[i]);
    }
    bsort(height,NUMBER);
    puts("按降序排列。");
    for(i=0;i<NUMBER;i++){
       printf("%2d号:%d\n",i+1,height[i]);

    }
    return 0;
}

8-5

#include <stdio.h>
enum sex {male,female};
enum season    {spring=1,summer,autumn,winter};

void select_sex(enum sex m){
    switch(m){
        case male:printf("先生"); break;
        case female:printf("女士");break;
        default :printf("请正确选择性别!");  break;
    }
}

void select_season (int n){
    switch (n)
    {
        case spring    :    puts("你最喜欢的是春季。");        break;
        case summer    :    puts("你最喜欢的是夏季。");        break;
        case autumn    :    puts("你最喜欢的是秋季。");        break;
        case winter    :    puts("你最喜欢的是冬季。");        break;
        default        :    puts("请正确选择季节。");        break;
    }

}
int main()
{
    enum sex a;
    int b;

    printf("请选择你的性别【0…男士】【1…女士)】:");
    scanf("%d",&a);

    printf("你最喜欢的季节是【1…春季】【2…夏季】【3…秋季】【4…冬季】:");
    scanf("%d",&b);

    select_sex(a);
    select_season(b);

    return 0;
}

8-6

#include <stdio.h>
int factorial(int n) {
    int result = 1;

    for (int i = 1; i <= n; i++) 
        result *= i;
    return result;
}

int main() {
    int num;
    printf("请输入一个整数:");
    scanf("%d", &num);

    if (num < 0) {
        printf("阶乘只定义于非负整数。\n");
    } else {
        printf("该整数的阶乘为 %d.\n", factorial(num));
    }

    return 0;
}

8-7

#include<stdio.h>

int combination(int n,int r);

int main(void)
{
    int n;
    int r;

    do
    {
        printf("请输入整数n:");
        scanf("%d",&n);
        printf("请输入整数r:");
        scanf("%d",&r);
        if(n<=0||r<0||n<r)
        {
            puts("请输入正确数量!");
        }
    }while(n<=0||r<0||n<r);

    printf("%d个整数中取%d个整数的组合数为%d。\n",n,r,combination(n,r));

    return 0;
}

int combination(int n,int r)
{
    if (r == 1)
    {
        return n;
    }
    else if (r==0 || r==n)
    {
        return 1;
    }
    else
    {
        return combination(n-1,r-1)+combination(n-1,r);
    }
}

8-8

#include <stdio.h>

int gcd(int x, int y) {
    if (y == 0) {
        return x;
    } else {
        return gcd(y, x % y); 
    }
}

int main() {
    int x = 48;
    int y = 18;
    int result = gcd(x, y);
    printf("GCD of %d and %d is %d\n", x, y, result);
    return 0;
}

8-9

#include <stdio.h>
int main(){
    int i=1,ch;
    while((ch=getchar())!=EOF){
        switch(ch){
            case '\n': i++; break;
        }
    }
    printf("标准输入中出现的行数:%d",i);
    return 0;
}

8-10

#include <stdio.h>
int main(){
    int i,ch;
    int cnt[10]={0};
    while((ch=getchar())!=EOF){
        if(ch>='0'&&ch<='9')
            cnt[ch-'0']++;
    }
    puts("数字字符串的出现次数");
    for(i=0;i<10;i++){
        printf("%d:",i);
        for (int j = 0; j < cnt[i]; j++) {
            putchar('*');}
        putchar('\n');
    }
    return 0;
}

第九章

9-1

#include <stdio.h>
int main(){
    char str[]="ABC\0DEF";
    printf("字符串str为\"%s\"。\n",str);
    return 0;
}

9-2


#include <stdio.h>

int main()
{
    char s[]="ABC";

    s[0]='\0';

    printf("字符串s为%s。\n",s);

    return 0;
}

9-3


#include <stdio.h>
#define NUMBER 10
int myStrcmpWithoutPointers(const char str1[], const char str2[]) {
    int i = 0;

    while (str1[i] != '\0' && str2[i] != '\0') {
        if (str1[i] != str2[i]) {
            return str1[i] - str2[i];
        }
        i++;
    }
    return str1[i] - str2[i];
}
int main()
{
  int i;
  char s[NUMBER][128];
  for(i=0;i<NUMBER;i++){
      printf("s[%d]:",i);
      scanf("%s",s[i]);
      if (myStrcmpWithoutPointers(s[i], "$$$$$") == 0)
          break;
  }
  for(i=0;i<NUMBER;i++)
      printf("s[%d]=\"%s\"\n",i,s[i]);
  return 0;
}

9-4

#include <stdio.h>

void null_string(char s[]){
    s[0] = '\0';
}

int main(){
    char s[] = "abc";
    null_string(s);
    printf("该字符串为: \"%s\"", s);
    return 0;
}

9-5

#include <stdio.h>
int  str_char(const  char s[],int c){
    int i=0;
    while(s[i])
    {
        if(s[i]=='c'){
            return i;
        }
        i++;
    }
    return -1;
}
int main() {
    char s[] = "example";
    int index = str_char(s, 'c');
    if (index != -1) {
        printf("字符 'c' 在字符串中的索引是 %d\n", index);
    } else {
        printf("字符 'c' 未在字符串中找到\n");
    }
    return 0;
}

9-6

#include <stdio.h>
int  str_char(const  char s[],int c){
    int i=0,j=0;

    while(s[i])
    {
        if(s[i]=='c'){
            j+=1;
        }
        i++;
    }
    return j;
}
int main() {
    char s[] = "cexcamplec";
    int index = str_char(s, 'c');
    if (index != 0) {
        printf("字符 'c' 有: %d个\n", index);
    } else {
        printf("字符 'c' 未在字符串中找到\n");
    }
    return 0;
}

9-7

#include <stdio.h>

void put_stringn(const char s[], int n) {
    for (int i = 0; i < n; i++) {
        for (int j = 0; s[j] != '\0'; j++) {
            putchar(s[j]);
        }
    }
}

int main() {
    int j;
    char str[128];
    printf("请输入字符: ");
    scanf("%s", str);
    printf("要重复多少次:");
    scanf("%d", &j);
    printf("%s字符重复%d次为:", str, j);

    put_stringn(str, j);
    printf(".\n");
    return 0;
}

9-8

#include <stdio.h>
void put_string(const char s[])
{int len=0;
    while(s[len])
         len++;
    int i;
    for(i=len-1;i>=0;i--)
        putchar(s[i]);
}


int main()
{
    char str[128];

    printf("请输入一个字符串:");
    scanf("%s",str);

    printf("字符串\"%s\"逆向后:",str);
    put_string(str);

    return 0;
}

9-9

#include <stdio.h>
#define NUMBER 128

void put_stringn(char s[]) {
    int len = 0;
    
    while (s[len] != '\0') {
        len++;
    }/*计算字符串长度*/

    for (int i = 0; i < len / 2; i++) {
        char temp = s[i];
        s[i] = s[len - 1 - i];
        s[len - 1 - i] = temp;
    }
}

int main() {
    char str[NUMBER];
    printf("请输入字符: ");
    scanf("%s", str);
    printf("%s字符的逆向显示:", str);

    put_stringn(str);

    printf("%s.\n", str);
    return 0;
}

9-10

#include <stdio.h>
void del_digit(char s[])
{
    int i = 0;
    int j = 0;
    char temp[128] = {0};

    while (s[i])
    {
        if (s[i] < '0' || s[i] > '9')
        {
            temp[j] = s[i];
            j++;
        }
        i++;
    }

    j = 0;
    while (temp[j])
    {
        s[j] = temp[j];
        j++;
    }
    s[j] = '\0';
}


int main()
{
    int i;
    char str[128];

    printf("请输入一个字符串:");
    scanf("%s", str);

    del_digit(str);
    printf("删除数字后:%s\n", str);

    return 0;
}

9-11

#include <stdio.h>
#define NUMBER1 10
#define NUMBER2 128
void put_strary(const char s[][NUMBER2], int n) {
    int i;
    for (i = 0; i < n; i++)
        printf("s[%d]=\"%s\"\n", i, s[i]);
}

int myStrcmpWithoutPointers(const char str1[], const char str2[]) {
    int i = 0;
    while (str1[i] != '\0' && str2[i] != '\0') {
        if (str1[i] != str2[i]) {
            return str1[i] - str2[i];
        }
        i++;
    }
    return str1[i] - str2[i];
}

int main() {
    int i;
    char cs[NUMBER1][NUMBER2];
    for (i = 0; i < NUMBER1; i++) {
        printf("s[%d]:", i);
        scanf("%s", cs[i]);
        if (myStrcmpWithoutPointers(cs[i], "$$$$$") == 0)
            break;
    }
    put_strary(cs, i);
    return 0;
}

9-12

#include <stdio.h>
int str_len(char s[]){
    int len=0 ;
    while(s[len]!='\0'){
        len++;
    }
    return len;
}
void rev_string(char s[][128], int n) {
    int i, j;
    for (i = 0; i < n; i++) {
        int len = str_len(s[i]);
        for (j = 0; j < len / 2; j++) {
            char temp = s[i][j];
            s[i][j] = s[i][len - 1 - j];
            s[i][len - 1 - j] = temp;
        }
    }
}
int main() {
    char strings[][128] = {"SEC", "ABC"};
    int num_strings = 2;

    rev_string(strings, num_strings);

    for (int i = 0; i < num_strings; i++) {
        printf("%s\n", strings[i]);
    }

    return 0;
}

第十章

10-1

#include <stdio.h>
void adjust_point(int *n){
    if(*n<0)
        *n=0;
    if(*n>100)
        *n=100;
}
int main(){
    int i;
    printf("请输入一个数字:");
    scanf("%d",&i);
    adjust_point(&i);
    printf("该数字为:%d",i);
    return 0;
}

10-2

10-3

#include <stdio.h>

void sort3(int *n1,int *n2,int *n3)
{
    int temp;

    if(*n1>*n2)
    {
        temp=*n1;
        *n1=*n2;
        *n2=temp;
    }

    if(*n1>*n3)
    {
        temp=*n1;
        *n1=*n3;
        *n3=temp;
    }

    if(*n2>*n3)
    {
        temp=*n2;
        *n2=*n3;
        *n3=temp;
    }
}


int main()
{
    int a,b,c;

    printf("整数a:");	scanf("%d",&a);
    printf("整数b:");	scanf("%d",&b);
    printf("整数c:");	scanf("%d",&c);

    sort3(&a,&b,&c);

    printf("a = %d\nb = %d\nc = %d\n",a,b,c);

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值