浙大版《C语言程序设计实验与习题指导(第3版)》题目集
刘布斯J
这个作者很懒,什么都没留下…
展开
-
C 语言 实验11-2-6 奇数值结点链表 (20分)
struct ListNode *readlist(){ struct ListNode *p, *head=NULL, *tail; int n; scanf("%d", &n); while (n != -1){ p = (struct ListNode*)malloc(sizeof(struct ListNode)); p->data = n; p->next = NULL; if (head == NULL) head = p; else..原创 2020-08-03 08:31:53 · 438 阅读 · 0 评论 -
C语言 实验11-2-5 链表拼接 (20分)
思路很简单,请听我娓娓道来。建立一个新链表,然后遍历两个链表,每次遍历记录下符合条件的,并且加入到新链表中。最后把没有遍历完的接到新链表上。struct ListNode *mergelists(struct ListNode *list1,struct ListNode *list2){ if (list1 == NULL) // 先处理一下某个为空的特殊情况 return list2; if .原创 2020-08-02 17:07:27 · 958 阅读 · 0 评论 -
C语言 实验11-1-9 藏尾诗 (20分)
思路:因为要找最后一个字,而每个字符串都是以 结束符’\0’ 作为最后一个元素。而且结束符的位置容易找到。找到以后减2,就是最后一个字的起始列下标拉#include<stdio.h>int main (void){ char poem[4][20], mean[10]; int i,j=0; for (i=0; i<4; i++) scanf("%s", poem[i]); for (i=0; i<4; i++){ while (poem[i].原创 2020-08-01 18:34:23 · 1757 阅读 · 0 评论 -
C语言 实验11-1-8 查找子串 (20分)
void ReadString (char s[]){ gets (s);}如下char *search (char *s, char *t){ int i,j,cnt; for (i=0; *(s+i) != '\0'; i++){ int flag = 1; // flag为 1:字符相同 0:反之 if (*(s+i) == *t){ cnt = i; .原创 2020-08-01 17:52:29 · 415 阅读 · 0 评论 -
C语言 实验11-1-6 指定位置输出字符串 (20分)
小菜鸡心态炸了wwwwwwwww#include<string.h>char *match (char *s, char ch1, char ch2){ char *a,*h; while (*s != '\0'){ if (*s == ch1){ a =s; // 用 a记录此位置,只有 s才能作为返回值,下面的循环又不能改变 s for ( ; *a != '\0'; a++){ printf("%c.原创 2020-08-01 17:13:15 · 966 阅读 · 0 评论 -
C语言 实验11-1-1 英文单词排序 (25分)
#include<stdio.h>#include<string.h>int main (void){ char str[20][10], temp[10]; int i=0,j,k; gets(str[i]); // 先读入第一个作为循环判断 while (str[i][0] != '#'){ i++; .原创 2020-08-01 10:36:11 · 1346 阅读 · 0 评论 -
C语言 实验10-5 递归求简单交错幂级数的部分和 (15分)
解法一,借用math库,直接根据题目即可写出#include<math.h>double fn (double x, int n){ double sum; if (n == 1) sum = x; else sum = pow(x,n)*pow(-1,n-1) + fn(x,n-1); return sum;}解法二,比较难理解double fn( double x, int n ){ double sum; if(n==1) sum .原创 2020-07-31 15:57:05 · 615 阅读 · 0 评论 -
C语言 实验10-1 圆形体体积计算器 (20分)
课本例题啦,细节稍微有点不同。友情提示,此题验证一直错误的,建议看一下PI的精度哦(别问我是怎么知道的,一个小时的代价。。。。。)#include<stdio.h>#define PI 3.1415926535void cal(int sel);double v_ball (void);double v_cylinder (void);double v_cone (void);int main (void){ int sel; while (1) { printf(".原创 2020-07-31 13:24:50 · 1049 阅读 · 1 评论 -
C语言 实验9-10 平面向量加法 (15分)
有个坑,如果两个向量分别是(-0.02,-0.02)和(0,0),如果没有判断那一步的话,答案会出现 -0.0的情况#include<stdio.h>struct xiang{ double x; double y;};int main (void){ struct xiang a,b,t; scanf("%lf %lf %lf %lf", &a.x, &a.y, &b.x, &b.y); double x,y; t.x = a.x + .原创 2020-07-30 18:02:21 · 986 阅读 · 0 评论 -
C语言 实验9-5 查找书籍 (20分)
噗 没读清题,用了个动态内存分配。。。原来这道题给定了不超过10本书,那就也可以定义数组来做啦。另外求大佬解释一下float和double#include<stdio.h>#include<stdlib.h>struct book{ char name[31]; double price; // 俺也不知道为啥价格要用双精度}; .原创 2020-07-30 16:10:46 · 1037 阅读 · 0 评论 -
C语言 实验9-1 计算职工工资 (15分)
因为没有给出N的范围,为了节约内存,最好选用动态内存分配。总的来说就是 动态内存分配+结构+结构指针#include<stdio.h>#include<stdlib.h>struct em { char name[10]; float jiben; float fudong; float zhichu; float gongzi;};int main (void){ int n,i; struct em *s; scanf("%d", &n);.原创 2020-07-30 13:34:17 · 2363 阅读 · 0 评论 -
C语言实验8-1-9 输出学生成绩 (20分)
亮点在动态内存分配#include<stdio.h>#include<stdlib.h>int main (void){ int n,i,*p; double sum=0,max=0,min=100; scanf("%d", &n); p = (int *)calloc(n,sizeof(int)); for (i=0; i<n; i++){ scanf("%d", p+i); if (*(p+i) > max) max = *(.原创 2020-07-29 18:56:15 · 1615 阅读 · 0 评论 -
C语言 实验8-2-10 IP地址转换 (20分)
思路:八个一组,分四组计算。找到每组开始和结束时临界条件的特点即可。#include<stdio.h>#include<math.h>int main (void){ char str[33]; // 字符串要比需输入的多一个长度,别忘啦结束符 '\0' scanf("%s",str); int i,n=1,sum=0,k=7; for (i=(n-1)*8; i<8*n; i++){ su.原创 2020-07-29 17:04:21 · 2606 阅读 · 0 评论 -
C语言 实验8-2-9 长整数转化成16进制字符串 (15分)
思路:累除,从16进制的个位开始得到。因此从数组s的末位下标9开始,逐个往前填。最后再把填的元素 提到下标0开始的位置。void f (long int x, char *p){ if (x<0){ *p = '-'; p++; x = -1*x; } if (x == 0) *p = '0'; // 以上先处理一下非正的情况 int m,cnt=0; while (x != 0){ m = x%16; x /.原创 2020-07-29 14:00:10 · 1492 阅读 · 0 评论 -
C语言 实验8-2-8 字符串排序 (20分)
核心就是选择排序法,注意一点细节问题即可#include<stdio.h>#include<string.h>#define MAXN 80int main (void){ char a[5][80]; int i,j; for (i=0; i<5; i++){ scanf("%s", &a[i]); } char temp[80]; // 中交换两个字符串时 作中间变量 for (i.原创 2020-07-29 11:12:58 · 991 阅读 · 2 评论 -
C语言 实验8-2-7 字符串的连接 (15分)
按照题目说的,调用库函数连接,然后返回基地址即可char *str_cat (char *s, char *t){ strcat(s,t); return s;}原创 2020-07-29 10:24:27 · 1073 阅读 · 0 评论 -
C语言 实验8-2-5 判断回文字符串 (20分)
思路:把逆序的字符串s存到一个新字符串a里,然后调用函数比较bool palindrome (char *s){ int n=0,i,j=0; char a[MAXN]; // 用来存放逆序的字符串 for ( ; *s != '\0'; s++) //统计一下多少个字符 n++; for (i=n-1; i>=0; i--){ // 把逆序的字符串赋给 a s--; a[j] = *(s); j++; } .原创 2020-07-29 09:17:13 · 807 阅读 · 0 评论 -
实验8-2-4 使用函数实现字符串部分复制 (20分)
void strmcpy( char *t, int m, char *s ) { char *p; p = t; // 用 p记录一下下标 0的位置,第五行要用 for ( ; *t != '\0'; t++){ if (t >= p+m-1){ // 第五行 *s = *t; s++; } } *s = '\0'; }原创 2020-07-29 08:30:28 · 454 阅读 · 0 评论 -
C语言 实验8-2-3 删除字符 (20分)
跟数组的思路一样void delchar (char *str, char c){ int i,j=0; for (i=0; *(str+i) != '\0'; i++){ if (*(str+i) != c){ *(str+j) = *(str+i); j++; } } *(str+j) = '\0'; }原创 2020-07-28 20:25:21 · 319 阅读 · 0 评论 -
实验8-1-7 数组循环右移 (20分)
这道题为啥放在指针这里。。。话说用指针的话咋做呀int ArrayShift (int a[], int n, int m){ int i,b[MAXN]; for (i=0; i<n; i++){ if (i+m < n) //直接后移即可 b[i+m] = a[i]; else //后移超出范围,要从头开始 b[i+m-n] = a[i]; } for (i=0; i<n; i++) .原创 2020-07-27 14:27:13 · 343 阅读 · 0 评论 -
C语言 实验8-1-3 拆分实数的整数与小数部分 (15分)
用一个强制类型转换即可void splitfloat (float x, int *intpart, float *fracpart){ *intpart = (int)x; *fracpart = x - (int)x;}原创 2020-07-27 12:29:39 · 1117 阅读 · 0 评论 -
C语言 实验7-3-10 删除重复字符 (20分)
思路:先输入,再去除重复(貌似可以边输入边去除?)最后用一维数组学的“选择排序法”。#include<stdio.h>int main(void){ int i=0,k,j=0; char str[80],news[80]; while ((str[i]=getchar()) != '\n') // 输入 i++; str[i]='\0'; for (i=0; str[i] != '\0'; i++){ int flag =1; .原创 2020-07-26 21:14:12 · 1134 阅读 · 0 评论 -
C语言 实验7-3-2 查找指定字符 (15分)
既然要找最大的下标,那么从最后一个元素(当然除了结束符‘\0’)开始找不就行拉。#include<stdio.h>int main(void){ int i=0,j=0; char ch,str[80]; ch = getchar(); getchar(); while ((str[i] =getchar()) != '\n') i++; str[i] = '\0'; for (i=i-1; i>=0; i--){ if (str[i] == ch){.原创 2020-07-26 17:20:59 · 2628 阅读 · 0 评论 -
C语言 实验7-3-5 输出大写英文字母 (15分)
思路:把读到的大写字母存到新数组里,然后每次读到大写字母都要判断“ 新数组里是否已存在该字母”。#include<stdio.h>int main(void){ int i=0,j=0,k,cnt=0; char str[80],new_str[80]; while ((str[i]=getchar()) != '\n') // 输入 i++; str[i] = '\0'; for (i=0; str[i]!='\0'; i++){ int fla.原创 2020-07-26 17:15:29 · 4367 阅读 · 0 评论 -
C语言 实验7-2-9 螺旋方阵 (20分)
#include<stdio.h>int main (void){ int n,i,j,a[10][10]={0},s=1; scanf("%d", &n); int end=n,st=0; // end:每次循环的最大下标 st:最小下标 int k=n; //记录一下 n的初始值,遍历输出时用 while (n > 1){ for (j=st; j<end-1; j++) // n-1个数字一组 a[st][j] = s++.原创 2020-07-26 09:05:18 · 310 阅读 · 0 评论 -
C 实验7-2-8 找鞍点 (20分)
#include<stdio.h>int main(void){ int n,i,j,k,a[6][6],row[6],col[6],max,min; scanf("%d", &n); for (i=0; i<n; i++){ for (j=0; j<n; j++) scanf("%d", &a[i][j]); } for (i=0; i<n; i++){ // 找到每一行的最大值,存到row[]里 max =.原创 2020-07-25 18:09:09 · 277 阅读 · 0 评论 -
实验7-2-7 方阵循环右移 (20分)
偷个懒,思路懒得写了O(∩_∩)O#include<stdio.h>int main(void){ int m,n,i,j,a[6][6],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 (j=0; j<n; j++){ for (i=0; i<n; i++){.原创 2020-07-25 15:56:11 · 221 阅读 · 0 评论 -
C 实验7-2-6 打印杨辉三角 (20分)
triangle数组里是这样排列的:0 0 ···0 1 0···0 1 1 0···0 1 2 1 0···0 1 3 3 1 0········阔以看出,只需定义[1][1]下标的元素为1。那么后面的每一个元素,都等于它头顶上的 + 头顶左边的元素 。#include<stdio.h>int main(void){ int n,i,j,k,triangle[11][11]={0}; scanf("%d", &n); triangle[1][1] = 1.原创 2020-07-25 14:38:42 · 328 阅读 · 0 评论 -
C 实验7-2-5 判断上三角矩阵 (15分)
思路写在注释里拉。单独用一个数组记录,打印输出。注意k是最外层的循环,处理数组的时候k不能改变#include<stdio.h>int main (void){ int T,i,j,n,k,pri[10]; // pri用来存储输出 scanf("%d", &T); for (k=1; k<=T; k++){ // k个矩阵 scanf("%d", &n); int a[10][10]; for (i=0; i<n; i.原创 2020-07-25 12:07:15 · 814 阅读 · 0 评论 -
C语言 实验7-1-13 装箱问题 (20分)
#include<stdio.h>#define N 1000int main(void){ int n,i,j,goods[N],box[N]={0}; // goods为货物 , box为箱子(一开始箱子是空的,无货物,所以初值为 0) scanf("%d", &n); for (i=1; i<=n; i++) // 为了方便统计,因此货物和箱子都是从 1开始 ,到等于 n结束 scanf("%d", &goods[i]); int原创 2020-07-24 22:14:27 · 1123 阅读 · 0 评论 -
实验7-1-12 组个最小数 (20分)
思路写在注释里啦。如果你有更简单的,欢迎交流!#include<stdio.h>int main(void){ int i,j,n,a[10],b[50]; // 数组 a是题目输入的十个数字 ,数组 b是 a所代表的所有数字 for (i=0; i<10; i++) scanf("%d", &a[i]); int x=0; for (i=0; i<10; i++){ // 把 a代表的所有数字都输入到 b里 for (..原创 2020-07-24 19:29:49 · 133 阅读 · 0 评论 -
实验7-1-8 输出数组元素 (15分)
#include<stdio.h>int main(void){ int n,x,a[20]; scanf("%d", &n); int i; for (i=0; i<n; i++) scanf("%d", &a[i]); int index = 0; for (i=1; i<n; i++){ x = a[i] - a[index]; index = i; if (index % 3 !=0 && index...原创 2020-07-24 13:31:55 · 793 阅读 · 0 评论 -
实验7-1-6 求一批整数中出现最多的个位数字 (20分)
思路都写在注释里了,慢慢享用#include<stdio.h>int main(void){ int n,i,x,count[10],cnt=0,index; // count是统计次数的 ,index是表示出现次数最多的下标 scanf("%d", &n); for (i=0; i<10; i++) //初始化数组 count count[i] = 0; for (i=0; i<n; i++){ scanf("%d..原创 2020-07-24 10:57:50 · 452 阅读 · 0 评论 -
C语言 实验7-1-5 选择法排序 (20分)
#include<stdio.h>int main(void){ int n,a[10],i,j,t; scanf("%d", &n); for (i=0; i<n; i++) scanf("%d", &a[i]); for (i=0; i<n-1; i++){ //最后一个数字无需排序,故到 n-1即可 for (j=i+1; j<n; j++){ if (a[j] > a[i]){ ...原创 2020-07-24 08:43:58 · 886 阅读 · 0 评论 -
实验7-1-4 找出不是两个数组共有的元素 (20分)
#include<stdio.h>int compare(int x, int n, int a[]);int main(void){ int n1,n2,a1[20],a2[20],s[40],i,index=0; // 用 s来存储不一样的数 scanf("%d", &n1); for (i=0; i<n1; i++) scanf("%d", &a1[i]); scanf("%d", &n2); for (i=0; i&l...原创 2020-07-23 21:03:07 · 1119 阅读 · 0 评论