
错题集
W_Reborn
这个作者很懒,什么都没留下…
展开
-
7-38 数列求和-加强版
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。输入格式:输入数字A与非负整数N。输出格式:输出其N项数列之和S的值。思路:大于整型,故使用数组找出每一位数的规律(eg: 222 + 22 + 2=246 6=23 4=22 2=21 每一位为a(n-i) )利用加法法则进位(不过是个位在前,高位在后) (脑补竖式过程)#include<stdi原创 2021-01-25 16:38:16 · 198 阅读 · 0 评论 -
7-36 复数四则运算
7-36 复数四则运算 (15分)本题要求编写程序,计算2个复数的和、差、积、商。输入格式:输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1i和C2=a2+b2i的实部和虚部。题目保证C2不为0。输出格式:分别在4行中按照(a1+b1i) 运算符 (a2+b2i) = 结果的格式顺序输出2个复数的和、差、积、商,数字精确到小数点后1位。如果结果的实部或者虚部为0,则不输出。如果结果为0,则输出0.0。复杂重复的事情请交给函数!#include<stdio.h>原创 2021-01-25 13:50:26 · 215 阅读 · 0 评论 -
7-35 有理数均值
本题要求编写程序,计算N个有理数的平均值。输入格式:输入第一行给出正整数N(≤100);第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。输出格式:在一行中按照a/b的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。#include<stdio.h>#include <math.h>#include<string.h>int原创 2021-01-25 00:30:02 · 213 阅读 · 0 评论 -
7-31 字符串循环左移
输入一个字符串和一个非负整数N,要求将字符串循环左移N次。输入格式:输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。输出格式:在一行中输出循环左移N次后的字符串。#include<stdio.h>#include <math.h>#include<string.h>int main(void){ char s[101]; char s1[101]; int n, i, x; gets(s);原创 2021-01-23 22:04:03 · 120 阅读 · 0 评论 -
7-30 字符串的冒泡排序
我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。输入格式:输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。输出格式:输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。#include<stdio.h>#include <math.h>#include<string.h&g原创 2021-01-23 19:25:01 · 103 阅读 · 0 评论 -
7-29 删除字符串中的子串
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。输入格式:输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。输出格式:在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。#include<stdio.h>#include <math.h>#include<string.h>int main(void){ char s1[80]; char s2[80];原创 2021-01-23 18:43:49 · 124 阅读 · 0 评论 -
7-28 猴子选大王
一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?输入格式:输入在一行中给一个正整数N(≤1000)。输出格式:在一行中输出当选猴王的编号。#include<stdio.h>#include <math.h>#include<string.h>原创 2021-01-23 17:44:48 · 82 阅读 · 0 评论 -
7-25 念数字
字符串数组指针: 字符串存入数组中, 每一个元素是字符串指针.要用双引号.#include<stdio.h>#include <math.h>#include<string.h>int main(void){ char* str[10] = { "ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu" }; char c; int i,n, flag = 0; while ((c原创 2021-01-22 21:15:52 · 111 阅读 · 0 评论 -
7-23 币值转换(强行过点的简单方法)
7-23 币值转换 (20分)输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。输入格式:输入在一行中给出一个不超过9位的非负整数。输出格式:在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。强行过测试点的方法,比较简单无脑,累了,有点难原创 2021-01-22 17:42:34 · 169 阅读 · 0 评论 -
7-19 支票面额
一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?输入格式:输入在一行中给出小于100的正整数n。输出格式:在一行中按格式y.f输出该支票的原始面额。如果无解,则输出No Solution。#include<stdio.h>#include <math.h>int main(void){ int n,y,f; scanf_s("%d", &n); for原创 2021-01-21 22:53:23 · 90 阅读 · 0 评论 -
7-18 二分法求多项式单根
二分法求函数根的原理为:如果连续函数f(x)在区间[a,b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f®=0。二分法的步骤为:检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2;否则如果f(a)f(b)<0,则计算中点的值f((a+b)/2);如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根;否则如果f((a+b)/2)与f(a)同号,则说明根在区间[(a+b)/2,b],令a=(a+b)/2,重复循环;如果f((原创 2021-01-21 19:42:50 · 95 阅读 · 0 评论 -
7-16 求符合给定条件的整数集
给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。输入格式:输入在一行中给出A。输出格式:输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格。#include<stdio.h>int main(void){ int n, i, j, k, flag=1; scanf_s("%d", &n); int a[4] = { n, n + 1, n + 2, n + 3 }; for (原创 2021-01-21 17:31:33 · 118 阅读 · 0 评论 -
阶乘计算升级版
本题要求实现一个打印非负整数阶乘的函数。函数接口定义:void Print_Factorial ( const int N );其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。也就是说阶乘结果大于int范围该如何计算阶乘。解题思路:模拟现实中计算乘法的竖式。从个位到高位分别乘乘数数值大于个位则进位例如:128 * 12:812==96 进位9 余6;212=24 24+9=33 进位3 余3;原创 2021-01-13 22:41:15 · 354 阅读 · 0 评论 -
输出含for的行
#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void){ FILE *fp, *p; char s[999]; int i; if ((fp = fopen("12_5.txt", "r")) == NULL) { printf("Error"); exit(0); } while (!feof(fp)) { fgets(s, 999, fp);原创 2020-12-31 20:35:34 · 648 阅读 · 0 评论 -
习题11-8 单链表结点删除
函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。函数deletem将单链表L中所有存储了m的结点删除。返回指向结果链表头结点的指针。#include <stdio.h>#include <stdlib.h>struct ListNode { int data; struct ListNode *next;};struct ListNode *readlist();st原创 2020-12-27 16:53:57 · 381 阅读 · 0 评论 -
习题11-7 奇数值结点链表
函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。#include <stdio.h>#include <stdlib.h>struct ListNode { int data; struct L原创 2020-12-27 16:53:02 · 145 阅读 · 0 评论 -
习题11-6 查找子串
char *search( char *s, char *t ){ int i, j, k=0, flag = 0; char *p; for (i=0; s[i] != '\0'; i++) { if (s[i] == t[0]) { p = &s[i]; for (j=i, k=0; t[k] != '\0'; j++, k++) { flag = 0; //flag每次遇到t[0]都要重置为零重新检查是否为子串 if (t[k] != s[j])原创 2020-12-26 22:22:10 · 196 阅读 · 0 评论 -
习题10-4 递归求简单交错幂级数的部分和
#include<math.h>double fn( double x, int n ){ double result; if (n==0) result = 0; else if (n==1) result = 1.0*x; else { result = pow(-1, n-1)*pow(x,n) + fn(x, n-1); //加减通过-1的n-1次方得出,递归fn; //关键:找出每项的规律 } return result;}...原创 2020-12-20 21:35:44 · 103 阅读 · 0 评论 -
习题9-4 查找书籍
#include<stdio.h>#include<string.h>struct books { char name[31]; //30个字符串要31个以容纳'\0' double price;};int main(void){ int n, i; struct books book, min_book, max_book; double min, max; scanf("%d", &n); for (i=0; i<n; i++原创 2020-12-16 17:20:59 · 436 阅读 · 0 评论 -
习题9-3 平面向量加法
#include<stdio.h>#include<math.h>struct vector { double x; double y;};int main(void){ struct vector v1, v2, r; scanf("%lf %lf %lf %lf", &v1.x, &v1.y, &v2.x, &v2.y); r.x = v1.x + v2.x; r.y = v1.y + v2.y; if (fab原创 2020-12-16 16:18:31 · 141 阅读 · 0 评论 -
习题8-10 输出学生成绩
#include<stdio.h>#include<stdlib.h> //声明库 int main(void){ int n,i; double sum = 0, min, max; double *p; //定义指针 scanf("%d", &n); if ((p = (double *) malloc (n * sizeof(double)) ) == NULL ) exit(1); //为指针p分配动态内存 ; max = 0.0原创 2020-12-10 23:47:08 · 425 阅读 · 0 评论 -
习题8-7 字符串排序
#include<stdio.h>#include<string.h>int main(void){ char str[5][80]; int i, j; char temp[80]; //定义字符串要 * or []; for (i=0; i<5; i++) { scanf("%s", &str[i]); } //冒泡排序 for (i=1; i<5; i++) { // i=1; j不能循环到最后一位; 循环n-1次;原创 2020-12-10 23:40:35 · 232 阅读 · 0 评论 -
习题8-4 报数
报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。本题要求编写函数,给出每个人的退出顺序编号。其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。函数CountOff将每个人的退出顺序编号存在数组out[]中。因为C语言数组下标是从0开始的,所以第i个位置上的人是第out[i-1]个退出的。题目是什么意思呢?11个人围成一圈,依次开始从1报数,报到3的人出原创 2020-12-09 23:31:29 · 439 阅读 · 0 评论 -
习题8-3 数组循环右移
int ArrayShift( int a[], int n, int m ){ int b[n]; int i; m %= n; // 考虑 m > n; for (i=0; i<n; i++) { b[i] = a[i]; } for (i=0; i<n; i++) { a[i] = b[(n-m+i)%n]; }}原创 2020-12-09 18:16:46 · 140 阅读 · 0 评论 -
习题7-5 找鞍点
#include<stdio.h>int main(){ int n, i, j, t, max, min, count=0, flag=0; int a[6][6]; 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++) { // i 代表行数 max =原创 2020-12-02 23:36:59 · 320 阅读 · 0 评论 -
练习7-8 方阵循环右移
本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。思路:变换为x列,x循环+1,且中间有变换为第0列,考虑除法取余;分子递增,因此分子要和变量 j 正相关;x 循坏到 n 时为 0, 故分母为 n .难死了md想了两个小时没想出来,看了别人答案才理解。#include<stdio.h>int main(){ int i, j; int m, n; int a[6][原创 2020-12-01 18:01:33 · 191 阅读 · 0 评论 -
习题6-8 统计一行文本的单词个数
#include<stdio.h>int main(){ char ch; int i = 0; int j = 0; ch = getchar(); while (ch != '\n') { if (ch != ' ') { i = 1; //i=1代表前一位非空格,i=0代表前一位是空格 } if (ch == ' ' && i ) { //全为空格不满足i, j不++ j ++; i = 0; } ch =原创 2020-11-26 23:05:09 · 210 阅读 · 0 评论 -
习题6-7 简单计算器
#include<stdio.h>int main(){ int number ; char symbol; int number_1; int flag = 1; scanf("%d", &number); //读取任意位数字 while (symbol != '=') { scanf("%c", &symbol); //读取一位符号 if (symbol != '=') { scanf("%d", &number_1);原创 2020-11-26 21:27:26 · 327 阅读 · 1 评论 -
习题6-6 使用函数输出一个整数的逆序数
将提取出的最后一位数*10(左移一位) + 当前最后一位#include <stdio.h>int reverse( int number );int main(){ int n; scanf("%d", &n); printf("%d\n", reverse(n)); return 0;}int reverse( int number ){ int t; int n = number; while ( n != 0 )原创 2020-11-25 23:01:21 · 280 阅读 · 0 评论 -
习题6-5 使用函数验证哥德巴赫猜想
直接检验 i 与 (n-i)是否同为素数 ,无需遍历减数#include <stdio.h>#include <math.h>int prime( int p );void Goldbach( int n );int main(){ int m, n, i, cnt; scanf("%d %d", &m, &n); if ( prime(m) != 0 ) printf("%d is a prime number\n", m)原创 2020-11-25 20:41:02 · 210 阅读 · 0 评论 -
习题4-5 换硬币
将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?输入格式:输入在一行中给出待换的零钱数额8。输出格式:要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。#include<stdio.h>int main(){ int one, two, five; int原创 2020-11-17 23:43:19 · 216 阅读 · 0 评论