C语言第二次实验报告
一.实验题目,设计思路
1.实验题目
题1:11-6 方阵循环右移(20 分)
本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。
题2:12-5 查找指定字符(15 分)
本题要求编写程序,从给定字符串中查找某指定的字符。
题3:13-5 判断回文字符串(20 分)
本题要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。
题4:14-8 字符串排序(20 分)
本题要求编写程序,读入5个字符串,按由小到大的顺序输出。
题5:15-6 按等级统计学生成绩(20 分)
本题要求实现一个根据学生成绩设置其等级,并统计不及格人数的简单函数。
2.设计思路
11-6 方阵循环右移
对给定的数组,通过其下标数值以及周期进行移动。
12-5 查找指定字符
对输入的字符串进行循环查找,从i=0开始,若找到与ch相同的字符,则立刻跳出循环,并将下标数值记录并输出。
13-5 判断回文字符串
将字符串分为两部分,前部由小到大推进,后部由大到小推进,在对应的字符部分,若有发现不相等的情况,即该字符串非回文字符串。
14-8 字符串排序
通过排序法,将所给定的字符串组进行大小比较,将较小的排至字符串组前,较大的排至后。
15-6 按等级统计学生成绩
设定判断条件,在相关的区间内给定相应的等级,并且在出现小于额定分数的情况时,对统计人数进行加一处理。
二.源程序(可只截取最关键的部分)
11-6 方阵循环右移
1 #include <stdio.h> 2 3 int main() 4 { 5 int i, j, m, n, index; 6 int Array1[6][6], Array2[6][6]; 7 scanf("%d %d", &m, &n); 8 for (i = 0; i < n; i++) { 9 for (j = 0; j < n; j++) 10 scanf("%d", &Array1[i][j]); 11 } 12 for (i = 0; i < n; i++) { 13 for (j = 0; j < n; j++) { 14 index = (j+m)%n; 15 Array2[i][index] = Array1[i][j]; 16 } 17 } 18 for (i = 0; i < n; i++) { 19 for (j = 0; j < n; j++) 20 printf("%d ", Array2[i][j]); 21 printf("\n"); 22 } 23 24 return 0; 25 }
12-5 查找指定字符
#include<stdio.h> #include<stdlib.h> #include<math.h> #include <string.h> int main() { char str[81]; char b; int i=0,j=-1; // j = -1 int len; scanf("%c\n",&b); gets(str); len=strlen(str);//¼ÆË㳤¶È for (i=len-1;i>=0;i--) { if (b==str[i]) { j=i; break; } } if (j == -1) printf("Not Found\n"); else { printf("index = %d",j); } return 0; }
13-5 判断回文字符串
bool palindrome( char *s ) { int len = strlen(s), i; for (i = 0; i < len/2; ++i){ if (s[i] != s[len-1-i]){ return false; } } return true; }
#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; } /* 你的代码将被嵌在这里 */
14-8 字符串排序
#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { int i,j,n; scanf("%d",&n); char a[n][80], t[80]; for (i = 0; i < 5; i++) { scanf("%s",a[i]); } for (i=1;i<5;i++) { for (j =0; j < 5-i ;j++) if (strcmp(a[j], a[j+1]) > 0) { strcpy(t,a[j]); strcpy(a[j], a[j + 1]); strcpy(a[j + 1], t); } } for (i = 0; i < 5; i++) puts(a[0]); return 0; }
15-6 按等级统计学生成绩
int set_grade( struct student *p, int n ) { int count=0; for(int i=0;i<n;i++){ if(85<=p[i].score&&p[i].score<=100){ p[i].grade='A'; } else if(70<=p[i].score&&p[i].score<=84){ p[i].grade='B'; } else if(60<=p[i].score&&p[i].score<=69){ p[i].grade='C'; } else if(0<=p[i].score&&p[i].score<=59){ p[i].grade='D'; count++; } } return count; }
#include <stdio.h> #define MAXN 10 struct student{ int num; char name[20]; int score; char grade; }; int set_grade( struct student *p, int n ); int main() { struct student stu[MAXN], *ptr; int n, i, count; ptr = stu; scanf("%d\n", &n); for(i = 0; i < n; i++){ scanf("%d%s%d", &stu[i].num, stu[i].name, &stu[i].score); } count = set_grade(ptr, n); printf("The count for failed (<60): %d\n", count); printf("The grades:\n"); for(i = 0; i < n; i++) printf("%d %s %c\n", stu[i].num, stu[i].name, stu[i].grade); return 0; } /* 你的代码将被嵌在这里 */
三.遇到的问题及解决方法,心得体会
在解题过程中,可能会出现对新的概念不理解的情况,这就要求我们去多熟悉课本知识,并且在熟悉课本知识的条件下,多多练习代码。
而解题中,若是有思路不清晰的情况,则需要先静下心,仔细观察题目的要求,写出需要的步骤,列出所需的功能,最后通过书写代码实现功能。