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.程序若的多用递归的思想很多问题都会简化。