C语言编译系统在表示逻辑运算结果时,用数值“1”代表“真”,用”0“代表”假“。
在判断一个逻辑量的值时,以非0代表”真“,以”0“作为”假“。
&&逻辑与运算符只有两者都为真,结果才为真
||逻辑或运算符两者中只要有一个为真,结果则为真
非运算符(!)>算术运算符优先级>关系运算符>逻辑运算符(&&,||)>赋值运算符
(1).a+b>c&&b==c
a+b=7>c所代表的值5,所以左边值为真1,右边b==c为假,4不可能等于5,所以1&&0
结果为0(假)
(2).a||b+c&&b-c
先计算b+c=7,再与a进行或运算3||7结果为真,b-c=-1,结果不为0为真
所以最后1&&1结果为1(真)
(3). !(a>b)&&!c||1
先计算括号内的a>b(3>4)其结果为假,然后进行括号外的非运算最后结果为1(真)
右边c||1结果为真,
所以最后1&&1结果为1(真)
(4). !(x=a)&&(y=b)&&0
先计算括号内的赋值运算,将a的值3赋给x,这样一来x=3,再进行非运算,所以左侧!3为假
右侧将b的值赋给y,这样y=4,4&&0结果为假,
所以最后0&&0结果为0(假)
(5).!(a+b)+c-1&&b+c/2
先计算括号内的a+b=7,再根据运算符优先级进行非运算,!7为0(假),0+5-1=4
左侧结果为1(真),右侧先计算c/2=2,在进行b+2=6为1(真)
所以最后1&&1结果为1(真)
无非就是三个数输入后进行两两比较,用t来暂时存储两者中的最大值
然后再和最后没有比较过的数进行比较,最后输出三者中的最大值。
代码如下:
int a, b, c,t,max;
printf( "请输入三个整数 a,b,c:\n" );
scanf_s( "%d %d %d", &a, &b, &c );
t = ( a > b ) ? a : b;//先将a和b进行比较,如果a大于b则将a的值赋给t,反之,则将b的值赋给t(t就是a和b中的最大值)
max = ( t > c ) ? t : c;//再将t和c进行比较,如果t>c,则将t的值赋给max,反之则将c的值赋给max。
printf( "三者中最大数值为:\n%d", max );
运行结果:
请记住sqrt是求平方根函数,用的时候需要在头文件上加上#include
代码如下:
int a;
printf( "请输入一个小于1000的正数:\n" );
scanf_s( "%d", &a );
if ( a > 1000 || a <= 0 ) {
printf( "请重新输入!\n" );
scanf_s( "%d", &a );
}
printf( "它的平方根为:\n%d", ( int ) sqrt( a ) );
运行结果:
代码如下:
int x, y;
printf( "请输入x的值:\n" );
scanf_s( "%d", &x );
if ( x < 1 )
y = x;
else if ( x>=1 && x < 10 )
y = 2*x - 1;
else if ( x >= 10 )
y = 3 * x - 11;
printf( "%d", y );
运行结果:
有人编写了以下的两个程序,请分析他们是否能实现题目要求。
(1)
int x, y;
printf( "enter x:\n" );
scanf_s( "%d", &x );
y = -1;
if ( x != 0 )
if ( x > 0 )
y = 1;
else
y = 0;
printf( "x=%d\ty=%d", x, y );
流程图:
运行结果:
(2)
int x, y;
printf( "enter x:\n" );
scanf_s( "%d", &x );
y = 0;
if ( x >= 0 )
if ( x > 0 )
y = 1;
//
else
y = -1;
printf( "x=%d,y=%d\n", x, y );
流程图:
运行结果:
可以看到两个都是if-else配对错误
切记:else一般与离得最近的if配对
为了使自己能够明白,建议还是写成if()+{}的形式,更清楚明白,
不建议上述两个的写法。新手就不是很理解的层次关系。
代码如下:
switch做法
#include
#include
int main( ) {
double score;
char grade='0';
printf( "请输入您的成绩:\n" );
scanf_s( "%lf", &score );
while ( score>100||score<0 )
{
printf( "输入的分数不规范!\n" );
printf( "请重新输入!\n" );
scanf_s( "%lf", &score );
}
switch ( (int)(score/10) )
{
case 10:
case 9:grade = 'A'; break;
case 8:grade = 'B'; break;
case 7:grade = 'C'; break;
case 6:grade = 'D'; break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:grade = 'E'; break;
}
printf( "您的分数为%5.1lf\n等级为:%c", score, grade );
return 0;
}
运行结果:
if-else做法:
#include
#include
int main( ) {
double score;
char grade='0';
printf( "请输入您的成绩:\n" );
scanf_s( "%lf", &score );
while ( score>100||score<0 )
{
printf( "输入的分数不规范!\n" );
printf( "请重新输入!\n" );
scanf_s( "%lf", &score );
}
if (score>=90&&score<=100 )
{
grade = 'A';
}
else if ( score>=80&&score<=89 )
{
grade = 'B';
}
else if ( score>=70&&score<=79 )
{
grade = 'C';
}
else if (score>=60&&score<=69 )
{
grade = 'D';
}
else {
grade = 'E';
}
printf( "您的分数为%5.1lf\n等级为:%c", score, grade );
return 0;
}
运行结果和switch一样的我就不展示了。
8.给出一个不多于5位的正整数,要求:
比如8768%10=8 个位
(8768/10)%10=876%10=6 十位
(8768/100)%10=87%10=7 百位
(8768/1000)%10=8%10=8 千位
再用变量去存放这些提取出来的数字,进行往后运算。
由此就能把各个数位中的数字提取出来
代码如下:
int a;//输入数字
int b, c, d, e, f;//存放位数
int temp=0;//存放几位数
printf( "请输入一个不大于五位数的正整数:\n" );
scanf_s( "%d", &a );
while ( a>99999 )
{
printf( "输入的数字不规范!\n" );
printf( "请重新输入!\n" );
scanf_s( "%d", &a );
}
if (a>9999 ) {
temp = 5;
}else if (a>999 ) {
temp = 4;
}else if (a>99 ) {
temp = 3;
}else if (a>9 ) {
temp = 2;
}else {
temp = 1;
}
printf( "它的位数为:\n%d\n", temp );
b = a % 10;//个位
c = (a/10)%10;//十位
d = (a/100)%10;//百位
e = (a/1000)% 10;//千位
f = ( a / 10000 ) % 10;//万位
switch ( temp )
{
case 1:
printf( "%d\n", b );
printf( "其反序数字为:\n" );
printf( "%d", b );
break;
case 2:
printf( "%d%d", c, b );
printf( "其反序数字为:\n" );
printf( "%d%d\n", b, c );
break;
case 3:
printf( "%d%d%d", d, c, b );
printf( "其反序数字为:\n" );
printf( "%d%d%d\n", b, c, d );
break;
case 4:
printf( "%d%d%d%d\n", e,d,c,b );
printf( "其反序数字为:\n" );
printf( "%d%d%d%d", b,c,d,e );
break;
case 5:
printf( "%3d %3d %3d %3d %3d\n", f, e, d, c, b );
printf( "其反序数字为:\n" );
printf( "%d%d%d%d%d", b, c, d, e, f );
break;
}
运行结果:
if-else语句
关键在于正确写出每个区间的奖金计算公式。
例如利润在40 0000~60 0000元时,
利润为:10 0000X0.1+10 0000X0.075+20 0000X0.05元
代码如下:
int i;
double bonus, bon1, bon2, bon4, bon6, bon10;
bon1 = 100000 * 0.1;
bon2 = bon1 + 100000 * 0.075;
bon4 = bon2 + 200000 * 0.05;
bon6 = bon4 + 200000 * 0.03;
bon10 = bon6 + 400000 * 0.015;
printf( "请输入利润i:\n" );
scanf_s( "%d", &i );
if ( i <= 100000 ) {
bonus = i * 0.1;
}
else if ( i <= 200000 )
{
bonus = bon1 + ( (double)i - 100000 ) * 0.075;
}
else if ( i<=400000 )
{
bonus = bon2 + ( ( double ) i - 200000 ) * 0.05;
}
else if (i<=600000 ) {
bonus = bon4 + ( ( double ) i - 400000 ) * 0.03;
}
else if ( i<=1000000 )
{
bonus = bon6 + ( ( double ) i - 6000000 ) * 0.015;
}
else {
bonus = bon10 + ( ( double ) i - 1000000 ) * 0.01;
}
printf( "奖金是:\n%10.2lf\n", bonus );
运行结果:
switch语句
代码如下:
int i;
double bonus, bon1, bon2, bon4, bon6, bon10;
int branch;
bon1 = 100000 * 0.1;
bon2 = bon1 + 100000 * 0.075;
bon4 = bon2 + 200000 * 0.05;
bon6 = bon4 + 200000 * 0.03;
bon10 = bon6 + 400000 * 0.015;
printf( "请输入利润i:\n" );
scanf_s( "%d", &i );
branch = i / 100000;
if (branch>10 ) {
branch = 10;
}
switch ( branch )
{
case 0:bonus = i * 0.1; break;
case 1:bonus = bon1+((double)i-100000)*0.075; break;
case 2:
case 3:bonus = bon2+( ( double ) i-200000)*0.05; break;
case 4:
case 5:bonus = bon4+( ( double ) i-400000)*0.03; break;
case 6:
case 7:
case 8:
case 9:bonus = bon6 + ( ( double ) i - 600000 ) * 0.015; break;
case 10:bonus = bon10 + ( ( double ) i - 1000000 ) * 0.01; break;
}
printf( "奖金是:\n%10.2lf\n", bonus );
运行结果:
这次我依然用的还是循环做的,我个人觉得循环还是比较方便的!
用到了两种循环,正序和倒序的输出,不懂的同学可以看下循环的知识。
(循环不只可以正着写,也可以反着写)
代码如下:
//第一种方法
int a [ 4 ];
printf( "请输入四个整数:\n" );
for ( int i = 0; i < 4;i++ ) {
scanf_s( "%d", &a [ i ] );
}
for ( int i = 0; i < 4;i++) {
for ( int j = i + 1; j < 4;j++ ) {
if (a[i]>a[j] ) {
int t;
t = a [ j ];
a [ j ] = a [ i ];
a [ i ] = t;
}
}
}
printf( "从小到大的顺序为\n" );
for ( int i = 0; i < 4;i++ ) {
printf( "%3d", a [ i ] );
}
//第二种方法
int a [ 4 ];
printf( "请输入四个整数:\n" );
for ( int i = 0; i < 4;i++ ) {
scanf_s( "%d", &a [ i ] );
}
for ( int i = 0; i < 4;i++) {
for ( int j = i + 1; j < 4;j++ ) {
if (a[i]=0;i-- ) {
printf( "%3d", a [ i ] );
}
运行结果:
我认为本题的精髓就是求输入的点到各中心点的距离
如果到各个点的距离如果四个距离
只要有一个得出的距离大于1则说明在塔外,那么高度h为0,
反之则高度h为10.
代码如下:
#include
#include
int main( ) {
int h = 10;
double x1 = 2, y1 = 2, x2 = -2, y2 = 2, x3 = -2, y3 = -2, x4 = 2, y4 = -2;
double x, y, d1, d2, d3, d4;
printf( "请输入一个点的坐标(x,y):\n" );
scanf_s( "%lf,%lf", &x, &y );
d1 = pow( ( x - x4 ), 2 ) + pow( ( y - y4 ), 2 );
d2 = pow( ( x - x1 ), 2 ) + pow( ( y - y1 ), 2 );
d3 = pow( ( x - x2 ), 2 ) + pow( ( y - y2 ), 2 );
d4 = pow( ( x - x3 ), 2 ) + pow( ( y - y3 ), 2 );
if (d1>1&&d2>1&&d3>1&&d4>1 )
h = 0;
printf( "该点的高度为:\n%d", h );
return 0;
}
运行结果:
闰年条件判断如下:
1.不能被4整除的部分非闰年
2.判断剩下可以被4整除的部分能否被100整除
如果不能被100整除是闰年例如2008年
如果能被100整除继续判断
能被400整除是闰年
否则非闰年
代码如下:
int i;
printf( "请输入需要比对的年份:\n" );
scanf_s( "%d", &i );
//第一种
if ( i % 4 != 0 )
printf( "%d不是闰年\n", i );
else if ( i % 4 == 0 && i % 100 != 0 )
printf( "%d是闰年\n", i );
else if ( i % 100 == 0 && i % 400 == 0 )
printf( "%d是闰年\n",i );
else
printf( "%d不是闰年\n",i );
printf( "\n" );
//第二种
if((i%4==0&&i%100!=0)||i%400==0)
printf( "%d是闰年\n", i );
else
printf( "%d不是闰年\n", i );
printf( "\n" );
//第三种
if ( !( i % 4 == 0 && i % 100 != 0 ) || i % 400 == 0 )
printf( "%d不是闰年\n", i );
else
printf( "%d是闰年\n", i );
printf( "\n" );
//第四种
int t;//用t的值表示判定真假
//t=1为真,则是闰年 t=0为假,则不是闰年
if (i%4==0 ) {
if ( i % 100 == 0 ) {
if ( i % 400 == 0 ) {
t = 1;
}
else {
t = 0;
}
}
else
t = 1;
}
else
t = 0;
if(t) //如果判定t不为假(0)
printf( "%d是闰年\n", i );
else
printf( "%d不是闰年\n", i );
运行结果:
不对的地方还请发评论或者私信我谢谢!