小白学C语言(一)

C语言程序设计(一)

小白学C语言的记录博。
最新:课程已经结束,不会再更新了,但会时不时更正错误。
题目都是实验课老师布置的,代码有参考其他大佬,特此致谢!
使用教材:C语言程序设计(第3版) 何钦铭、颜晖主编 高等教育出版社

一、C程序的编程环境和运行方法。
1
在屏幕上显示语句。

#include
int main()
{     
	printf("Welcome to You!\n"); 
	return 0;
}

样例
小白学C语言(一)_第1张图片
2
加法运算。

#include 
int main()
{
	int a,b;
	scanf("%d%d",&a,&b); 
	printf("sum=%d\n",a+b);
	return 0;	
} 

样例
小白学C语言(一)_第2张图片
3
加法运算。

#include
int main(void)
{
	int a,b,sum;
	a=123;
	b=456;
	sum=a+b;
	printf("sum is %d\n",sum);
	return 0;
}

样例
小白学C语言(一)_第3张图片
二、顺序结构程序设计
1
将华氏温度转换为摄氏温度。

#include 
int main()
{ 
	float c,f;        
	scanf("%f",&f);   
	c=(5.00/9)*(f-32);   
	printf("c=%.2f\n",c,f);
	return 0;  
}

样例
小白学C语言(一)_第4张图片
2

计算圆柱体体积。

#include
#define PI 3.1415926
int main(void)
{
	float r,h,v;
	scanf("%f%f",&r,&h);
	printf("v=%.2f\n",PI*r*r*h);
	return 0;
}

样例
小白学C语言(一)_第5张图片
3
计算一元二次方程ax²+bx+c=0的根x₁,x₂。
自编(if-else语句)

#include
#include
int main(void)
{
	float a,b,c,delt,x1,x2;
	scanf("a=%f,b=%f,c=%f",&a,&b,&c);
	delt=b*b-4*a*c;
	if(delt>=0){
		x1=(-b+sqrt(delt))/(2*a),x2=(-b-sqrt(delt))/(2*a);
		printf("x1=%.2f\nx2=%.2f",x1,x2);
		return 0;
	}
	else{
		printf("error\n");
		return 0;
	}
}	

范例(顺序结构)

#include
#include
int main()
{
	float a,b,c,delt,x1,x2;
	scanf("a=%f,b=%f,c=%f",&a,&b,&c);
	delt=b*b-4*a*c;
	printf("x1=%.2f\n",(-b+sqrt(delt))/(2*a));
	printf("x2=%.2f",(-b-sqrt(delt))/(2*a));
	return 0;
} 

样例
小白学C语言(一)_第6张图片
三、分支结构
1
输入月份1-12,输出其对应的季节。

#include
int main(void)
{
	int n;
	scanf("%d",&n);
	if(n==2||n==3||n==4){
		printf("Spring");
	}
	else if(n==5||n==6||n==7){
		printf("Summer");
	}
	else if(n==8||n==9||n==10){
		printf("Autumn");
	}
	else if(n==11||n==12||
	n==1){
		printf("Winter");
	}
	else{
		printf("Error");
	}
	
	return 0;
}

样例
小白学C语言(一)_第7张图片
2
输入一个整数,判断它能否被3,5整除,并输出该数所属类型。A:能同时被3,5整除;B:能被3整除;C:能被5整除;D:不能被3,5任一个整除。

#include
int main(void)
{
	int n;
	scanf("%d",&n);
	if(n%3==0&&n%5==0)
		printf("A");
	
	else if(n%3==0)
		printf("B");
	
	else if(n%5==0)
		printf("C");
	
	else
		printf("D");
	
	
	return 0;
}

小白学C语言(一)_第8张图片
3
输入x,求分段函数的值,函数如下,函数值保留两位小数:
在这里插入图片描述

