一、 选择语句
1. 求二元二次方程组的两个解
#include
#include
int main()
{
float a,b,c,x1,x2,g;
printf("请输入a,b,c,并用,隔开\n");
scanf("%f,%f,%f",&a,&b,&c);
g=pow(b,2)-4*a*c;
if(g<0)
{
printf("无实解\n");
return 1;
}
x1=(-b+sqrt(g))/(2*a);
x2=(-b-sqrt(g))/(2*a);
printf("x1=%.2f,x2=%.2f\n",x1,x2);
return 0;
}
2.求0-999的数的个位,十位,百位
#include
#include
int main()
{
float a;
int b,c,d;
printf("请输入一个数\n");
scanf("%f",&a);
b = (int)(a/100);
c = (int)((a-b*100)/10);
d = (int)(a-b*100-c*10);
printf("b=%d,c=%d,d=%d/n",b,c,d);
return 0;
}
3.输入一个整数若<0,则输出-1,若=0,则输出0,若>0,则输出1
#include
int main()
{
int x,y;
printf("请输入一个整数:\n");
scanf("%d",&x);
if(x<0)
{
printf("y=-1\n",y);
}
else if(x==0)
{
printf("y=0\n",y);
}
else
{
printf("y=1\n",y);
}
return 0;
}
注意:像if(a=5)这样的语句代表赋值,两个==是布尔表达式,用在for中才表达等于。
例: void main()
{ int a=0;
if(a=5)
{
printf("%d",a);
}
else
{
printf("%d",a*a);
}
}
输出结果是:5
其中,由于两对{ }里均只有一条语句,所以这两对{ }均可以去掉;黄色背景的那条语句是赋值语句而不是判断语句,所以无论如何,if中的条件都成立,在进行赋值后,都可以执行if后面的内嵌语句。
在if语句中,1.双分支的if语句(else里可以再包含if 和 else)
2.嵌套的if语句((else if)可以写多个)
4.输入两个实数a,b,并按数值由小到大的顺序输出这两个数
方法一:
#include
int main()
{
float x,y;
printf("请输入两个实数:\n");
scanf("%f,%f",&x,&y);
if(x
一般情况下我们会写出如上的代码,但是有一些阅卷老师更想看到的是如下代码(方法二)
#include
int main()
{
float x,y,a;
printf("请输入两个实数:\n");
scanf("%f,%f",&x,&y);
if(x>y)
{
a=x;
x=y;
y=a;
}
printf("%.2f,%.2f\n",x,y);
return 0;
}
即:引入一个中间变量,整个选择结构只用一条if语句。
方法三(表达式1?表达式2:表达式3)
#include
int main()
{
float x,y,a;
printf("请输入两个实数:\n");
scanf("%f,%f",&x,&y);
x>y?printf("%f,%f\n",y,x):printf("%f,%f\n",x,y);
return 0;
}
表达式1?表达式2:表达式3的意思是:表达式1为真则执行表达式2,若表达式1不为真则执行表达式3。
4.(PLUS) 输入三个实数a,b,c,并按数值由小到大的顺序输出这三个数
#include
int main()
{
float x,y,z,a;
printf("请输入三个实数:\n");
scanf("%f,%f,%f",&x,&y,&z);
if(x>y)
{
a=x;
x=y;
y=a;
}
if(x>z)
{
a=x;
x=z;
z=a;
}
if(y>z)
{
a=y;
y=z;
z=a;
}
printf("%.2f,%.2f,%.2f\n",x,y,z);
return 0;
}
5.请编写一程序,判断某一年是否为闰年(该年份不是100的倍数且是4的倍数时是闰年;年份是100的倍数且是400的倍数时也是闰年)
方法一:
#include
int main()
{
int x;
printf("请输入一个年份:\n");
scanf("%d",&x);
if(x%100!=0&&x%4==0)
{
printf("该年是闰年");
}
else if(x%100==0&&x%400==0)
{
printf("该年是闰年");
}
else
{
printf("该年不是闰年");
}
return 0;
}
方法二:
#include
int main()
{
int x;
printf("请输入一个年份:\n");
scanf("%d",&x);
if((x%100!=0&&x%4==0)||(x%100==0&&x%400==0))
{
printf("该年是闰年");
}
else
{
printf("该年不是闰年");
}
return 0;
}
6.输入一个字符,判断它是否为大写字母,若是则将其转化成小写字母,若不是则不转换,然后输出最终得到的字符.
方法一:
#include
int main()
{
char x;
printf("请输入一个字符:\n");
scanf("%c",&x);
if(x-97<0)
{
x=x+32;
}
printf("%c",x);
return 0;
}
A=65 ; a=97; 大写字母+32=小写字母
方法二:
#include
int main()
{
char x;
printf("请输入一个字符:\n");
scanf("%c",&x);
if(x>='A'&&x<='Z')
{
x=x+32;
}
printf("%c",x);
return 0;
}
用(表达式1?表达式2:表达式3)可以写成方法三:
#include
int main()
{
char x;
printf("请输入一个字符:\n");
scanf("%c",&x);
x-97<0?x=x+32:x;
printf("%c",x);
return 0;
}
7.某课原为A,B,C,D四个等级,现要将其转换成百分制分数段,规则是:A等转成85-100;B等转成70-84;C等转成60-69;D等转成<60;请编一程序,成绩等级由键盘输入,输出分数段。
#include
int main()
{
char X;
printf("请输入成绩等级\n");
scanf("%c",&X);
switch(X)
{
case'A':printf("85-100\n");break;
case'B':printf("70-84\n");break;
case'C':printf("60-69\n");break;
case'D':printf("<60\n");break;
default:printf("该生的等级输入的不对\n");break;
}
return 0;
}
注意:只有case后面是字符时,才需要加单引号,如果是case 3,则不需要加单引号。
8.某课的分数原为百分制,现要将其转成等级,规则是:90分以上为A;80-89为B;70-79为C;60-69为D,60分以下为E,分数由键盘输入,输出等级。
#include
int main()
{
float X;
printf("请输入成绩\n");
scanf("%f",&X);
switch((int)(X/10))
{
case 10:
case 9:printf("A\n");break;
case 8:printf("B\n");break;
case 7:printf("C\n");break;
case 6:printf("D\n");break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:printf("E\n");break;
default:printf("(#`O′)你把成绩输错啦\n");break;
}
return 0;
}
bug:switch expression of type 'float' is illegal
产生原因:前面定义了float型的变量x,所以要强制在switch语句中转换为int,但是x的值并不会发生变化。
解决方法:switch((int)(X/10))
case 10:
case 9:printf("A\n");break;//若两条case语句后面执行的指令相同,可以采用如上形式,将两条语句合并。
二、循环语句
1.求2+4+6+...+100
方法一(while):
#include
int main(){
int x=0;
int sum=0;
while(x<100){
x+=2;
sum=sum+x;
}
printf("结果为:%d\n",sum);
return 0;
}
方法二(do...while):
#include
int main(){
int x=0;
int sum=0;
do
{
x+=2;
sum=sum+x;
}
while(x<100);
printf("结果为:%d\n",sum);
return 0;
}
while循环题型模板1.写出固定格式
2.定义三个变量:
n=1; sum=0/chengji=1; a=第一项的值。
//这里的chengji表示乘积
3.加入while语句
4.找出相加/相乘的共多少项,然后在while后的括号里写上n<=项数
5.在括号内写上:
n=n+1; sum=sum+a/chengji=chengji*a;
6.列出第n项与第(n-1)项的关系式,并把这个关系用a的形式表现(如:(第n项=第(n-1)项*n)→a=a*n) 将a的式子写进括号内
7.将要求的内容输出,检查循环的开头与结尾。
2.求2×4×6×...×100
#include
int main()
{
int n=1;
double chengji=1;
int a=2;
while(n<=50)
{
n++;
chengji=chengji*a;
a=a+2;
}
printf("计算结果是%d\n",chengji);
return 0;
}
错误:这里我最开始定义的是三个int型,但输出的结果是0
原因:int 类型装不了这么大的数字
解决方法:改成double类型
3.求1!+2!+3!+...+20!
方法一(用while循环):
#include
int main()
{
int n=1,int sum=0,a=1; //语句1
while(n<=20) //语句2
{
a=a*n;
sum=sum+a;
n++; //将自增放在最后,作为语句3
}
printf("计算结果是%d\n",sum);
return 0;
}
方法二(用for循环):
#include
int main()
{
int n,sum,a;
for(n=1,sum=0,a=1;n<=20;n++) //语句1,2,3
{
a=a*n;
sum=sum+a;
}
printf("计算结果是%d\n",sum);
return 0;
}
注:
上述的 可以写成
int n,sum,a; int n=1,sum=0,a=1;
for(n=1,sum=0,a=1;n<=20;n=n+1) for(;n<=20;n=n+1)
4.请编程输出100-300之间的整数(包括100-300)
#include
int main()
{
int n=99;
while(n<300)
{
n=n+1;
printf("100-300之间的整数有:%d\n",n);
}
return 0;
}
5.100-300之间,不能被4整除的整数
#include
int main()
{
int n=99;
while(n<300)
{
n=n+1;
if(n%4==0)
{
continue;
}
printf("100-300之间的整数有:%d\n",n);
}
return 0;
}
三、数组
1.对10个数组元素依次赋值0、1、2、3、4、5、6、7、8、9,并按倒叙输出
#include
int main()
{
int i,a[10]={0,1,2,3,4,5,6,7,8,9};
for(i=9;i>=0;i--)
{
printf("结果是%d\n",a[i]);
}
return 0;
}
2.输入十个地区的面积(面积为整数),将它们的面积由小到大排列并输出排列后的结果
方法一:(选择排序法)
#include
int main()
{
int a[10];
int i,j,t;
printf("请输入十个面积:\n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(i=0;i<=8;i++)
{
for(j=i+1;j<=9;j++)
{
if(a[i]>a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
printf("结果是依次是:\n");
for(i=0;i<=9;i++)
printf("%d\n",a[i]);
printf("\n");
return 0;
}
选择排序法:先拿第一个数和后面的数进行比较,把最小(大)的数放在第一位,然后再拿第二个数和后面的数进行比较,把第二小(大)的数放在第二位...一直比到倒数第二位和倒数第一位的大小。
假如要输入俩个量,使得a的值为12,c的值为字母a,则正确的输入格式是:
(一)、 scanf("%d%c",&a,&c); 正确的输入格式是:12a
(二)、 scanf("%d %c",&a,&c); 正确的输入格式是:12 a
(三)、 scanf("%d,%c",&a,&c); 正确的输入格式是:12,a
方法二:(冒泡(沉底)排序法)
#include
int main()
{
int a[10];
int i,j,t;
printf("请输入十个面积:\n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(j=0;j<=8;j++)
{
for(i=0;i<=8-j;i++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
printf("结果是依次是:\n");
for(i=0;i<=9;i++)
printf("%d\n",a[i]);
printf("\n");
return 0;
}
冒泡排序法:不断把两个数进行比较,把相对大(小)的数放在和它比较的数的后面
3. 将一个二维数组a=|1 2 3|的行列元素互换,存到另一个二维数组b中并输出
|4 5 6|
#include
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
b[j][i]=a[i][j];
}
}
printf("数组b是:\n");
for(j=0;j<=2;j++)
{
for(i=0;i<=1;i++)
printf("%d\t",b[j][i]);
printf("\n");
}
return 0;
}
4.已知矩阵a=|1 2 3| ,请编程求出其中值最大的那个元素
|9 8 7|
|-10 10 -5|
#include
int main()
{
int i,j,max;
int a[3][3]={{1,2,3},{9,8,7},{-10,10,-5}};
max=a[0][0];
for(i=0;i<=2;i++)
for(j=0;j<=2;j++)
if(a[i][j]>max)
max=a[i][j];
printf("最大元素的值为%d\n",max);
return 0;
}
5.输出一个 * 图案
* * //中间一个空格
*
#include
int main()
{
char c[3][3]={{' ','*',' '},{'*',' ','*'},{' ','*',' '}};
int i,j;
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
printf("%c",c[i][j]);
}
printf("\n");
}
return 0;
}
6.输入一行由空格和单词组成的字符(字符数在80以内),请统计有多少个单词
#include
int main()
{
char c[81];
int i,dancishu=1;
gets(c);
if(c[0]==' ')
dancishu=0;
for(i=0;c[i]!='\0';i++)
if(c[i]==' '&&c[i+1]!=' '&&c[i+1]!='\0')
dancishu++;
printf("有%d 个单词",dancishu);
return 0;
}
四、函数
一、有两个小组,分别有5名学生和10名学生,请编程输入这些学生的成绩,并调用一个aver函数求这两个小组的平均分。
#include
int main()
{
float aver(float a[ ],int n);
float zu1[5],zu2[10];
int i;
printf("请输入第 1 组的学生成绩:\n");
for(i=0;i<=4;i++)
scanf("%f",&zu1[i]);
printf("请输入第 2 组的学生成绩:\n");
for(i=0;i<=9;i++)
scanf("%f",&zu2[i]);
printf("第 1 组平均分是%f\n",aver(zu1,5));
printf("第 2 组平均分是%f\n",aver(zu2,10));
return 0;
}
float aver(float a[ ],int n)
{
float sum=a[0],pingjunshu;
int i;
for(i=1;i
二、请编程输入 10 个整数,并将这 10 个数由小到大排序
#include
int main()
{
void paixu(int a[],int n);
int a[10],i;
printf("请输入10个整数:\n");
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
paixu(a,10);
printf("排序后的整数依次是:\n");
for(i=0;i<=9;i++)
printf("%d\t",a[i]);
printf("\n");
return 0;
}
void paixu(int a[],int n)
{
int i,j,t;
for(i=0;ia[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
四、请编程输入 4 个整数,并找出其中最大的数。
#include
int main()
{
int max4(int a,int b,int c,int d);
int a,b,c,d,zuidashu;
printf("请输入 4 个整数:\n");
scanf("%d %d %d %d",&a,&b,&c,&d);
zuidashu=max4(a,b,c,d);
printf("最大数为%d\n",zuidashu);
return 0;
}
int max4(int a,int b,int c,int d)
{
int max2(int a,int b);
return(max2(max2(max2(a,b),c),d));
}
int max2(int a,int b)
{
return(a>b?a:b);
}
五、有 5 个学生,第 5 个学生比第 4 个学生大 2 岁,第 4 个学生 比第 3 个学生大 2 岁,第 3 个学生比第 2 个学生大 2 岁,第 2 个 学生比第 1 个学生大 2 岁,第 1 个学生是 10 岁。 请编程计算出第 5 个学生的年龄。
#include
int main()
{
int age(int n);
printf("第 5 个学生的年龄%d\n",age(5));
return 0;
}
int age(int n)
{
int nianling;
if(n==1)
nianling=10;
else
nianling=age(n-1)+2;
return(nianling);
}
六、用递归方法求 n!
#include
int main()
{
int jiecheng(int n);
int n;
printf("请输入一个整数:");
scanf("%d",&n);
printf("%d!=%d\n",n,jiecheng(n));
return 0;
}
int jiecheng(int n)
{
int jieguo;
if(n<0)
printf("n<0,数字输入得不对!");
else if(n==0||n==1)
jieguo=1;
else
jieguo=jiecheng(n-1)*n;
return(jieguo);
}
五、指针
输入两个整数,按先大后小的顺序输出这两个数。
请用指针来编程。
方法一:
#include
int main()
{
int a,b,*p,*q,*r;
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
p=&a;
q=&b;
if(a
方法二:
#include
int main()
{
int a,b,*p,*q,t;
printf("请输入两个整数:\n");
scanf("%d,%d",&a,&b);
p=&a;
q=&b;
if(a
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)