第一题 输出a+b
# include <stdio.h>
int main()
{
int a,b;
while(~scanf("%d%d",&a,&b)){
printf("%d\n",a+b);
}
return 0;
}
此题主要在于~的运用, ~是C语言中的按位取反,在~scanf后,输入Ctrl+Z时,scanf会返回-1,while(~-1)==while(0),0为假,退出while循环。
第二题 输入一个数据后给一组数据排序
#include <stdio.h>
int main()
{
int a[10];
int i=0;
int t;
for(i=0;i<9;i++)
{
scanf("%d",&a[i]);
}//循环赋值
a[9]=0;
int x;
scanf("%d",&x);
for (i=0;i<10;i++)
{
if(x>=a[i] && x<=a[i+1])
{
t=i+1;
break;
}//判断插入的位置
}
printf("%d\n",t);//插入的位置
for (i=9;i>t;i--)
{
a[i]=a[i-1];
}//先把数往后推一位
a[t]=x;// 再把插入的那个位置赋值
for (i=0;i<10;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
程序具体描述在代码中已经描述很清楚了
第三题 求出给出数值的阶乘之和
#include <stdio.h>
int main()
{
int n;
int t=1,sum=0;
scanf("%d",&n);
for(int i=1;i<=n;i++){
t=t*i;
sum=sum+t;
}
printf("%d",sum);
return 0;
}
易错点在于定义t时容易为0,如果t为0,则sum永远等于0,输出的也永远为0.
第四题 输出水仙花数
PS:水仙花为个位数的三次方加十位数的三次方加百位数的三次方等于这个数本身
#include <stdio.h>
int main()
{
int a,b,c,i;
for(i=100;i<=999;i++){
a=i/100;
b=i/10%10;
c=i%10;
if(a*a*a+b*b*b+c*c*c == i){
printf("%d\n",i);
}
}
return 0;
}
难点在于如何求出个十百位的数
百位:本身直接除以100,因为定义为整形变量,所以自动去除小数部分
十位:本身先除10变成一个两位数,此时的个位为之前的十位,此时的十位为之前的百位,故要得到十位只需再取余10
个位:因为此为三位数,如XX0可以被十整除,故只需对原数取余10,得到的数便为个位
第五题 判断N以内的素数
#include<stdio.h>
int main()
{
int i,j;
int N,a;
scanf("%d",&N);
for(i=2;i<=N;i++)
{
a=0;
for(j=2;j<i;j++)
{
if(i%j==0)
a++;
}
if(a==0)
printf("%d\n",i);
}
return 0;
}
问题在于如何定义双层for循环,之后便是判断一个数是否能够被除1和它本身以外的数整除,如果可以则代表不是素数,则这个数舍弃
第六题 执行一个分段函数 如下:
#include <stdio.h>
int main()
{
double x,y;
scanf("%lf",&x);
if(x<1){
y=x;
}else if(x>=1&&x<10)
{
y=2*x-1;
}else if(x>=10){
y=3*x-1;
}
printf("%.2lf",y);
return 0;
}
此题难度不大,解题方法也可多种,if...else,while...等都可
注:%.2lf作用为使输出的数据保留两位小数,这样可以省去后面的一堆0,做到美观
第七题 反向输出一个100以内的字符串
#include <stdio.h>
#include <string.h>
int main(void)
{
char str1[100];
scanf("%s", str1);
char str2[100];
int i = 0;
int j = 0;
int len = strlen(str1);
for (i = len - 1; i >= 0; i--)
{
str2[j++] = str1[i];
}
str2[j] = '\0';
printf("%s\n", str2);
return 0;
此题也较为简单,='\0'的意义在与结束这个字符串
一周任务完成~争取每周都能进步一点,在完成作业的基础下进行更多的练习。