#include
int main(void)
{
	float x,y;
	scanf("%f",&x);
	if(x<1){
		y=x;
		printf("y=%.2f",y);
	}
	
	else if(x<10){
		y=x-1;
		printf("y=%.2f",y);
	}
	
	else{
		y=3*x-11;
		printf("y=%.2f",y);
	}
	
	return 0;
}

样例
小白学C语言(一)_第9张图片
4
输入三个点的坐标值,若该三点能构成三角形则输出周长和面积,否则输出Impossible。(三角形判断条件:任意两边之和大于第三遍)

#include
#include
int main(void)
{
	float x1,x2,x3,y1,y2,y3;
	float a,b,c,L,S;
	scanf("%f,%f",&x1,&y1);
	scanf("%f,%f",&x2,&y2);
	scanf("%f,%f",&x3,&y3);
	a=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
	b=sqrt((x1-x3)*(x1-x3)+(y1-y3)*(y1-y3));
	c=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));
	
	if(a+b>c&&a+c>b&&c+b>a){
		L=a+b+c;
		S=sqrt(0.5*L*(0.5*L-a)*(0.5*L-b)*(0.5*L-c));
		printf("primeter=%.2f,area=%.2f\n",L,S);
	}
	
	else{
		printf("Impossible\n");
	}
	
	return 0;
}

样例
小白学C语言(一)_第10张图片

5
输入三个整数a、b、c,将它们由大到小依次显示出来。

#include
int main(void)
{
	int a,b,c;
	scanf("%d,%d,%d",&a,&b,&c);
	if(a>b){
		if(b>c){
			printf("%d,%d,%d",a,b,c);
		}
		else if(a>c){
			printf("%d,%d,%d",a,c,b);
		}
		else{
			printf("%d,%d,%d",c,a,b);
		}
}
	
	else{
		if(a>c){
			printf("%d,%d,%d",b,a,c);
		}
		else if(b>c){
			printf("%d,%d,%d",b,c,a);
		}
		else{
			printf("%d,%d,%d",c,b,a);
		}
	}
	
	return 0;
}

样例
小白学C语言(一)_第11张图片
第4题和第5题,scanf的格式控制字符串中我添加了逗号,运行时也输入了逗号,但是运行结果总是出错,想问是哪里出了问题?
隔天,我发现不是代码的问题,而是我的输入法的问题,我的输入法在不同软件上中英文切换是不同步的,在运行时输入我用的是中文标点所以导致出错

6
输入一个大写字母,输出该字母及其对应的ASCII码值,同时输出其小写字母及其对应的ASCII码的值。

#include
int main(void)
{
	char ch;
	ch=getchar();
	if(ch>='A'&&ch<='Z')
	{
		printf("upper:%c,%d\n",ch,ch);
		printf("lower:%c,%d\n",ch+32,ch+32);
	}
	
	return 0;
}

样例
小白学C语言(一)_第12张图片
7
输入两个数字字符并分别存放在字符型变量a和b中(char a,b;),将这两个数字字符对应的数值相加并输出。

#include
int main(void)
{
	char a,b;
	int c;
	scanf("a=%c,b=%c",&a,&b);
	c=a-'0'+b-'0';
	printf("%d+%d=%d",a-'0',b-'0',c);
	return 0;
}

样例
小白学C语言(一)_第13张图片
8
输入一个3位的整数,然后将它们逆序输出。

#include
int main(void)
{
	int n;
	scanf("%d",&n);
	printf("%d",(n%10)*100+(n/10%10)*10+n/100);
	return 0;
}

样例
小白学C语言(一)_第14张图片
9
输入1个字母后,输出该字母的前序字母、该字母、该字母的后序字母(例如:输入g,则输出fgh;输入a,则输出zab;输入M,则输出LMN;输入Z,则输出YZA),若不是字母则显示该字符本身。

#include
int main(void)
{
	char b;
	b=getchar();
	
	if((b>='b'&&b<='y')||(b>='B'&&b<='Y'))
	printf("%c%c%c",b-1,b,b+1);
	
	else if(b=='A'||b=='a')
	printf("%c%c%c",b+25,b,b+1);
	
	else if(b=='Z'||b=='z')
	printf("%c%c%c",b-1,b,b-25);
	
	else
	putchar(b);
	
	return 0;
}

