大一学C语言做过的作业。

版权声明:本文为博主原创文章,未经博主允许不得转载 QQ255615。 https://blog.csdn.net/Admin_Chin/article/details/71698558

本人用得教科书是《C程序设计(第四版)》谭浩强 著  清华大学出版社。大一的时候刚上大学,也没统一的交报告的格式,作业也没备注题目跟要求,就只有一个文本,想想大一还真的是好蠢萌。

下面放出大一上学期学的C语言所做过的作业。

  1. 输入一个数,判断是正数、负数还是零。(第七题)
#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

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




猜你喜欢

转载自blog.csdn.net/Admin_Chin/article/details/71698558
今日推荐