今天写了作业
以下是作业的一些题目
1.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和
#include <stdio.h>
#define N 20
int main()
{
float i = 2;/*这里定义成float型,是因为下面进行了i/j的操作,如果是整型
那么i/j的得数也是整数,这样就错了*/
float j = 1;
float sum = 0;
int n;
for(n = 1;n <= N;n++)
{
sum += i / j;
i = j + i;
j = i - j;
}
printf("%f\n",sum);
return 0;
}
2.求1+2!+3!+…+10!的和
#include <stdio.h>
int jiecheng(int n)
{
int i;
int x = 1;/*定义整型,范围够*/
for(i = 1;i <= n;i++)/*求n的阶乘*/
{
x *= i;
}
return x;
}
int main(void)
{
/*int a=3;
printf("%d",jiecheng(a));*/
int n;
int i;
int sum = 0;
scanf("%d",&n);
for(i = 1;i <= n;i++)/*求1~n的阶乘的和*/
{
sum += jiecheng(i);
}
printf("%d\n",sum);
return 0;
}
3.求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制
#include <stdio.h>
int main()
{
int a;
int b;
int s = 0;
int i;
int sum = 0;
printf("a = ");
scanf("%d",&a);
printf("多少个数相加:");
scanf("%d",&b);
for(i = 1;i <= b;i++)
{
sum = sum * 10 + a;
s += sum;
}
printf("result:%d\n",s);
return 0;
}
4.编程实现输入5个学生的学号、计算他们的期中和期末成绩,然后计算其平均成绩,并输出成绩表。(结构体)
#include <stdio.h>
int main()
{
struct score
{
float mid;
float final;
char num[5];
}stu[5];
int i;
float sum_mid = 0;
float sum_final = 0;
float ave_mid = 0;
float ave_final = 0;
for(i = 0;i < 5;i++)
{
printf("input student's num:");
scanf("%s",stu[i].num);
printf("input mid score:");
scanf("%f",&stu[i].mid);
printf("input final score:");
scanf("%f",&stu[i].final);
}
for(i = 0;i < 5;i++)
{
sum_mid += stu[i].mid;
sum_final += stu[i].final;
}
ave_mid = sum_mid / 5;
ave_final = sum_final / 5;
for(i = 0;i < 5;i++)
{
printf("%s号学生的期中成绩为:%g期末成绩为:%g\n",stu[i].num,stu[i].mid,stu[i].final);
}
putchar('\n');
printf("期中平均成绩为:%g,期末平均成绩为:%g\n",ave_mid,ave_final);
return 0;
}
5.将字符串“We Are Family!”,去除空格后打印出来。(WeAreFamily!)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void delete(char *s,char c)
{
int i;
int len;
int k = 0;
len = strlen(s);/*判断s的长度*/
char *copy = (char*)malloc(len + 1);/*分配动态空间,copy的长度要比s大一*/
for(i = 0;i < len;i++)
{
if(s[i] != c)
{
copy[k] = s[i];/*将s中除了字符c以外的字符赋值给copy*/
k++;
}
}
copy[k] = '\0';
strcpy(s,copy);/*将copy里的内容复制到s里面去*/
free(copy);
}
int main()
{
char str[100];
char c;
printf("输入一个字符串:");
fgets(str,100,stdin);
printf("要删除的字符:");
scanf("%c",&c);
delete(str,c);
printf("删除之后的字符串为:%s\n",str);
return 0;
}
6.输入一个字符串,判断其是否是回文。(回文:即正读和反读都一样,如abcba, abccba)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char str[100];
char str1[100];
int len;
int i,j = 0;
int tmp;
char s[100];
int a;
printf("输入一个字符串:");
fgets(str,100,stdin);
len = strlen(str);
str[len-- - 1] = '\0';
char *copy = (char *)malloc(len + 1);/*将str复制到s中*/
for(i = 0;i < len;i++)
{
copy[j] = str[i];
j++;
}
copy[j] = '\0';
strcpy(s,copy);
free(copy);
for(i = len - 1,j = 0;i >= 0,j < len;i--,j++)/*将字符串倒序输出*/
{
str1[j] = str[i];
}
str1[j] = '\0';
printf("change:%s\n",str1);
printf("before:%s\n",str);
// printf("res:%s\n",s);
for(i = 0;i < len;i++)/*字符串比较,不能直接用数组名比较*/
{
if(s[i] == str1[i])
{
a = 0;
}
else
{
a = 1;
}
}
if(a == 0)
{
printf("是回文。");
}
else
{
printf("不是回文。");
}
return 0;
}