PTA - 浙大版《C语言程序设计》题目集
C语言练习
懒狗的救赎
HUMBLE.
展开
-
习题9-5 通讯录排序 (20 分)
#include <stdio.h> #include <string.h> struct inf{ char name[11]; int birth; char phone[18]; }; int main(){ int n; scanf("%d",&n); struct inf man[n],temp; for(int i=0;i<n;i++){ scanf("%s %d %s",man[i].原创 2021-02-06 02:09:46 · 195 阅读 · 0 评论 -
习题9-4 查找书籍 (20 分)
#include <stdio.h> #include <string.h> struct infor{ char name[31]; double price; }; int main(){ int n,max=0,min=0; char c; scanf("%d",&n); struct infor book[n]; for(int i=0;i<n;i++){ getchar(); //第原创 2021-02-06 01:36:33 · 241 阅读 · 0 评论 -
习题9-3 平面向量加法 (15 分)【详细解析版】
注意: 使用fabs( )函数。 若x1=-2.75,x2=2.73,则x3=-0.02,在保留一位小数时,会输出“-0.0”; 同时保证四舍五入成立,绝对值要求小于0.05。若x1=2.71,x2=-2.79,则x3=-0.07,如果想当然设置绝对值小于0.1,则在保留一位小数后,输出“0”而不是“-0.1”。 代码: #include <string.h> int main(){ double x1,y1,x2,y2,x3,y3; scanf("%lf %lf原创 2021-02-06 00:54:46 · 296 阅读 · 0 评论 -
习题8-7 字符串排序 (20 分)
#include <stdio.h> #include <string.h> int main(){ char a[5][81],t[81]={0}; scanf("%s%s%s%s%s",a[0],a[1],a[2],a[3],a[4]); printf("%d\n",sizeof(a[0])); printf("%d",strlen(a[0])); for(int i=0;i<5;i++){ for(int j=4;原创 2021-02-05 21:53:14 · 386 阅读 · 0 评论 -
习题7-8 字符串转换成十进制整数 (15 分)【详细注释】
思路: +-P-xf4+-1!# -f41 -(15*16^2 + 4*16^1 + 1*16^0^) -3905 代码: #include <stdio.h> #include <string.h> #include <math.h> int main(){ char s[81]; int tag=0,t,k=0,head=1; //tag表示正负 long sum=0; gets(s); for(int i=0;i原创 2021-02-05 16:14:11 · 237 阅读 · 0 评论 -
练习7-4 找出不是两个数组共有的元素 (20 分)【超级详细解析】
思路: 找出a,b两数组相同的元素,并且放入数组c中(common); 循环a数组的元素,查询a数组元素是否在交集数组c中,返回tag数值; 如果a数组的元素不在交集数组中,循环结果数组r(result),查询此元素是否在结果数组r中重复,返回flag数值; 如果在结果数组中不重复,加入结果数组中,同时结果数组动态增长; 对b数组依次完成上述2~4步奏; 打印结果数组。 #include <stdio.h> #include <string.h> int main(){原创 2021-02-04 16:59:21 · 1414 阅读 · 0 评论 -
习题6-8 统计一行文本的单词个数 (15 分)【两种方法】
方法一: #include <stdio.h> #include <string.h> int main(){ int k=0,i=0; char s[100]; gets(s); while(s[i]==' '){ //当开头是空格 i++; } while(s[i]!='\0'){ if(s[i-1]!=' '&&s[i]==' '){ k++;原创 2021-02-04 15:30:41 · 147 阅读 · 0 评论 -
习题6-7 简单计算器 (20 分)
#include <stdio.h> int main(){ double last=0,now,res=0; char tag='0'; scanf("%lf",&last); res=last; //最小长度式子,如:3= scanf("%c",&tag); while(tag!='='){ scanf("%lf",&now); if(tag=='+'){ r原创 2021-02-04 14:39:06 · 110 阅读 · 0 评论 -
习题4-11 兔子繁衍问题 (15 分)
#include <stdio.h> int main(){ int n,sum=1,k=1,x=0,y=1; scanf("%d",&n); while(sum<n){ sum=x+y; x=y; y=sum; k++; } printf("%d",k); return 0; } //x y s //0 1 1 2 3 5 8原创 2021-02-04 02:49:09 · 214 阅读 · 0 评论 -
习题4-7 最大公约数和最小公倍数 (15 分)【两种方法】
方法一: 求最小公倍数时候,使用==【扩大法】==: 如果两数不是互质,也没有倍数关系时,可以把较大数依次扩大2倍、3倍、看扩大到哪个数时最先成为较小数的倍数时,这个数就是这两个数的最小公倍数。 例如:18 和30的最小公倍数,就是把30扩大2倍得60,60不是18 的倍数;再把30扩大3倍得90,90是18的倍数,那么90就是18和30的最小公倍数。 #include <stdio.h> int mul(int a,int b); int divi(int a,int b); int mai原创 2021-02-03 15:16:24 · 583 阅读 · 1 评论 -
习题4-6 水仙花数 (20 分)
#include <stdio.h> int p(int a,int b); //不要使用math.h的pow()函数,否则超时 int main(){ int n=0,t,sum=0,k; scanf("%d",&n); for(int i=p(10,n-1);i<p(10,n);i++){ t=i; sum=0; while(t){ k=t%10;原创 2021-02-03 14:42:03 · 121 阅读 · 0 评论 -
习题11-8 单链表结点删除 (20分)
struct ListNode *readlist(){ //建立无头节点单链表 struct ListNode *L=NULL,*p,*r=L; int a; while (1) { scanf("%d",&a); if(a==-1) break; if(!L){ L=(struct ListNode *)malloc(sizeof(struct ListNode));原创 2021-01-30 01:16:31 · 277 阅读 · 0 评论 -
习题11-1 输出月份英文名 (15分)
方法一: 此处必须使用静态变量,不然调用函数随着调用结束释放了内存空间,以至于即使返回了正确的地址内容也被清空了。而静态变量则是随着主函数结束而结束与调用函数无关。 char *getmonth( int n ){ static char month[12][10]={ //静态数组 "January","February","March","April","May","June", "July","August","September","October","原创 2021-01-29 17:14:51 · 139 阅读 · 0 评论 -
习题10-7 十进制转换二进制 (15分)
void dectobin( int n ){ if(n==0) printf("0"); else if(n==1) printf("1"); else{ dectobin(n/2); printf("%d",n%2); } }原创 2021-01-27 23:54:27 · 156 阅读 · 0 评论 -
习题10-4 递归求简单交错幂级数的部分和 (15分)【两种方法】
方法一: double f(double x, int n){ if(n==1) return x; else return x*f(x,n-1); } double fn( double x, int n ){ double sum=0; for(int i=1;i<=n;i++){ if(i%2==1) sum+=f(x,i); else sum-=f(原创 2021-01-27 23:10:18 · 359 阅读 · 0 评论 -
习题8-5 使用函数实现字符串部分复制 (20分)
void strmcpy( char *t, int m, char *s ){ int len=0,i,j; for(i=0;t[i]!='\0';i++){ //t数组超出规定值,s数组也能超出规定值存储【测试点2】 len++; } if(m>len){ s[0]='\0'; //也可以写 *s=NULL; return; } for(i=0,j=m-1;i<=len;i++,j++)原创 2021-01-27 00:37:59 · 144 阅读 · 0 评论 -
习题5-6 使用函数输出水仙花数 (20分)
注意:输入的数字不一定是三位数 #include <stdio.h> int narcissistic( int number ); void PrintN( int m, int n ); int main() { int m, n; scanf("%d %d", &m, &n); if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m); PrintN(m, n);原创 2021-01-24 20:17:11 · 196 阅读 · 0 评论