妙趣横生的算法2010-1-3

妙趣横生的算法(C语言实现) 杨峰

题目28:请编写一个C程序,在终端用键盘输入字符串,以Ctrl+Z组合键表示输入完毕,统计输入的字符串中空格符、制表符、换行符的个数,并显示统计的结果。

分析:通过查表可知空格符的ASCII为32,制表符的ASCII为9,换行符的ASCII为10.可以通过他们不同的ASCII码来区分出来它们。此外,Ctrl+Z的组合键输入的字符在计算机中对应的是EOF结束标志。

#include <stdio.h>
#include<String.h>
main(){
 char c;
 int space=0,table=0,enter=0;
 printf("Please input a string:/n");
 scanf("%c",&c);
 while(c!=EOF){
  switch(c){
  case 32:space++;break;
  case 9:table++;break;
  case 10:enter++;break;
  default:break;
  }
  scanf("%c",&c);
 }
 printf("The number of space:%d/n",space);
 printf("The number of table:%d/n",table);
 printf("The number of enter:%d/n",enter);
getchar();
return 0;
}
题目29:编写一个程序,在终端输入一个字符,输出它的ASCII码。

分析:通常我们输出一个字符一般用printf("%c",c);的形式,因为输出格式规定的是"%c",因此表示以字符的形式输出,所以我们看到的是x对应的ASCII码的字符形式。例如,执行printf("%c",97);语句等价于执行printf("%c",'a');语句。屏幕上输出地只是一个字符a。如果换一种输出形式,例如printf("%d",x);那么输出的就是x对应的ASCII码的整数形式。这样用户通过这个输出就可以知道字符x对应的ASCII码了。

#include <stdio.h>
#include<String.h>
main(){
 char c;
 printf("Please input a character:/n");
 scanf("%c",&c);
 getchar();
 printf("The ASCII of %c is %d/n",c,c);
}
题目30,基于switch语句的译码器:给定一个前缀表如下:a-->1,b-->01,c-->001。又知有一个0/1字符串为:"001011101001011001",编写一个C程序,按照给定的前缀码表为该字符串译码。

#include <stdio.h>
#include<String.h>
void Decode(char *str,int n);
main(){
 char str[18]="001011101001011001";
 Decode(str,18);
 getchar();
}
void Decode(char *str,int n)
{
 int i=0;
 while(i<n)
 {
  switch(str[i])
  {
   case '1':printf("a");break;
   case '0':
   {
    i++;
    switch(str[i])
    {
     case '1':printf("b");break;
     case '0':
      {
        i++;
        switch(str[i])
        {
         case '1':printf("c");break;
        }
        break;
      }
    }
    break;
   }
  }
  i++;
 }
}

题目31,指针变量作参数:编写一个函数inputArray,该函数被主函数调用,通过该函数实现向主函数中定义的变量数组输入数据。

分析:本题目要求对主函数中的数组值进行修改,因此无法通过函数的返回值来实现该功能。所以要想对被调函数修改主函数中的数组值,只能将数组的首地址(指针)作为函数的参数进行传递,被调函数通过主函数传递来的数组地址对数组值进行修改。

#include <stdio.h>
#include<String.h>
void inputArray(int *array,int len){
 int i;
 for(i=0;i<len;i++)
  scanf("%d",array+i);
}
main(){
 int i,array[10];
 inputArray(array,10);
 for(i=0;i<10;i++){
  printf("%d ",array[i]);
 }
 printf("/n");
}

题目32,矩阵的置换运算:用键盘从终端输入一个3行4列的矩阵,编写一个函数对该矩阵进行置换操作。

#include <stdio.h> 

#include<String.h>

void inputMatrix(int (*a)[4],int m,int n);

void outputMatrix(int (*b)[3],int m,int n);

void transport(int (*a)[4],int (*b)[3]);

 

int main(void){

int a[3][4],b[4][3];

printf("Please input the Matrix:/n");

inputMatrix(a,3,4);

transport(a,b);

printf("The transport Matrix is:/n");

outputMatrix(b,4,3);

getchar();

return 0;

}

 

void inputMatrix(int (*a)[4],int m,int n)

{

int i,j;

for(i=0;i<m;i++)

for(j=0;j<n;j++)

{

scanf("%d",*(a+i)+j);

}

}

void outputMatrix(int (*b)[3],int m,int n)

{

int i,j;

for(i=0;i<m;i++)

{

for(j=0;j<n;j++)

printf("%d  ",*(*(b+i)+j));

printf("/n");

}

}

void transport(int (*a)[4],int (*b)[3])  //void transport(int (*a)[4],int (*b)[3]);

{

int i,j;

for(i=0;i<4;i++)

for(j=0;j<3;j++)

b[i][j]=a[j][i];

}

题目33,矩阵的乘法运算:有两个矩阵A1、A2,分别如下:

  1  2  3           1 0 2 3

A1=   4  5  6    A2=4 1 5 6

                                6 8 9 0

编写一个程序,实现这两个矩阵的乘积。

 #include <stdio.h> 

#include<String.h>

 

int main(void){

int a[2][3]={{1,2,3},{4,5,6}};

int b[3][4]={{1,0,2,3},{4,1,5,6},{6,8,9,0}};

int c[2][4]={{0,0,0,0},{0,0,0,0}};

int i,j,k;

for(i=0;i<2;i++)

{

for(j=0;j<4;j++)

{

for(k=0;k<3;k++)

{

c[i][j]+=a[i][k]*b[k][j];

}

}

}

printf("The result is:/n");

for(i=0;i<2;i++)

{

for(j=0;j<4;j++)

printf("%d  ",c[i][j]);

printf("/n");

}

return 0;

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值