c语言第二次试验报告
2018-01-28 11:43 YELLOWHYH 阅读(1074) 评论(0) 编辑 收藏 举报一.实验题目,设计思路
1.实验题目
1:11-6 方阵循环右移
本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。
2:12-1 统计大写辅音字母
英文辅音字母是除A
、E
、I
、O
、U
以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数
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); }