第2周:(6)
1、分别在Win-TC和VC++6.0中运行以下程序,观察输出结果是否相同?并简要说明原因。
#include <stdio.h>
void main()
{
printf("int型占%d个字节;\n",sizeof(int));
printf("float型占%d个字节;\n",sizeof(float));
printf("double型占%d个字节;\n",sizeof(double));
}
2、有两个变量a和b,它们的值分别由键盘输入。编程计算并输出a与b的和、差、积、商、a除以b的余数、a b的值。(要求输入、输出有明确的示意)
3、由键盘输入一个圆柱体的底面半径r和高度h的值,编程计算并输出该圆柱体的体积。(注意:体积=底面积*高,要求将圆周率定义为符号常量PI)
4、编写一个程序,要求从键盘输入一个3位整数,然后将它们逆序输出。(比如:输入123,输出321。提示:关键是想办法分别提取百位、十位和个位上的数字!!)
5、修改以下程序中的错误(保存为error2_1.c),并将调试的信息填入下表中。 1 #include<stdio.h>
2 Main()
3 {
4 int x=1;y;
5
6 y=x++;
7 printf("y=%d ",y)
8 int z;
9
10 z=++x;
11 print("z=%d\n ,z);
12 }
程序中存在的错误及其相关信息一览表
行号
错误类型
错误提示信息
错误的原因及修改方案
6、编程计算下面数学表达式的值(课外完成!)
(1)(2)25×(3)ln(103.5+2)
(4)y+z%5*(int)(x+y)/2%4 (其中x=2.7,y=4.5,z=8)
7、在Win-TC中输入并运行下面程序,对照程序分析运行结果:(课外完成!)
(1) 将一个大于32767的长整型数赋给整型变量,会得到什么结果。
(2) 将一个负整数赋给一个无符号的变量,会得到什么结果。
(3) 将一个字符型变量赋给一个整型变量,会得到什么结果。
程序如下:
#include <stdio.h>
main()
{
int a,b;
long d,e;
unsigned f,g;
char c;
a=100;
b=-100;
c='a';
d=50000;
e=32767;
printf("%d,%d\n",a,b);
printf("%ld,%ld\n",d,e);
printf("%c,%d\n",c,c);
f=a;
g=b;
printf("%u,%u\n",f,g);
a=c;
printf("%d,%d\n",a,c);
a=d;
b=e;
printf("%d,%d\n",a,b);
}
8、分析教材P35第23~26题所给出的程序段运行结果,并上机验证之(课外完成!)
第3周:(1、2)
1、编程实现:从键盘输入三角形的三边长a,b,c的值,计算并输出三角形的面积area,输入输出参考示例如下:
请输入三个边长a,b,c的值:
a=3.4,b=4.5,c=5.6
面积area=7.649173
2、编程求一元二次方程ax2+bx+c=0的实数根x1,x2,a,b,c的值由键盘输入,设b2-4ac>0。输入输出参考示例如下:
请输入三个系数a,b,c的值:
a=1,b=3,c=2
x1=-1.00
x2=-2.00
3、编程实现;从键盘输入一个大写字母,输出该字母及其对应的ASCII码值,同时输出其小写字母及其对应的ASCII码的值;
4、编辑并运行下面程序:
#include <stdio.h>
main()
{ int a,b,c;
a=getchar();
b=getchar();
c=getchar();
printf("a=%d b=%d c=%d\n",a,b,c);
printf("a=%c b=%c c=%c\n",a,b,c);
}
运行程序后如果输入: 1【Enter】
ab【Enter】
则本程序的输出结果为,试用其他输入数据验证你的分析结果。
5、以下C程序的功能是:从键盘依次输入4个整数,计算并输出这4个数的平均值。
#include <stdio.h>
main()
{ int a,b,c,d,av;
printf(" Input a,b,c,d: ");
scanf(" %d,%d,%d,%d",&a,&b,&c,&d);
av=(a+b+c+d)/4;
printf("av=%f\n",av);
}
【思考验证】:观察以上运行结果,想一想为什么?将最后一句中的“%f”改为“%d”,观察结果有什么变化?如果想使计算结果为实数,如何修改程序?如果想计算4个实数的平均数,如何修改程序?
第4周:(选择题、鸡兔、加密(转盘))
一、单选题(每题4分,共40分)
1、设 int a=5; 表达式a+=a-=a*=a的值是( C )
A. 10 B. 25 C. 0 D. 50
2、设 int a=12; 表达式a*=2+3的值是( D )
A. 0 B. 12 C. 27 D. 60
3、若x,y均定义为float型变量,则以下不合法的赋值语句是( B )
A. ++x; B. y=(x%4); C. x*=y+5; D. x=y=0;
4、设有定义:int x;char y; 执行以下语句:
scanf(“%3d%3c“,&x,&y) ;
printf(“%d,%c“,x,y) ;
若从键盘上输入12345,abc,则输出结果是( C )
A.123,abc B. 123,4 C.123,a D. 12345,abc
5、若已定义x和y为double类型,则表达式x=1, y=x+3/2 的值是( B )
A. 1.0 B. 2.0 C. 2 D. 2.5
6、已知int i,a;执行语句i=(a=2*3,a*5),a+6;后,变量a,i的值分别是( A )
A. 6,30 B. 30,30 C. 36,6 D. 30,36
7、已知字符 ‘b’ 的ASCII码值为98,执行语句printf ("%d,%c", ’b’,’b’+1 ) ;的输出为( C )
A. 98,b B. 98,99 C. 98,c D. 类型不匹配
8、下面( C ) 是合法的变量名
A. line# B. 3pai C. str_1 D. int
9、有定义int j,i=1;,执行语句j=-i++;后,j的值是( D )
A. 1 B. 2 C. -2 D. -1
10、 以下叙述中正确的是( B )
A. C程序中的main()函数必须位于程序的最前面
B. C语言本身没有提供输入输出语句
C. C程序中每行只能写一条语句
D. 编译C源程序时可以发现注释中的拼写错误
二、编程(每题20分,共60分)
1、鸡兔同笼问题。已知鸡兔总头数为h,总脚数为f,编程求笼中鸡、兔各有多少只。(要求:h和f的值由键盘输入, h为30,f为90)
输入输出示例:
输入鸡兔的总头数h和总脚数f:
h=30,f=90
鸡只,兔 只
2、编写一个程序,根据存款本金money、存款年数year和年利率rate来计算到期利息interest,输出时保留2位小数。计算公式为:
interest=money×(1+rate)year-money。
输入输出示例:
Input money,year and rate:1000,3,0.025
Interest =
3、编写一个程序,用getchar()函数接收从键盘输入的3个数字字符分别赋值给字符变量c1,c2,c3,以这三个字符对应的一个三位整数作为度数,输出其正弦函数的值。(注意sin函数的单位为弧度P320)
输入输出示例:
输入3个数字字符:123
sin(123) =
4、a
b
c
d
z
y
小写字母转盘:对用户从键盘输入的任意一个小写字母,输出该字母后的第2个字母,如输入a,则输出c;输入b,则输出d;以此类推,输入y,则输出a。
第五周:(3、扩展题、二元一次方程)
1. 编写程序计算下面分段函数的值:
2x+5 (x<0)
f(x) = x2-x+3 (0≤x<10)
x3-7x (x≥10)
具体要求如下:
(1) 用if-else if语句实现分支,自变量和函数值均用双精度类型。
(2) 自变量用scanf函数输入,给一些输入提示。
(3) 分别输入三种区间中x的值,检查输出函数值是否正确。
2. 编写程序判断用户输入的字符是数字字符、字母字符还是其他字符。 具体要求如下:
(1) 自变量用scanf函数输入,给一些必要的输入提示。
(2) 用关系表达式和逻辑表达式来实现条件判断。
(3) 分别输入三种不同的字符,检查输出信息是否正确。
(选做)采用附录D中有关字符函数来实现本问题的条件判断。
3、编程:按教材P82 【训练3.3】的要求编写判断闰年的程序(暂不用嵌套语句!)
闰年的条件为:年份能被4整除但不能被100整除,或者年份能被400整除。
4、编程:教材P84 【训练3.4】的扩展题:根据图3.17编程实现相应的判断。
5、编程:教材P85习题12
第6周:(4)
1、先自行分析以下程序运行结果,然后编辑并运行程序,验证自己分析的结果是否正确,如果自己分析的不正确,想想自己错在何处。
⑴ #include "Stdio.h"
main()
{ int a=10;
switch(a)
{ case 10:case 9:a++;
case 8:case 7:a+=a;break;
case 6:a+=3;
default:a+=4;}
printf("a=%d\n",a);
}
自己分析的结果:
运行程序后的结果:
⑵#include "stdio.h"
main()
{ int i,x;
for(i=1;i<=100;i++)
{ x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf("%3d",x);
}
}
自己分析的结果:
运行程序后的结果:
2. 编程实现:任意输入一个百分制成绩,输出成绩等级A、B、C、D。当输入的分数小于0分或大于100分时,显示出错信息;在85~100分时为A,70~84分为B,55~69分为C,55分以下为D。(提示:综合应用if和switch结构实现,参考教材P71例题3.13)
3、编程实现:从键盘任意输入一个年份year、月份month,计算并输出该年该月共有多少天。
提示:本题要综合应用到if、switch结构(用switch(month)给出单、双月以及2月的天数)
4、输入一个实数x和一个正整数n,编程计算xn(不允许调用pow函数求幂,参考教材例题4.4)
5、编程输出所有十位或个位是2的所有三位数。(参考教材P91例题4.3)
选做题:
1、对任意输入的一个日期(年year、月month、日day),计算并输出该年该月该日是这一年的第几天。
提示:本题要综合应用到if、switch结构
2、从键盘输入10个学生的成绩,编程输出各个成绩、平均成绩和其中的最高分。 提示:参考教材例题4.2、4.6
第7周:(1、2、3、4、5)
1、先自行分析以下程序运行结果,然后编辑并运行程序,验证自己分析的结果是否正确,如果自己分析的不正确,想想自己错在何处。
#include <stdio.h>
void main()
{int i,j,k;
for (i=0;i<=3;i++)
{for (j=0;j<=2-i;j++)
printf(" ");
for (k=0;k<=2*i;k++)
printf("*");
printf("\n"); }
}
自己分析的结果:
运行程序后的结果:
2. 编写程序,求满足2+4+6+…….+n>1000时的n的最小值及其和值。 提示:参照P125 习题13
3、编写程序,输入多个两位正整数(敲回车键结束输入),统计出其中小于等于
40、大于40小于等于70、大于70的数据个数。
4、任意输入一串字符(敲回车键结束输入)。分别统计出其中英文大写字母、英文小写字母、空格、数字和其它字符的个数。
提示:先定义char c;用循环while((c=getchar())!=’\n’)接收一行字符(敲回车表示字符输入结束,对输入的每一个字符进行判断并累加个数) (参考教材P120 训练4《.2中的相关提示和说明)
5、编写一个C程序,对用户任意输入的整数,判断该数是否为素数。要求:用户每输入一个整数,立即给出该数是否是素数的信息,然后等待用户重新输入一个整数继续判断,直到输入一个-1时结束。
选做题:
(P121训练4.3)编写用人机对话形式进行加、减、乘、除运算的程序。用户每输入一次运算数和运算符,系统输出相应的计算结果。当输入的运算符为“#”时结束。
提示:本题要综合应用到while和switch结构
第8周:(2、3、4、6(部分))
1、编程输出如下图所示的下三角形九九乘法表。(参考补充例题)
2、编程:输入2个正整数m和n(m>1,n<=500)输出m和n之间的所有素数,要求每行输出10个。(参考P108 例题4.19)
3、将100元人民币兑换成若干张20元、10元和5
元人民币,要求每种面值的
至少有一张,编程计算并输出如下图的所有兑换方案(参考P125 习题15)
4、编程:输入一个整数,求它的位数以及各位数字之和,例如,若输入123,
则输出“123的位数为3,各位数字之和为6”。(部分参考P127习题22中的部
分代码)
选做题:
5、编写一个猜数游戏程序:首先由计算机产生一个1~100之间的随机整数(提
示:可以用附录中的随机函数rand()),然后用户输入所猜的数,如果没有
猜对,每次都给出“大了”或“小了”的提示,最多允许猜10次,如果10
次都没有猜对,则给出相应提示并结束猜数;如果猜对了,则显示“恭喜你
猜对了!”,并给出总共用了多少次才猜对的信息。
6、编程验证哥德巴赫猜想:任何一个大于6的偶数均可表示为2个素数之和。
如,6 = 3 + 3,8 = 3 + 5,10 = 3 + 7,10 = 5 + 5,……..20 = 3 + 17,20 = 13 +
7等。编程将6~100之间的偶数都表示为2个素数之和。
第9周:(选择题、Y N )
一、单选题(每题4分,共40分)
1、若有定义:int a=1,b=2,c=3;则执行printf(“%d”,c>b>a);的输出结果为 ( )
A. 1 B. 2 C. 3 D. 0
2、 当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是( )
A. c=b=a; B. (a=c)‖(b=c); C. (a=c)&&(b=c); D. a=c=b;
3、若变量c为char类型,能正确判断出c为小写字母的表达式是( )
A. 'a'<=c<= 'z' B. (c>= 'a')||(c<= 'z')
C. ('a'<=c)and ('z'>=c) D. (c>= 'a')&&(c<= 'z')
4、若i是整型变量,执行以下循环语句后输出结果是( )
for(i=1;i<=3;i++)
{ if ((i%2) printf("*");
else continue;
printf("#");}
A. **## B. ##** C. *#*# D. #*#*
5、有以下程序段:
int k=0;
while(k=10) k++;
while的循环执行的次数是( )
A. 无限次 B. 有语法错,不能执行
C. 一次也不执行 D. 执行一次
6、将整型变量a、b中的较大值为变量c赋值,下列语句中正确的是( )
A. c=(a>b)?a,b; B. c=(a>b)?a:b;
C. c=if(a>b)a else b; D. (a>b)?c=a:c=b;
7、执行语句for(i=1;i++<4; );后变量i的值是 ( )
A. 3 B. 4 C. 5 D. 不定
8、求[1,100]区间内的整数的累加和,下列程序中有一个不能够完成规定的功能,是( )
A) s=0;i=0; B) s=0;i=1;
while (i<=100) while (i++<100)
s+= i++; s+=i;
C) s=0;i=0; D) s=0;i=0;
while (i<100) while (++i<=100)
s+= ++i; s+= i;
9、若有说明 int x,y; 并有如下的函数。则不能实现计算该函数值的程序段是( )
>0
A) y=-1; B) if (x<0) y=-1;
if (x!=0) else if(x==0) y=0;
if (x>0) y=1; else y=1;
else y=0;
C) y=0; D) if (x>=0)
if (x!=0) if (x>0) y=1;
{ if (x>0) y=1; else y=0;
else y=-1;} else y=-1;
10、 有以下程序段,此程序中的循环在满足什么条件时结束?( )
int n=0,p;
do
{ scanf("%d",&p);
n++;
}
while(p!=12345&&n<3);
A. p不等于12345且n小于3 B. p等于12345且n不小于3
C. p不等于12345或n小于3 D. p等于12345或n不小于3
第10周:(1、2、3、4、7)
1、分析以下程序执行的结果:
#include<stdio.h>
main()
{ int a[]={1,2,3,4},i,j,s=0;
j=1;
for(i=3;i>=0;i--)
{ s=s+a[i]*j;
j=j*10;
}
printf(“s=%d\n”,s);
}
上机前分析结果:
实际上机结果:
2、程序填空及调试:以下程序的功能是:对一个已排好序的10个数,从键盘任意输入一个数插入,使之仍然有序。(注意要利用设置断点、单步运行的方法调试程序)
#include <stdio.h>
void main()
{ int a[11]={1,4,6,9,13,16,19,28,40,100};
int num,i,j;
printf("array a:\n"); //依次输出原数组中的各个数
for (i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
printf("insert data:"); //输入待插入的数
scanf("%d",&num);
for (i=0;i<10;i++)
if (a[i]>num)
{ for (j=9;j>=i;j--)
; //填空后设置断点以查错
a[i]=num;
break;
}
else
a[10]= //填空后设置断点以查错
printf("Now array a:\n");
for (i=0; printf("%5d",a[i]);
printf("\n");
}
3、编程:定义一个整数数组a[10]并输入10个整数,输出其中的最大值、最小值及其所在的下标。
4、编程:从键盘接受一个字符串,判定输入的字符串是否为回文(所谓回文是
指正序和逆序排列结果是同样的,例如字符串abcdEdcba为回文)。
5、编程:从键盘输入一串字符(长度不超过80),统计出各字母出现的次数(不区分大小写)。
选做题
6、设有下列矩阵:
12
6
10
1437xxxxxxxxxxxx3 A =
编写程序,用二维数组存储矩阵元素,从键盘输入数据,将矩阵转置后按行输出。
7、编程输出杨辉三角形(输出6行,如下图所示)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
第12周:(1、3、4)
1、程序改错、调试:
以下程序功能要求为:输入一串字符(少于80个字符,以回车结束),把字符串中所有数字字符转换为整数,去掉其它字符。(如:若字符串为3a56bc,输出为356)。请修改、完善并调试下列程序,以实现所要求的功能。(注意要利用设置断点、单步运行的方法调试程序)
#include<stdio.h>
#include<string.h>
main()
{ int i,s;
char str[80];
i=0;
while((str[i]=getchar())!='\n')
i++;
str[i]='\0' ;
for(i=0;i<80;i++)
if(str[i]<='0'||str[i]>='9')
s=s*10+str[i];
printf("%d\n",s);
}
2、编程:分别用选择法和冒泡法实现对任意输入的10个不同的整数按从小到大排序。要求:定义一个长度为11的整型数组a[11],利用其中元素a[1] ~a[10]存放10个数。
扩展:如果将需排序的整数的个数定义为符号常量N,则以上两种排序程序要如何调整才能实现对任意个整数排序?
3、编程:将由键盘输入的一个十进制正整数转换为二进制数。(P164 习题13) (注意:尽量先不看答案!!!)
4、P162训练5.4 分别计算5x5矩阵的两条对角线元素之和,要求每行每列元素值由随机函数rand产生(参见P161的说明),且为1~20中的整数。
5、编程(选做题):P161训练5.2 掷100次骰子,统计各点数出现的次数,并输出出现次数最多的点数。(注意:认真阅读P161的相关说明!!!)
第13周:(2、3、4)
1、在VC++环境中运行下面的程序,通过回答以下问题,理解指针的概念。 #include<stdio.h>
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10};
int *p;
for(p=a;p<a+10;p++)
{ printf("address=%x\t",p);
printf("value=%d\n",*p);
}
printf("%d\t",p);
printf("%d\t",*p);
}
⑴编译、连接无误后,用单步执行的方式观察指针变量值的变化规律以及指针变量所指向的数据;
⑵修改指针变量值的输出格式,即把程序中的printf("address=%x\t",p);改为printf("address=%d\t",p);,重新运行程序,观察结果,这样是否更清楚?(提示:格式符%x是以16进制整数输出,\t是转义字符)
⑶程序运行后最后一行显示的数据是哪个单元的数据?画一张图来看看;能否用*p=10;对这个单元赋值?
⑷将程序中所有的int换成float,数据输出格式改为%f,观察指针变量的变化规律;这次相邻地址值相差多少?通过以上,你对指针变量的含义理解了吗?指针变量++(如p++)是指针地址值加1吗?
⑸如果只将程序中的float *p;改为int *p;编译出现什么警告?说明什么?
2、程序填空:以下程序的作用是扫描字符数组a和字符数组b,并输出对应位置相同的字符。
#include<stdio.h>
main()
{ char a[10]="language",b[]="programe";
char *p1,*p2;
int k;
p1=a;
p2=b;
for(k=0;k<7;k++)
)
printf("%c\n",*(p1+k));
}
3、编程:使用指针实现打印一维整型数组所有元素的操作(假定数组长度为12)。 要求:每行打印4个元素。
4、编程:使用指针实现对输入的一行文字,统计出其中大写、小写字母、空格以及数字字符的个数。
第14周:(2、3、4、5)
1、分析并写出以下程序的运行结果(上机运行以验证自己的分析!))
⑴(提示:*与++的混合使用)
#include<stdio.h>
main()
{ int a[]={1,3,5,7,9},*p=a;
printf("%d",(*p++));
printf("%d",(*++p));
printf("%d\n",(*++p)++);
}
上机前分析结果: 实际上机结果:
⑵(提示:指针数组、指向指针变量的指针,画图理解!)
#include<stdio.h>
main()
{ char *str[]={"English","Math","Music","Computer"},**q;
int i;
q=str;
for(i=0;i<5;i++)
printf("%s\n",*(q++));
}
上机前分析结果: 实际上机结果:
2、程序填空:以下两段程序是分别用数组、指针来实现的统计一个字符子串sunstr在一个字符串str中出现的次数(如:子串boy在字符串that boy is a good boy!中出现2次)。请填空以实现所要求的功能。
⑴(用数组实现)
#include<stdio.h>
main()
{ char str[100],substr[10];
int i,j,k,count=0;
printf("请输入字符串:str=");
gets(str);
printf("请输入字符子串:substr=");
gets(substr);
,k=0;substr[k]==str[j]; j++, k++)
if(substr[k+1]=='\0')
{ ;
break;
}
printf("%d",count);
}
⑵(用指针实现)
#include<stdio.h>
main()
{ char str[100],substr[10],*p=str,*q=substr,*w;
int i,j,k,count=0;
printf("请输入字符串:str=");
gets(p);
printf("请输入字符子串:substr=");
gets(q);
;p++)
,q=substr;*q==*w;q++,w++)
if(*(q+1)=='\0')
{ ;
break;
}
printf("字符子串%s出现了%d次\n",substr,count);
}
3、用指针编程实现:按照字典顺序比较任意两个字符串s1和s2,若两串相等,结果为0;若s1>s2,结果为1,否则结果为-1(不允许用函数strcmp()!)
4、编程:若有两个已经按升序排列的数列a:1,7,9,11,13,15,17,19和数列b:2,4,6 ,8,10,现要将这两个数列合并存放到c数列中,插入后的c数列仍按升序排列,要求通过指针完成。(参考教材P193训练6.1的扩展)。
5、(选做:用指针!)编程:有n个人围成一圈,按顺序从1到n编号。从第1个人开始报数(从1到5报数),凡报到5的人退出圈子,问最后留下来的是原来第几号。
输入输出实例:
请输入总人数: n=7
最后留下来的是:NO.6
第15-16周:(1、3、4、5)
1、程序调试:
以下程序的功能是从键盘输入一个正整数n,通过定义并调用自定义的函数fact(n)计算出n的阶乘n!。程序中存在错误,请按照注释要求设置断点,并利用单步调试进入函数和跳出函数的方法实现所要求的功能。
#include <stdio.h>
main()
{
int n;
double f;
printf("Input n: ");
scanf("%d", &n);
f = fact(n); /*调试时设置断点*/
printf("%d!=%f\n", n, f);
} /*调试时设置断点*/
double fact(int m)
{
int i;
double product;
for ( i = 1; i <= m; i++ )
product = product * i;
return product; /*调试时设置断点*/
}
2、改写程序:
以下程序是输出一个由四行*号构成的三角形,如下图所示(注意:该三角形的顶点在第四列)。试编写一个能输出由任意行*构成的三角形的自定义函数void sjx(int m),要求:在主函数中指定三角形的行数n,通过调用这个函数,输出一个由n行构成的三角形,并且三角形的顶点在第n列。
main()
{ int row,col; /*row为行,col为列*/
for (row=1;row<=4;row++)
{ for (col=1;col<=4-row;col++) ‘注意这里4的作用!!!! printf(" ");
for (col=1;col<=2*row-1;col++)
printf("*");
printf("\n");
}
}
3、编程:
定义一个用于判断一个整数是否为素数的函数int isprime(int n)。通过调用该函数来统计并输出任意给定的两个整数m和n(其中m≥1,n≤500)之间的素数的个数以及这些素数的和。
4、编程 编写程序,计算下面公式并输出结果。Cn?mn!(n?m)!m!
要求:
(1)分别编写一个求阶乘n!的函数fact(n)、一个求组合数函数cnm(n,m);
(2)编写主函数,由键盘输入n和m,通过嵌套调用(1)中的函数完成计算。
(3)输入n和m要给出提示,并检查n和m的合理性,不合理的输入应输出错误信息,并不再进行计算。
(4)运行程序并检验程序是否正确
5、编程:
参照教材P218例题7.14,分别用选择法、冒泡法编写一个对任意n个整数按升序排序的函数void mysort(int a[],int n)或void mysort(int *p,int n)。在主调函数中调用该排序函数,对指定的若干个整数进行排序。
答案:
第2周:
#include<stdio.h>
#include<math.h>
main()
{ int a,b,he,ca,ji,yu,mi;
float sang;
printf("请输入两个数a,b的值:");
scanf("%d%d",&a,&b);
he=a+b;
ca=a-b;
ji=a*b;
sang=a*1.0/b;
yu=a%b;
mi=pow(a,b);
printf("a+b=%d\n",he);
printf("a-b=%d\n",ca);
printf("a*b=%d\n",ji);
printf("a/b=%lf\n",sang);
printf("a%%b=%d\n",yu);
printf("a^b=%d\n",mi);
}
#include<stdio.h>
#define PI 3.1415926
main()
{ float r,h,v;
printf("Input r and h:");
scanf("%f%f",&r,&h);
v=PI*r*r*h;
printf("体积v=%f\n",v);
}
#include<stdio.h>
main()
{
int x,g,s,b;
printf("输入一个三位整数\nx="); scanf("%d",&x);
b=x/100;
s=x/10%10;
g=x%10;
printf("逆序输出为%d%d%d\n",g,s,b); }
#include<stdio.h>
main()
{
int x=1,y;
int z;
y=x++;
printf("y=%d ",y);
z=++x;
printf("z=%d\n" ,z);
}
第3周:
#include<stdio.h>
#include<math.h>
main()
{ double a,b,c,area,s;
printf("请输入三个边长a,b,c的值:\n");
scanf("a=%lf,b=%lf,c=%lf",&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf("面积 area=%lf\n",area);
}
#include<stdio.h>
#include<math.h>
main()
{ float a,b,c,delt,x1,x2;
printf("请输入三个系数a,b,c的值:\n");
scanf("a=%f,b=%f,c=%f",&a,&b,&c);
delt=sqrt(b*b-4*a*c);
x1=((-b)+delt)/(2*a);
x2=((-b)-delt)/(2*a);
printf("x1=%.2f\nx2=%.2f\n",x1,x2);
}
#include<stdio.h>
main()
{ char ch;
printf("请输入一个大写字母:");
scanf("%c",&ch);
printf("大写字母%c的ASCII码值为%d\n",ch,ch);
printf("小写字母%c的ASCII码值为%d\n",ch+32,ch+32); }
#include <stdio.h>
main()
{ int a,b,c;
a=getchar();
b=getchar();
c=getchar();
printf("a=%d b=%d c=%d\n",a,b,c);
printf("a=%c b=%c c=%c\n",a,b,c);
}
#include <stdio.h>
main()
{ int a,b,c,d,av;
printf(" Input a,b,c,d: ");
scanf(" %d,%d,%d,%d",&a,&b,&c,&d); av=(a+b+c+d)/4;
printf("av=%f\n",av);
//printf("av=%d\n",av);
}
#include<stdio.h>
main()
{
int h,f,ji,tu;
printf("输入鸡兔的总头数h和总脚数f:"); scanf("h=%d,f=%d",&h,&f);
ji=(4*h-f)/2;
tu=(f-2*h)/2;
printf("鸡%d只,兔%d只\n",ji,tu); getch();
}
#include<stdio.h>
#include<math.h>
main()
{
int year;
float money,rate,interest;
printf("Input money,year and rate:");
scanf("%f,%d,%f",&money,&year,&rate); interest=money*pow(1+rate,year)-money; printf("interest=%f\n",interest);
getch();
}
#include<stdio.h>
#include<math.h>
main()
{
char c1,c2,c3;
int dushu;
c1=getchar();
c2=getchar();
c3=getchar();
dushu=(c1-'0')*100+(c2-'0')*10+(c3-'0');
printf("sin(%d)=%lf\n",dushu,sin(dushu*3.1415926/180));
getch();
}
#include<stdio.h>
#include<conio.h>
main()
{
char c;
printf("请输入一个小写字母:"); c=getchar();
c=(c-'a'+2)%26+'a';
printf("输出为%c",c);
getch();
}
第5周:
#include <stdio.h>
main()
{
double x,y;
printf("请输入变量x的值:");
scanf("%lfx",&x);
if(x<0)
y=2*x+5;
else if(x<10)
y=x*x-x+3;
else
y=x*x*x-7*x;
printf("\ny的值为:%.2lf",y);
}
#include<stdio.h>
main()
{ char ch;
printf("请输入一个字符:");
scanf("%c",&ch);
if (ch>='0'&&ch<='9')
printf("是数字字符\n");
else if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') printf("是字母字符\n");
else
printf("是其它字符\n");
}
#include<stdio.h>
#include<ctype.h>
main()
{ char ch;
printf("请输入一个字符:");
scanf("%c",&ch);
if (isalpha(ch))
printf("是字母字符\n");
else if (isdigit(ch))
printf("是数字字符\n");
else
printf("是其它字符\n");
}
#include<stdio.h>
main()
{ int year,flag;
printf("请输入一个年份:");
scanf("%d",&year);
if(year%400==0) flag=1;
else if (year%4!=0)
flag=0;
else if (year%100!=0)
flag=1;
else
flag=0;
if (flag==1)
printf("%d年是闰年\n",year);
else
printf("%d年不是闰年\n",year);
}
#include<stdio.h>
main()
{ int year,flag;
printf("请输入一个年份:");
scanf("%d",&year);
if(year<=0)
printf("Error!");
else if(year%400==0||(year%4==0&&year%100!=0)) printf("%d年是闰年\n",year);
else
printf("%d年不是闰年\n",year);
}
#include<stdio.h>
main()
{
float a,b,c;
printf("输入三条边的长度(用空格隔开):"); scanf("%f%f%f",&a,&b,&c);
if(a+b>c&&b+c>a&&a+c>b)
if(a==b||b==c||a==c)
if(a==b&&b==c)
printf("等边三角形\n"); else
printf("等腰三角形\n"); else
printf("一般三角形\n");
else
printf("不能构成三角形\n");
}
#include<stdio.h>
main()
{ float x,y;
printf("请输入购物的金额x=");
scanf("%f",&x);
if(x<500)
y=x;
else if(x<1000)
y=0.95*x;
else if(x<2000)
y=0.9*x;
else if(x<3000)
y=0.85*x;
else
y=0.8*x;
printf("实际付款为:%5.2f",y);
}
//计算实足年龄age
#include<stdio.h>
main()
{
int y,m,d,yt,mt,dt,age;
printf("请输入生日的年月日(用空格隔开):");
scanf("%d%d%d",&y,&m,&d);
printf("请输入今天的年月日(用空格隔开):"); scanf("%d%d%d",&yt,&mt,&dt);
age=yt-y;
if(mt<m)
age--;
else
if(mt==m&&dt<d)
age--;
printf("实足年龄为%d岁\n",age);
}
第6周:
#include "Stdio.h"
main()
{ int a=10;
switch(a)
{ case 10:case 9:a++;
case 8:case 7:a+=a;break;
case 6:a+=3;
default:a+=4;
}
printf("a=%d\n",a);
}
#include "stdio.h"
main()
{
int i,x;
for(i=1;i<=100;i++)
{
x=i;
if(++x%2==0)
if(++x%3==0)
if(++x%7==0)
printf("%3d",i);
}
}
#include<stdio.h>
main()
{ int score,temp;
char grade;
printf("Input score:");
scanf("%d",&score);
if(score<0||score>100)
printf("Error! \n");
else
{ temp=score/5;
switch(temp)
{ case 20:case 19:case 18:case 17: grade='A';break; case 16:case 15:case 14: grade='B';break; case 13:case 12:case 11: grade='C';break; default: grade='D';break;
}
printf("score=%d,grade=%c\n",score,grade); }
}
#include<stdio.h>
main()
{ int score,temp;
char grade;
printf("Input score:");
scanf("%d",&score);
if(score<0||score>100)
printf("Error! \n");
else
{ temp=(score+5)/15;
switch(temp)
{ case 7:
case 6:grade='A';break;
case 5:grade='B';break;
case 4:grade='C';break;
default :grade='D';break;
}
printf("score=%d,grade=%c\n",score,grade); }
}
#include<stdio.h>
main()
{ int year,month,days;
printf("Input year,month:");
scanf("%d,%d",&year,&month);
if (year<0||month<0||month>12)
printf("Input Error.\n");
else
{ switch(month)
{ case 1: case 3:case 5:case 7:case 8:case 10:case 12:days=31;break; case 4: case 6:case 9:case 11:days=30;break;
case 2:
{ if(year%400==0||(year%4==0&&year%100!=0))
days=29;
else
days=28;
}
}
printf("%d年%d月共有%d天\n",year,month,days);
}
}
#include<stdio.h>
main()
{ int i,n;
float x,y=1.0;
printf("请输入x和n的值,x为实数,n为正整数,用逗号隔开:"); scanf("%f,%d",&x,&n);
for(i=1;i<=n;i++)
y=y*x;
printf("%.0f的%d次方为%.0f\n",x,n,y);
}
#include<stdio.h>
main()
{ int i;
for(i=100;i<1000;i++)
if(i%10==2||(i/10)%10==2)
printf("%4d",i);
printf("\n");
}
#include<stdio.h>
main()
{ int year,month,day,days,leap;
//char yn='y';
//while(yn=='y')
//{
printf("\n请输入日期(格式:年,月,日):");
scanf("%d,%d,%d",&year,&month,&day);
if(year%400==0||(year%4==0&&year%100!=0))
leap=1;
else
leap=0;
days=day;
switch(month-1)
{ case 11:days+=30;
case 10:days+=31;
case 9:days+=30;
case 8:days+=31;
case 7:days+=31;
case 6:days+=30;
case 5:days+=31;
case 4:days+=30;
case 3:days+=31;
case 2:
if(leap==1)
days+=29;
else
days+=28;
case 1:days+=31;
}
printf("\n%d年%d月%d日是该年的第%d天\n",year,month,day,days); //printf("还试吗?y或n");
//yn=getch();}
}
#include<stdio.h>
main()
{ int i;
float score,sum=0,max=0,ave=0;
printf("请输入10个成绩值:");
for (i=1;i<=10;i++)
{ scanf("%f",&score);
printf("%4.0f",score);
sum+=score;
if(max<score)
max=score;
}
ave=sum/10;
printf("\nave=%5.2f\nmax=%3.0f\n",ave,max);
}
第7周:
#include<stdio.h>
main()
{ int n=2,sum=0;
while(sum<=1000)
{ sum=sum+n;
n=n+2;
}
printf("2+4+6+....+n>1000时的n的最小值为%d\n",n);
printf("其和为%d\n",sum)
}
#include<stdio.h>
main()
{ int n,sum=0;
for(n=2;sum<=1000;n=n+2)
sum=sum+n;
printf("2+4+6+....+n>1000时的n的最小值为%d\n",n);
printf("其和为%d\n",sum);
}
/* sy7_3.c*/
#include <stdio.h>
main()
{ int a;
int i=0,j=0,k=0;
printf("input some integer(press enter to end)\n");
do
{
scanf("%d",&a);
if(a<=40) i++;
else if(a<=70) j++;
else k++;}
while((a=getchar())!='\n');
printf("less than 40=%d 40 to 70=%d higher than 70=%d\n",i,j,k);
}
#include <stdio.h>
main()
{
char c;
int upper=0,lower=0,space=0,digit=0,other=0;
printf("请输入一行字符,敲回车表示字符输入结束:\n");
while((c=getchar())!='\n')
{
if (c>='A' && c<='Z')
upper++;
else if (c>='a' && c<='z')
lower++;
else if (c==' ')
space++;
else if (c>='0' && c<='9')
digit++;
else
other++;
}
printf("大写字母数:%d\n小写字母数:%d\n空格数:%d\n数字数:%d\n其它字符数:%d\n",upper,lower,space,digit,other);
}
#include <stdio.h>
#include <math.h>
main()
{ int a,i,flag=1;
do
{ printf("请任意输入一个正整数,输入-1结束:");
scanf("%d",&a);
if(a==-1)
{printf("结束输入");break;}
for(i=2;i<=sqrt(a);i++)
{ if(a%i==0)
{flag=0;break;}
else
flag=1;
}
if(flag)
printf("%d是一个素数\n\n",a);
else
printf("%d不是一个素数\n\n",a);}
while(a!=-1);
}
#include<stdio.h>
#include<conio.h>
main()
{ int i=1,flag=0;
float a,b,result;
char sym='\0';
printf("请输入操作数1 运算符 操作数2:\n");
while(sym!='#')
{ flag=0;
printf("第(%d)题:",i);
scanf("%f%c%f",&a,&sym,&b);
switch(sym)
{ case '+':result=a+b;break;
case '-':result=a-b;break;
case '*':result=a*b;break;
case '/':
if (b==0)
flag=1;
else
result=a/b;
break;
case '#':flag=3;break;
default: flag=2;
}
if (flag==0)
{ printf("%0.1f%c%0.1f=%0.2f\n\n",a,sym,b,result); i++;
}
if (flag==1) printf("除数为零!请重新输入!\n\n");
if(flag==2) printf("运算符错误!请重新输入!\n\n"); if(flag==3) printf("结束!\n\n");
}
}
第8周:
/*乘法九九表(下三角形)*/
#include "stdio.h"
main()
{ int i,j,result;
printf("\n");
for (i=1;i<10;i++)
{ for(j=1;j<=i;j++) //控制每行输出多少项
{ result=i*j;
printf("%d*%d=%-3d",i,j,result); /*-3d表示左对齐,占3位*/ }
printf("\n"); /*每一行后换行*/
}
}
#include<stdio.h>
#include<math.h>
main()
{ int m,n,num,end,i,count=0;
printf("请输入2个正整数m和n(m>1,n<=500)\n");
scanf("%d%d",&m,&n);
for(num=m;num<=n;num++)
{ end=sqrt(num);
for(i=2;i<=end;i++)
if(num%i==0) break;
if(i>end)
{ printf("%5d",num);
count++;
(count%10==0) //控制每行输出10个素数
printf("\n");
}
}
printf("\n");
}
#include "stdio.h"
main()
{ int x,y,z,n=0;
printf(" 百元兑换求解方案\n") ;
printf(" ----------------------\n") ;
printf(" \t20元\t10元\t5元\n") ;
for(x=1;x<=5;x++)
for(y=1;y<=10;y++)
for(z=1;z<=20;z++)
if(x*20+y*10+z*5==100)
{n++;
printf("兑换方案%d:\t%d\t%d\t%d\n",n,x,y,z);
}
}
#include<stdio.h>
main()
{ int a,n,len=0,sum=0,num; /*n代表整数a的每一位数字,len代表a的位数*/ printf("请输入一个整数a=");
scanf("%d",&a);
num=a;
while(a>0)
{ n=a%10; /*求整数的个位、百位、...位的数字*/
sum+=n;
a=a/10;
len++;
}
printf("整数%d共有%d位,",num,len);
printf("其各位数字之和为%d\n\n",sum);
}
//sy8_5 猜数游戏
#include<stdio.h>
#include<stdlib.h>
main()
{
int x,i=1,guess,flag=0;
char ch;
srand((unsigned)time(NULL));//用当前时间,设置种子 guess=1+rand()%100;
printf("请输入一个1到100之间的数,只有10次机会哦\n"); while(i<=10)
{ printf("第%d次:",i);
scanf("%d",&x);
if(!(x>=1&&x<=100))
{ printf("所输入得数超出范围啦!重新来!\n"); continue;}
if(x>guess)
printf("大啦\n");
else if(x<guess)
printf("小啦\n");
else
{flag=1;break;}
i=i+1;
}
if(flag)
printf("恭喜你,猜对啦!总共用了%d次\n",i); else
printf("十次都没猜中!要加油啊!\n");
}
/*方法1:用多重循环实现*/
#include "stdio.h"
#include "math.h"
main()
{ int num,n1,n2,i;
for(num=6;num<=100;num+=2)
{ for(n1=3;n1<=num/2;n1=n1+2)
{ for(i=2;i<=sqrt(n1);i++) //判断n1是否是素数
if(n1%i==0) break;
if(i>sqrt(n1))//如果n1是素数,则需判断n2是否是素数
{ n2=num-n1;
for(i=2;i<=sqrt(n2);i++)
if(n2%i==0) break;
if(i>sqrt(n2))//如果n2是素数,则该偶数num可表示为两个素数之和
printf("%d=%d+%d\n",num,n1,n2);
}
}
}
}
/*方法2:用自定义函数实现*/
#include "stdio.h"
main()
{
int prime(int x); //自定义函数prime的原型说明
int i,j,k,num;
for(num=6;num<=100;num+=2)
for(i=3;i<=num/2;i=i+2)
if(prime(i)==1)
{ k=num-i;
if(prime(k)==1)
printf("%d=%d+%d\n",num,i,k);
}
}
int prime(int x) //函数的定义
{ int i;
for(i=2;i<=x/2;i++)
if(x%i==0)
{ return 0;
break;
}
return 1;
}
/*方法3:用自定义函数实现*/
#include "stdio.h"
main()
{
int prime(int x); //自定义函数prime的原型说明
int i,j,k,num;
for(num=6;num<=100;num+=2)
for(i=3;i<=num/2;i=i+2)
if(prime(i)==1&&prime(num-i)==1)
printf("%d=%d+%d\n",num,i,num-i);
}
int prime(int x) //函数的定义
{int i;
for(i=2;i<=x/2;i++)
if(x%i==0) {return 0;break;}
return 1;
}
第9周:
#include <stdio.h>
void main()
{ int n,s,i; //n代表2~1000之间的任意一个整数,s代表一个整数的所有因子之和
for(n=2;n<1000;n++)
{ s=0; // 【1】
for (i=1;i<n;i++)
if (n%i==0) //【2】 判断i是否为n的一个因子 s=s+i;
if(s==n)
{ printf("%d=1",n);
for (i=2;i<n;i++ ) // 【3】
if (n%i==0)
printf("+%d",i);
printf("\n"); //【4】
}
}
}
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main( )
{ char choose='\0',yes_no='\0';
int i=1,password=123,x;
printf("**********欢迎光临!请输入密码**********\n");
while(i<=3)
{ scanf("%d",&x);
if(x==password)
{
printf("欢迎您使用!请按菜单提示选择您要办理的业务!\n");
getch(); //暂停,敲任意键继续下面的操作
break;
}
else
{ if(i<3)
printf("密码错!请重新输入1次\n");
else
printf("密码错!");
i=i+1;
}
}
if(i>3)
printf("对不起,你3次都输错了,请明天再来或到柜台!\n"); else
{
do
{ system("cls");
printf(" |----------------------------------|\n");
printf(" | 请输入选项编号(0-4):
printf(" |----------------------------------|\n");
printf(" | 1--查询余额
printf(" | 2--取款
printf(" | 3--存款
printf(" | 4--转账
printf(" | 0--退出
printf(" |----------------------------------|\n");
printf(" ");
choose=getche( );
printf("\n");
switch(choose)
{ case '1': printf(" 您要查询余额\n");break;
case '2': printf(" 您要取款\n");break;
case '3': printf(" 您要存款\n");break;
case '4': printf(" 您要转账\n");break;
case '0': printf(" 欢迎下次光临!\n");break;
default : printf("%c为非法选项!\n",choose);
}
if(choose=='0')
break; |\n"); |\n"); |\n"); |\n"); |\n"); |\n");
printf("\n 要继续选择吗(Y/N)?\n"); do
{ yes_no=getch( );
}
while(yes_no!='Y' && yes_no!='y'&& yes_no!='N' && yes_no!='n'); }
while(yes_no=='Y' || yes_no=='y');
}
}
#include "stdio.h"
main()
{ int a=1,b=3,c;
(a>b)?c=a:c=b;
printf("%d\n",c);
}
第10周: