C语言 前五章 难点代码总概 (上)
1.用条件运算计算下面分段函数的值 y=x+25(x>0)or y=x-25(x<=0)
难点在于不经常使用的条件运算的格式:(判断语句)?(真):(假);
#include<stdio.h>
int main()
{
int x,y;
printf("input x:");
scanf("%d",&x);
y=(x>0)?(x+25):(x-25);
printf("%d\n",y);
return 0;
}
2.输入A或B或C时显示“GOOD”,输入D或E时显示"BAD",其他情况显示"ERROR"。
难点在于相比for循环语句,switch语句的格式较为生疏,default的拼写常出现错误,字母作为char类型,在此处需要加''。
#include<stdio.h>
int main()
{
char score;
printf("input score:");
scanf("%c",&score);
switch(score)
{
case 'A':
case 'B':
case 'C':
printf("GOOD\n");
break;
case 'D':
case 'E':
printf("BAD\n");
break;
default:
printf("ERROR\n");
}
return 0;
}
3.利用do while命令,输入N个学生的某课程成绩,计算平均成绩
do while的格式,理清i计数
#include<stdio.h>
#define N 5
int main()
{
int x,i=1,sum=0;
do {
printf("Data:");
scanf("%d",&x);
sum=sum+x;
i++;
}while(i<=N);
printf("%d\n",sum/N);
return 0;
}
4.判断素数。从键盘上输入一个整数,判断其是否为素数。
素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数
思路1):因此判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。
思路2):另外判断方法还可以简化。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ 之间的每一个整数去除就可以了。如果 m 不能被 2 ~ 间任一整数整除,m 必定是素数。
#include<stdio.h>
#include<math.h>
int main()
{
int k,i,sk;
printf("data:");
scanf("%d",&k);
sk=(int)sqrt(k);
for(i=2;i<=sk;i++)
if(k%i==0)
{
break;
}
if(i>sk)
printf("yes\n");
else
printf("no\n");
return 0;
}
5.搬砖问题。36块砖,36人搬,男搬4,女搬3,两孩搬1砖。要求编写程序,把可能的搬运方案都找出来。
注意:穷举算法。z=z+2。
#include<stdio.h>
int main()
{
int x,y,z;
for(x=0;x<=8;x++)
for(y=0;y<=12;y++)
for(z=0;z<=36;z=z+2)
if((4*x+3*y+z/2==36)&&(x+y+z==36))
{
printf("men:%d\n",x);
printf("women:%d\n",y);
printf("kid:%d\n",z);
}
return 0;
}
6.从键盘输入一个字符串,统计其中数字字符的个数。
此题设计的巧妙之处在于:利用ch!=\n判断一个字符串的始末,利用getchar()一一获取字符。
#include<stdio.h>
int main()
{
char ch;
int count=0;
printf("Input a char:");
ch=getchar();
while(ch!='\n')
{
if(ch>='0'&&ch<='9')
count++;
ch=getchar();
}
printf("%d",count);
return 0;
}
法2.不是很巧妙但是很诚恳的方法
#include<stdio.h>
#define n 50
int main()
{
char a[n];
int i,j;
printf("输入一个字符串\n");
gets(a);
for(i=0,j=0;i<n;i++)
{
if(a[i]>='0'&&a[i]<='9')
j++;
}
printf("%d",j);
return 0;
}
7.用gets()函数输入一个字符串,将其存储到str数组中,然后使用printf()函数输出str中的字符串。
注意:gets()函数的使用与getchar()并不相同。
#include<stdio.h>
int main()
{
char str[20];
printf("input");
gets(str);
puts(str);
return 0;
}
8.将两个字符串连接为一个新字符串,并将该字符串输出。
strcat(x1,x2); 是将两个字符串x1,x2连接为一个新的字符串;s1是字符数组名或字符数组的开始地址,s2既可以是字符数组名,也可以是字符串;若想使用该函数,须引用string库。
#include<stdio.h>
#include<string.h>
int main()
{
char s1[20]="icantforgetu",s2[20]="xiaoshi";
strcat(s1,s2);
puts(s1);
return 0;
}
9.字符串复制。
strcpy(x1,x2);是将x2复制到x1;s1是字符数组名或字符数组的开始地址,但不能为字符串,s2既可以是字符数组名,也可以是字符串;若想使用该函数,须引用string库。
#include<stdio.h>
#include<string.h>
int main()
{
char s1[20]="mylover",s2[20]="xiaoshi";
strcpy(s1,s2);
puts(s1);
return 0;
}
10.设计一个密码验证程序。
strcmp(s1,s2);比较字符串s1与s2的大小,若s1大于s2,返回一个正数,若s1小于s2,返回一个负数,若s1,s2相等,返回0;s1,s2可以是字符数组名也可以是字符串;若想使用该函数,须引用string库。
#include<stdio.h>
#include<string.h>
#define N 3
int main()
{
char str[10];
int i;
for(i=0;i<N;i++)
{
printf("INPUT");
gets(str);
if(strcmp(str,"china")==0)
break;
}
if(i>=N)
printf("sorry\n");
if(i<N)
printf("welcome\n");
return 0;
}