版权声明:本文为博主原创文章,未经博主允许不得转载 QQ255615。 https://blog.csdn.net/Admin_Chin/article/details/71698558
本人用得教科书是《C程序设计(第四版)》谭浩强 著 清华大学出版社。大一的时候刚上大学,也没统一的交报告的格式,作业也没备注题目跟要求,就只有一个文本,想想大一还真的是好蠢萌。
下面放出大一上学期学的C语言所做过的作业。
- 输入一个数,判断是正数、负数还是零。(第七题)
#include <stdio.h>
int main()
{
int x;
printf("请输入x的值:");
scanf("%d",&x);
if(x<0)
printf("Y=-1\n");
else
if(x=0)
printf("Y=0\n");
else
printf("Y=1\n");
return 0;
}
测试结果:
请输入x的值:4
Y=1
Press any key to continue
请输入x的值:0
Y=0
Press any key to continue
请输入x的值:-9
Y=-1
Press any key to continue
请输入x的值:4
Y=1
Press any key to continue
请输入x的值:0
Y=0
Press any key to continue
请输入x的值:-9
Y=-1
Press any key to continue
2. 输入一个小于10000的正整数,将其每个位数输出,并且逆序输出。(第9题)
#include <stdio.h>
#include <math.h>
int main()
{
int num,weishu,ge,shi,bai,qian,wan;
printf("请输入一个小于10000的正整数\n");
scanf("%d",&num);
if(num>9999)
weishu=5;
else
if(num>999)
weishu=4;
else
if(num>99)
weishu=3;
else
if(num>9)
weishu=2;
else weishu=1;
printf("你输入的数为%d位数\n",weishu);
wan=num/10000;
qian=(int)(num-wan*10000)/1000;
bai=(int)(num-wan*10000-qian*1000)/100;
shi=(int)(num-wan*10000-qian*1000-bai*100)/10;
ge=(int)(num-wan*10000-qian*1000-bai*100-shi*10);
switch(weishu)
{
case 5:printf("每位数字为:%d,%d,%d,%d,%d\n",wan,qian,bai,shi,ge);
printf("逆序输出为:%d,%d,%d,%d,%d\n",ge,shi,bai,qian,wan);break;
case 4:printf("每位数字为:%d,%d,%d,%d\n",qian,bai,shi,ge);
printf("逆序输出为:%d,%d,%d,%d\n",ge,shi,bai,qian);break;
case 3:printf("每位数字为:%d,%d,%d\n",bai,shi,ge);
printf("逆序输出为:%d,%d,%d\n",ge,shi,bai);break;
case 2:printf("每位数字为:%d,%d\n",shi,ge);
printf("逆序输出为:%d,%d\n",ge,shi);break;
case 1:printf("每位数字为:%d\n",ge);
printf("逆序输出为:%d\n",ge);break;
}
return 0;
}
测试结果:
请输入一个小于10000的正整数
8998
你输入的数为4位数
每位数字为:8,9,9,8
逆序输出为:8,9,9,8
Press any key to continue
3. 输入4个数字,让其从小到大排序。(第11题)
#include <stdio.h>
int main()
{
int a,b,c,d,i;
printf("请输入4个数字,以逗号隔开\n");
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d);
if(a>b)
{i=a;a=b;b=i;}
if(a>c)
{i=a;a=c;c=i;}
if(a>d)
{i=a,a=d;d=i;}
if(b>c)
{i=b;b=c;c=i;}
if(b>d)
{i=b;b=d;d=i;}
if(c>d)
{i=c;c=d;d=i;}
printf("从小到大排序为:%d %d %d %d\n",a,b,c,d);
return 0;
}
测试结果:
请输入4个数字,以逗号隔开
5,9,2,11
a=5,b=9,c=2,d=11
从小到大排序为:2 5 9 11
Press any key to continue
4. 求三位数的水仙花数。(第八题)
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c,i;
printf("水仙花数为:\n");
for(i=100;i<1000;i++)
{
a=i/100;
b=i/10-a*10;
c=i%10;
if (i==pow(a,3)+pow(b,3)+pow(c,3))
printf("%d\n",i);
}
return 0;
}
测试结果:
水仙花数为:
153
370
371
407
Press any key to continue
5. 用c语言求下列分数序列的前20项之和(第10题)
#include <stdio.h>
int main()
{
int i,n=20;
float a=2,b=1,c,s=0;
for(i=1;i<=n;i++)
{
s=s+a/b;
c=a;
a=a+b;
b=c;
}
printf("前20项之和为:%f \n\n",s);
return 0;
}
测试结果:
前20项之和为:32.660261
Press any key to continue
6. 一个球从100m高度自由落下,每次落地后反弹回原来高度的一半,再落下.求它在第10次落地并反弹到最高点,共经过多少m?第10次反弹多高?(第11题)
#include <stdio.h>
int main()
{
int i,n=10;
float s=100,h=s/2;
for(i=2;i<=n;i++)
{
s=s+2*h;
h=h/2;
}
printf("小球下落10次共行驶的路程为:%f 米\n\n",s);
printf("小球下落10次反弹高度为:%f 米\n\n",h);
return 0;
}
测试结果:
小球下落10次共行驶的路程为:299.609375 米
小球下落10次反弹高度为:0.097656 米
Press any key to continue
7. 输出杨辉三角。(第6题)
#include <stdio.h>
#define N 40
void main()
{
int a[N][N]={0},M;
int i,j;
printf("请输入需要输出的行数:");
for(i=0;i<N;i++)
a[i][0]=a[i][i]=1;
for(i=2;i<N;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
scanf("%d",&M);
for(i=0;i<M;i++)
{
for(j=0;j<=i;j++)
printf("%-5d",a[i][j]);
printf("\n");
}
}
测试结果:
请输入需要输出的行数:10
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
Press any key to continue
请输入需要输出的行数:15
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287171617161287715 286 78 13 1
1 14 91 364 1001200230033432300320021001364 91 14 1
Press any key to continue
8. 利用折半查找法找数。(第9题)
#include<stdio.h>
#define N 15
void main()
{
int i,number,top,bott,mid,loca,a[N],flag=1,sign;
char c;
printf("由大到小输入15个数 :\n");
for(i=0;i<N;i++)
{
scanf("%d",&a[0]);
i++;
while(i!=-1&&i<N)
{
scanf("%d",&a[i]);
if(a[i]<a[i-1])
i++;
else
{
printf("输入有误,请重新输入:\n");
i=-1;
}
}
}
printf("\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
while(flag)
{
printf("寻找:");
scanf("%d",&number);
sign=0;
top=0;
bott=N-1;
if((number<a[0])||(number>a[N-1]))
loca=-1;
while((!sign)&&(top<=bott))
{
mid=(bott+top)/2;
if(number==a[mid])
{
loca=mid;
printf("找到%d,它是第%d个数\n",number,loca+1);
sign=1;
}
else if(number>a[mid])
bott=mid-1;
else
top=mid+1;
}
if(!sign||loca==-1)
printf("无此数\n");
printf("如继续寻找,请输入数字;否则按n/N");
scanf("%c",&c);
if(c=='N'||c=='n')
flag=0;
printf("\n");
}
}
测试结果:
由大到小输入15个数 :
5
4
6
输入有误,请重新输入:
55
44
33
22
21
20
18
16
15
14
9
8
3
2
1
55 44 33 22 21 20 18 16 15 14 9 8 3 2 1
寻找:4
无此数
如继续寻找,请输入数字;否则按n/N
寻找:9
找到9,它是第11个数
如继续寻找,请输入数字;否则按n/N
寻找:20
找到20,它是第6个数
如继续寻找,请输入数字;否则按n/N
寻找:n
找到20,它是第6个数
如继续寻找,请输入数字;否则按n/N
Press any key to continue
9. 输入3行字符串,找出其中的大写字母、小写字母、数字,空格以及其他字符的个数。(第10题)
#include <stdio.h>
int main()
{
int i,j,upp,low,dig,spa,oth;
char text[3][80];
upp=low=dig=spa=oth=0;
for (i=0;i<3;i++)
{
printf("请输入第%d行的文字:\n",i+1);
gets(text[i]);
for (j=0;j<80 && text[i][j]!='\0';j++)
{
if (text[i][j]>='A'&& text[i][j]<='Z')
upp++;
else if (text[i][j]>='a' && text[i][j]<='z')
low++;
else if (text[i][j]>='0' && text[i][j]<='9')
dig++;
else if (text[i][j]==' ')
spa++;
else
oth++;
}
}
printf("\n\n\n大写字母个数为: %d\n",upp);
printf("小写字母个数为: %d\n",low);
printf("数字的个数为 : %d\n",dig);
printf("空格的个数为 : %d\n",spa);
printf("其他字符个数为: %d\n",oth);
return 0;
}
测试结果:
请输入第1行的文字:
s4d5fas4df53as4d5fas
请输入第2行的文字:
JKHJKHKLH2389p8*/-*
请输入第3行的文字:
sd6f5+asdf+5as+d6f5+a
大写字母个数为: 9
小写字母个数为: 26
数字的个数为 : 17
空格的个数为 : 0
其他字符个数为: 8
Press any key to continue
10.输入一段文字,找出其中的大写字母、小写字母、数字,空格以及其他字符的个数。(第9题)
#include <stdio.h>
int zimu,shuzi,kongge,qita;
int main(){
void count(char []);
char text[100];
printf("请输入一段文字:\n");
gets(text);
zimu=0;
shuzi=0;
kongge=0;
qita=0;
count(text);
printf("此文章有:\n");
printf("字母%d个\n",zimu);
printf("数字%d个\n",shuzi);
printf("空格%d个\n",kongge);
printf("其他字符%d个\n",qita);
return 0;
}
void count(char str[]){
int i;
for(i=0;str[i]!='\0';i++)
if((str[i]>='a' && str[i]<='z' )|| (str[i]>='A' && str[i]<='Z'))
zimu++;
else if(str[i]>='0' && str[i]<='9')
shuzi++;
else if(str[i]==32)
kongge++;
else
qita++;
}
测试结果:
请输入一段文字:
sdf a9+f8 9w+e8f*-/*-wef+98+98,+9l8.9;lkl.kj,fh+9j 8s+93245+1 92898df
此文章有:
字母23个
数字24个
空格4个
其他字符18个
Press any key to continue
11. 写程序完成下面条件:1)输入10个职工的姓名和职工号;2)按职工号由小到大的顺序排序;3)要求输入一个职工号,用折半法查找出该职工的姓名,从主函数输入要查找的职工号,输出该职工的姓名。(第15题)
#include<stdio.h>
#include<string.h>
#define N 10
void main()
{
void input(int[],char name[][8]);
void sort(int[],char name[][8]);
void search(int,int[],char name[][8]);
int num[N],number,flag=1,c;
char name[N][8];
input(num,name);
sort(num,name);
while(flag==1)
{
printf("\n请输入要查找的职工号:");
scanf("%d",&number);
search(number,num,name);
printf("是否继续?Y/N");
getchar();
c=getchar();
if(c=='N'||c=='n')
flag=0;
}
}
void input(int num[],char name[N][8])
{
int i;
for(i=0;i<N;i++)
{
printf("请输入职工号:");
scanf("%d",&num[i]);
printf("请输入职工名字:");
getchar();
gets(name[i]);
}
}
void sort(int num[],char name[N][8])
{
int i,j,min,temp1;
char temp2[8];
for(i=0;i<N-1;i++)
{
min=i;
for(j=i;j<N;j++)
if(num[min]>num[j])
min=j;
temp1=num[i];
strcpy(temp2,name[i]);
num[i]=num[min];
strcpy(name[i],name[min]);
num[min]=temp1;
strcpy(name[min],temp2);
}
printf("\n排序输出:\n");
for(i=0;i<N;i++)
printf("\n%5d %10s",num[i],name[i]);
}
void search(int n,int num[],char name[N][8])
{
int top,bott,mid,loca,sign;
top=0;
bott=N-1;
loca=0;
sign=1;
if((n<num[0])||(n>num[N-1]))
loca=-1;
while((sign==1)&&(top<=bott))
{
mid=(bott+top)/2;
if(n==num[mid])
{
loca=mid;
printf("职工号是%d的是%s\n",n,name[loca]);
sign=-1;
}
else if(n<num[mid])
bott=mid-1;
else
top=mid+1;
}
if(sign==1||loca==-1)
printf("%d不在名单中\n",n);
}
测试结果:
请输入职工号:1
请输入职工名字:a
请输入职工号:2
请输入职工名字:b
请输入职工号:3
请输入职工名字:c
请输入职工号:9
请输入职工名字:d
请输入职工号:8
请输入职工名字:e
请输入职工号:7
请输入职工名字:f
请输入职工号:6
请输入职工名字:g
请输入职工号:5
请输入职工名字:h
请输入职工号:10
请输入职工名字:zzz
请输入职工号:13
请输入职工名字:werwe
排序输出:
1 a
2 b
3 c
5 h
6 g
7 f
8 e
9 d
10 zzz
13 werwe
请输入要查找的职工号:7
职工号是7的是f
是否继续?Y/Ny
请输入要查找的职工号:3
职工号是3的是c
是否继续?Y/Nn
Press any key to continue
12. 题目忘记啦,哭(第17题)
#include <stdio.h>
int main()
{
void convert(int n);
int number;
printf("请输入一个整数:\n");
scanf("%d",&number);
printf("输出:");
if(number<0)
{
putchar('-');
putchar(' ');
number=-number;
}
convert(number);
printf("\n\n");
return 0;
}
void convert(int n)
{
int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
putchar(32);
}
测试结果:
请输入整数:
2345678
输出:2 3 4 5 6 7 8
Press any key to continue
请输入整数:
-345697
输出:- 3 4 5 6 9 7
Press any key to continue
13. 输入3个数字,从小到大排列。(第一题)
#include<stdio.h>
int main()
{
void swap(int *p1,int *p2);
int a,b,c;
int *point1,*point2,*point3;
printf("请输入3个数字:");
scanf("%d %d %d",&a,&b,&c);
point1=&a;
point2=&b;
point3=&c;
if(a>b)
swap(point1,point2);
if(a>c)
swap(point1,point3);
if(b>c)
swap(point2,point3);
printf("从小到大排列为:%d %d %d",a,b,c);
printf("\n\n");
return 0;
}
void swap(int *p1,int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
测试结果:
请输入3个数字: 99 44 88
从小到大排列为:44 88 99
Press any key to continue
14. 编写C语言程序,输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。(第三题)
#include<stdio.h>
int main()
{
void input(int *);
void paixu(int *);
void output(int *);
int number[10];
input(number);
paixu(number);
output(number);
return 0;
}
void input(int *number)
{
int i;
printf("请输入10个整数:");
for(i=0;i<10;i++)
scanf("%d",&number[i]);
}
void paixu(int *number)
{
int *max,*min,*p,temp;
max=min=number;
for(p=number+1;p<number+10;p++)
if(*p>*max)
max=p;
else if(*p<*min)
min=p;
temp=number[0];
number[0]=*min;
*min=temp;
if(max==number)
max=min;
temp=number[9];
number[9]=*max;
*max=temp;
}
void output(int *number)
{
int *p;
printf("这10个数分别是: ");
for(p=number;p<number+10;p++)
printf("%d ",*p);
printf("\n\n\n");
}
测试结果:
请输入10个整数:9 8 5 545 123 4658 878 9 4 1
这10个数分别是: 1 8 5 545 123 9 878 9 4 4658
Press any key to continue
15. 输入一行文字,找出其中的大写字母、小写字母、数字,空格以及其他字符的个数。(第八题)
#include<stdio.h>
int main()
{
int daxie=0,xiaoxie=0,shuzi=0,kongge=0,qita=0,i=0;
char *p,s[200];
printf("输入一行文字: ");
while((s[i]=getchar())!='\n')
i++;
p=&s[0];
while(*p!='\n')
{
if((*p>='A')&&(*p<='Z'))
daxie++;
else if((*p>='a')&&(*p<='z'))
xiaoxie++;
else if(*p==' ')
kongge++;
else if((*p<='9')&&(*p>='0'))
shuzi++;
else
qita++;
p++;
}
printf("大写字母有: %d 个.\n小写字母有: %d 个 .\n数字有: %d 个.\n空格有: %d 个.\n其他字符有: %d 个.\n",daxie,xiaoxie,shuzi,kongge,qita);
return 0;
}
测试结果:
输入一行文字: sdf+ asd8f +as98df +9as8d+f98UYSAGTEFOIAYWE FIO23Y4982374980237490 82 34 Q 9 O u kDF+9G +6DFG +6 +6 DG+65 S+6
大写字母有: 29 个.
小写字母有: 17 个 .
数字有: 37 个.
空格有: 16 个.
其他字符有: 10 个.
Press any key to continue
16. 输入5个学生的学号、姓名、分数1、分数2以及分数3并输出。(第三题)
#include<stdio.h>
#define N 5
struct student
{
char num[6];
char name[8];
int score[4];
}stu[N];
int main()
{
void print(struct student stu[6]);
int i,j;
for(i=0;i<N;i++)
{
printf("\n请输入第%d个学生的资料 :\n",i+1);
printf("学号: ");
scanf("%s",stu[i].num);
printf("姓名: ");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("分数 %d:",j+1);
scanf("%d",&stu[i].score[j]);
}
printf("\n");
}
print(stu);
return 0;
}
void print(struct student stu[6])
{
int i,j;
printf("\n学号\t姓名\t分数1\t分数2\t分数3\n");
for(i=0;i<N;i++)
{
printf("%5s %10s",stu[i].num,stu[i].name);
for(j=0;j<3;j++)
printf("%9d",stu[i].score[j]);
printf("\n");
}
}
测试结果:
请输入第1个学生的资料 :
学号: 1
姓名: sb1
分数 1:100
分数 2:10
分数 3:1
请输入第2个学生的资料 :
学号: 2
姓名: sb2
分数 1:1
分数 2:10
分数 3:100
请输入第3个学生的资料 :
学号: 3
姓名: sb3
分数 1:4
分数 2:5
分数 3:6
请输入第4个学生的资料 :
学号: 4
姓名: sb4
分数 1:7
分数 2:8
分数 3:9
请输入第5个学生的资料 :
学号: 5
姓名: sb5
分数 1:3
分数 2:2
分数 3:1
学号 姓名 分数1 分数2 分数3
1 sb1 100 10 1
2 sb2 1 10 100
3 sb3 4 5 6
4 sb4 7 8 9
5 sb5 3 2 1
Press any key to continue