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);
}