c语言第二次试验报告

题目一 11-6 方阵循环右移(20 分)

  本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。
  输入格式:
  输入第一行给出两个正整数m和n(1≤n≤6)。接下来一共n行,每行n个整数,表示一个n阶的方阵。
  输出格式:
  按照输入格式输出移动后的方阵:即输出n行,每行n个整数,每个整数后输出一个空格。

题目二 12-6 字符串转换成十进制整数(15 分)
  输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则    代表该数是负数。
  输入格式:
  输入在一行中给出一个以#结束的非空字符串。
  输出格式:
  在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

题目三 13-4 使用函数的选择法排序(25 分)

  本题要求实现一个用选择法对整数数组进行简单排序的函数。

  函数接口定义:

  void sort( int a[], int n ); 其中a是待排序的数组,n是数组a中元素的个数。该函数用选择法将数组a中的元素按升序排列,结果仍然在数组a中。

题目四  14-4 输出月份英文名(15 分)

  本题要求实现函数,可以返回一个给定月份的英文名称。

  函数接口定义:

  char *getmonth( int n );
  函数getmonth应返回存储了n对应的月份英文名称的字符串头指针。如果传入的参数n不是一个代表月份的数字,则返回空指针NULL。
题目五  15-9 递归计算P函数(15 分)
   本题要求实现下列函数P(n,x)的计算,其函数定义如下:

  函数接口定义:

  double P( int n, double x );
  其中n是用户传入的非负整数,x是双精度浮点数。函数P返回P(n,x)函数的相应值。题目保证输入输出都在双精度范围内。

部分源代码

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;
}

  

12-6 字符串转换成十进制整数

#include<stdio.h>
int main()
{
	int i,c,n,j=0;
	char str[80];
	char b[80];
	i=0;
	while((str[i]=getchar())!='#')
	i++;
	str[i]='\0';
	for(i=0;str[i]!='\0';i++)
	{
		if(str[i]>='0'&&str[i]<='9'||str[i]>='a'&&str[i]<='f'||str[i]>='A'&&str[i]<='F'){
		
		b[j]=str[i];
		j++;}
	}
	int number=0;
	for(i=0;b[i]!='\0';i++)
	{
		if(b[i]>='0'&&b[i]<='9')
		number=number*16+b[i]-'0';
		else if(b[i]>='A'&&b[i]<='F')
		number=number*16+b[i]-'A'+10;
		else if(b[i]>='a'&&b[i]<='f')
		number=number*16+b[i]-'a'+10;
	}
	for(i=0;str[i]!='\0';i++)
	{
		if(str[i]=='-')
		continue;
		if(str[i]>='0'&&str[i]<='9'||str[i]>='a'&&str[i]<='f'||str[i]>='A'&&str[i]<='F')
		number=-number;
	}
	printf("%d",number);
	return 0;
}
	
	

  13-4 使用函数的选择法排序

裁判测试程序样例

#include <stdio.h>
#define MAXN 10

void sort( int a[], int n );

int main()
{
    int i, n;
    int a[MAXN];

    scanf("%d", &n);
    for( i=0; i<n; i++ )
        scanf("%d", &a[i]);

    sort(a, n);

    printf("After sorted the array is:");
    for( i = 0; i < n; i++ )
        printf(" %d", a[i]);
    printf("\n");

    return 0;
}

  代码:

void sort( int a[], int n )
{
	int j,t,i,index;
	for(i=0;i<n;i++)
	{
		index=i;
		for(j=i+1;j<n;j++)
		{
			if(a[j]<a[index])index=j;
		}
		t=a[index];
		a[index]=a[i];
		a[i]=t;
	}
}

  

14-4 输出月份英文名

裁判测试程序样例

#include <stdio.h>

char *getmonth( int n );

int main()
{
    int n;
    char *s;

    scanf("%d", &n);
    s = getmonth(n);
    if ( s==NULL ) printf("wrong input!\n");
    else printf("%s\n", s);

    return 0;
}

  代码

char a[12][10]={"January","February","March","April","May","June","July","August","September","October","November","December"};
char *getmonth( int n )
{	
	char *month;
	month=NULL;
	
	if(n<=12&&n>0)
	{
		month=a[n-1];
		return month;
	}
	else
	return NULL;
}

  

15-9 递归计算P函数

裁判测试程序样例

#include <stdio.h>

double P( int n, double x );

int main()
{
    int n;
    double x;

    scanf("%d %lf", &n, &x);
    printf("%.2f\n", P(n,x));

    return 0;
}

  代码:

double P( int n, double x )
{
	double result;
	if(n==0)
	result=1;
	else if(n==1)
	result=x;
	else 
	result= ((2*n-1)*P(n-1,x)-(n-1)*P(n-2,x))/n;
	return result;
}

 

遇到的问题,解决方法和心得体会 

1.根据题目要求寻找数据之间的规律,这样解决问题就更快。

2.要学会十进制转n进制,n进制转十进制的方法。

3.要熟练掌握数组的各种排序法:选择排序法,冒泡排序法。

4.指针的难度还是很明显的,数组可以定义函数外。

5.程序若的多用递归的思想很多问题都会简化。

posted on 2018-01-26 12:30  今天啊霄减肥了吗  阅读(728)  评论(0编辑  收藏  举报