样例
小白学C语言(一)_第15张图片
10
教材P66-三(3):出租车计价问题。

#include
int main(void)
{
	float h,n,m;
	int t;
	scanf("%f,%d",&h,&t);
	if(t<5)
	n=0;
	else
	n=t/5*2;
	
	if(h<=3){
		m=10;
		printf("money=%.0f",m+n+0.5);
	}
	else if(h<=13){
		m=10+(h-3)*2;
		printf("money=%.0f",m+n+0.5);
	}
	else{
		m=10+(10-3)*2+(h-10)*3;
		printf("money=%.0f",m+n+0.5);
	}
	
	return 0;
}

样例
小白学C语言(一)_第16张图片
11
将人生按照年龄划分为童年[A](0

#include
int main(void)
{
	int n;
	scanf("%d",&n);
	if(n>0){
	
	switch(n){
		case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:
			printf("age=%d:A\n",n);
			break;
		case 10:case 11:case 12:case 13:case 14:case 15:case 16:case 17:case 18:case 19:
			printf("age=%d:B\n",n);
			break;
		case 20:case 21:case22:case 23:case 24:case 25:case 26:case 27:case 28:case 29:
			printf("age=%d:C\n",n);
			break;
		case 30:case 31:case 32:case 33:case 34:case 35:case 36:case 37:case 38:case 39:
		case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 48:case 49:
			printf("age=%d:D\n",n);
			break;
		case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:case 58:case 59:
		case 60:case 61:case 62:case 63:case 64:case 65:case 66:case 67:case 68:case 69:
			printf("age=%d:E\n",n);
			break;
		default:
			printf("age=%d:F\n",n);
			break;
	}
	}
	else
	printf("Error");
	return 0;
}

样例
小白学C语言(一)_第17张图片
12
某年某月某日是当年的第几天(switch月份倒序)。

#include
int judgeyear(int year){
    int flag=0;//平年返回0 
    if ((year%4==0 && year%100 !=0) || year%400==0)
           flag=1;//闰年返回1 
    return flag; 
}
/*本题不考虑日期的合法性,输入的日期是合法的*/ 
int main()
{
    int year,month,day;
    int dayNumber=0; 
    scanf("%d%d%d",&year,&month,&day);
    switch (month){
    	case 12:dayNumber +=30;
    	case 11:dayNumber +=31;
    	case 10:dayNumber +=30;
    	case 9 :dayNumber +=31;
    	case 8 :dayNumber +=31;
    	case 7 :dayNumber +=30;
    	case 6 :dayNumber +=31;
    	case 5 :dayNumber +=30;
    	case 4 :dayNumber +=31;
    	case 3 :if((year%4==0 && year%400!=0)||year%400==0){dayNumber +=29;}else {dayNumber +=28;};//3月的情况,请填写多行代码
        case 2 :dayNumber +=31;//2月的情况,请填写一行代码
        case 1 :dayNumber +=0;break;//1月的情况,请填写多行代码
        default:printf("Input error!");
    }
    printf("%d",dayNumber+day);
}

样例
小白学C语言(一)_第18张图片
四、循环结构
1
输入多个字符(以回车作为输入的结束),统计其中大小写元音字母的个数。

#include 
int main (void)
{
	char n;
	int Lower,Capital;
	Lower=0;
	Capital=0;
	scanf("%c",&n);
	while((n=getchar())!='\n')
	{	if(n=='A'||n=='E'||n=='I'||n=='O'||n=='U')
		Capital++;
		else if(n=='a'||n=='e'||n=='i'||n=='o'||n=='u')
		Lower++;
	}
	printf("Lower:%d\nCapital:%d",Lower,Capital);
	return 0;
}

样例
小白学C语言(一)_第19张图片
2
编程按每行5个数来输出200以内所有能被7或17整除的偶数,并求出其和。

#include
int main(void)
{
	int count,i,n,sum;
	count=0;
	n=200;
	sum=0;
	for(i=2;i<=n;i+=2)
	{	if(i%7==0 || i%17==0)
		{printf("%6d",i);
		sum=sum+i;
		count++;
		if(count%5==0)
			printf("\n");
		}
	
	}
	printf("\nSum=%d",sum);
}

样例
小白学C语言(一)_第20张图片
3
输入一个年份区间,例如[1900,2015],求该区间内的闰年的个数。

#include 
int main()
{
    int y1,y2,count=0,i;
    scanf("[%d,%d]",&y1,&y2);
    if(y1>y2)
    {
        i=y1;
        y1=y2;
        y2=i;
    }
    for(i=y1;i<=y2;i++)
        if((i%400==0) || (i%4==0 && i%100!=0))
            count++;
    printf("years=%d",count);
	return 0;
}

样例
小白学C语言(一)_第21张图片
4
输入两个正整数,求它们的最大公约数和最小公倍数。

#include 
int getgys(int a,int b)
{
	while(a!=b)
	{
		if(a>b)
		a=a-b;
		else
		b=b-a;
	}
	return a;
}
int main (void)
{
	int a,b,gys,gbs;
	scanf("%d,%d",&a,&b);
	gys=getgys(a,b);
	gbs=a*b/gys;
	printf("gys=%d,gbs=%d",gys,gbs);
	return 0;
}

样例
小白学C语言(一)_第22张图片
5
教材P92课后习题三(4):求序列和。

#include 
#include 
int main (void)
{
	int i,a,n;
	int sum,f1,f2,m;
	sum=0;
	scanf("%d,%d",&a,&n);
	f1=a;
	printf("%d",a);
	for(i=1;i

样例
小白学C语言(一)_第23张图片
6
猴子吃桃问题:一只猴子第一天摘了一堆桃子,每天它都要吃掉一半,之后还要多吃一个,如此吃法,到第n天一早起来时,它发现只剩下一个桃子了,从键盘上输入n,求它第一天摘的桃子总数。

#include 
int main(void)
{
	int i,x=1,n;
	scanf("%d",&n);
	for(i=1;i

样例
小白学C语言(一)_第24张图片
7
教材P92课后习题三(2):展开式求和。

#include
#include
double fact(int n);
int main(void)
{
	int i=1;
	double item=1,sum=0;
	double x;
	scanf ("%lf",&x);
	while (fabs(item)>=0.00001)
	{
		item=pow(x,i)/fact(i);
		sum+=item;
		i++;
	}
	printf ("s=%.2lf",sum);
	return 0;
}
double fact (int n) 
{
	int j;
	double fact;
	fact=1;
	for (j=1;j<=n;j++)
		fact*=j;
	return fact;
}

小白学C语言(一)_第25张图片
8
菱形图像显示问题:输入一个正奇数([5,21]区间内),显示由*组成的菱形图像。

#include
int main (void)
{
	int n,j,i;
	scanf("%d",&n);
	if(n>=5 && n<=21 && n%2!=0)
	{
		for(i=1;i<=n/2+1;i++)
		{	for(j=1;j<=n/2+i;j++)       
			{	if(j>=n/2-i+2)
				printf(" *");
				else
				printf("  ");
			}
			printf("\n");
		}
		for(i=n/2;i>=1;i--)
		{   for(j=1;j<=n/2+i;j++)
			if(j>=n/2-i+2)
			printf(" *");
			else
			printf("  ");
			printf("\n");
		}
	}
	return 0;
}

小白学C语言(一)_第26张图片
9
中国古代数学家张丘建提出的“百鸡问题”:一只大公鸡值五个钱,一只母鸡值三个钱,三个小鸡值一个钱。现有100个钱,要刚好买100只鸡,且三种鸡都有。

#include 
int main(void)
{   int x,y,z;
    for(x=1;x<=20;x++)
         for(y=0;y<=33;y++)
              for(z=0;z<=100;z+=3)
                   if(x+y+z==100 && 5*x+3*y+z/3==100)
                        printf("%5d%5d%5d\n",x,y,z);
                        
    return 0;
}

小白学C语言(一)_第27张图片
10
输入n,求[1,n]之间所有完数(一个数等于它的所有因子之和,这个数就称为完数,例如28的因子1+2+4+7+14=28,则28即为一个完数)。

#include 
int main (void)
{	int i,j,n,s;
	scanf("%d",&n);
	for(i=2;i<=n;i++)
	{	s=0;
		for(j=1;j

小白学C语言(一)_第28张图片
11
输入年、月、日,输出该日是该年的第几天。

#include
int main()
{  int year,month,day,days,i,d;
   printf("input year,month,day\n");
   scanf("%d,%d,%d",&year,&month,&day);
   days=0;
   for(i=1;i

小白学C语言(一)_第29张图片
12
编程输出如下图形(要求以第30列为对称轴,即菱形的顶点在第30列)。

#include 
int main(void)
{	int i,j;
	for (i=1;i<=7;i++)
    {	for (j=1;j<=30-i;j++)
            printf(" ");
        for (j=1;j<=2*i-1;j++)
            printf("%d",i);
        printf("\n"); 
    }
	for(i=6;i>0;i--)
	{	for(j=29-i;j>=0;j--)
			printf(" ");
		for(j=2*i-2;j>=0;j--)
			printf("%d",i);
		printf("\n");
	}
	return 0;
}

小白学C语言(一)_第30张图片
12
素数问题:输入正整数n,m,求不大于n的m个互不相同的最大的素数。
代码错误,待修正!

#include 
#include 
int main (void)
{	int i,j,t;
	int n,m;
	scanf("%d,%d",&n,&m);
	for(i=n;i>0;i--)
	{	t=sqrt(i);
		for(j=2;j<=t;j++)
			if(j%i==0) break;
		if(j>t)
		{	printf("%d\n",j);
			m--;
		}
			if(m==0) break;
	}
	return 0;
}

小白学C语言(一)_第31张图片
13
验证哥德巴赫猜想:任何一个大于或等于6的偶数均可表示为2个素数之和。如,6 = 3 + 3,8 = 3 + 5,10 = 3 + 7,10 = 5 + 5,….20 = 3 + 17,20 = 13 + 7等。编程将6~30之间的偶数都表示为2个素数之和。
代码错误,不放上来了。TAT

14
求水仙花数。(3-17,因为用了数学函数,从8开始运行速度就很慢了)

#include
int power(int x,int y)
{
    int i=1,a=1;
    while(i<=y)
    {	a=a*x;
        i++;
    }
    return a;
}
 
int main(void)
{
    int i,h,n,s,m=0,b;
    scanf("%d",&n);
	if(n>=3 && n<=17)
	{	for(s=power(10,n-1);s

小白学C语言(一)_第32张图片
15
从键盘输入两个整型变量a和n的值,求a+aa+aaa+aa……a(n个a)之和。例如,若输入2和3,则输出序列和为246(2+22+222)。

#include 
#include 
int fun (int a,int n)
{
	int i,x=0;
	for (i=1;i<=n;i++)
		{	x+=a;
			a*=10;
		}
		
	return x;
}

int main (void)
{
	int a,n,j,s=0;
	scanf("%d %d",&a,&n);
	for (j=1;j<=n;j++)
		s+=fun(a,j);
		
	printf("s=%d",s);
	return 0;
}

小白学C语言(一)_第33张图片
16
教材P145:第6章课后习题题三(3)-使用函数显示给定范围内的完数。
代码错误,待修正!

#include 
int factorsum (int m,int n)
{
	int i,j,s;
	for (i=m;i<=n;i++)
	{	s=0;
		for (j=1;j<i;j++)
			if (i%j==0)
				s+=j;
		if (s==i)
			return s;
	}
}
int main (void)
{
	int m,n,i;
	scanf("%d,%d",&m,&n);
	if (m>=1 && n<=1000)
		for (i=m;i<=n;i++)
			printf("%d\n",factorsum(m,n));

	return 0;
 }

小白学C语言(一)_第34张图片
17
教材P117:第5章课后习题题三(5)-使用函数统计指定数字(2)的个数。

#include 
int countdigit (int number,int digit)
{
	if (number=='2')
		digit++;
	
	return digit;
}
int main (void)
{	char n;
	int count=0;
	while ((n=getchar())!='\n')
		count=countdigit(n,count);
	printf("count=%d",count);
	return 0;
}

小白学C语言(一)_第35张图片
18
编写一个闰年判断函数【int Isleap(int year)】、一个验证日期合法性的函数【int IsDate(int year,int month,int day)】和一个计算日期对应天数的函数【int Days(int year,int month,int day),要求计算前调用IsDate()函数判断日期的合法性,调用Isleap()判断闰年】,在main函数输入给定日期的年-月-日,调用Days函数求出这天是该年的第几天。

#include
int lpy[]={31,29,31,30,31,30,31,31,30,31,30,31};//闰年每月天数 
int nlp[]={31,28,31,30,31,30,31,31,30,31,30,31};//非闰年每月天数 
int Isleap(int year)   //判断闰年 
{	if(year%4==0&&year%100!=0||year%400==0)
		return 1;
	else
		return 0;
}
int Isdate(int year,int month,int day)  //判断日期的合法性 
{	if(year<1000||year>9999||month<1||month>12) return 0;//年份4位整数,月份介于1-12 
	if(Isleap(year))
		if(day<=0||day>lpy[month-1])
			return 0;
		else
			return 1;
	else
		if(day<=0||day>nlp[month-1])
			return 0;
		else
			return 1;
}
int Days(int year,int month,int day)   //计算天数 
{	int i,days=0;
	if(Isleap(year))
		for(i=1;i

小白学C语言(一)_第36张图片
五、数组
1
从键盘输入一个十进制正整数n,将n转换成二进制并输出。

#include 
int main (void)
{
	int n,i=0,a[30];
	scanf("%d",&n);
	while (n!=0)
	{
		a[i]=n%2;
		n=n/2;
		i++;
	}
	for (i=i-1;i>=0;i--)
		printf("%d",a[i]);
	return 0;
}

小白学C语言(一)_第37张图片
2
从键盘任意输入一个整数x,在数组a中顺序查找,如果找到,则给出该数所在的下标值。

#include 
int main (void)
{
	int a[10]={1,2,3,4,5,6,7,8,9,10},i,x;
	scanf("%d",&x);
	i=0;
	while (a[i]!=x)
		i++;
	if (i<10)
		printf("pos:%d",i);
	else
		printf("no!");
	
	return 0;
}

小白学C语言(一)_第38张图片
3
输入10个整数,求大于平均值的偶数和奇数各有多少个?

#include 
int main (void)
{	int a[10],i,even=0,odd=0;
	double p,s=0;
	for (i=0;i<10;i++)
	{	scanf("%d\n",&a[i]);
		s+=a[i];
	}
	p=s/10;
	for (i=0;i<10;i++)
		{if (a[i]>p) 
			{	if (a[i]%2==0)
					even++;
				else
					odd++;
			}
		}

	printf("Even:%d\nOdd:%d",even,odd);
	return 0;
}

小白学C语言(一)_第39张图片
4
教材P176:第7章课后习题题三(1)-选择法排序。

#include 
int main (void)
{
	int i,index,k,n,t;
	int a[10];
	scanf("%d",&n);
	for (i=0;ia[index])
				index=i;
		t=a[index];
		a[index]=a[k];
		a[k]=t;
	}
	
	printf("Result:");
	for (i=0;i

小白学C语言(一)_第40张图片

你可能感兴趣的:(程序设计)