1
y>x输出:
1
x!
=y输出:
1
x==z-2输出:
1
x=x-2输出:
3
x>=z输出:
0
x<=z输出:
1
2.当x=0,y=-1,z=1时
x&&y输出:
0
x||y输出:
1
y&&z输出:
1
y||z输出:
1
x&y输出:
0
x|y输出:
1
以上表达式的值
3.见教材习题P3.6,3.7
P3.6运行结果:
aabbcctabc
P3.7程序如下:
#include
main()
{
charc1,c2,c3,c4,c5;
c1='C';c2='h';c3='i';c4='n';c5='a';
c1=c1+5;c2=c2+5;c3=c3+5;c4=c4+5;c5=c5+5;
Printf("%c,%c,%c,%c,%c\n",c1,c2.c3.c4.c5);
}
五.思考题
1.“=”和“==”有什么区别?
答:
=称为赋值运算符,它的作用是把一个数据赋值给一个变量;==是等号运算符,它表示的就是一个量的值。
2.“&”和“&&”、“|”和“||”有什么区别?
答:
&是按位与运算符,而&&是逻辑与运算符;‘|’是按位或运算符,而‘||’是逻辑或运算符它们的作用是不同的。
实验三顺序程序设计
一.实验目的
1.熟练掌握字符数据的输入输出函数getchar和putchar的使用;
2.熟练掌握格式输入输出函数scanf和printf的使用;
3.进一步熟悉C程序的编辑环境。
二.实验内容
编程实现习题P884.4、4.8、4.9
三.实验环境
PC微机
Windows操作系统
VC++程序集成环境
四.实验步骤
P88程序如下:
4.4
#include
voidmain()
{
inta,b,c;
floatx,y,z;
longintu,n;
charc1,c2;
a=3;
b=4;
c=5;
x=1.2;
y=2.4;
z=-3.6;
u=51274;
n=128765;
c1='a';
c2='b';
printf("a=%2db=%2dc=%2d\n",a,b,c);
printf("x=%f,y=%f,z=%f\n",x,y,z);
printf("x+y=%5.2fy+z=%5.2fz+x=%5.2f\n",x+y,y+z,z+x);
printf("u=%6dn=%9d\n",u,n);
printf("c1='%-2c'or%3d\n",c1,c1);
printf("c2='%-2c'or%3d",c2-32,c2);
}
4.8
#include
voidmain()
{
floatr,h;
floatc,s,b,v1,v2;
scanf("%f,%f",&r,&h);
c=2*3.14*r;
printf("圆2周¨¹长¡èc=%.2f\n",c);
printf("圆2面?
积ys=%.2f\n",3.14*r*r);
printf("圆2球¨°表À¨ª面?
积yb=%.2f\n",4*3.14*r*r);
printf("圆2球¨°体¬?
积yv1=%.2f\n",4.0/3*3.14*r*r*r);
printf("圆2柱¨´体¬?
积yv2=%.2f\n",(3.14)*r*r*h);
}
4.9
#include
voidmain()
{
floatc,F,a;
scanf("%f",&F);
a=5.0/9*(F-32);
printf("摄¦?
氏º?
温?
度¨¨c=%.2f",a);
}
五.实验结果和心得体会
答:
虽然一开始学写程序很难,有点吃力,而且编译的时候老是出错,运行结果有时也是出乎意料,但是我想经过自己平时的多多练习,肯定会又进步,且编程序时也不会老是犯一些低级错误,这样以后学起来也不会觉得很无趣。
实验四控制语句
一.实验目的
1.熟练掌握if、if…else、if…elseif语句和switch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。
2.熟练掌握while语句、do...while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。
3.掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。
进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。
二.实验内容
1.选择结构程序设计;
2.if语句的使用;
3.使用switch语句实现多分支选择结构;
4.三种循环语句的应用;
5.循环结构的嵌套;
6.break和continue语句的使用。
三.实验环境
PC微机DOS操作系统或Windows操作系统TurboC程序集成环境
四.实验步骤
1、编程判断输入整数的正负性和奇偶性。
#include
main()
{
intx,y;
printf("Pleaseinputainteger:
");/*输入一个整数!
*/
scanf("%d",x);
if(x<0)
printf("It'sanegativenumber!
");/*输入的数是负数!
*/
else
printf("It'sapositivenumber!
");/*输入的数是正数!
*/
y=x%2;
if(0==y)
printf("It'saevennumber!
");/*输入的数是偶数!
*/
else
printf("It'saoddnumber!
");/*输入的数是奇数!
*/
}
2.要求:
编程实现:
输入一个整数,将其数值按照①小于10,②10~99,③100~999,④1000以上四个类别分类并显示。
(1)将变量定义为整型。
(2)输入整数前,利用puts()/printf()给出提示信息。
(3)输出结果时要有必要的说明,例如:
输入358时,显示358is100to999。
(4)该程序利用if语句实现。
运行程序,分别输入9,21,321,4321数据检查输出信息的正确性。
#include
main()
{
inta;
printf("请输入一个整数:
\n");
scanf("%d",&a);
if(a<10)printf("%dis<10\n",a);
if(10<=a&&a<100)printf("%dis10to99\n",a);
if(100<=a&&a<1000)printf("%dis100to999\n",a);
elseprintf("%dis>1000\n",a);
}
3、输入三角形的三条边a,b,c,判断它们能否构成三角形,若能构成三角形,指出是何种三角形(等腰三角形、直角三角形、一般三角形)。
#include
voidmain(void)
{
inta,b,c;
printf("请输入三个边长:
\n");
scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{if(a*a==b*b+c*c||b*b==a*a+c*c||c*c==a*a+b*b)
printf("可以构成一个直角三角形。
\n");
elseif(a==b&&a==c)
printf("可以构成一个等边三角形。
\n");
elseif(a==b||b==c||a==c)
printf("可以构成一个等腰三角形。
\n");
else
printf("可以构成一个一般三角形。
\n");}
else
printf("不能构成三角形。
\n");
}
4.编写程序:
根据公式
,输出π的值。
要求:
(1)变量π为单精度类型,n为整型;
(2)计算当n的取值分别为20,50,100,200时的π值,说明什么问题?
(3)修改程序,不给出n值,而改为求π值,直到最后一项的数值小于10-4为止。
(4)对修改后的程序,输出π值以及总的项数n。
输出格式为:
π=值;n=值。
修改前:
#include
#include
main()
ntn,i=1;
floatpi,a=1,t=0,b;
scanf("%d",&n);
while(i<=n)
{b=i*i;a=6*(1/b);t=t+a;i=i+1;}
pi=sqrt(t);
printf("pi=%f\n",pi);}
说明了当输入的n越来越大的时候,π的值也越来越精确。
修改后:
#include
#include
main()
{intn,i=1;
floatpi,a=1,t=0,b;
while(a>1e-4)
{b=i*i;a=6*(1/b);t=t+a;i=i+1;}
pi=sqrt(t);
printf("pi=%f\n",pi);
printf("n=%d\n",i);}
输出结果:
pi=3.137702n=246
5.从键盘输入一个0~1000之间的任意整数,输出该整数的所有因子(例如:
输入12,其因子为1,2,3,4,6,12)。
要求:
(1)采用while循环语句实现。
(2)输出格式为:
Input:
12
Output:
1,2,3,4,6,12
程序如下:
#include
main()
{inta,b,i=1;
printf("请输入一个小于1000的整数:
\n");
scanf("%d",&a);
while(i<=a)
{b=a%i;
if(b==0)
printf("%d,",i);
i++;}
}
6.编程实现:
由用户从键盘输入一串字符(以回车键结束),统计其中数字、大、小写字母、空格、其它字符的个数。
要求:
(1)通过键盘输入字符。
(2)给出相应的输入/输出信息提示。
并按照数字、大写字母、小写字母、空格、其它字符数的顺序输出结果。
程序如下:
#include
main()
{
inti=0,m=0,n=0,k=0;
charc;
printf("请从键盘上输入字符:
\n");
while((c=getchar())!
='\n')
{
if(65<=c&&c<=90)i++;
elseif(97<=c&&c<=122)m++;
elseif(48<=c&&c<=57)n++;
elseif(c=='')k++;
}
printf("大写字母:
%d个\n小写字母:
%d个\n数字:
%d个\n空格:
%d个\n",i,m,n,k);
}
7.计算并输出1000以内最大的10个素数以及它们的和。
要求:
(1)在程序内部加必要的注释。
(2)由于偶数不是素数,可以不考虑对偶数的处理。
(3)虽然在1000以内的素数超过10个,但是要对1000以内不够10个素数的情况进行处理。
(4)输出形式为:
素数1+素数2+素数+…+素数10=总和值。
程序如下:
#include"stdio.h"
#include"math.h"
intf(intx)//检查素数函数
{inti;
for(i=2;iif(x%i==0)
return0;//不是素数返回0
return1;//是素数返回1
}
voidmain()
{inta[10],sum=0,i,j,count=0;
for(i=999,j=0;count!
=10;i-=2)//计算器等于10为循环结束条件,i-=2为只检查奇数。
if(f(i))//调用函数
{
count++;//计数器加一
a[j]=i;//赋值给数组
j++;
}
for(j=0;j<10;j++)
{sum+=a[j];//计算十个数的总和
printf("%d",a[j]);
if(j<9)printf("+");//前9个符号为'+'
elseprintf("=");//最后一个符号为'='
}
printf("%d\n",sum);
}
五.思考题
1.对于多分支选择结构何时使用if语句的嵌套,何时使用switch语句?
答:
当题目给定的条件很多时,我们就得用到if语句的嵌套;switch语句是多分支选择语句,当问题中需要用到多分支的选择时,如人口统计分类,工资统计分类等,就要用到switch语句。
2.小结三种形式的循环使用的区别。
答:
while:
它用来实现"当型"循环结构。
其一般形式如下:
while(表达式)语句
当表达式为非0值时执行WHILE语句中的内嵌语句。
其特点是:
先判断表达式,后执行语句。
do...while:
第一次执行一个语句块,然后重复循环的执行该语句块,
直到条件表达式不满足条件是停止。
for:
是用来表示循环次数已知的情况,它的使用格式为:
for(表达式一;表达式二;表达式三)循环体语句。
实验五数组
一.实验目的
1.掌握数组的基本概念,包括:
数组的定义、数组的类型、数组的初始化、数组的赋值、数组元素下标的范围、数组元素的正确以及引用数组元素的输入/输出。
2.掌握字符数组与字符串的使用方法。
理解字符数组与其它数组的区别、理解字符串及其特点。
掌握常用的字符串处理库函数的用法并清楚对字符串的简单处理。
3.掌握与数组相关的算法,包括排序算法和查找算法等。
二.实验内容
有关数组的程序设计
三.实验环境
PC微机DOS操作系统或Windows操作系统TurboC程序集成环境
四.实验步骤
1.编程实现:
对任意一个一维数组,从中找出数组元素的最大值和最小值。
要求:
(1)数组为整型数组(10个元素)。
(2)使用scanf函数实现数组元素的输入。
在输入前给出必要的提示。
(3)输出时给出必要的说明,首先输出原始的10个元素,换行后输出最大值以及最大值在数组中的位置、最小值以及最小值在数组中的位置。
#include
voidmain()
{
inta[10],max,min,i;
printf("\n");
for(i=0;i<=9;i++)
{
printf("Inputa[%d]:
",i);
scanf("%d",&a[i]);/*输入十个数组元素*/
}
max=a[0];
min=a[0];
for(i=0;i<9;i++)
{
if(a[i+1]>max)max=a[i+1];/*找出最大值*/
if(a[i+1]}
printf("\nThetennumis:
");
for(i=0;i<=9;i++)
{
printf("%d,",a[i]);/*原样输出数组*/
if(i==9)printf("\b\b.\n\n");/*将最后的逗号改为句号*/
}
printf("max=%-8dThemaxnumis:
",max);
for(i=0;i<=9;i++)
{
if(a[i]==max)printf("a[%d],",i);/*输出数组中与最大值相等和数*/
if(i==9)printf("\b.\n");/*将最后的逗号改为句号*/
}
printf("min=%-8dTheminnumis:
",min);
for(i=0;i<=9;i++)
{
if(a[i]==min)printf("a[%d],",i);/*输出数组中与最小值相等的数*/
if(i==9)printf("\b.\n");/*将最后的逗号改为句号*/
}
}
(4)如果现改为20个元素的数组,怎样修改程序?
修改程序后,运行程序进行检查。
如果需要数组元素不断改变,应怎样修改程序?
答:
只要将数组大小改成要求的大小,再把for循环的循环次数改成相应的就可以了。
2.编程实现:
在给定的字符串中查找满足条件的第一个字符。
要求:
(1)字符串采用初始化的方式处理。
(2)通过scanf函数读入一个任意字符。
(3)在字符串中查找该字符,如果存在该字符,输出该字符在字符串中的位置以及相应的说明。
如果不存在该字符,则要给出相应的信息。
#include
#include
main()
{intj,n;
chari;
charc[]={"Iamastudent"};
printf("给定字符串为:
%s\n请输入要查找的字符:
",c);
scanf("%c",&i);
n=strlen(c);
for(j=0;jif((int)c[j]==(int)i)
{printf("字符串中满足条件的第一个字母为%d个字符",j+1);break;}
if(j>=n)
printf("字符串中不存在满足条件的字符");
}
3.编程实现:
首先任意输入一个大于2且小于10的整数n,再输入一个由n决定的二维整型数组(n
n),形成n
n阶矩阵,将矩阵中最大元素所在的行和最小元素所在的行对调后,再输出该矩阵(注意:
数组不允许动态定义)。
例如:
原始数据:
n=4结果数据:
12348111416
3591035910
81114161234
1527615276
要求:
(1)本题中所涉及到的循环都采用for语句。
(2)在输入/输出时进行必要的说明。
(3)对输入的2~10之间的整数(例如4)以n=4的格式输出。
(4)输入一个n
n矩阵(假定最大值与最小值不在同一行上),输出原始矩阵数据(按上述矩阵形式)。
(5)查找最大值与最小值,将矩阵中最大元素所在的行和最小元素所在的行对调,输出对调后的矩阵数据。
(6)修改程序,对最大值与最小值可能出现在一行上的情况做出说明。
(7)对n为3,4,5时,输入数组元素是要注意哪些问题?
执行程序,检查程序的正确性。
#include
main()
{intn,j,k,z,x,max,a[10][10];
printf("请输入一个2到10之间的数:
");
scanf("%d",&n);
printf("请输入一个n*n数组:
\n");
for(j=0;jfor(k=0;kscanf("%d",&a[j][k]);
printf("原始数组为:
n=%d\n",n);
for(j=0;j{for(k=0;kIf(a[j][k]>max)
{max=a[j][k];z=j;}
for(j=0;jfor(k=0;kIf(a[j][k]{min=a[j][k];x=j;}
for(j=0;j{k=a[z][j];a[z][j]=a[x][j];a[x][j]=k;
printf("结果数据:
\n");
for(j=0;jfor(k=0;kprintf("%5d",a[j][k]);
printf("\n");}}
修改程序得到最大值和最小值所在行;只需在程序末尾加上语句:
Printf(最大值在第%d行,最小值在第%d行”,z,x);
4.编程实现“折半查找”的过程。
折半查找的处理过程是:
在一个数据已排好序的数组中,首先比较关键字与数组中间的元素,如果两者相等,则查找结束;如果前者比后者小,则要查找的数据必然在数组的前半部,此后只需在数组的前半部中继续折半查找;如果前者的数值比后者大,则要查找的数据必然在数组的后半部,此后只需在数组的后半部继续进行折半查找。
要求:
(1)设定一个数组存放20个数据,用赋初值的方法在程序中给出(假设这些数据已排序)。
(2)用scanf函数输