Note:第三章开始课后题暂时未做
001在屏幕输出信息:This is program!
#include<stdio.h>
int main(){
printf("This is program!\n");
return 0;
}
002求两个整数之和
#include<stdio.h>
int main(){
int a,b,sum;
a = 123;
b = 23;
sum = a + b;
printf("sum is %d",sum);
return 0;
}
003求两个整数之间的较大者
#include<stdio.h>
int main()
{
int a,b;
int max(int x,int y);
scanf("%d,%d",&a,&b);
printf("max is %d",max(a,b));
return 0;
}
int max(int x,int y)
{
int z;
if(x>y)
{
z = x;
}
else
{
z = y;
}
return z;
}
004输出平行四边形
#include<stdio.h>
int main()
{
printf("******\n");
printf(" ******\n");
printf(" ******\n");
printf(" ******\n");
return 0;
}
005求123*4
006判断2000-2500年的每一年是否为闰年
#include<stdio.h>
int main()
{
int year;
scanf("%d",&year);
if(year>=2000 && year<=2500)
{
if((year %4 ==0 && year % 100 !=0) || year % 400 ==0)
{
printf("%d年是闰年!",year);
}
else
{
printf("%d年不是闰年!",year);
}
}
else{
printf("你输入的年份超出范围!");
}
return 0;
}
007求1 - 1/2 + 1/3 ······ - 1/100
#include<stdio.h>
int main()
{
float i,sum =0;
for(i = 1; i<=100; i++)
{
//注意int需要强制转换一下
if((int)i % 2 == 0)
{
sum = sum - 1/i;
}
else
{
sum = sum + 1/i;
}
}
printf("%f",sum);
return 0;
}
008给出一个大于或等于3的正整数,判断它是不是一个素数。
#include<stdio.h>
#include<math.h>
int main()
{
int n, i,flag=0;
printf("请输入一个整数:");
scanf("%d",&n);
for(i = 2; i <= sqrt(n); i++)
{
if(n%i == 0 )
{
flag++;
break;
}
}
if(flag == 1)
{
printf("不是素数");
}
else{
printf("是素数");
}
return 0;
}
009.A和B的值互换
思路:还可以通过中间变量的方式
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
a=a+b;
b=a-b;
a=a-b;
printf("%d %d",a,b);
return 0;
}
010依次将10个数输入,输出最大的数
#include<stdio.h>
int main()
{
int count=0,n,max;
while(count < 10)
{
scanf("%d",&n);
if(count == 0)
{
max = n;
}
max = n>max ? n:max;
count++;
}
printf("最大值为:%d",max);
return 0;
}
011.输入三个数,并按大小顺序排序
#include<stdio.h>
int main()
{
int a,b,c,temp;
printf("请输入三个数:");
scanf("%d %d %d",&a,&b,&c);
if(a<b)
{
temp = a;
a = b;
b = temp;
}
if(a<c)
{
temp = a;
a = c;
c = temp;
}
if(b<c)
{
temp = b;
b = c;
c = temp;
}
printf("由大到小为:%d,%d,%d",a,b,c);
return 0;
}
012.求1-100的和
#include<stdio.h>
int main()
{
int i, sum = 0;
for(i = 1; i<=100; i++)
{
sum += i;
}
printf("%d",sum);
return 0;
}
013.判断一个数n能否同时被3和5整除
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n % 3 ==0 && n % 5 == 0)
{
printf("%d能同时被3和5整除:",n);
}
else
{
printf("%d不能同时被3和5整除:",n);
}
return 0;
}
014.将100-200之间的素数输出
#include<stdio.h>
#include<math.h>
int main()
{
int i,j;
int isPrime(int x);
printf("素数是:\n");
for(i = 100; i <= 200; i++)
{
j = isPrime(i);
if(j == 0)
{
printf("%d ",i);
}
}
return 0;
}
int isPrime(int x)
{
int i,flag = 0;
for(i = 2; i < sqrt(x); i++)
{
if(x % i == 0)
{
flag++;
break;
}
}
return flag;
}
015.求m和n的最大公约数
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,i,temp;
scanf("%d %d",&a,&b);
if(a>b)
{
temp = b;
b = a;
a = temp;
}
for(i = a; i >= 1; i--)
{
if(b % i == 0 && a % i == 0)
{
printf("最大公约数为:%d",i);
break;
}
}
return 0;
}
016.求方程 ax^2 + bx + c = 0 的根
#include<stdio.h>
#include<math.h>
int main()
{
float a,b,c,p1,p2;
printf("请输入方程ax^2 + bx + c中的a b c 的值:");
scanf("%f %f %f",&a,&b,&c);
// printf("%f %f %f\n",a,b,c);
// printf("%d\n",(int)(b*b - 4*a*c));
if((int)(b*b - 4*a*c) > 0)
{
p1 = -b / (2*a) + sqrt(b*b - 4*a*c) / (2*a);
p2 = -b / (2*a) - sqrt(b*b - 4*a*c) / (2*a);
printf("方程组的解为:p1 = %.1f, p2 = %.1f",p1,p2);
}
else if((int)(b*b - 4*a*c) == 0)
{
p1 = p2 = -b / (2*a);
printf("方程组的解为:p1 = p2 = %.0f",p1);
}
else
{
printf("方程组无解");
}
return 0;
}
017.华氏温度转摄氏温度。公式c = 5(f-32)/9 ,c为摄氏温度,f为华氏温度。
#include<stdio.h>
#include<math.h>
int main()
{
float f,c;
printf("请输入华氏温度:\n");
scanf("%f",&f);
c = 5*(f-32)/9;
printf("摄氏温度为:%.2f\n",c);
return 0;
}
Note: 当scanf中加 \n 后产生的问题:
018.输入一个大写字母,输出小写
#include<stdio.h>
#include<math.h>
int main()
{
char c1,c2;
printf("请输入大写字母:");
scanf("%c",&c1);
c2 = c1 + 32;
printf("%c",c2);
return 0;
}
019.已知三边长,求三边的面积
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c;
float area,s;
scanf("%d %d %d",&a,&b,&c);
s = (a+b+c)/2;
area = sqrt(s*(s-a)*(s-b)*(s-c));
printf("面积:%.2f",area);
return 0;
}
020.练习使用putchar()和getchar()
#include<stdio.h>
#include<math.h>
int main()
{
char a;
a = getchar();
putchar(a);
return 0;
}
021.输入一个字符,判断是不是大写,若是转化成小写,否则,原样输出。
#include<stdio.h>
#include<math.h>
int main()
{
char a;
a = getchar();
a = (a>='A' && a<='Z')? (a+32):a;
printf("%c",a);
return 0;
}
022.按照考试等级输出百分制分数A:85以上;B:70~84
note:注意break作用
#include<stdio.h>
#include<math.h>
int main()
{
char level;
scanf("%c",&level);
switch(level)
{
case 'A': printf("85~100");break;
case 'B': printf("70~84");break;
default:printf("error!");
}
return 0;
}
023.输入a或A执行A操作,输入b或B执行B操作
#include<stdio.h>
#include<math.h>
int main()
{
void action1(int x, int y),action2(int x, int y);
int a = 23 ,b = 3;
char ch = getchar();
switch(ch)
{
case 'a':
case 'A': action1(a,b);break;
case 'b':
case 'B': action2(a,b);break;
//转义字符 \a 使系统发出叮的一声
default: putchar('\a');
}
return 0;
}
void action1(int x, int y)
{
printf("sum = %d",x+y);
}
void action2(int x, int y)
{
printf("multiply = %d",x*y);
}
024.while循环实现1-100的和
#include<stdio.h>
#include<math.h>
int main()
{
int sum = 0,i =1;
while(i<=100)
{
sum += i;
i++;
}
printf("sum = %d",sum);
return 0;
}
025.do…while循环实现1-100的和
note:do…while循环后面要有分号
#include<stdio.h>
#include<math.h>
int main()
{
int i=1,sum =0;
do
{
sum += i;
i++;
}
while(i<=100);
printf("sum = %d",sum);
return 0;
}
026.输出4*5的矩阵(第n行是第一行的n倍
#include<stdio.h>
#include<math.h>
int main()
{
int i,j;
for(j=1;j<=4;j++)
{
for(i=1;i<=5;i++)
{
printf("%d\t",i*j);
}
printf("\n");
}
return 0;
}
027.对数组元素赋值0-9并逆序输出
#include<stdio.h>
#include<math.h>
int main()
{
int a[10],i;
for(i=0;i<10;i++)
{
a[i] = i;
}
for(i=9;i>=0;i--)
{
printf("%d\t",a[i]);
}
return 0;
}
028.用公式Π/4 = 1-1/3+1/5-1/7…求Π的近似值,直到发现某一项的绝对值小于10的-6次为止。
#include<stdio.h>
#include<math.h>
int main()
{
double sign=1,i=1,terms=1,sum=0;
while(fabs(terms) > 1e-6)
{
terms = sign/i;
sum = sum+ terms;
i +=2;
sign = -sign;
}
printf("Π的值为:%.8f\n",sum*4);
return 0;
}
029.求fibonacci数列 (兔子繁殖规律) 的前40个数:第1,2两个数为1,1 从第三个数开始,该数是前面两个数的和。即:1,1,2,3,5,8,13…
#include<stdio.h>
#include<math.h>
int main()
{
int f1 = 1, f2 = 1, f3,i;
printf("%d\n",f1);
printf("%d\n",f2);
for(i = 1;i<=40;i++)
{
f3 = f1 + f2;
f1 = f2;
f2 = f3;
printf("%d\n",f3);
}
return 0;
}
030.数组求fibonacci数列前20项并输出
#include<stdio.h>
#include<math.h>
int main()
{
int f[20] = {1,1},i=0,count;
for(i=2;i<20;i++)
{
f[i] = f[i-1] + f[i-2];
}
for(i=0,count=0;i<20;i++)
{
printf("%8d",f[i]);
count++;
if(count%5 == 0)
{
printf("\n");
}
}
return 0;
}
031.有10个地区的面积,要求他们按由小到大的顺序排列。(冒泡法)
#include<stdio.h>
#include<math.h>
int main()
{
int a[10],i,j,temp;
printf("请输入10个数:\n");
for(i = 0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
for(i=1;i<=9;i++)
{
for(j=0;j<10-i;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(i=0;i<10;i++)
{
printf("%8d",a[i]);
}
return 0;
}
032.将23的矩阵值行列互换为32(二维数组的应用)
#include<stdio.h>
#include<math.h>
int main()
{
int a[2][3],b[3][2];
int i,j;
printf("为矩阵从左向右输入值:");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
b[j][i] = a[i][j];
}
}
for(i=0;i<3;i++){
for(j=0;j<2;j++)
{
printf("%6d",b[i][j]);
}
printf("\n");
}
return 0;
}
033.有一个3*4的矩阵,要求输出最大的值及所在的行号列号
#include<stdio.h>
#include<math.h>
int main()
{
int a[3][4];
int i,j,max,row=0,column=0;
max=a[0][0];
printf("为矩阵从左向右输入值:\n");
// 输入矩阵值
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
}
}
// 找最大值,及所在行和列
// 未解决最大值有多个的情况
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(a[i][j] > max){
max=a[i][j];
row = i;
column = j;
}
}
}
// 输出矩阵值
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%6d",a[i][j]);
}
printf("\n");
}
// 输出最大值以及行列
printf("最大值:%d,行号:%d,列号:%d",max,row,column);
return 0;
}
034.输出已知的字符串
#include<stdio.h>
#include<math.h>
int main()
{
char s[] = {'c','h','u','a','n'};
int i;
for(i=0;i<5;i++)
{
printf("%c",s[i]);
}
return 0;
}
035.输出一个菱形图(使用字符型数组)
#include<stdio.h>
#include<math.h>
int main()
{
char s[][5] = {{' ',' ','*',' ',' '},{' ','*',' ','*',' '},{'*',' ',' ',' ','*'},{' ','*',' ','*',' '},{' ',' ','*',' ',' '}};
int i,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
printf("%c",s[i][j]);
}
printf("\n");
}
return 0;
}
🔺0.36输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。⭐⭐⭐要明白 ‘\0’ 和 空格 是不同的⭐⭐⭐
#include<stdio.h>
#include<math.h>
int main()
{
char string[81];
int i,num=0,word=0;
char c;
gets(string);
for(i=0; (c=string[i]) != '\0'; i++)
{
if(c == ' ')
{
word=0;
}
else if(word == 0)
{
word = 1;
num++;
}
}
printf("单词数目:%d",num);
puts(string);
return 0;
}
- 有三个字符串,找出其中最大者⭐熟悉常用字符串处理函数⭐
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
char str[3][20];
char string[20];
int i ;
for(i=0;i<3;i++)
{
gets(str[i]);
}
if(strcmp(str[0],str[1])>0)
{
strcpy(string,str[0]);
}
else
{
strcpy(string,str[1]);
}
if(strcmp(str[2],string)>0)
{
strcpy(string,str[2]);
}
printf("the largest string:%s",string);
return 0;
}
038.通过函数调用实现指定风格和内容输出
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
void print_star();
void print_content();
print_star();
print_content();
print_star();
return 0;
}
void print_star()
{
printf("**********\n");
}
void print_content()
{
printf("hello chuanchuan!\n");
}
039.输入两个整数,要求输出其中的较大者。要求用函数来找到大数。
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int a,b,c;
int max(int x, int y);
scanf("%d,%d",&a,&b);
c = max(a,b);
printf("max = %d",c);
return 0;
}
int max(int x,int y)
{
int z;
z= x>y? x:y;
return z;
}
040.输入4个整数,找出最大的数。用函数的嵌套来处理。
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int a,b,c,d,m;
int max(int x, int y);
scanf("%d,%d,%d,%d",&a,&b,&c,&d);
m = max(a,b);
m = max(m,c);
m = max(m,d);
printf("max = %d",m);
return 0;
}
int max(int x,int y)
{
int z;
z= x>y? x:y;
return z;
}
041.递归求年龄的问题
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int age(int n);
printf("%d",age(5));
return 0;
}
int age(int n)
{
int c;
if(n==1)
{
c=10;
}
else
{
c = age(n-1) + 2;
}
return c;
}
042.求n!
note:这里的n不能太大,否则会超出int的范围
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int fac(int n);
printf("%d",fac(4));
return 0;
}
int fac(int n)
{
int c;
if(n < 0)
{
printf("error!");
}
else if(n==0 || n==1)
{
c = 1;
}
else
{
c = fac(n-1)*n;
}
return c;
}
043.注意笔记
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int a=5;
printf("%d\n",a);//输出正常
printf("%f\n",a);//输出错误
printf("%f\n",(float)a);//输出正常
printf("=================\n");
float b= 5;
printf("%f\n",b); //输出正常
printf("%d\n",b); //输出错误
printf("%lf\n",b); //输出正常
//建议:各自用各自的输出格式声明符,不会出错!
return 0;
}
044.汉诺塔(递归调用)⭐不太熟练⭐
note:scanf中切记不能加入其他字符和转义字符(同时也没必要)
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
void hanoi(int n, char one, char two, char three);
int m;
scanf("%d",&m);
hanoi(m,'A','B','C');
return 0;
}
void hanoi(int n, char one, char two, char three)
{
void move(char x, char y);
if(n==1)
{
move(one,three);
}
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x, char y)
{
printf("%c -> %c\n",x,y);
}
045.输入10个数,要求输出其中最大值的元素和该数是第几个数。
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int a[10];
int i,j=0,max;
int f_max(int x,int y);
for(i=0;i<10;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",&a[i]);
}
max=a[0];
for(i=1;i<10;i++)
{
if(a[i]>max)
{
j=i;
}
max=f_max(a[i],max);
}
printf("最大的元素是:%d\n",max);
printf("最大的元素是第%d个",j);
return 0;
}
int f_max(int x,int y)
{
return x>y? x:y;
}
046.有一个一维数组score,内存放10个学生成绩,求平均成绩。
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int i;
float score[10];
float average(float array[10]);
for(i=0;i<10;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%f",&score[i]);
}
printf("平均值是:%f",average(score));
return 0;
}
//形参中数组可不指定大小,指定的大小不起作用
float average(float array[10])
{
int i;
float aver,sum;
for(i=0;i<10;i++)
{
sum += array[i];
}
aver = sum/10;
return aver;
}
047.有两个班级,分别有5名和10名学生,调用average分别求出平均成绩。
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
float average(float array[],int n);
float score1[] = {1,2,3,4,5};
float score2[] = {1,2,3,4,5,6,7,8,9,10};
printf("average score of class one:%.3f\n",average(score1,5));
printf("average score of class two:%.3f\n",average(score2,10));
return 0;
}
float average(float array[],int n)
{
int i;
float sum = 0,aver;
for(i=0;i<n;i++)
{
sum += array[i];
}
aver = sum/n;
return aver;
}
048.用选择法对数组中10个整数进行由小到大的排序。
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
void sort(int array[],int n);
int a[] = {3,5,2,6,8,2,1,10,1,4,3,77};
int i;
sort(a,12);
printf("排序以后的数组元素为:\n");
for(i=0;i<12;i++)
{
printf("%5.d",a[i]);
}
return 0;
}
void sort(int array[],int n)
{
int i,j,temp;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(array[i]>array[j])
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
}
049.3*4的矩阵,找出其中的最大值。
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int max_value(int array[][4]);
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
printf("number of max:%d\n",max_value(a));
return 0;
}
int max_value(int array[][4])
{
int i,j,max=array[0][0];
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
max= max > array[i][j]? max:array[i][j];
}
}
return max;
}
050.一维数组,内存放10个学生成绩,写一个函数,当主函数调用该函数时,能求出最高分、最低分、平均值。
#include<stdio.h>
float Max = 0, Min = 0;
int main()
{
float average(float array[ ],int n);
int i;
float score[10],ave;
printf("please enter 10 scores of student:\n");
for(i=0;i<10;i++)
{
scanf("%f",&score[i]);
}
ave = average(score,10);
printf("max=%.3f,min=%.3f,average=%.3f\n",Max,Min,ave);
return 0;
}
float average(float array[ ],int n)
{
int i;
float aver, sum =array[0];
Max = Min = array[0];
for(i = 1;i<n;i++)
{
if(array[i] > Max)
{
Max = array[i];
}
else if(array[i] < Min)
{
Min = array[i];
}
sum += array[i];
}
aver = sum/n;
return aver;
}
051.输出1!~5!的阶乘值。
#include<stdio.h>
float Max = 0, Min = 0;
int main()
{
int fac(int n);
int i;
for(i=1;i<=5;i++)
{
printf("%d!=%d\n",i,fac(i));
}
return 0;
}
int fac(int n)
{
static int f = 1;
f *=n;
return f;
}