C语言例题解析 - 基础篇

1.编写一个程序,比较两个浮点数的大小。

思路:
这道题很基础,只需要简单利用几个if语句即可。
代码如下:

#include<stdio.h>
int main(){
	float a,b;
	printf("请输入两个浮点数:");
	scanf("%f %f",&a,&b);
	if(a>b){
		printf("%f大于%f\n",a,b);
	}else if(a==b){
		printf("%f等于%f\n",a,b);
	}else
	    printf("%f小于%f\n",a,b);
	return 0;
}

2.编写一个程序,实现如下功能:用户输入一个ASCII码值(如66),程序输出相应的字符,若输入的是小写字母,则转换为大写字母;若是大写,则转换为小写。

思路:
可以先定义一个int型的变量,保存输入的ASCII值,因为字符保存就是使用ASCII码保存的,所以可以直接使用字符和ASCII比较,小写字母的ASCII值为97-122,大写字母的ASCII值为65-90,同一个字母大小写的ASCII码值相差32,通过这个原理可以解答该问题。
代码如下:

#include<stdio.h>
int main(){
	int num;
	printf("请输入一个ASCII码值:");
	scanf("%d",&num);
	if(num>=97&&num<=122){//小写
		printf("%c\n",num-32);
	}else if(num>=65&&num<=90){
		printf("%c\n",num+32);
	}else
	printf("%c\n",num);
	return 0;
}

3.编写一个程序,将用户输入的天数转化为等价的星期数和天数。
思路:
可以先定义一个int型的变量,保存输入的天数,一个星期为7天,用天数与7相除可得到多少星期,取余又可以获得剩余天数,根据这个思路可以解决该问题。
代码如下:

#include<stdio.h>
int main(){
	int num,week = 0, day = 0;
	printf("请输入天数:");
	scanf("%d",&num);
	week = num/7;
	day = num%7;
	printf("%d星期,%d天\n",week,day);
	return 0;
}

