代码改变世界

c语言第二次试验报告

2018-01-28 11:43  YELLOWHYH  阅读(1083)  评论(0编辑  收藏  举报

一.实验题目,设计思路

1.实验题目

  1:11-6 方阵循环右移

    本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n1列变换为第nm、nm+1、⋯、n1、0、1、⋯、nm1列。

  2:12-1 统计大写辅音字母

    英文辅音字母是除AEIOU以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数

  3:13-5 判断回文字符串

    本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。

  4:14-2 删除字符

    本题要求实现一个删除字符串中的指定字符的简单函数。

  5:15-2 分类统计各类字符个数

    本题要求实现一个函数,统计给定字符串中的大写字母、小写字母、空格、数字以及其它字符各有多少。

2.设计思路

     11-6 方阵循环右移

    对给定的数组,通过其下标数值寻找规律移动。

  12-1 统计大写辅音字母

    输入的字符串逐个判断是否为辅音字母,最后一位为\0。

  13-5 判断回文字符串

    把字符串分开,前部由小到大推进,后部由大到小推进,若有发现不等的情况,则字符非回文字符串。

  14-2 删除字符

    循环逐个查找是否有不等于输入的字符,若不相等存到另一个数组中,最后将该数组复制给原数组返回。

  15-2 分类统计各类字符个数

    if语句判断字符,用指针返回。

二.源程序(可只截取最关键的部分)

1:11-6 方阵循环右移

#include<stdio.h>
int main()
{
 int m,n,a[6][6],i,j,k,b[6][6];
 scanf("%d%d",&m,&n);
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  {
   scanf("%d",&a[i][j]);
  }
 }
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  {
   k=(j+m)%n;
   b[i][k]=a[i][j];
  }
 }
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  {
   printf("%d ",b[i][j]);
  }
  printf("\n");
 }
 return 0;
}

  2:12-1 统计大写辅音字母

#include<stdio.h>
int main()
{
	int i,c;
	char str[80];
	i=0;
	while((str[i]=getchar())!='\n')
	i++;
	str[i]='\0';
	c=0;
	for(i=0;str[i]!='\0';i++)
	{
		if(str[i]<='Z'&&str[i]>'A'&&str[i]!='E'&&str[i]!='I'&&str[i]!='O'&&str[i]!='U')
		c++;
	}
	printf("%d",c);
	return 0;
}

  3:13-5 判断回文字符串

裁判判定:

#include <stdio.h>
#include <string.h>

#define MAXN 20
typedef enum {false, true} bool;

bool palindrome( char *s );

int main()
{
    char s[MAXN];

    scanf("%s", s);
    if ( palindrome(s)==true )
        printf("Yes\n");
    else
        printf("No\n");
    printf("%s\n", s);

    return 0;
}

  代码:

bool palindrome( char *s )
{int n,n2;
	n=strlen(s);
	n2=n;
	for(int i=0;i<n;i++,n2--)
	{
		if(s[i]!=s[n2-1])
		return false;
	}
	return true;
}

  

14-2 删除字符

裁判测试程序样例:

#include <stdio.h>
#define MAXN 20

void delchar( char *str, char c );
void ReadString( char s[] ); /* 由裁判实现,略去不表 */

int main()
{
    char str[MAXN], c;

    scanf("%c\n", &c);
    ReadString(str);
    delchar(str, c);
    printf("%s\n", str);

    return 0;
}

  代码:

void delchar( char *str, char c )
{
	int len,i,j=0;
	char b[100];
	len=strlen(str);
	for(i=0;i<len;i++)
	{
		if(str[i]!=c)
		{
			b[j]=str[i];
			j++;
		}
	}

	strcpy(str,b);
		str[j]='\0';
}

  

15-2 分类统计各类字符个数

裁判测试程序样例:

#include <stdio.h>
#define MAXS 15

void StringCount( char *s );
void ReadString( char *s ); /* 由裁判实现,略去不表 */

int main()
{
    char s[MAXS];

    ReadString(s);
    StringCount(s);

    return 0;
}

  代码:

void StringCount( char *s )
{
	int i,big=0,small=0,blank=0,dight=0,other=0;
	for(i=0;s[i]!='\0';i++)
	{
	
	if(s[i]>='A'&&s[i]<='Z')
	big++;
	else if(s[i]>='a'&&s[i]<='z')
	small++;
	else if(s[i]==' ')
	blank++;
	else if(s[i]>='0'&&s[i]<='9')
	dight++;
	else
	other++;
}
printf("%d %d %d %d %d",big,small,blank,dight,other);
}