第二周 1? ?
单选(2分)已知:char a;int b;float c;double d;执行语句 c=a+b+c+d;后,变量c的数据类型是____。得分/总分 A. double B.float
2.00 /2.00
? ?
C. int D. char
2? ? ? ? 单选(2分)已知 int i=5;执行语句 i+=++i;i的值是____。得分/总分 A.其他答案都不对 B.11 C.10 D.12 2.00 /2.00 3? ? ?
单选(2分)已知int x=5,y=5,z=5;执行语句x%=y+z;后,x的值是____。得分/总分 A.1 B.0 C.5
2.00 /2.00
?
D.6
4? ? ?
单选(2分)下列可以正确表示字符型常数的是____。得分/总分 A. \ B. \ C. 297
? D. '\\t’ 2.00 /2.00
5? ? ? ?
单选(2分)字符串\的长度是____。得分/总分 A. 7 B.5 C.8 D.6
2.00 /2.00
6单选(2分)把算术表达式 正确的写法是____。得分/总分
? ? ? ?
A.–31.6*a*8+1.0/7*12 B.–(31.6*a*8+1.0/7)*12 C.–(31.6a*8+1/7)*12 D.–(31.6a*8.0+1.0/7.0)*12
表示为一个C语言表达式, 2.00 /2.00
7? ? ? ?
单选(2分)温度华氏和摄氏的关系是: C=5(F-32)/9。已知:float C,F;由华氏求摄氏的正确的赋值表达式是____。 得分/总分
A.C=5/9(F-32) B.三个表达式都正确 C.C=5*(F-32)/9 D.C=5/9*(F-32)
2.00 /2.00
8? ? ? ?
单选(2分)已知int i=10;表达式“20-0<=i<=9”的值是____。得分/总分 A.1 B.20 C.19 D.0
2.00 /2.00
9? ? ? ?
单选(2分)已知:int x,y;double z;则以下语句中错误的函数调用是____。得分/总分 A.scanf (\ B.scanf (\ C.scanf (\ D.scanf (\
2.00 /2.00
10? ? ? ?
单选(2分)已知” int a=5,b=5,c;”,则执行表达式” c=a=a>b”后变量 a 的值为____。得分/总分
A.0 B.4 C.5 D.1
2.00 /2.00
第三周
1让我们学习用C语言向世界问好。 “Hello World”示例程序最早出现于1972年,由贝尔
实验室成员Brian Kernighan撰写的内部技术文件《Introduction to the Language B》之中。不久同作者于1974年所撰写的《Programming in C: A Tutorial》,也延用这个示例。 一般来说,这是每一种计算机编程语言中最基本、最简单的程序,亦通常是初学者所编写的第一个程序。它还可以用来确定该语言的编译器、程序开发环境,以及运行环境是否已经安装妥当。将“Hello World”作为第一个示范程序,已经成为编程语言学习的传统。 我们在这里继续传统,这也是一种向前辈们致敬的方式之一吧! 最早的程序基本是这个样子的: #include int main() { printf(\请模仿上面的程序,看看是否可以通过编译?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。(2分) 源程序:
#include
printf(\ return 0; }
2学学scanf和printf的用法吧(5分)
题目内容:
该如何处理 double 型的数据:如何定义变量类型?如何使用 scanf 函数? 如果已知圆柱的底面半径 r ,以及高 h ,则可计算出圆柱的侧面积
,
体积 输入格式:
。其中 。
第一行输入圆柱的底面半径 r 第二行输入圆柱的高 h 输出格式:
s=< 圆柱的侧面积 >,v=< 圆柱的体积 > 要求
1. 所有变量都定义为双精度类型 2. 结果精确到小数点后两位。 作为练习题目:
我们已经给您编写好了大部分的代码,请您自己修改几个地方,完成程序的剩余部分。 **********************************************分隔线************ #include
scanf(\ ); s=2*PAI*r*h; v=PAI*r*r*h;
printf(\ \\n\ ); return 0; }
输入样例:
2 8
输出样例:
s=100.53,v=100.53
源程序:
#include
double r,h; double s,v;
scanf(\ s=2*PAI*r*h; v=PAI*r*r*h;
printf(\ return 0; }
3输出字符的 ASCII 码(10分)
题目内容:
我们在计算机基础中已经学过:字母在计算机中采用ASCII码进行存储。下面要从键盘上输入任意一个字符,然后输出该字符对应的ASCII码。 输入格式: 一个字符 输出格式:
该字符对应的ASCII码 输入样例: A
输出样例:
The ASCII of character 'A' is 65.
源程序:
#include
char ch; ch=getchar();
printf(\ return 0; }
4一年级的算术题(10分)
题目内容:
小明上小学一年级了,老师已经教会了他们进行整数的 +、-、*、/、% 计算,下面老师开始出题,给出一个简单的算术表达式,请小明给出计算结果。
输入格式:
接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444 输出格式:
分别输出按照整型数据进行 +、-、*、/、* 之后的运行结果。
输入样例:
10 3
输出样例:
10+3=13 10-3=7 10*3=30 10/3=3 10%3=1 源程序:
#include
int a,b;
scanf(\ printf(\ printf(\ printf(\ printf(\ printf(\ return 0; }
5判断三角形的形状(10分)
题目内容:
输入三角型的三条边,判断三角形的形状。假设输入的三边边长均>0。 输入格式:
三角型的3条边的长度(int型)。 输出格式:
等边三角形:equilateral triangle 等腰三角形:isoceles triangle 不构成三角形:non-triangle 一般三角形:triangle 输入样例:
2 2 2
输出样例:
equilateral triangle.
源程序:
#include
{
int a,b,c;
scanf(\ if(a+b>c && a+c>b && b+c>a)
if(a==b && b==c && a==c) printf(\ else if(a==b || b==c || a==c) printf(\ else printf(\ else printf(\ return 0;
}
第四周作业
本次得分为:6.00/8.00, 本次测试的提交时间为:2016-04-23, 如果你认为本次测试成绩不理想,你可以选择再做一次。 1单选(2分)
下面程序的输出是 #include
{ int x=1, y=0, a=0, b=0; switch ( x )
{ case 1: switch ( y )
{ case 0: a++; break; case 1: b++; break; }
case 2: a++; b++; break; }
printf (\ } 得分/总分 A. a=1,b=1 B. a=2,b=2 C. a=1,b=0 D. a=2,b=1
2.00 /2.00 2单选(2分)
以下程序的输出结果是 main( )
{ float x=2,y;
if (x<0) y=0;
else if (x<5&&!x) y=1/(x+2); else if (x<10) y=1/x; else y=10;
printf(”%f\\n”,y); }
得分/总分 A. 10.000000 B. 0.000000 C. 0.500000 2.00 /2.00 D. 0.250000
3填空(2分)
若下列程序执行后t的值为4,则执行时输入a,b的值范围是 #include ”stdio.h” main( )
{ int a, b, s=1, t=1;
scanf (”%d, %d”, &a, &b); if (a>0) s+=1; if (a>b) t+=s; else if(a==b) t=5;
else t = 2*s; printf (”s=%d, t=%d\\n”, s,t); }
得分/总分 0 2.00/2.00 4填空(2分) 下列程序段当a的值为014和0x14时的执行结果分别是 if ( a=0xA | a >12 ) if ( 011&10==a ) printf (”%d!\\n”,a); else printf (”Right!%d\\n”,a); else printf (”Wrong!%d\\n”,a); 得分/总分 10! Right!11 第四周 1计算时钟的夹角(10分) 题目内容: 钟面上的时针和分针之间的夹角总是在 0 ~180之间 ( 包括 0 和180 ) 。举例来说,在十二点的时候两针之间的夹角为 0 ,而在六点的时候夹角为180 ,在三点的时候为90 。本题要解决的是计算 12:00 到 11:59 之间任意一个时间的夹角。 输入格式: 每组测试数据包含两个数字:第一个数字代表小时 ( 大于 0 小于等于 12) ,第二个数字代表分 ( 在区间 [0, 59] 上 ) 。 输出格式: 对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。 再看一看,想一想:是否可以不用if 语句,只使用 printf 函数来简化你的程序? 输入样例: 12 0 输出样例: At 12:00 the angle is 0.0 degrees. 源程序: #include if(n==12) h=0; x=(h+m/60.0)*30; degree=fabs(y-x); printf(\ return 0; } 2确定母亲节(10分) 题目内容: 母亲节是每年的五月第二个星期天,针对输入的年份,计算该年的哪一天是母亲节。 输入格式: 年份 输出格式: 日期(5月的哪一天) 输入样例: 2014 输出样例: 11 源程序: #include { int w,c,y,m=5,d=1; scanf(\ c=y/100; y=y0; w=c/4-2*c+y+(y/4)+13*(m+1)/5+d-1; w=w%7; if(w<0) w=(w+14)%7; if(w==0) d=w+8; else if(w>0) d=15-w; printf(\ return 0; } 3计算星期(10分) 题目内容: 给出任意一个年月日(年>1900),现在我们不能只是直接计算,要先判断给出的日期是否合法,对于非法的日期要给出错误提示信息,合法的日期要再计算是星期几。 输入格式: 年 月 日 输出格式: 0~6。 星期日用 0 表示,星期一用 1 表示,星期二用 2 表示......星期六用 6 表示。 假设年份大于1900。先想一想:我们现在只会使用 if 语句,该如何建立数学模型? 输入样例: 2013 3 11 输出样例: 1 输入样例: 2013 13 15 输出样例: month is error. 输入样例: 2013 3 32 输出样例: day is error. 源程序: #include int y,m,d,c,w; scanf(\ if(y<1900) printf(\ else if(m<1 || m>12) printf(\ else if(d>31 || d<1) printf(\else { c=y/100; y=y0; if(m==1) m=13; if(m==2) m=14; w=c/4-2*c+y+y/4+13*(m+1)/5+d-1; w=w%7; if(w<0) w=(w+14)%7; printf(\} return 0; } 4求最后3位数值(10分) 题目内容: 小明在中学会求一个数的 n 次方了,但计算机还不会,请你来编写一个程序吧。由于计算机比较“笨”,所以我们编写程序的功能不用太强,只要能算出 a 的 n 次方的最后 3 位数就可以了。 输入格式: a 和 n 的值。假设 a<=150 。 输出格式: 求 a 的 n 次方的最后 3 位数。 提示:再想一想,你的方法对吗?你用的是什么数据类型? 输入样例: 10 0 输出样例: The last 3 numbers is 1. 源程序: #include scanf(\ if(n!=0 && a<=150) { for(i=1;i<=n;i++) p=p00*a; x=p00; printf(\ } else printf(\ return 0; } 第五周编程作业 1锻炼身体吧(10分) 题目内容: 沫沫,灰灰和渣渣去锻炼身体,如果对他们跑步的距离分别只计整数 a、 b、 c,由于他们身高的差距,造成了 a<=b<=c,并且渣渣跑了N米之后就再也跑不动了。但是,按照他们事先的约定: 只有当 c*c==a*a+b*b 时,他们的锻炼才有效果。 现在他们三个人想知道,如果渣渣的极限N已知,那么有多少种有锻炼效果的跑步方案(即a, b, c有多少种可能的取值)。 输入格式: 一个整数N,表示渣渣的体力极限, N <= 5000。 输出格式: 一个整数,代表他们跑步方案的个数。 Hint:对于输入N=5,有方案 a=3, b=4, c=5, 共一种。 输入样例: 5 输出样例: 1 源程序: #include int n,a,b,c,m; scanf(\m=0; for(c=1;c<=n;c++) for(a=1;a<=n;a++) for(b=1;b<=n;b++) if(c*c==a*a+b*b && a<=b) m++; } printf(\return 0; 2寻找特殊偶数(10分) 题目内容: 有一种特殊偶数,它每一位上的数字都两两不相同。我们现在需要找出四位数中某一区间内的这类偶数。 输入格式: 所要寻找的四位偶数的范围。每组输入有两个数字:第一个数字是最小范围;第二个数字是最大范围。如果输入遇到0,输入结束。 输出格式: 列出此范围内的所有特殊偶数,并且列出此范围内特殊偶数的个数。 输入样例: 3000 3020 6040 6090 0 0 输出样例: 3012 3014 3016 3018 counter=4 6042 6048 6052 6054 6058 6072 6074 6078 6082 6084 counter=10 输入样例: 9 101 87 -1 0 0 输出样例: Error Error 源程序: #include int m,n,i,counter; int a,b,c,d; do{ scanf(\ if(m!=0 && n!=0 && (m>=1000 && m<10000) && (n>=1000 && n<10000) && m for(i=m;i<=n;i++) if(i%2==0) } else if(m==0 && n==0) return 0; else printf(\}while(1); { a=i/1000;b=i00/100;c=i0/10;d=i; if(a!=b && a!=c && a!=d && b!=c && b!=d && c!=d) } printf(\ { counter++; printf(\ return 0; } 3求最小 m 值(10分) 题目内容: 求满足下列不等式的最小 m。 1 + 2 + 3 + 4 + ...... + m ≥ n 例如:n=100,当 m =14 时,满足:1+2+3+4+...+13=91<100,而 1+2+3+4+......+14=105>100。 输入格式: n 输出格式: m 输入样例: 100 输出样例: 14 源程序: #include int n,m,s=0; scanf(\for(m=1;s s=s+m; printf(\return 0; 第六周作业 1? ? ? ? 单选(2分)求取满足式 的n,正确的语句是 A. for(i=1,s=0;(s=s+i*i++)<=1000;n=i) B. for(i=1,s=0;(s=s+i*++i)<=1000;n=i) C. for(i=1,s=0;(s=s+i*i)<=1000;n=++i) D. for(i=1,s=0;(s=s+i*i)<=1000;n=i++) 2? ? ? ? 单选(2分)下面的for语句 1. for(x=0,y=10;(y>0)&&(x<4);x++,y-- ) A. 循环执行3次 B. 循环执行4次 C. 是无限循环 D. 循环次数不定 3? ? ? ? 单选(2分) 已知int i=1; 执行语句while (i++<4) ;后,变量i的值为 A. 5 B. 3 C. 4 D. 6 4单选(2分)下面程序的输出结果是____ 1. main() 2. 3. 4. 5. 6. { int i,j,x=0; for(i=0;i<2;i++) { x++; for(j=0;j<-3;j++) { if(j%2) 7. continue; 8. x++; 9. } 10. x++; 11. } 12. printf(”x=%d\\n”,x); 13. } ? ? ? ? A. x=12 B. x=6 C. x=8 D. x=4 5单选(2分)假定从键盘上输入“3.6,2.4<回车>”,下面程序的输出是____ 1. #include ? ? ? ? A. 1.500000 B. 1.600000 C. 2.400000 D. 2.000000 6填空(2分)下面程序的功能是输出1到100之间每位数的乘积大于每位数的和的数。例如数字26,数位上数字的乘积12大于数字之和8。(答案以① ② ③ 的形式提交,如① a ② b ③ c) 1. main() 2. 3. 4. 5. 6. 7. { int n,k=1,s=0,m; for(n=1;n<=100;n++) { k=1; s=0; ① ; while( ② ) 8. { k*=m; 9. s+=m; 10. ③ ; 11. } 12. if(k>s) 13. printf(”%d”,n); 14. } 15. } ① m=n ① m>0 ① m=m/10 第六周编程 1数字正方型(10分) 题目内容: 这是双重循环的入门题目,大家来看看,你会做吗? 输入 n 的值,输出如下例( n=4 )所示的由数字组成的正方型。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 输入格式: n 输出格式: 数字组成的正方型 输入样例: 1 输出样例: 1 源程序: #include int n,i,j,s=0; scanf(\for(i=1;i<=n;i++) { for(j=1;j<=n;j++) } printf(\ printf(\} return 0; 2空心字符菱形(10分) 题目内容: 根据菱型起始字母和菱形的高度,打印空心的由字符组成的菱形。 输入格式: 菱型起始字母和菱形的高度。 输出格式: 参照样例,打印空心的由字符组成的菱形。 输入样例: C 4 输出样例: C D D E E F F E E D D C 源程序: #include char ch; int n,i,j,k; scanf(\ for(i=1;i<=n;i++) { for(k=1;k<=n-i;k++) printf(\ for(j=1;j<=2*i-1;j++) if(j==1 || j==2*i-1) printf(\ else printf(\ printf(\ ch++; } ch=ch-2; for(i=n-1;i>=1;i--) { for(k=1;k<=n-i;k++) printf(\ for(j=1;j<=2*i-1;j++) if(j==1 || j==2*i-1) printf(\ } else printf(\ printf(\ ch--; } return 0; 3邮票组合(10分) 题目内容: 我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或几张的组合,可以满足不同邮件的不同的邮资。 现在,邮局有4种不同面值的邮票。在每个信封上最多能贴5张邮票,面值可相同,可不同。 输入格式: 四种邮票的面值。 输出格式: 用这四种面值组成的邮资最大的从1开始的一个连续的区间。 说明: 如结果为10,则表明使用4张邮票可组合出1、2、3、4、5、6、7、8、9、10这些邮资。 名词解释: 邮资:就是你寄东西需要花多少钱。 邮票面额:是由国家发行的具有固定价格的花纸片,被称为邮票。 如果你寄东西,邮局称了重量,告诉你要240分。这样你就要贴邮票了。如果现在邮局的邮票有面值为80分、50分、20分和10分的四种,你就可以 采用不同的组合得到240的邮资,例如:采用3张80分的可以凑出240分;或者24张10分的凑起来240分也可以。显然不同邮票的组合都可以得到同样一种邮资。 输入样例: 1 4 12 21 输出样例: The max is 71. 源程序: #include { int a,b,c,d,i,j,k,m,t=0,s=0,n=1,x=0; scanf(\//for(s=1;s<=d*5;s++) loop: } for(i=0;i<=5;i++) for(j=0;j<=5;j++) for(k=0;k<=5;k++) for(m=0;m<=5;m++) if(s==a*i+b*j+c*k+d*m && i+j+k+m<=5) x++; if(x!=0) { x=0;n++;s++;goto loop;} printf(\//printf(\return 0; 4火锅火锅和火锅(10分) 题目内容: 众所周知,沫沫以火锅为生。在E8的聚餐活动中,他经常卖萌卖无辜领着大家吃火锅。。 有一天,沫沫听说学校附近的哺呷哺呷在某现充的赞助下有一个优惠活动,只需30软妹币,对每个客人,它会上N道菜,但是客人只能挑选其中连续上的一些菜。 于是他非常兴奋的拉着灰灰和渣渣去吃火锅去啦。 沫沫是一个十分挑食的人,所以他对每一道菜都有一个愉快度(当然因为他的挑食,某些事物的愉快度会是负数)。 为了让沫沫能非常愉快的享受这次聚餐,善解人意的灰灰和渣渣决定帮他计算,他们应该怎么选择菜才能使沫沫最开心地吃完这次聚餐。 输入格式: 第一行是一个整数T,(T <= 10)表示测试案例的个数 对于每个测试案例,第一行是一个整数N,( 1<=N <= 10000)表示菜的个数 接下来的N个数字,第i个数字si表示沫沫对第i道菜的愉快度。( -1000 <=si <= 1000) PS:由于CF又被血虐掉rating,所以沫沫的起始愉快度是0 PPS:沫沫完全可能得到一个为负值的愉快值, poor 沫沫。。 输出格式: 对于每个样例,输出一个数字,表示沫沫吃完之后愉快度的最大值。 HINT: 对于 5 6 -1 5 4 -7 我们选择6, -1, 5, 4这四道菜(注意必须是连续的,所以不能跳过-1) 做完后请思考,如果N的范围是1<=N<=100000呢? 输入样例: 2 5 6 -1 5 4 -7 7 0 6 -1 1 -6 7 -5 输出样例: 14 7 源程序: #include int x,n,t,s,m,max=-1001; scanf(\ while(t--) { scanf(\ s=m=0; while(n--) { scanf(\ if(max if(max<0) printf(\ else printf(\ } return 0; } 第七周 数组一 1组成最大数(10分) 题目内容: 任意输入一个自然数,输出该自然数的各位数字组成的最大数。 输入格式: 自然数 n 输出格式: 各位数字组成的最大数 输入样例: 1593 输出样例: 9531[回车] 源程序: #include { int a[10]={0},i=0,j,p,n,t; scanf(\ t=n; while(t) { a[i]=t; t=t/10; } p=i; for(i=0;i for(j=0;j if(a[j] { t=a[j];a[j]=a[j+1];a[j+1]=t;} i++; t=0; for(i=0;i t=t*10+a[i]; printf(\ return 0; } 2回文数(10分) 题目内容: 输出所有不超过n(取n<256)的、其平方具有对称性质的正整数(也称为回文数)。 如: 1*1=1; 2*2=4;3*3=9;11*11=121;1,2,3,11是回文数。 输入格式: 输入n(n<256) 输出格式: 输出所有不超过n的回文数 输入样例: 3 输出样例: 1[回车] 2[回车] 源程序: #include int n,m,i,f,s; scanf(\if(n<256 && n>0) for(i=1;i { } m=i*i; f=m; s=0; while(f>0) { s=s*10+f; f=f/10; } if(m==s) printf(\ else printf(\ } return 0; 3洗牌(10分) 题目内容: 假设我们有 2n 张牌,它们以 1, 2, ..., n, n+1, ..., 2n 编号并在开始时保持着这种顺序。一次洗牌就是将牌原来的次序变为 n+1, 1, n+2, 2, ..., 2n, n,也就是将原来的前 n 张牌放到位置 2, 4, ..., 2n,并且将余下的 n 张牌按照他们原来的次序放到奇数位置 1, 3, ..., 2n-1。已经证明对于任何一个自然数 n,这 2n 张牌经过一定次数的洗牌就回到原来的次序。但我们不知道对于一个特定的 n,需要几次洗牌才能将牌洗回原来的次序。 输入格式: 牌张数的一半n,即初始情况下一共有2n张牌,n为int型整数 输出格式: 将牌洗回原来的次序所需要的洗牌次数 输入样例: 10 输出样例: 6[回车] 源程序: #include int a[N]={0},b[N]={0},c[N],i,n,s=0; scanf(\ for(i=0;i<2*n;i++) { a[i]=i+1; c[i]=a[i]; } do { for(i=0;i a[2*i+1]=a[i]; for(i=0;i // for(i=0;i<2*n;i++) printf(\ // printf(\ s++; }while(a[n]!=n+1); printf(\ return 0; } 4子数整除(10分) 题目内容: 对于一个五位数a1a2a3a4a5,可将其拆分为三个子数: ? ? ? ? ? sub1=a1a2a3 sub2=a2a3a4 sub3=a3a4a5 例如,五位数20207可以拆分成: sub1=202 sub2=020(=20) ? sub3=207 现在给定一个正整数K,要求你编程求出10000到30000之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1、sub2、sub3都可被K整除。 输出时请按照由小到大的顺序排列(每行输出一个数)。 输入格式: 一个正整数K 输出格式: 请按照由小到大的顺序排列(每行输出一个数) 输入样例: 15 输出样例: 22555[回车] 25555[回车] 28555[回车] 30000[回车] 源程序: #include int k,m,sub1,sub2,sub3; scanf(\ for(m=10000;m<=30000;m++) { sub1=m/100; sub2=m000/10; sub3=m00; if(sub1%k==0 && sub2%k==0 && sub3%k==0) } return 0; printf(\ } 第八周 数组二 1单词排序(10分) 题目内容: 输入 5 个单词,将它们按从大到小的顺序排列后输出。 输入格式: 5个单词 输出格式: 排序后的顺序 输入样例: BASIC[回车] C++[回车] Pascal[回车] C[回车] Fortran[回车] 输出样例: Pascal[回车] Fortran[回车] C++[回车] C[回车] BASIC[回车] 源程序: #include char str[N][M],s[M]; int i,j; for(i=0;i gets(str[i]); for(i=0;i for(j=0;j if(strcmp(str[j],str[j+1])<=0) { strcpy(s,str[j]); strcpy(str[j],str[j+1]); strcpy(str[j+1],s); } for(i=0;i puts(str[i]); return 0; 2寻找矩阵的鞍点(10分) 题目内容: 二维数组中的鞍点,即该位置上的元素是所在行上的最大值,是所在列上的最小值。 二维数组也可能没有鞍点。 输入一个二维数组的行数n,列数m,二维数组的诸元素值;输出数组的鞍点,以及鞍点所在的行列号。 输入格式: 第一行为矩阵的行数和列数,从第二行开始,为矩阵本身(假设输入的矩阵只有0和1个鞍点) 输出格式: 数组的鞍点,以及鞍点所在的行列号 (下标从0开始) 输入样例1: 3 4 1 3 5 3 2 3 4 1 3 2 6 7[回车] 输出样例1: Point:a[1][2]==4[回车] 输入样例2: 3 4 1 2 3 4 8 4 3 6 9 4 5 1[回车] 输出样例2: No Point[回车] 源程序: #include int a[N][N],n,m,i,j,k,c,r,f=0; scanf(\ for(i=0;i for(j=0;j scanf(\ for(i=0;i for(j=1;j if(a[i][r] for(k=1;k if(a[c][r]>a[k][r]) c=k; if(i==c) { f=1;printf(\ } } if(f==0) printf(\return 0; 3身份证的奥秘(10分) 题目内容: 18位身份证标准在国家质量技术监督局于1999年7月1日实施的 GB11643-1999《公民身份号码》中做了明确的规定。 GB11643-1999《公民身份号码》为GB11643-1989《社会保障号码》的修订版,其中指出将原标准名称\社会保障号码\更名为\公民身份号码\,另外GB11643-1999《公民身份号码》从实施之日起代替GB11643-1989。GB11643-1999《公民身份号码》主要内容如 下: 一、范围 该标准规定了公民身份号码的编码对象、号码的结构和表现形式,使每个编码对象获得一个唯一的、不变的法定号码。 二、编码对象 公民身份号码的编码对象是具有中华人民共和国国籍的公民。 三、号码的结构和表示形式 1、号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 2、地址码 表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。 3、出生日期码 表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。 4、顺序码 表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。 5、校验码 (1)十七位数字本体码加权求和公式 S = Sum(Ai * Wi), i = 0, ... , 16 ,先对前17位数字的权求和 Ai: 表示第i位置上的身份证号码数字值 Wi: 表示第i位置上的加权因子 Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 (2)计算模 Y = mod(S, 11) (3)通过模得到对应的校验码 Y: 0 1 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3 2 四、举例如下: 北京市朝阳区: 11010519491231002X 广东省汕头市: 440524188001010014 15位的身份证号升级办法: 15位的身份证号:dddddd yymmdd xx p 18位的身份证号:dddddd yyyymmdd xx p y ? ? ? ? 其中dddddd为地址码(省地县三级) yyyymmdd yymmdd 为出生年月日 xx顺号类编码 p性别 15 位的 yy 年升为 18 位后,变成 19yy年,但对于百岁以上老人, 则为 18yy 年,此时,他们的最后三位顺序码为996, 997, 998 或 999 来标记。 输入格式: 输入n组身份证号码,第一行为个数,以后每行为身份证号码。 输出格式: 如果输入的身份证号码为15位,则将其升级为18位后显示输出;否则判断其是否为合法身份证号,并逐行输出。 输入样例: 4 350622197904130331 11010519491231002X 110105491231002 110105491231996[回车] 输出样例: Invalid[回车] Valid[回车] 11010519491231002X[回车] 110105184912319965[回车] 源程序: #include char s[N][19],t[4],last,a[19]; int w[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; int n,i,j,sum,y,f=0; scanf(\ getchar(); for(i=0;i gets(s[i]); for(i=0;i { strcpy(a,s[i]); for(j=16;j>7;j--) s[i][j]=s[i][j-2]; t[0]=a[12];t[1]=a[13]; t[2]=a[14];t[3]='\\0'; if(strcmp(t,\ strcmp(t,\ s[i][7]='8'; else s[i][7]='9'; s[i][6]='1'; sum=0; for(j=0;j<17;j++) sum=sum+w[j]*(int)(s[i][j]-48); y=sum; switch(y) { case 0: s[i][17]='1';break; case 1: s[i][17]='0';break; case 2: s[i][17]='X';break; case 3: s[i][17]='9';break; case 4: s[i][17]='8';break; case 5: s[i][17]='7';break; case 6: s[i][17]='6';break; case 7: s[i][17]='5';break; case 8: s[i][17]='4';break; case 9: s[i][17]='3';break; case 10: s[i][17]='2';break; } s[i][18]='\\0'; puts(s[i]); } else if(strlen(s[i])==18) { sum=0; for(j=0;j<17;j++) sum=sum+w[j]*(int)(s[i][j]-48); y=sum; switch(y) { case 0: last='1';break; case 1: last='0';break; case 2: last='X';break; case 3: last='9';break; case 4: last='8';break; case 5: last='7';break; case 6: last='6';break; case 7: last='5';break; case 8: last='4';break; case 9: last='3';break; case 10: last='2';break; } if(last==s[i][17]) printf(\ else printf(\ } else printf(\ } return 0; } 4安全的密码(10分) 题目内容: 随着电子设备的广泛运用,密码也渐渐融入每个人的生活。保护好密码,不仅关系到个人隐私,更关系到个人的财产和安全。一个安全的密码,最好由大小写字母、数字或符号组成。包含越多种类的字符,其安全性就越高。同时密码还需要有一定的长度,通常至少要由六个以上的字符组成。 并不是每个人都喜欢这样复杂的密码,很多人在设置密码的时候,喜欢使用自己的名字或者生日,但这是很大的安全隐患。 任务 林晓炜正在设计一个网络交易系统,为了保证用户的密码安全,他需要一个程序,判断用户自己设置的密码是否安全,如果不安全,则给出提示。现在他向你求助,请你帮忙设计一个程序来解决这个问题。 应当按照以下的规则来判断密码是否安全: 1. 如果密码长度小于 6 位,则不安全 2. 如果组成密码的字符只有一类,则不安全 3. 如果组成密码的字符有两类,则为中度安全 4. 如果组成密码的字符有三类或以上,则为安全 通常,可以认为数字、大写字母、小写字母和其它符号为四类不同的字符。 输入格式: 输入的第一行是一个整数 N,表明后面有多少组密码。随后的 N 行输入包括 N 个密码,每个密码的长度均小于 20 个字符。 输出格式: 针对每一个密码判断并输出它是否安全。对于不安全的密码输出 \,对于中度安全的密码输出 \,对于安全的密码输出 \输入样例: 4 1234 abcdef ABC123 1#c3Gh[回车] 输出样例: Not Safe Not Safe Medium Safe[回车] 源程序: #include char mm[N][20]; int n,i,j,k,a[4]={0}; scanf(\getchar(); for(i=0;i if(strlen(mm[i])>=20) mm[i][19]='\\0'; } for(i=0;i { } if(strlen(mm[i])<6) printf(\ else if(strlen(mm[i])>=6) { } } return 0; for(j=0;j if(mm[i][j]>='0' && mm[i][j]<='9') a[0]++; else if(mm[i][j]>='A' && mm[i][j]<='Z') a[1]++; else if(mm[i][j]>='a' && mm[i][j]<='z') a[2]++; else a[3]++; k=0; for(j=0;j<4;j++) if(a[j]!=0) { k++;a[j]=0;} if(k==1) printf(\ if(k==2) printf(\ if(k>=3) printf(\