4.编写一个程序,实现以下功能:用户输入一个分钟数,程序将其转换成以小时和分钟表示的时间并输出到屏幕上。(使用#define来定义一个代表60的符号常量)。

思路:
这道题跟上一道题相近,只是要求需要用#define来定义常量60,可以先定义一个int型的变量,保存输入的分钟数,一个小时为60分钟,用分钟数与60相除可得到多少小时,取余又可以获得剩余分钟数,根据这个思路可以解决该问题。

#include<stdio.h>
#define TIME 60
int main(){
	long num,h,m;
	printf("请输入分钟数:");
	scanf("%d",&num);
	h = num/TIME;
	m = num%TIME;
	printf("%ld小时:%ld分钟\n",h,m);
	return 0;
}

5.编写一个程序,要求输入你的年龄,然后显示该年龄等于多少秒。

思路:
可以先定义一个int型的变量,保存年龄,没必要去纠结一年时间不固定的问题,直接统一使用365天计算,一天24小时,一小时60分钟,一分钟60秒,最后结果可能庞大发生越界应该用long保存,根据这个思路可以解决该问题。
代码如下:

#include<stdio.h>
int main(){
	int num;
	long m;
	printf("请输入年龄:");
	scanf("%d",&num);
	m = num*365*24*60*60;
	printf("你的年龄为:%ld秒",m);
	return 0;
}

6.编写一个程序,用户输入某个大写字母,产生一个金字塔图案。例如用户输入字母E,则产生如下图案。

在这里插入图片描述

思路:
刚看到这题的时候我也是很懵的,努力去寻找规律,用for循环来输出这个金字塔,于是就发现了如下规律:

①输入一个大写字母,该大写字母是第几个大写字母金字塔就有多少层;
②从上往下,之间的字母是加1增大的;
③从中间往两边字母越来越小,直到减到A;
④第一行最大减0,第二行最大减1,第n行最大减n-1;

于是就开始用for循环做,完全按照规律写的,可能写得比较low,目前想不到直接方便的办法。
代码如下:

#include<stdio.h>
int main(){
	char data[100][100];//定义一个矩阵
	char num;
	int n,i,j,k,m,c;
	printf("请输入一个大写字母:");
	scanf("%c",&num);
	n = num-'A'+1;//判断需要用到矩阵的长和高
	m = n-1+n;
	j = n;
	//第一次for循环使中间一列填充大写字母,且行数越大字母越大
	for(i = 0;i<n;i++){
		for(j = 0;j<m+1;j++){
			if(j == n){
				data[i][j] = 65+i;
			}else{
				data[i][j] = ' ';//其他地方填充空格
			}
		}	
	}
	//第二次for循环,从中间开始给两边填充字母,从中间向两边缩小
	int a,b;
	for(i = 0;i<n;i++){
		for(j = 0;j<m+1;j++){
			if(j == n){
				b = 1,c = i;
				while(c){//第i行左右两边各填充i个 i从0开始
					data[i][j-b] = data[i][j]-b;
					b++;
					c--;
				}
				b = 1,c = i;
				while(c){//填充右边
					data[i][j+b] = data[i][j]-b;
					b++;
					c--;
				}
			}
		}	
	}
	//第三次for循环打印最终结果
	for(i = 0;i<n;i++){
		for(j = 0;j<m+1;j++){
			printf("%c",data[i][j]);
		}
		printf("\n");	
	}
	return 0;
}

7.编写一个程序,该程序读取输入直到遇到#字符,然后报告读取的空格数目、读取的换行符数目以及读取的所有其他字符数目。

思路:
思路很简单,使用while死循环,每输入一个字符便判断该字符的类型,给相应类型的数量加1,如果遇到#字符便跳出循环,最后输出结果。
代码如下:,

#include<stdio.h>
int main(){
	char temp;
	int k = 0,h = 0,q = 0;
	printf("请输入一个字符串:");
	while(1){
		temp = getchar();
		if(temp=='#')
			break;
		else{
		  if(temp==' ')
		  	k++;
		  else if(temp=='\n')
		  	h++;
		  else
		  	q++;
		}
	}
	printf("空格数目:%d,换行符数目:%d,其他字符数目:%d\n",k,h,q);
	return 0;
}

8.将一个十进制数转换为八进制、十六进制数。比如输入10,输出0xA 注意:不能使用八进制控制符%o和十六进制控制符%x。

思路:
在数学里,要进行数制转换,要使用短除法,获取每次除后的余数,最后从下往上就是转换后的结果,根据这个算法可以改编成代码轻松解决,定义两个数组,保存余数,但保存的余数是从下往上的,所以最后输出的时候要反向输出。

//8.将一个十进制数转换为八进制、十六进制数。比如输入10,输出0xA注意:不能使用八进制控制符%o和十六进制控制符%x
#include<stdio.h>
char judge(int num){
	char temp;
	switch(num){
		case 10:temp = 'A';break;
		case 11:temp = 'B';break;
		case 12:temp = 'C';break;
		case 13:temp = 'D';break;
		case 14:temp = 'E';break;
		case 15:temp = 'F';break;
		default:temp=num+48;break;
	}
	return temp;
}
int main(){
	int eight[100],i = 0,j = 0;
	char shil[100];
	int num,num2,num3;
	printf("请输入十进制数:");
	scanf("%d",&num);
	num2 = num;
	num3 = num;
	while(1){
		if(num==0)
			break;
		eight[i] = num%8;
		num = num/8;
		i++;

	}
	while(1){
		if(num2==0)
			break;
		shil[j] = judge(num2%16);
		num2 = num2/16;
		j++;
	}
	printf("%d的八进制为:0",num3);
	i--;
	for(i;i>=0;i--){
		printf("%d",eight[i]);
	}
	printf("\n");
	printf("%d的十六进制为:0X",num3);
	j--;
	for(j;j>=0;j--){
		printf("%c",shil[j]);
	}
	printf("\n");
	return 0;
}

9.编写一个函数,接收一个给定的字符串,返回去除所有的空格后的字符串。

思路:
做这道题的时候是在linux环境下编译运行的,可以使用指针,也可以用数组,原理就是通过循环一个一个判断字符,最后输出。
代码如下:
①使用数组

#include<stdio.h>
int main(){
	printf("请输入一个字符串:");
	char data[512];
	char temp;
	int i = 0,j = 0;
	while(1){
		temp = getchar();
		if(temp=='\n')
			break;
		else if(temp!=' '){
			data[i] = temp;
			i++;
		}
	}
	i--;
	for(j = 0;j<i;j++){
		printf("%c",data[j]);
	}
	return 0;
}

②使用指针

#include <stdio.h>
int main(){
    char data[512],*p;
	int i = 0;
	printf("请输入一个字符串:");
    p = gets(data);
	while(*p != 0){
		if(*p != ' '){
			*(data + i) = *p;
			i++;
		}
		p++;
	}
	*(data + i) = 0;
	printf("去掉空格后的字符串:%s\n",data);
    return 0;
}

10.写一个“标准”宏 MIN,这个宏输入两个参数并且返回较小的一个。

思路:
写一个“标准”宏 MIN就是使用#define定义一个算法,来判断两个数的大小,使用简写的if语句来判断,即A>B?A:B,意思是如果A>B,返回A,否则返回B。
代码如下:

#include<stdio.h>
#define MIN(A,B) A<B?A:B
int main(){
	int a,b;
	printf("请输入两个数:");
	scanf("%d %d",&a,&b);
	printf("%d和%d两个数%d较小\n",a,b,MIN(a,b));
	return 0;
}

11.编写一个程序,用户输入整数 N,程序输出第 N 项斐波那契数 1,1,2,3,5,8,13,21…

思路:
观察数字可以得到规律:一个数为前两个数字的和,因此需要定义三个变量,保存前两个数值和用来做中间变量。
代码如下:

#include<stdio.h>
int main(){
	int a,b = 0,c = 1,sum = 0;
	printf("请输入整数:");
	scanf("%d",&a);
	a--;
	while(a){
		sum = c;
		c = c+b;
		b = sum;
		a--;
	}
	printf("%d\n",c);
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值