1. 定义一个无符号的整型数组,求数组中的最大值。
思路:int a1=10, a2=20, a3=5; 两两相比,求最大值
#include<stdio.h>
const int N = 110;
int main(){
int max = 0;
unsigned int a[N]={10,20,30,5,65,98,34,53,85};
for(int i = 0;i < N; i++)
if(a[i] >= max)
max = a[i];
printf("%d",max);
return 0;
}
注意:无符号数不能和负数比较!!!
2.完全平方数
在1万以内(不包含1万)查找整数,该整数它加上 100 后是一个完全平方数,再加上 168 又是一个完全平方数,请问该数是多少?
完全平方数:完全平方指用一个整数乘以自己例如1*1,2*2,3*3等。所以1,4,9都是完全平方数。
10不是完全平方数,因为10号开根后不是整数
开根号 sqrt(); sqrt(2)--->对2开根号
使用使用sqrt函数,需要包含:#include 编译的时候需要加上 -lm ,例如:gcc 1.c -lm
结果:21 261 1581
#include<stdio.h>
#include<math.h>
int main(){
int i,j;
for(int i = 0;i < 10000;i ++){
float s1 = sqrt(i + 100);
float s2 = sqrt(i + 100 + 168);
if(s1 == (int)s1 && s2 == (int)s2 )
printf("%d %g %g\n",i,s1,s2);
}
return 0;
}
3.
题目:有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13... 求出这个数列的前 20 项之和。
答案:结果:32.6603
ps:当前项的分子是下一项的分母, 下一项的分子是当前项的分子+分母
#include<stdio.h>
int main(){
double sum = 0;
float f = 2;
float m = 1;
for(int i = 0;i<20;i++){
sum += f/m;
int d = f;//d = 2
f = f + m;//f = 3
m = d;//m = 2
}
printf("%g",sum);
return 0;
}
4.
从终端输入一个整数,要求将该整数进行翻转。
例如输入123,要求输出321(三百二十一)
输入-123,要求输出-321.
不考虑翻转后溢出的情况
#include<stdio.h>
int con = 0;
void reverse1(int n){
if(n == 0) return;
printf("%d",n%10);
reverse1(n/10);
}
void reverse2(int n){
if(n == 0) return;
else{
if(con == 0)
printf("-%d",n%10);
else
printf("%d",n%10);
}
con++;
reverse2(n/10);
}
int main(){
int n;
printf("输入一个整数:\n");
scanf("%d",&n);
if(n >= 0){
for(n; n>0;n/=10){
int s = n%10;
printf("%d",s);
}
}
else{
for(-n;-n > 0;n/=10){
int s = -n%10;
if(con == 0)
printf("-%d",-n%10);
else
printf("%d",-n%10);
con++;
}
}
// if(n >= 0)
// reverse1(n);
// else
// reverse2(-n);
return 0;
}
两种方法,一个是for循环,一个是写函数迭代