通过student stu;mysql if语句判断变量定义一个用户类型变量时,是否能在内存中创建对象

[c语言课后习题]C语言习题集及答案_c语言课后习题-牛宝宝文章网
[c语言课后习题]C语言习题集及答案 c语言课后习题
录第一单元
程序设计和C语言 ..........................................................................1第二单元
顺序程序设计 .................................................................................3第三单元
分支程序设计 .................................................................................7第四单元
循环程序设计 ............................................................................... 14第五单元
组 .......................................................................................... 23第六单元
数 .......................................................................................... 35第七单元
针 .......................................................................................... 44第八单元
结构体和共用体 ............................................................................ 64第九单元
件 .......................................................................................... 81附加题 ........................................................................................................... 86 模拟试卷一 .................................................................................................. 106 模拟试卷二 .................................................................................................. 112 模拟试卷三 .................................................................................................. 118第一单元
程序设计和C语言一、 选择题1. C语言的基本构成单位是:
B. 函数和过程
C. 超文本过程
D. 子程序2. 一个C语言程序总是从
开始执行。A. 主过程
D.主程序3. C语言的程序一行写不下时,可以
。A. 用逗号换行 B. 用分号换行 C. 在任意一空格处换行 D. 用回车符换行4. 以下叙述不正确的是:
。A. 在C程序中,语句之间必须要用分号";"分隔B. 若a是实型变量,C程序中a=10是正确的,因为实型变量中允许存放整型数C. 在C程序中,无论是整数还是实数都能正确无误地表示D. 在C程序中,%是只能用于整数运算的运算符5. 以下不正确的C语言标识符是
D. ab.c6. 下列字符串是标识符的是:
B. 9_student
D. LINE 17. 以下说法中正确的是:
。A. C语言程序总是从第一个定义的函数开始执行B. 在C语言程序中,要调用的函数必须放在main()函数中定义C. C语言程序总是从main()函数开始执行D. C语言程序中的main()函数必须放在程序的开始部分8. 不合法的常量是:
D. ?\483?9. 已知各变量的类型说明如下,则以下不符合C语言语法的表达式是:
。int k,a,b;unsigned long w=5;double x=1.422;A. x%(-3)10. B. w+=-2
C. k=(a=2,b=3,a+b)
D. a+=a=+(b=4)*(a=3) 在C语言中,字符型数据在内存中以
形式存放。1 A. 原码
D. ASCII码11. 若有定义:int a=7; float x=2.5; y=4.7;B. 2.750000
C. 3.500000
D. 0.000000 则表达式x+a%3*(int)(x+y)%2/4的值是:
。 A. 2.50000012. 设有说明:B. char
D. double 则表达式w*x+z-y值的数据类型为:
。 A. float13.14.以下
是不正确的转义字符。 B. '\'
D. '\0' 若x为int型变量,则执行以下语句后,x的值为
。 x=6; x+=x-=x*x;B. -60
D. -24字符串"\\\"ABC\"\\"的长度是
15.二、 填空题 A. 11
D. 31. 一个函数由两部分组成,它们是
。2. 一个C源程序至少包含一个
。3. 设int a=12; 则表达式a/=a+a的值是
。4. 表达式x=(a=3,6*a)和表达式x=a=3,6*a分别是
表达式,和
。5. 在C语言中,实数有两种表示形式,即
。6. 在C语言中,运算符的优先级最小的是
运算符。 两个表达式执行完的结果分别是
,x值分别是2第二单元
顺序程序设计一、 选择题1. 若m为float型变量,则执行以下语句后的输出为
。m=; printf("%-8.3f\n",m); printf("%10.3f\n",m);A.
2. 若x,y,z均为int型变量,则执行以下语句后的输出为
。x=(y=(z=10)+5)-5; printf("x=%d,y=%d,z=%d\n",x,y,z); y=(z=x=0,x+10); printf("x=%d,y=%d,z=%d\n",x,y,z);B. X=10,Y=10,Z=10
X=0,Y=10,Z=10 D. X=10,Y=10,Z=10
X=0,Y=10,Z=0
A. X=10,Y=15,Z=10
X=0,Y=10,Z=0
C. X=10,Y=15,Z=10 X=10,Y=10,Z=03. 若x是int型变量,y是float型变量,所用的scanf调用语句格式为:scanf("x=%d,y=%f",&x,&y);则为了将数据10和66.6分别赋给x和y,正确的输入应是:
。A. x=10,y=66.6&回车&
B. 10 66.6&回车&C. 10&回车&66.6&回车&
D. x=10&回车&y=66.6&回车&4. 已知有变量定义:用scanf(“%d%c”,&a,&c);语句给a和c输入数据,使30存入a,字符‘b’存入c,则正确的输入是:
。A. 30’b’&回车&
b&回车&C. 30&回车&b&回车&
D. 30b&回车&5. 已知有变量定义: 要给a和x输入数据,正确的输入语句是
。若要输出a和x的值,正确的输出语句
。A. scanf(“%d%f”,&a,&x);
B. scanf(“%ld%f”,&a,&x);
printf(“%d,%f”,a,x);
printf(“%ld,%f”,a,x);C. scanf(“%ld%lf”,&a,&x);
D. scanf(“%ld%lf”,&a,&x);3printf(“%ld,%lf”,a,x);
printf(“%ld,%f”,a,x);6. 若有定义double x=1,y;则以下的语句执行的结果是
。y=x+3/2; printf(“%f”,y);A.2.500000
C.2.000000
D.27. 若a为整型变量,则以下语句
printf("%d\n",a);A. 赋值不合法 B. 输出为不确定的值
C. 输出值为-2二、 读程序写结果1.
main(){ int x,y;scanf("%2d%*2d%ld",&x,&y);printf("%d\n",x+y);}执行时输入:12345672.
main(){ int x=4,y=0,z;x*=3+2;printf("%d",x);x*=y=z=4;printf("%d",x);}3.
main(){x=3.6; i=(int)x;printf("x=%f,i=%d",x,i);}4.
main(){ int a=2;a%=4-1; printf("%d, ",a);a+=a*=a-=a*=3; printf("%d",a);}4 D. 输出值为25.
main(){ int x=02,y=3;printf("x=%d,y=%%d",x,y);}6.
main(){ char c1=?6?,c2=?0?;printf("%c,%c,%d,%d\n",c1,c2,c1-c2,c1+c2);}7.
main(){ int x,y,z;x=y=1; z=++x-1;printf("%d,%d\n",x,z);z+=y++;printf("%d,%d\n",y,z);}三、 填空题1. 在C语言中,字符型数据和整型数据之间可以通用,一个字符数据既能以
输出,也能以
输出。2. "%-ms"表示如果串长小于m,则在m列范围内,字符串向
补空格。3. printf函数的“格式控制”包括两部分,它们是
。4. 编写程序求矩形的面积和周长,矩形的长和宽由键盘输入,请填空。#include &stdio.h&void main(){
float l,w;printf(“please input length and width of the rectangle\n”);scanf(“%f%f”,&l,&w); area= girth=}5. 编写程序,输入一个数字字符(‘0’~‘9’)存入变量c,把c转换成它所对应的整5数存入n,如:字符‘0’所对应的整数就是0。请填空。void main(){}四、 编程1. 将华氏温度转换为摄氏温度和绝对温度的公式分别为:
c=59 printf(“please input a char:\n”); c= n= printf(
,c,n); (f-32)
(摄氏温度)k=273.16+c
(绝对温度)请编程序:当给出f时,求其相应摄氏温度和绝对温度。测试数据:① f=34② f=1002. 写一个程序把极坐标(r,θ) (θ之单位为度)转换为直角坐标( X,Y)。转换公式是:
x=r.cosθy=r.sinθ测试数据:① r=10
θ=45°② r=20
θ=90°3. 写一个程序,按如下格式输出数据。name
computerzhanghua
90wanggang
784. 输入3个双精度实数,分别求出它们的和、平均值、平方和以及平方和的开方,并输出所求出各个值。5. 输入一个3位整数,求出该数每个位上的数字之和。如123,每个位上的数字和就是1+2+3=6。6第三单元
分支程序设计一、 选择题1. 若x=0,y=3,z=3,以下表达式值为0的是A. !x
B.x&y? 1:0
C. x%2&&y==z
D. y=x||z/32. 以下运算符中优先级最低的运算符为
,优先级最高的为
==3. 若w=1,x=2,y=3,z=4,则条件表达式w&x?w:y&z?y:z的结果为
D. 14. 若w,x,z均为int型变量,则执行以下语句后的输出为
。w=3;z=7;x=10; printf("%d\n",x&10?x+100:x-10); printf("%d\n",w++||z++); printf("%d\n",!w&z); printf("%d\n",w&&z);A. 0
05. 分析以下程序, 下列说法正确的是
。main(){ int x=5,a=0,b=0;if(x=a+b) printf("* * * *\n");else
printf("# # # #\n");}A. 有语法错,不能通过编译
B. 通过编译,但不能连接 C. 输出* * * *
D. 输出# # # #6. 分析以下程序, 下列说法正确的是
。main(){ int x=5,a=0,b=3;if(x=a+b) printf("* * * *\n");else
printf("# # # #\n");7} A. 有语法错,不能通过编译
B. 通过编译,但不能连接 C. 输出* * * *
D. 输出# # # #7. 分析以下程序, 下列说法正确的是
。main(){ int x=0,a=0,b=0;if(x=a+b) printf("* * * *\n");else
printf("# # # #\n");} A. 有语法错,不能通过编译
B. 通过编译,但不能连接 C. 输出* * * *
D. 输出# # # #8. 分析以下程序, 下列说法正确的是
。main(){ int x=0,a=0,b=0;if(x==a+b) printf("* * * *\n");else
printf("# # # #\n");} A. 有语法错,不能通过编译
B. 通过编译,但不能连接 C. 输出* * * *
D. 输出# # # #1.
include &stdio.h&main(){ int a=-1,b=4,k;k=(a++&=0)&&(!(b--&=0));printf("%d,%d,%d\n",k,a,b);}2.
main(){ int x=4,y=0,z;x*=3+2;printf("%d",x);x*=(y==(z=4));printf("%d",x);8 二、 读程序写结果}3.
main(){ int x,y,z;x=3; y=z=4;printf("%d",(x&=z&=x)?1:0);printf("%d",z&=y && y&=x);}4.
main(){ int x=1,y=1,z=10;if(z&0)if(y&0) x=3;else
x=5;printf("%d\t",x);if(z=y&0) x=3;else if(y==0) x=5;else x=7;printf("%d\t",x);printf("%d\t",z);}5.
main(){ char x=‘B’;switch(x){ case ‘A’: printf(“It is A.”);
case ‘B’: printf(“It is B.”);
case ‘C’: printf(“It is C.”);
default: printf(“other.”);
main(){ int x=1,y=0,a=0,b=0;switch(x){ case 1: switch(y)9{ case 0: a++;case 1: b++;}case 2: a++;b++;case 3: a++;b++;}printf("a=%d,b=%d\n",a,b);}三、 填空题1. 若a=5,b=6,c=7,d=8,则表达式d=a/2&&b==c||!a的值为2. 定义
int x=10,y,z;执行y=z=x;x=y==z后,变量x的值为
。3. 分段函数:输入x,计算y值,输出y,其中:x&0 y=2x+3x=0,y=0x&0,y=(x+7)/3#include &stdio.h&main(){int x,y;scanf("%d",&x); if(x&0)
y=(x+7)/3;printf(“%d”,y);}4. 由键盘输入三个数,计算以这三个数为边长的三角形面积。
(1)main(){
(2)printf("Please enter 3 reals:\n");scanf("%f%f%f",&a,&b,&c);10if(
){ s=(a+b+c)*0.5;s1=s*(s-a)*(s-b)*(s-c);
(4)printf("\nArea of the triangle is %f\n",s);
(5)printf("It is not triangle!\n");}5. 有一方程ax2+bx+c=0,a,b,c的值由键盘输入,请编程序,打印出以下情况时方程的解。main(){ float a,b,c,d,pr,pi,x1,x2;scanf("%f%f%f",&a,&b,&c);printf("a=%f,b=%f,c=%f\n",a,b,c);if(a==0)
)printf("only one solution x=%f\n",-c/b);
)printf("no solution\n");
else printf("x is any value\n");
}else{ d=b*b-4*a*c;
{ x1=(-b+sqrt(d))/
(1) a=0,b≠0 (2) a=0,b=0,c=0 (3) a=0,b=0,c≠0 (4) a≠0,b2-4ac≥0 (5) a≠0,b2-4ac≤0 #include "math.h"x2=(-b-sqrt(d))/
(5)printf("x1=%6.2f, x2=%6.2f\n",x1,x2);
{ pr=-b/(2*a);
(6)printf("x1=%6.2f +%6.2fi\n",pr,pi);
printf("x2=%6.2f -%6.2fi\n",pr,pi);
}}}6. 投票表决器:C 输入Y、y,打印agreeC 输入N、n,打印disagreeC 输入其他,打印losemain(){scanf("%c",&c);
(1){}四、 编程1. 写一程序求y值
(x值由键盘输入)。 ?sin(x)?cos(x)(x?0)?2
sin(x)?cos(x)?(x?0)2?12 case ‘Y’: case ‘y’: printf(“agree”);
(2) case ‘N’: case ‘n’: printf(“disagree”);
:printf(“lose”);2. 输入一个字符,判断它如果是小写字母输出其对应大写字母;如果是大写字母输出其对应小写字母;如果是数字输出数字本身;如果是空格,输出“space”;如果不是上述情况,输出“other”。3. 有三个数a、b、c,由键盘输入,输出其中最大的数。4. 输入一个数,判断它能否被 3或者被 5整除, 如至少能被这两个数中的一个整除则将此数打印出来,否则不打印,编出程序。5. 读入1到7之间的某个数,输出表示一星期中相应的某一天的单词:Monday、 Tuesday等等,用switch语句做。6. 给出一百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’,90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。7. 有一函数
y???40??60????x?15)(15?x?30)(30?x?45)5010?(x?30)1520?(x?45)3010?(x?75)15无意义
(45?x?75)(75?x?90)(其它)请编程序计算y的值(x的值由键盘输入)。13第四单元
循环程序设计一、 选择题1. 程序段如下:则以下说法中正确的是:
。int k=5;do{k--;}while(k&=0);A. 循环执行5次
B. 循环是无限循环 C. 循环体语句一次也不执行
D. 循环体语句执行一次2. 设i和x都是int类型,则for循环语句
。for(i=0,x=0;i&=9&&x!=876;i++) scanf("%d",&x);A. 最多执行10次
B. 最多执行9次 C. 是无限循环
D. 循环体一次也不执行3. 下述for循环语句
。int i,k;for(i=0,k=-1;k=1;i++,k++)
printf("* * * *");A. 判断循环结束的条件非法
B. 是无限循环 C. 只循环一次
D. 一次也不循环4. 程序段如下:则以下说法中正确的是:
。int k=-20;while(k=0) k=k+1;A. while循环执行20次
B. 循环是无限循环 C. 循环体语句一次也不执行
D. 循环体语句执行一次5. 下列程序段执行后k值为
。int k=0,i,j;for(i=0;i&5;i++)for(j=0;j&3;j++)k=k+1 ;A. 15
86. 程序段如下:则以下说法中不正确的是:
。#include &stdio.h&14main(){int k=2,;while(k&7){if(k%2) {k=k+3; printf(“k=%d\n”,k);}k=k+1;printf(“k=%d\n”,k);}}A. k=k+3;执行一次
B. k=k+1;执行2次 C. 执行后k值为7
D. 循环体只执行一次1. main(){ int num=0;while(num&=2){ num++; printf("%d\n",num);}}2. main(){ int i=0,s=0;do{ s+=i*2+1; printf("i=%d,s=%d\n",i,s); i++;}while(s&10);}3.
#include &stdio.h&main(){ int i,m=1;for(i=5;i&=1;i--){m=(m+1)*2;printf("m=%d\n",m);}15 二、 读程序写结果}4. 指出下面三个程序的功能,当输入为:"quert?"时,它们的执行结果是什么? ⑴
#include &stdio.h&main(){c=getchar();while (c!='?'){
putchar(c); c=getchar();}}⑵
#include &stdio.h&main(){while ((c=getchar())!='?')
putchar(++c);}⑶
#include &stdio.h&main(){ while (putchar(getchar())!='?');}5.
#include &stdio.h&main(){for(i=1;i&=5;i++){ if(i%2)putchar(‘&’);elseputchar(‘&’);}putchar(‘#’);}6. main(){ int a,b;16for(a=1,b=1;a&=100;a++){ if(b&10)if(b%3==1){ b+=3;}}printf("a=%d\n",a);}7.
main(){ int i=1;while (i&=15)if (++i%3!=2)else printf("%d
",i);printf("\n");}8.
#include &stdio.h&void main(){ int i,j;for(i=0;i&=3;i++){ for(j=0;j&=i;j++)printf("(%d,%d),",i,j);printf("\n");}}9.
main(){ int i,j,k;char space=' ';
for (i=0;i&=5;i++)
for (j=1;j&=i;j++)
printf("%c",space);for (k=0;k&=5;k++)
printf("%c",'*');
printf("\n");}17
}10.#include &stdio.h& { int i,j,k=0;for (j=11;j&=30;j++){ if (k%10==0)
printf("\n");
for (i=2;i&j;i++){
if (!(j%i))} if (i&=j-1)
{ printf("%d\t",j);k++;}
main()三、 填空题
} }1. break语句只能用于
语句中。2. 计算2+4+6+8+...+98+100main(){ int i,
(1) for(i=2;i&=100;
)s+=i;}3. 求满足下式的 x,y,zX Y Z+
Y Z Z──────5 3 2main(){ int x,y,z,i,result=532;
(2)y++)18for (
+(100*y+10*z+z);if (i==result)
printf("x=%d, y=%d, z=%d\n",x,y,z);}}4. 求 Sn=a+aa+aaa+...+aa...a之值,其中 a是一个数字。 例如
2+ 22 +222+2222( 此时n=4),n由键盘输入。main(){ int a,n,count=1,Sn=0,Tn=0;printf("请输入 a 和 n 的值:\n");scanf("%d,%d",&a,&n);
while (count&=
(3)a=a*10;
(4)}printf("a+aa+aaa+...=%d\n",Sn);}5. 一球从 100米高度自由落下,每次落地后反跳回原来高度的一半,再落下,求它在第十次落地时,共经过多少米?第十次反弹多高?main(){ float Sn=100.0,hn=Sn/2;
for (n=2;n&=
(3) }printf("第10次落地时共经过%f米\n",Sn);printf("第10次反弹%f米\n",hn);}6. 打印出以下图形** * *19* * * * ** * * * * * ** * * * ** * **main(){ int i,j,k;
for (i=0;i&=
(1)i++){ for (j=0;j&=2-i;j++)
printf(" ");
for (k=0;k&=
printf("*");
(3)}for (i=0;i&=2;i++)
{ for (j=0;j&=
(4)j++)printf(" ");
for (k=0;k&=
(5)k++)printf("*");printf("\n");}}7. 准备客票。某铁路线上共10个车站,问需要准备几种车票?
main(){ int i,j,station,total=0;printf("输入车站数:");scanf("%d",&station);
for (i=1;i&
(2)j&=j++)
(3)printf("车票种类=%d \n",total);}四、 编程1. 计算n的阶乘202. 求 1到 100之间的奇数之和、偶数之积。3. 输入一行字符,统计其中的英文字母、数字、空格和其他字符个数。0123634. 用循环语句编写求2?2?2?2?...?2的程序。205. 求?n!(即求1!+2!+3!+...+20!) 。n?1,......,求出这个数列的前20项之和。 6. 有一分数序列,,,,,12358137. 任意十个数,打印出它们中的最大数、最小数。测试数据:①
1,-12,20,30,-5,-23,33,125,200,-100②
0,10,3,1,5,6,-10,90,9,-4③
12,13,14,15,10,-10,-11,-12,-9,98. 判断一个数是否是素数9. 打印1-100之间所有素数10.11. 求1-100之间所有非素数的和
输入两个正整数 m和 n,求其最大公约数和最小公倍数。提示:求 m,n的最大公约数:首先将 m除以 n(m&n)得余数 R,再用余数 R 去除原来的除数,得新的余数,重复此过程直到余数为 0 时停止,此时的除数就是m 和 n的最大公约数。求 m和 n的最小公倍数: m和 n的积除以 m和 n 的最大公约数。测试数据: m=12,
n=24m=100, n=30012. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数, 其各位数字333立方和等于该数本身。例如 153是一个水仙花数,因为 153=1?5?3(要求分别用一重循环和三重循环实现)。13.14.15. 一个数恰好等于它的平方数的右端,这个数称为同构数。如
5 的平方是25, 53025这个数具有一种独特的性质:将它平分为两段,即30和25,使之相加后求两位数13和62具有很有趣的性质:把它们个位数字和十位数字对调,其乘积不是25中的右端的数, 5就是同构数。找出1~1000之间的全部同构数。
平方,即(30+25),恰好等于3025本身。请求出具有这样性质的全部四位数。变,即13*62=31*26。 编程序求共有多少对这种性质的两位数(个位与十位相同的不在此列,如11、22,重复出现的不在此列,如 13*62与62*13)。16. 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如,6 的因子为1、2、3,而6=1+2+3,因此6 是“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子:216
its factors are 1,2,317. 有一个四位正整数,组成这个四位数的四个数字各不相同,如果把它们的首尾互换,第二位与第三位互换,组成一个新的四位数。原四位数为新四位数的4倍,请找出一个这样的四位数。18.19. 给出一个不多于4位的正整数,要求:①
求出它是几位数
分别打印出每在一个程序中计算出给定误差小于0.1,0.01,0.001,0.01 时,下式一位数字
按逆序打印出各位数字。的值: n?2
(?)?(?)?(?)?...?(?) n?1提示:本题中误差指前 n+1项之积与前 n项积之差。用泰勒展开式求sinx的近似值357(2n?1)xxxxxn?1
sinx=? ???...?(?1)1!3!5!7!(2n?1)!测试数据:①
x=0.3 , n=8②
x=0.5 , n=2021.22.23. 验证歌德巴赫猜想。一个充分大的偶数(大于或等于6)可以分解为两个素数之用牛顿迭代法求方程在 1.5附近的根(精度为10)。 两个乒乓球队进行比赛,各出三人,甲队为A、B、C三人,乙队为X、Y 、Z三?520. 和。试编程序,将 6至50之间全部偶数表示为两个素数之和。
2x3?4x2?3x?6?0人,已知抽签决定比赛名单。有人向队员打听比赛的名单, A说他不和 X比,C说他不和 X、Z比,请编程序找出三对赛手的名单。22第五单元
组一、选择题1. 以下关于数组的描述正确的是
。A. 数组的大小是固定的,但可以有不同的类型的数组元素。B. 数组的大小是可变的,但所有数组元素的类型必须相同。C. 数组的大小是固定的,但所有数组元素的类型必须相同。D. 数组的大小是可变的,但可以有不同的类型的数组元素。2. 在定义int a[10];之后,对a的引用正确的是
。A. a[10]
D. a[10-10]3. 以下能正确定义数组并正确赋初值的语句是
。A. int n=5,b[n][n];
B. int a[1][2]={{1},{3}};C. int c[2][]={{1,2},{3,4}}
D. int a[3][2]={{1,2},{3,4}}4. 以下不能正确赋值的是
。A. char s1[10];s1="test";
B. char s2[]={?t?,?e?,?s?,?t?}C. char s3[20]= "test";
D. char s4[4]={ ?t?,?e?,?s?,?t?}5. 下面程序段运行时输出结果是
。char s[18]= "a book! ";printf("%.4s",s);A. a book!
D. 格式描述不正确,没有确定输出6. 下面程序段运行时输出结果是
。char s[12]= "A book";printf("%d\n",strlen(s));A. 12
D. 67. 在执行int a[][3]={1,2,3,4,5,6};语句后,a[1][0]的值是
D. 5二、读程序写结果1. #include &stdio.h&void main(){int a[8]={1,0,1,0,1,0,1,0},i;23}for(i=2;i&8;i++)
a[i]+= a[i-1] + a[i-2]; printf(“%5d”,a[i]); for(i=0;i&8;i++)2. #include &stdio.h&void main(){float b[6]={1.1,2.2,3.3,4.4,5.5,6.6},t;t=b[0];for(i=0;i&5;i++)b[i]=b[i+1];b[5]=t;for(i=0;i&6;i++)printf(“%6.2f”,b[i]); }void main(){
int p[7]={11,13,14,15,16,17,18},i=0,k=0;while(i&7 && p[i]%2){ k=k+p[i]; i++;}printf("k=%d\n",k);}4.
void main(){
int a[3][3]={1,3,5,7,9,11,13,15,17};
int sum=0,i,j;for (i=0;i&3;i++)for (j=0;j&3;j++){
a[i][j]=i+j;if (i==j)24 3. #include &stdio.h&sum=sum+a[i][j];}printf("sum=%d",sum);}5. void
int a[4][4],i,j,k;for (i=0;i&4;i++)for (j=0;j&4;j++)a[i][j]=i-j;for (i=0;i&4;i++){
for (j=0;j&=i;j++)printf("%4d",a[i][j]);printf("\n");}}6.
#include &stdio.h&main(){ int i,s;char s1[100],s2[100];printf("input string1:\n");
printf("input string2:\n");
i=0;while ((s1[i]==s2[i])&&(s1[i]!='\0'))
i++;if ((s1[i]=='\0')&&(s2[i]=='\0')) s=0;
else s=s1[i]-s2[i];printf("%d\n",s);}输入数据
aidand257. void main(){}8. #inlcude &stdio.h&#include &string.h&void main(){}三、填空题1. 构成数组的各个元素必须具有相同的
。2. 下面的程序是输出数组中最大元素的下标(p表示最大元素的下标)。void main(){}3. 输入20个数,输出他们的平均值,输出与平均值之差的绝对值最小的数组元素。26 char ch[3][5]={ "AAAA","BBB","CC"}; printf("\"%s\"\n",ch[1]); char str[10][80],c[80]; for(i=0;i&10;i++)
gets(str[i]); strcpy(c,str[0]); for(i=1;i&10;i++)
if(strlen(c)&strlen(str[i]))
strcpy(c,str[i]); puts(c);
int s[]={1,-3,0,-9,8,5,-20,3}; for(i=0,p=0;i&8;i++)
if(s[i]&s[p])#include &stdio.h&void main(){float a[20],pjz=0,s,t; int i,k;
for(i=0;i&20;i++) {scanf(“%f”,&a[i]); pjz+=
;} s=fabs(a[0]-pjz); t=a[0]; for(i=1;i&20;i++)
if( fabs(a[i]-pjz)&s
){ }}t=a[i];4. 输出行、列号之和为3的数组元素。main(){ char ss[4][3]={'A','a','f','c','B','d','e','b','C','g','f','D'};int x,y,z;for (x=0;
(1)x++)for (y=0;
printf("%c\n",ss[x][y]);}}275. 将一个数组中的元素按逆序重新存放。例如原来的顺序为:8,5,7,4,1, 要求改为:1,4,7,5,8
int a[N]={12,9,16,5,7,2,1},k,s;printf("\n初始数组:\n");for (k=0;k&N;k++)printf("%4d",a[k]);
for (k=0;k&
s=a[k]; a[k]=
=s; }printf("\n交换后的数组:\n");
(4)k++)printf("%4d",a[k]);}6. 有一行文字,要求删去某一个字符。此行文字和要删去的字符均由键盘输入,要删去的字符以字符形式输入(如输入 a表示要删去所有的 a字符)。#include &stdio.h&void main(){
/*str1表示原来的一行文字,str2表示删除指定字符后的文字*/char str1[100],str2[100];int i=0,k=0;printf(“please input an sentence:\n”);gets(str1);scanf("%c",&ch);
(2)i++)if (str1[i]!=ch)
]=str1[i]; k++; }
]='\0';printf("\n%s\n",str2);}7. 找出10个字符串中的最大者。28#include &stdio.h&#include &string.h&#define N 10void main(){ char str[20],s[N][20];for (i=0;i&N;i++)
);strcpy(str,s[0]); for(i=1;i&N;i++)
&0) strcpy(str,s[i]);printf("The longest string is : \n%s\n",str);}8. 某人有四张 3分的邮票和三张 5分的邮票,用这些邮票中的一张或若干张可以得到多少种不同的邮资?main(){ static int a[27];int i,j,k,s,n=0;for (i=0;i&=4;i++)for (j=0;j&=3;j++)
(1)for (k=0;a[k];k++)
if (s==a[k])
n++;}}printf("%d kind:",n);
(4)k++)printf("%3d",a[k]);}9. 求矩阵的马鞍点。马鞍点即它的值在行中最大,在它所在的列中最小。29#define N 10#define M 10main(){ int i,j,k,m,n,flag1,flag2;
int a[N][M],printf("\n输入行数 n:");
scanf("%d",&n);printf("\n输入列数 m:");
scanf("%d",&m);for (i=0;i&n;i++)for (j=0;j&m;j++)scanf("%d",
for (i=0;i&n;i++){ for (j=0;j&m;j++)printf("%5d",a[i][j]);(2)}flag2=0;for (i=0;i&n;i++)
(3)for (j=1;j&m;j++)if (a[i][j]&max)
max=a[i][j];
for (j=0;j&m;j++)
{ flag1=0;
if (a[i][j]==max)
{ for (k=0,flag1=1;k&n&&flag1;k++)
) flag1=0;
if (flag1)
{ printf("第%d行, 第%d列的 %d是鞍点\n",
}}if (!flag2)printf("\n矩阵中无鞍点!\n");
}30四、编程1. 有一个正整数数组,包含N个元素,要求编程求出其中的素数之和以及所有素数的平均值。2. 有一个数组,内放10个整数。要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换位置。3. 有 N个数已按由小到大的顺序排好,要求输入一个数, 把它插入到原有序列中,而且仍然保持有序。4. 输入N个数到数组中,输出所有大于N个数平均值的数。5. 输入N个数到数组中,选出其中最大的数和最小的数,并分别将它们与最前面和最后面的数互换。6. 用选择法对10个整数由大到小排序。7. 用筛选法求 2到 100之间的素数。方法如下:首先 2是素数,凡 2 的倍数都不是素数,于是把这些数从数表中筛去, 2以后没有被筛去的第一个数是 3, 然后把 3的倍数都从数表中筛去, 3以后没被筛去的第一个数是 5,然后把 5 的倍数都从数表中筛去。如此下去,直到遇到某数 K(≤ N),其后没有数可筛选为止, 这时保留下的未被筛去的数就是 2到 N的素数。8. 求一个 3×3矩阵两条对角线上元素之和(每个元素只加一次)。9. 打印如下形式的杨辉三角形11
1输出前10行,从 0行开始,分别用一维数组和二维数组实现。10.有一个二维数组整型数组中,每一行都有一个最大值,编程求出这些最大值以及它们的和。11.把一个二维实型数组a按照第0列的元素进行排序(由小到大排序,用起泡法)。例如:如果a[i][0]大于a[i+1][0],则i行与i+1行中所有元素都要进行对换。12.编程序将一个字符串的前 N个子字符送到一个字符型数组中去, 然后再加上一个'31\0'(不允许使用strcpy(str1,str2,n)函数)。13.将字符数组 A中下标为双号(0,2,4,6,8...) 的元素值传给另一个字符数组 B,然后将 B数组的元素按逆序输出。14.有一行字符,统计其中的单词个数(单词之间以空格分隔),并将每一个单词的第一个字母改为大写。15.有 N个国家名,要求按字母先后顺序排列(用起泡排序法)后输出。16.有17个人围成一圈(编号为0~16),从第 0号的人开始从 1报数, 凡报到 3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止。 问此人原来的位置是多少号?17.编程产生如下形式的方阵。1
1要求:不允许使用键盘输入语句和静态赋值语句,尽量少用循环。18.打印所有不超过 n( n&256)的其平方具有对称性的数(也称回文数)。19.求N个数中的最大值,最大值出现的次数,然后求出次大值(次大值一定存在)。20.找出 M×N 数组中所有不相邻元素,并求出它们的和(相邻的数:前一个是偶数,后一个是素数)。21.圆盘上有如下图所示的二十个数,请找出哪四个相邻数之和为最大,并指出它们的起始位置及最大和的值。3222.已知 100个自然数 1~100,我们取 1, 2, 3, 4时, 我们可将其排成一圈使每两个数之和都是素数,即→1→2→3→4→,问 1~100内连续取 n个数,即 1~ n(≤ 100)能满足上述要求的最大的 n是多少?23.打印魔方阵。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如:三阶魔方阵为8
2要求打印由 1到N2的自然数构成的魔方阵。提示:魔方阵中各数的排列规律如下:⑴
将“1”放在第一行中间一列;⑵
从“2”开始直到n×n为止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1;⑶
如果上一个数的行数为1,则下一个数的行数为 n(指最下一行);⑷
当一个数的列数为 n,下一个数的列数应为1,行数减1;⑸
如果按上面规则确定的位置已有数,或上一个数是第 1行第 n列时, 则把下一个数放在上一个数的下面。24.统计一个单位职工的年龄,要求把相同年龄最多的那个年龄找出来(可能有几个这样的年龄),并统计出现的次数。3325.n×n的拉丁方阵的每行、每列均为自然数的一个全排列, 每行(列)上均无重复数。如 n=5时, 5×5的一种拉丁方阵可以为:1
5该数组的第一行 1,5,2,4,3 用程序自动生成,但产生的第一行不一定非得是 1,5,2,4,3,第一行填写完毕后,即以第一行作为全方阵索引, 即若第一行中的第 i 列的元素值为 j ,则 j在各行中的列号即为从第一行中元素值为 i的那一列开始读出的 n个自然数(到行末则从行头接着读),例如第一行第2列的元素值为5, 则从元素值为2的那一列(第3列)开始读出 2,4,3,1,5,这就是元素5在各行中的列标号。测试数据:①
n=834第六单元
数一、选择题1. 在C语言中,当函数调用时
。A. 实参和形参各占一个独立的存储单元B. 实参和形参共用存储单元C. 可以由用户指定实参和形参是否共用存储单元D. 由系统自动确定实参和形参是否共用存储单元2. 以下函数调用语句中实参的个数为
。exce((v1,v2),(v3,v4,v5),v6);A. 3
D. 63. 如果在一个函数的复合语句中定义了一个变量,则该变量
。A. 只在该符合语句中有效,在该符合语句外无效B. 在该函数中任何位置都有效 C. 在本程序的原文件范围内均有效 D. 此定义方法错误,其变量为非法变量A. float型
D. double型5. C语言规定,函数返回值的类型是由
。A. return语句中的表达式类型所决定B. 调用该函数时的主调函数类型所决定C. 调用该函数时系统临时决定D. 在定义该函数时所指定的函数类型决定6. 在C语言程序中,以下描述正确的是
。A. 函数的定义可以嵌套,但函数的调用不可以嵌套B. 函数的定义不可以嵌套,但函数的调用可以嵌套C. 函数的定义和函数的调用均不可以嵌套D. 函数的定义和函数的调用均可以嵌套7. 以下叙述中正确的是
。A. 全局变量的作用域一定比局部变量的作用域范围大B. 静态(static)类别变量的生存期贯穿于整个程序的运行期间C. 函数的形参都属于全局变量35 4. C语言允许函数值类型缺省定义,此时该函数值隐含的类型是
。D. 未在定义语句中赋初值的auto变量和static变量的初值都是随机值8. 以下程序的运行结果是:#include&stdio_h&void sub(int s[],int y){ static int t=3;y=s[t];t--;}main(){ int a[]={1,2,3,4},i,x=0;for(i=0;i&4;i++){sub(a,x);printf("%d",x);}printf("\n");}A)12349. 以下程序的运行结果是:main(){ int w=5;fun(w);printf("\n");}fun(int k){ if(k&O) fun(k-1);printf(" %d",k);}A)5 4 3 2 l
B)0 1 2 3 4 5
C)1 2 3 4 5
D)5 4 3 2 1 010. 以下所列的各函数首部中,正确的是_______。A)void play(vat a:Integer,var b:Integer)C)void play(int a,int b)A)数组的长度
B)void play(int a,b) D)Sub play(a as integer,b as integer) B)432l
D)4444 11. 当调用函数时,实参是一个数组名,则向函数传送的是_______。 B)数组的首地址D)数组每个元素中的值B)单向值传递D)传递方式由用户指定 C)数组每一个元素的地址
A)地址传递
12. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是_______。 C)由实参传给形,再由形参传回实参13. 以下函数值的类型是_______。fun(float x){ float y;y=3*x-4;return y;36}A)intB)不确定
D)float二、读程序写结果1. fun1(int a,int b){a+=a; b+=b; c=fun2(a,b);return
c*c;}fun2(int a,int b){c=a*b%3;}main(){ int x=11,y=19;printf("The final result is:%d\n",fun1(x,y));
}2.main(){ x=5;cude();printf("%d\n",x);}cude(){ x=x*x*x; }3. #include &stdio.h&long fun(int n){if(n==1||n==2)s=2;elses=n+fun(n-1);37}main()}4.
main(){for(i=0;i&2;i++)add();}add(){ int x=0;static int y=0;printf("%d,%d\n",x,y);x++; y=y+2;}5.
main(){ int k=4,m=1,p;p=func(k,m); printf("%d, ",p); p=func(k,m); printf("%d\n",p);}func(int a,int b){ static int m=0,i=2;i+=m+1; m=i+a+b;}6.
int t(int x,int y,int cp,int dp){ cp=x*x+y*y;dp=x*x-y*y;}main()38
{ printf("%ld\n",fun(4));{ int a=4,b=3,c=5,d=6; t(a,b,c,d);printf("%d%d\n",c,d); }7.
fun(int x,int y,int z){z=x*x+y*y;}main(){
int a=31;fun(5,2,a);printf("%d",a);}8.
int a,b;void fun(){ a=100;b=200; }main(){ int a=5,b=7;fun();printf("%d%d\n",a,b); }9.
int x=3;main(){int i;for(i=1;i&x;i++) incre(); }incre(){static int x=1;x*=x+l;printf("%d",x);}10.
int func(int a,intb){ return(a+b); }main(){int x=2,y=5,z=8,r; r=func(func(x,y),z);39printf("%d\n",r);}11.
long fib(int n){ if(n&2)return(fib(n-1)+fib(n-2));else return(2);}main(){ printf("%ld\n",fib(3)};}三、填空题1. 编写一个验证正整数M是否为素数的函数,若M是素数则把1送到T中,否则零送到T中。在主函数中读入N个正整数,每读入一个则调用函数判断它是否为素数,在主函数中将T的值累加到另一个变量中。用此方法可求出N个数中素数的个数。请填空完成上述功能的程序。#include&stdio.h&#include&math.h&int prime(int m){ int i,pp=1;
(1)i++)if (m % i==0) pp=0;
(2)return(pp);}main(){ int a[20],i,sum=0;for(i=0;i&10;i++){ scanf("%d",&a[i]);
(3)}printf("the number of prime data is:%d",sum);}402. 编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。请填空完成上述功能的程序。#include&stdio.h&#include&ctype.h&void fltj(char str[],int a[]){ int ll,i;
(1)for (i=0;i&i++)
) a[2]++;else a[3]++;}}main(){ static char str[60];static int a[4]={0,0,0,0};gets(str);fltj(str,a);printf("%s char:%d digit:%d space:%d other:%d",str,a[0],a[1],a[2],a[3]);}3. 用递归方法求N阶勒让德多项式的值,递归公式为1??
Pn??x?((2n?1)?x?p(x)?(n?1)?p(x))/nn?1n?2?(n?0)(n?1) (n?1)#include&stdio.h&main(){ float pn();float x,41scanf("%d%f",&n,&x);
(1)printf("pn=%f",lyd);}float pn(float x,int n){
if (n==0) temp=
else if (n==1) temp=
else temp=
(4)return(temp);}4.以下函数的功能是:求x的y次方,请填空。double fun(double x,int y){int i;double z:for(i=1,z=x;i&y;i++)z=z*__(1)___;return z:}四、编程1. 编写一函数判断某数是否素数。2. 编写一函数求三个整数的最大值。3. 打印出3到1100之间的全部素数(判素数由函数实现)。4. 写一函数,使给定的一个二维数组(3×3)转置,即行列互换。5. 写一函数,将两个字符串连接,即编写一strcat函数。6. 写一函数,求一字符串长度,即编写一strlen函数。7. 写一函数将字符数组s1中的全部字符复制到字符数组s2中,不用strcpy函数。8. 写一函数判断某数是否“水仙花数”,所谓“水仙花数”是指一个三位数, 其各位数字333立方和等于该数本身。例如 153是一个水仙花数,因为 153=1?5?3 。9. 在主函数内任意输入一个5×6矩阵,编写一函数求出每一行的和放到一个一维数组中,输出此矩阵及其每一行的和。10. 写一主函数输入一数组,写一子函数实现对该数组的冒泡排序并输出。11. 任意输入20个正整数,找出其中的素数,并将这些素数按由小到大排序。要求:判断一42个数是否为素数用函数实现;排序用函数实现。12. 编写计算m的n次方的递归函数。13. 编一个程序,读入具有5个元素的整型数组,然后调用一个函数,递归计算这些元素的积。14. 编一个程序,读入具有5个元素的实型数组,然后调用一个函数,递归地找出其中的最大元素,并指出它位置。43第七单元
针一、选择题1、 若有以下定义和语句,且0≤i&10则对数组元素的错误引用是
。int a[10]={1,2,3,4,5,6,7,8,9,10},*p,i; p=a; A. *(a+i)
D. *(&a[i]) A. *(a[1]+1)
B. *(&a[1][1])
C. (*(a+1)[1])
D. *(a+5) char *a[2]={ "abcd","ABCD"}; A.数组a的元素值分别为"abcd"和"ABCD" B.a是指针变量,它指向含有两个数组元素的字符型数组 C.数组a的两个元素分别存放的是含有4个字符的一维数组的首地址 D.数组a的两个元素中各自存放了字符’a’、’A’的地址 指针s所指字符串的长度为:
。 A. 说明不合法
swap(int *p1,int *p2) { int *p;
*p=*p1; *p1=*p2; *p2=*p; } 2、 若有定义:int a[3][4]; ,
不能表示数组元素a[1][1]。 3、 对如下定义,以下说法中正确的是
。 4、 char *s="\t\\Name\\Address\n"; 5、 分析下面函数,以下说法正确的是
。 A. 交换*p1和*p2的值
B. 正确,但无法改变*p1和*p2的值 C. 交换*p1和*p2的地址
D. 可能造成系统故障,因为使用了空指针 A. M个指向整型变量的指针 B. 指向M个整型变量的函数指针 C. 一个指向具有M个整型元素的一维数组的指针 D. 具有M个指针元素的一维指针数组,每个元素都只能指向整型量 A. 一个用于指向整型数据的指针变量 C. 一个用于指向函数的指针变量
B. 一个用于指向一维数组的指针 D. 一个返回值为指针型的函数名44 6、 设有说明int (*ptr)[M]; 其中ptr是
。 7、 在说明语句:int *f(); 中,标识符代表的是:
。8、 若int x ,*pb; ,则正确的赋值表达式是
。A. pb=&x
C. *pb=&x; D. *pb=*x
int *p ,a=10 ,b=1 ; p=&a ; a=*p+b ; 9、 有如下程序段 执行该程序段后,a 的值为
D. 编译出错
double r=99 , *p=&r ; *p=r ; 10、若有以下定义和语句: 则以下正确的叙述是
。 A. 以上两处的*p 含义相同,都说明给指针变量p 赋值 B. 在"double r=99,*p=&r;"中,把r 的地址赋值给了p 所指的存储单元 C. 语句"*p=r;"把变量r 的值赋给指针变量p D. 语句"*p=r;"取变量r 的值放回r 中 此功能的函数是
。 A. funa (int *x,int *y) { int *p; *p=*x; *x=*y;*y=*p; } B. fund (int x,int y) { int t; t=x;x=y;y=t; } C. func (int *x,int *y) { *x=*y;*y=*x;} D. fund (int *x,int *y) { *x=*x+*y;*y=*x-*y;*x=*x-*y; } 是
。 A. *p=&a; scanf("%ld",p); B. p=(long *)malloc(8); scanf("%ld",p); C. scanf("%ld",p=&a); D. scanf("%ld",&a); A. &
D. - 址的表达式是
int a[10]={1,2,3,4,5,6,7,8,9,10} ,*p=a ;45 11、要求函数的功能是交换x 和y 中的值,且通过正确调用返回交换结果.能正确执行 12、若有说明:long *p ,a;则不能通过scanf 语句正确给输入项读入数据的程序段 13、对于类型相同的两个指针变量之间,不能进行的运算是
。 14、若已定义:int a[9] ,*p=a;并在以后的语句中未改变p 的值,不能表示a[1] 地 15、若有以下说明:则数值为6 的表达式是
。 A. *p+6
B. *(p+6)
C. *p+=5 D.
p+5 确执行的语句是
。 A. k=*P1+*P2;
D. k=*P1 * (*P2);
int a[ ]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10} , *p=a ; 16、设P1 和P2 是指向同一个int 型一维数组的指针变量,k 为int 型变量,则不能正 17、若有以下的定义: 则值为3 的表式是
。 A. p+=2 , *(p++)
B. p+=2 ,*++p C. p+=3 , *p++
D. p+=2 ,++*p
int a[10]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10} ,*p=a ; 18、若有以下定义和语句: 则不能表示a 数组元素的表达式是
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 19、有如下说明 则数值为9 的表达式是
。 A. *p+9
B. *(p+8)
D. p+8 void main() {
int a[10]={6,7,2,9,1,10,5,8,4,3,},*p,*s;
for(p=a, s=a; p-a&10; p++)
printf("The max:%d",*s): } 则在if 语句中的判断表达式应该是
C. a[p]&a[s]
D. p-a&p-s
int a[10]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10} ,*p=a ; 20、下面程序输出数组中的最大值,由s 指针指向该元素. 21、若有以下定义和语句: 则不能表示a 数组元素的表达式是
int w[2][3] ,(*pw)[3] ; pw=w ; 22、若有以下定义和语句: 则对w 数组元素非法引用是
。46A. *(w[0]+2)
B. *(pw+1)[2] C.
D. *(pw[1]+2) 23、有以下说明和语句,则
是对c 数组元素的正确引用。
int c[4][5] , (*cp)[5] ; cp=c ; A. cp+1
B. *(cp+3)
C. *(cp+1)+3
D. *(*cp+2)
char str[ ]="Hello" ; char *ptr ; ptr=str ; 24、设有如下的程序段: 执行上面的程序段后 ,*(ptr+5)的值为
C. 不确定的值
D. 'o'的地址
sss(char *s ,char *t ) { while((*s)&&(*t)&&(*t++== *s++)) ; return(*s-*t) ; } 25、下面函数的功能是
。 A. 求字符串的长度
B. 比较两个字符串的大小 C. 将字符串s 复制到字符串t 中
D. 将字符串s 接续到字符串t 中 A. char ST[5]={"ABCDE"}; C. char *S; S="ABCDE";
int fun1(char * x) { char *y=x; while(*y++) ; return(y-x-1);} B. char S[5]={'A','B','C','D','E'};
D. char *S; scanf("%S",S); 26、下面各语句行中,能正确进行字符串赋值操作的语句是
。 27、下列函数的功能是
。 A. 求字符串的长度
B. 比较两个字符串的大小 C. 将字符串X 复制到字符串Y
D. 将字符串X 连接到字符串Y 后面
#include & stdio.h& #include & string.h& void main( ) {
char *S1="ABCDEF", *s2="aB";
s1++; s2++;47 28、请读程序:printf("%d\n", strcmp( s1,s2)); } 上面程序的输出结果是
。 A. 正数
D. 不确定的值
int (*ptr)( ); 29、设有如下定义: 则以下叙述中正确的是
。 A. ptr 是指向一维组数的指针变量 B. ptr 是指向int 型数据的指针变量 C. ptr 是指向函数的指针 ;该函数返回一个int 型数据 D. ptr 是一个函数名 ;该函数的返回值是指向int 型数据的指针 正确的调用方法是
。 A. (*p)max(a ,b); B. *pmax(a ,b);C. (*p)(a ,b) ; D. *p(a ,b); A. p=max;
B. *p=max;
C. p=max(a,b);
D. *p=max(a,b); A. 代表函数的返回值
B. 指向函数的入口地址 C. 表示函数的类型
D. 表示函数返回值的类型
fun(int *c){ } void main() { int (*a)()=fun,*b(),w[10],c; ? } 30、若有函数max(a ,b),并且已使函数指针变量p 指向函数max ,当调用该函数时, 31、已有函数max(a,b),为了让函数指针变量p 指向函数max,正确的赋值方法是
。 32、已有定义 int (*p)();指针p 可以
。 33、若有以下说明和定义 在必要的赋值之后,对fun 函数的正确调用语句是
。 A. a=a(w);
B.(*a)(&c);
C. b=*b(w);
D. fun(b);
char *aa[2]={"abcd","ABCD"}; 34、设有如下定义: 则以下说法中正确的是
。 A. aa 数组成元素的值分别是"abcd"和ABCD" B. aa 是指针变量,它指向含有两个数组元素的字符型一维数组 C. aa 数组的两个元素分别存放着含有4 个字符的一维字符数组的首地址 D. aa 数组的两个元素中各自存放了字符'a'和'A'的地址4835、以下正确的叙述是
。A. C 语言允许main 函数带形数,且形参个数和形参名均可由用户指定 B. C 语言允许main 函数带形参,形参名只能是argc 和argv C. 当main 函数带有形参时,传给形参的值只能从命令行中得到 D. 有说明: main(int argc,char *argv),则形参argc 的值必须大于1 A. i=*p;
B. p*=*&j;
D. i=**p; 36、若有说明:int i, j=2,*p=&i;,则能完成i=j 赋值功能的语句是
。二、读程序题,写出程序运行的结果。1、#include &stdio.h&void main(){
int *p1,*p2,*p;int a=5,b=8;p1=&a; p2=&b;if(a&b) { p=p1; p1=p2; p2=p;}printf("%d,%d\n",*p1,*p2);printf("%d,%d\n",a,b);}2、void ast(int x,int y,int *cp,int *dp){ *cp=x+y; *dp=x-y; }void main(){ int a,b,c,d;a=4; b=3;ast(a,b,&c,&d);printf("%d,%d\n",c,d);}3、void main(){
int a[]={2,4,6,8,10};int y=1,x,*p;p=&a[1];for(x=0;x&3;x++)
y+=*(p+x);printf("y=%d\n",y);495、6、7、} {
int a[2][3]={1,2,3,4,5,6};
ptr=&a[0][0];
m=(*ptr)*(*(ptr+2))*(*(ptr+4));
printf("%d\n",m); } void prtv(int * x) {
printf("%d\n",++*x); } void main() {
int a=25 ;prtv(&a); } void fun(int *a, int *b, int *c) {
temp=a; a=b; b=
*temp=*b, *b=*c; *c=* } void main() {
int a,b,c,*p1,*p2,*p3;
a=5; b=7; c=3;
p1=&a; p2=&b; p3=&c;
fun(p1,p2,p3);
printf("%d,%d,%d\n",a,b,c); } #include &stdio.h&
void main() {
static int a[2][3]={1,3,5,2,4,6};
int *add[2][3]={*a,*a+1,*a+2,*(a+1),*(a+1)+1,*(a+1)+2};
int **p,i;50 4、 void main()8、9、p=add[0];
for(i=0;i&6;i++)
{ printf("%d
printf("\n"); } void main() { char s[]="ABCD",*p;
for(p=s+1;p&s+4;p++)
printf("%s\n",p); } int fa(int x) { return x*x; } int fb(int x) { return x*x*x; } int f(int (*f1)(),int (*f2)(),int x) { return f2(x)-f1(x); } void main() {
i=f(fa,fb,2); printf(“%d\n”,i); } #include &stdio.h& #include &string.h& void main() {
char b1[8]="abcdefg",b2[8],*pb=b1+3;
while (--pb&=b1) strcpy(b2,pb);
printf("%d\n",strlen(b2)); } char cchar(char ch) { if (ch&=‘A’&&ch&=‘Z')ch=ch-‘A'+‘a';51 10、 11、 } void main() { char s[]="ABC+abc=defDEF",*p=s;
while(*p){ *p=cchar(*p);p++;}printf("%s\n",s);}12、void main( ){
int a[5]={2,4,6,8,10},*p,* *k;
p=a; k=&p;printf("%d",*(p++));printf("%d\n",* *k);}13、funa(int a,int b ) { return a+b;}
funb(int a,int b ) { return a-b;}
sub( int (*t)( ),int x,int y )
{ return ((*t)(x,y));}void main( ){ int x ,(*p)( );p=x=sub(p,9,3);x+=sub(funb,8,3);printf("%d\n",x);}14、void main( ){ char *s="";int v[4]={0,0,0,0} ;int k,i;52for(k=0;s[k];k++)
{ switch(s[k])
{ case '1':i=0;
case '2':i=1;
case '3':i=2;
case '4':i=3;
for(k=0;k&4;k++) printf("%d",v[k]); } void space(char *str) { int i ,
char ts[81];
for(i=0,t=0 ;str[i]!='\0' ;i+=2)
if(! isspace(*(str+i))&&(*(str+i)!='a'))
ts[t++]=toupper(str[i]) ;
ts[t]='\0' ; strcpy(str ,ts) ; } void main( ) { char s[81]={"abcdefg"} ;
space(s); puts(s); } #include&stdio.h& sub1(char a ,char b) { c=a=b=} sub2(char * a ,char b) { c=**a=b=} sub3(char * a ,char *b){ c=**a=**b=} void main() {
a='A' ;b='B' ;sub3(&a ,&b) ;
putchar(a) ;putchar(b) ;
a='A' ;b='B' ;sub2(&a ,b) ;53 15、# include "ctype.h" 16、putchar(a) ;putchar(b) ;
a='A' ;b='B' ;sub1(a ,b) ;
putchar(a) ;putchar(b) ;
}17、void main(){
char b[ ]="ABCDEFG";
char *chp=&b[7];while(--chp&&b[0])
putchar(*chp);putchar('\n');}18、void prtv(int * x){
printf("%d\n",++*x);
}void main(){
int a=25 ;prtv(&a);
}19、int aa[3][3]={{2},{4},{6}};
void main(){ int i ,*p=&aa[0][0];
for(i=0;i&2;i++){ if(i==1) aa[i][i+1]=*p+1;
else ++p;printf("%d",*p);
}}20、int f(int b[ ],int n)
{ int i ,r=1;for(i=0;i&=n;i++) r=r*b[i];54} void main() { int x,a[]={2,3,4,5,6,7,8,9};
printf("%d\n",x); } #define PR(ar) printf("%d",ar) void main( ) { int j ,a[ ]={1,3,5,7,9,11,13,15},*p=a+5;
for(j=3;j;j--)
{ switch(j)
case 2:PR(*p++);
case 3:PR(*(--p));
} } #include&stdio.h& void main() { int a[ ]={ 1 ,2 ,3 ,4 } ,
void sub( int *s ,int y);
for(i=0 ; i&4 ; i++)
sub(a ,x) ; printf("%d" ,x) ;
printf("\n") ; } void sub( int *s ,int y) {
static int t=3 ;
y=s[t] ; t-- ; } 21、 22、 23、55#include& stdio.h& void FUN( int *S) {
static int J=0;
do {S[J] +=S[J+1];}while( ++J&2);} void main() {
int K, A[10]={ 1,2,3,4,5};
for( K=1;K&3;K++) FUN(A);
for(K=0;K&5;K++) printf("%d",A[K]); } #include&stdio.h& fun (int * s ,int n1 ,int n2) {
int i , j ,
i=n1 ; j=n2 ;
while(i&j)
{ t= *(s+ i) ;
*(s+i)= *(s+j) ;
i++ ; j-- ;
} void main() { int a[10]={1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,0} ,i ,*p=a;
fun (p ,0 ,3) ;
fun(p ,4 ,9) ;
fun(p ,0 ,9) ;
for(i=0 ; i&10 ; i++) printf("%d" , *(a+i));
printf("\n") ; } void as( int x ,int y ,int *cp ,int *dp) { *cp=x+y;*dp=x-y;} void main() {
int a=4 ,b=3 ,c ,56 24、 25、as(a ,b ,&c ,&d);
printf("%d %d\n",c,d); } void func(int *a,int b[ ]) { b[0]=*a+6; } main() {
int a ,b[5];
a=0; b[0]=3;
func(&a,b);
printf("%d \n",b[0]); } 26、27、三、填空题1. 在数组中同时查找最大元素下标和最小元素下标,分别存放在main函数的变量max 和min中。#include &stdio.h&
void find(int *a,int *max,int *min)
*max=*min=0;
for(i=1;i&n;i++)
if(a[i]&a[*max])
(1)57 #include &stdio.h& sub(int x ,int y ,int *z)
{ *z=y- } main() {
int a , b ,
sub(10 ,5 ,&a) ;
sub(7 ,a ,&b) ;
sub(a ,b ,&c) ;
printf("%d ,%d ,%d\n" ,a ,b ,c) ; }else if(a[i]&a[*min])
{ int a[]={5,8,7,6,2,7,3};
printf("%d,%d\n",max,min);
} 如果s1=s2,返回值为0,如果s1≠s2,返回它们二者第一个不同字符的ASCⅡ码差 值("BOY"与"BAD",第二个字母不同,"O"与"A"之差为79-65=14)。如果s1&s2,则输出正值,如s1&s2,则输出负值。
compare(char *p1,char *p2)
if(*(p1+i++)=='\0')
main() 2. 写一函数,实现两个字符串的比较。即自己写一个strcmp函数:compare(s1,s2)。{char str1[20],str2[20],*p1,*p2;printf("please input string by line:\n");scanf("%s",str1);scanf("%s",str2);
(5)m=compare(p1,p2);printf("the result is:%d\n",m);}3. 有一个班4个学生,5门课。(1)求第一门课的平均分;(2)找出有2门以上课程不及格的学生,?输出他们的学号和全部课程成绩和平均成绩;(3)找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编三个函数实现以上要求。58#include&stdio.h&main(){ int i,j,*pnum,num[4];float score[4][5],aver[4],*psco,*char course[5][10],*pcou=&course[0];printf("please input the course name by line:\n");
for (i=0;i&5;i++)scanf("%s",pcou+10*i);printf("please input stu num and grade:\n");
printf("stu num:\n");for(i=0;i&5;i++)printf("%s",pcou+10*i);printf("\n");psco=&score[0][0];pnum=&num[0];for(i=0;i&4;i++){ scanf("%d",pnum+i);for(j=0;j&5;j++)scanf("%f",psco+5*i+j);}pave=&aver[0];avsco(psco,pave);avcour1(pcou,psco);fail2(pcou,pnum,psco,pave);printf("\n");good(pcou,pnum,psco,pave);}avsco(float *psco,float *pave){ int i,j;float sum,for(i=0;i&4;i++){ sum=0;for(j=0;j&5;j++)59sum=sum+
(1)average=sum/5;
*(pave+i)=
(2)}}avcour1(char *pcou,float *psco){float sum=0, average1;for (i=0;i&4;i++)
(4)printf("the first course %s ,average is:%5.2f\n",pcou,average1);
}fail2(char *pcou,int *pnum,float *psco,float *pave){int i,j,k,printf("stu num:");for(i=0;i&5;i++)printf("%-8s",pcou+10*i);printf("average:\n");for(i=0;i&4;i++){ label=0;for(j=0;j&5;j++)
) label++;if (label&=2){ printf("%-8s",*(pnum+i));
for(k=0;k&5;k++)
printf("%-8.2f",
printf("%-8.2f\n",
);}}}good(char *pcou,int *pnum,float *psco,float *pave){ int i,j,k,printf("=======good students=======\n");printf("
stu num");60for (i=0;i&5;i++){ label=0;for (j=0;j&5;j++)
printf("%-8s",pcou+10*j);
average\n");for (i=0;i&4;i++){ label=0;for(j=0;j&5;j++)if(*(psco+5*i+j)&85.0) label++;if(label&=5||(*(pave+i)&90)){ printf("%-8d",*(pnum+i));for(k=0;k&5;k++)
);printf("
%-8.2f\n",*(pave+i));
}}}}4. 输入一个字符串,内有数字和非数字字符,如:a123x456 tab5876将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1],??。统计共有多少个整数,并输出这些数。
#include&stdio.h&main(){ char str[80],*int i,j,k,m,e10,digit,ndigit,a[10],*printf("\nplease input the string:\n"); gets(str);
pstr=&str[0];pa=&a[0];ndigit=0;i=0; j=0;
){ if ((*(pstr+i)&='0')&&(*(pstr+i)&='9'))
else{ if(j&0)61{ digit=*(pstr+i-1)-48;k=1;while(k&j){ e10=1;for (m=1;m&=k;m++)
(3)k++;}*pa=ndigit++;pa++;j=0;}}i++;}if(j&0){ digit=*(pstr+i-1)-48;k=1;while(k&j){ e10=1;for(m=1;m&=k;m++)
e10=e10*10;digit=digit+(*(pstr+i-1-k)-48)*e10;
(4)j=0;}printf("there are %d number digit \n",ndigit);
pa=&a[0];for(j=0;j&j++)printf("%d ",*(pa+j));62printf("\n");}四、编程题1、 输入三个整数,按由小到大的顺序输出。2、 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:①输入10个数;②进行处理;③输出10个数。3、 有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数,写一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。4、 写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。5、 写一函数,将一个3×3的矩阵转置。6、 在主函数中输入10个等长的字符串。用另一函数对它们排序。然后在主函数输出这10个已排好序的字符串。7、 编一程序,打入月份号,输出该月的英文月名。例如,输入"3",则输出"March",要求用指针数组处理。8、 写一函数完成查找串s2在串s1中第一次出现的位置。9、 写一函数完成将无符号十进制整数转换成十六进制字符表示并存于字符串数组中。10、 用指向指针的指针的方法对N个整数排序并输出。要求排序单独写成一个函数。N个整数和N在主程序中输入,最后在主函数中输出。63第八单元
结构体和共用体一、选择题1、 说明一个结构体变量时系统分配给它的内存是
。A. 各成员所需要内存量的总和B. 结构体中第一个成员所需内存量C. 成员中占内存量最大者所需的容量D. 结构中最后一个成员所需内存量2、 C 语言结构体类型变量在程序执行期间
。A. 所有成员一直驻留在内存中B. 只有一个成员驻留在内存中C. 部分成员驻留在在内存中D. 没有成员驻留在内存中3、 设有以下说明语句struct stu { int a ; float b ; } stutype ;则下面的叙述不正确的是
。A. struct 是结构体类型的关键字B. struct stu 是用户定义的结构体类型C. stutype 是用户定义的结构体类型名D. a 和b 都是结构体成员名4、 程序中有下面的说明和定义struct abc { int x;char y;}struct abc s1,s2;则会发生的情况是
。A. 编译出错B. 程序将顺利编译、连接、执行C. 能顺利通过编译、连接、但不能执行D. 能顺利通过编译、但连接出错5、 有如下定义struct person { char name[9]; int age;};struct person class[10]={ " Johu", 17,"Paul", 19,"Mary", 16};64 ,"Adam", 18根据上述定义,能输出字母M 的语句是
。 A. prinft(" %c\n",class[3].name); B. printf(" %c\n",class[3].name[1]); C. prinft(" %c\n",class[2].name[1]); D. printf(" %c\n",class[2].name[0]); A. 0
D. 6 main() { struct cmplx { int x; int y;} cnum[2]={1,3,2,7}; printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x);}
struct sk {int a ;float b ;}data ,*p ; 6、 下面程序的输出是
。 7、 设有如下定义: 若有p=&data ; ,则对data 中的a 域的正确引用是
。 A.(*p).data.a
B.(*p).a
C.p-&data.a
D.p.data.a A. 各成员所需要内存量的总和 B. 共用体中第一个成员所需内存量 C. 成员中占内存量最大者所需的容量 D. 共用体中最后一个成员所需内存量 A. 可以对共用体变量名直接赋值 B. 一个共用体变量中可以同时存放其所有成员 C. 一个共用体变量中不可以同时存放其所有成员 D. 共用体类型定义中不能出现结构体类型的成员 A. 所有成员一直驻留在内存中 B. 只有一个成员驻留在内存中 C. 部分成员驻留在在内存中 D. 没有成员驻留在内存中 A. enum a={one ,two ,three} ; B. enum a {one=9 ,two=-1 ,three} ; C. enum a={"one" ,"two" ,"three"} ; D. enum a {"one" ,"two" ,"three"} ;65 8、 当说明一个共用体变量时系统分配给它的内存是
。 9、 以下对C 语言中共用体类型数据的叙述正确的是
。 10、C 语言共用体类型变量在程序运行期间
。 11、以下对枚举类型名的定义中正确的是
。12、设有如下枚举类型定义:二、读程序题,写出程序运行的结果。 1、#include &stdio.h& struct abc { int a, b, }; main()66
enum language { Basic=3 ,Assembly ,Ada=100 ,COBOL ,Fortran} ; 枚举量Fortran 的值为
D. 103 A. 用typedef 可以定义各种类型名,但不能用来定义变量 B. 用typedef 可以增加新类型 C. 用typedef 只是将已存在的类型用一个新的标识符来代表 D. 使用typedef 有利于程序的通用和移植 A. typedef v1
B. typedef v2= C. typedefv1 int v3;
D. typedef v4:
typedef struct {
char ch[8]; }PER; 13、下面对的叙述中不正确的是
。 14、以下各选项企图说明一种新的类型名,其中正确的是
。 15、设有以下说明语句 则下面叙述中正确的是
。 A. PER 是结构体变量名
B. PER 是结构体类型名 C. typedef struct 是结构体类型
D. struct 是结构体类型名
struck sk { } int *p; 16、设有如下定义: 若要使p 指向data 中的a 域,正确的赋值语句是
。 A. p=&a;
B. p=data.a;
C. p=&data.a;
D. *p=data.a;2、
5、 { struct abc s[2]={{1,2,3},{4,5,6}};
t=s[0].a+s[1].b;
printf("%d \n",t); } #include &stdio.h& struct stu {char name[10];}; void fun(struct stu *p) { printf("%s\n" ,(*p).name); } void main() { struct stu students[3]={{9801,"Zhang",20} ,{9802,"Wang", 19} ,
{9803,"Zhao",18} };
fun(students+2); } #include &stdio.h& void main() { enum team { my ,your=4 ,his ,her=his+10};
printf("%d%d%d%d\n",my,your,his,her); } #include &stdio.h& struct st {int *y;} * int dt[4]={10,20,30,40}; struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3] }; void main() { p=
printf("%d, ", ++p-&x);
printf("%d, ",(++p)-&x);
printf("%d\n",++(*p-&y)); }676、7、#include &stdio.h& union myun {
int x, y, } } void main() {
a.u.x=4; a.u.y=5; a.u.z=6;
printf("%d\n",a.u.x); } #include &stdio.h& struct STU { char num[10]; float score[3]; }; void main() {
struct STU s[3]={{“20021”,90,95,85},{“20022”,95,80,75},
{“20023”,100,95,90}},*p=s; float sum=0;
for(i=0;i&3;i++)
sum=sum+p-&score[i];
printf(“%6.2f\n”,sum); } #include &stdio.h& #include &stdlib.h& struct NODE { struct NODE * }; void main() { struct NODE *p,*q,*r;
p=(struct NODE*)malloc(sizeof(struct NODE));
q=(struct NODE*)malloc(sizeof(struct NODE));
r=(struct NODE*)malloc(sizeof(struct NODE));
p-&num=10; q-&num=20; r-&num=30;688、p-&next=q;q-&next=r;
printf(“%d\n”,p-&num+q-&next-&num); } #include &stdio.h& typedef union student {
char name[10];
float score[4]; } STU; void main() {
printf(“%d\n”,sizeof(a)); }三、填空题和
。2. 编写一个程序,首先定义一个复数数据类型,即结构类型。然后按照复数的运算规则进行计算,并按照复数表示的格式进行输出。main(){ struct complex{}x,y,s,p;scanf("%d%d",&x.re,&x.im);scanf("%d%d",&y.re,&y.im);
(2)printf("
sum=%5d+i*%5d\n",s.re,s.im);
(3)p.im=x.re*y.im+x.im*y.printf("product=%5d+i*%5d\n",p.re,p.im);69 1. 在C语言中,要定义一个结构体类型的变量,可采用三种方法,即
、}3. 有n个学生,每个学生的数据包括学号(num),姓名(name[20]),性别(sex),年龄(age),三门课的成绩(score[3])。要求在main函数中输入这n个学生的数据,
然后调用一个函数count,在该函数中计算出每个学生的总分和平均分, 然后打印出所有各项数据(包括原有的和新求出的)。struct student{char name[20];float score[3];};
void count(
b[],int n){ int i,j;for(i=0;i&n;i++)
(2)for(j=0;j&3;j++)
b[i].total=
(4)}}void main(){flaot s1,s2,s3;
(5)struct student a[3];for(i=0;i&3;i++){ scanf("%d%s %c%d%f%f%f",&a[i].num,a[i].name,&a[i].sex,&a[i].age,&s0,&s1,&s2);a[i].score[0]=s0;a[i].score[1]=s1;a[i].score[2]=s2;printf("%d %s
%c %d %4.1f %4.1f %4.1f\n",a[i].num,a[i].name,a[i].sex,a[i].age,a[i].score[0],a[i].score[1],a[i].score[2]);70}count(a,3);printf("==============================================\n");printf("NO name sex age score[0] score[1] score[2] total ave\n");
for(i=0;i&3;i++)printf("%d
%5.1f %5.1f %5.1f %5.1f\n",
a[i].num,a[i].name,a[i].sex,a[i].age,a[i].score[0],a[i].score[1],a[i].score[2],a[i].total,a[i].ave);}4. 将上题改为用指针方法处理,即用指针变量逐次指向数组元素,然后向指针变量所指向的数组元素输入数据,并将指针变量作为函数参数将地址值传给count函数, 在函数count中作统计,再将数据返回到main函数,在main函数中输出。struct student{char name[20];float score[3];}a[3]; void count(
,int n){ int i,j;
(3)for(j=0;j&3;j++)b-&total=
b-&ave=b-&total/3;}}main(){float s0,s1,s2;struct student *p;71for(p=a;p&a+3;p++){scanf("%d%s %c%d%f%f%f",&p-&num,p-&name,&p-&sex,&p-&age,&s0,&s1,&s2);
p-&score[0]=s0; p-&score[1]=s1; p-&score[2]=s2;printf("%d %s
%c %d %4.1f %4.1f %4.1f\n",p-&num,p-&name,p-&sex,
p-&age,p-&score[0],p-&score[1],p-&score[2]);}
(5)count(p,3);printf("=============================================\n");printf("NO
name sex age score[0] score[1] score[2] total ave\n");
)printf("%d
%5.1f %5.1f
%5.1f %5.1f %5.1f\n",p-&num,p-&name,p-&sex,p-&age,p-&score[0],p-&score[1],p-&score[2],p-&total,p-&ave);}5. 有四名学生,每个学生包括学号、姓名、成绩, 要求找出成绩最高者的学号、姓名和成绩(用指针方法)。main(){ struct student{char name[20];};struct student stu[4];struct student *p;int i,temp=0;;
){ scanf("%d%s%f",&p-&num,p-&name,&s0);p-&score=s0;}
(3)i&4;i++)if(stu[i].score&amax){amax=stu[i].temp=i;}72(4)printf(" NO: %d\n name: %s\n score: %4.1f\n",p-&num,p-&name,p-&score);}6. 有四名学生,每个学生包括学号、姓名、成绩, 要求按学生成绩由高到低进行排序(要求用指针数组方法)。struct student{char name[10];};int n=4;main()
stu[4]={1,"sdff",34.5,2,"hfhf",67.0,3,"dgdg",90.0,4,"yd",85.0};
struct student *p[4],*int i,j;for(i=0;i&4;i++);printf("*********************************\n");for(i=0;i&4;i++)printf("%4d %-10s %7.1f\n",stu[i].num,stu[i].name,stu[i].score);for(i=0;i&n-1;i++)for(j=i+1;j&n;j++)
){ pp=p[i];p[i]=p[j];p[j]=}printf("*********************************\n");
)printf("%4d
%-10s %7.1f\n",p[i]-&num,p[i]-&name,p[i]-&score);printf("*********************************\n");}7. 打鱼还是晒网中国有句俗语是叫“三天打鱼两天晒网”。某人从日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是在“打鱼”, 还是在“晒网”。解题过程可分三步:(1) 计算从日开始到指定日期一共有多少天;73注意:要判断经历年份中是否有闰年。如果:年能被4除尽且不能被100除尽;或能被400除尽,则是闰年,否则不是闰年。(2) 由于“打鱼”和“晒网”的周期为5天,所以将算出的天数用5去除;(3) 根据余数判断他是在“打鱼”还是在“晒网”;若余数为 1、2、3,则他是在打鱼,否则是在“晒网”。struct date{};main(){ struct date today,int yearday,year,scanf("%d%d%d",&today.year,&today.month,&today.day);term.month=12;term.day=31;for(yearday=0,year=1990;year&today.year++){ term.year=
yearday+=days(term); }
yearday+= (1)
(2)if(day&0&&day&4) printf("he was fishing at that day.\n");(3)
printf("he was sleeping at that day\n");}days(struct date day){ static int day_tab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}};int i,lp=day.year%4==0&&day.year%100!=0||day.year%400==0;for(i=1;i&day.i++)day.day+=day_tab[lp][i];(4)
(day.day);}8. 已有a,b两个按学号升序排列的链表,每个链表中的结点包括学号、成绩。要求把两个链表合并, 按学号升序排列。#include "stdio.h"74欢迎您转载分享:
更多精彩:

我要回帖

更多关于 mysql语句中使用变量 的文章

 

随机推荐