1.编写一个程序,要求输入一个ASCII码值(如66),然后输出相应的字符。
#include <stdio.h>
int main(void)
{
char c;
printf("请输入一个ASCII码值:");
scanf("%hhd",&c);
printf("%hhd的ASCII码是%c\n",c,c);
return 0;
}
2.一年大约有3.1536*107s。编写一个程序,要求输入你的年龄,然后显示该年龄等于多少秒。
#include <stdio.h>
int main(void)
{
int year = 3.1536e7;
int old,sum;
printf("请输入您的年龄:");
scanf("%d",&old);
sum = year * old;
printf("%d岁等于%e秒\n",old,sum);
return 0;
}
3.一个水分子的质量大约为3.0*10-23g,1夸脱水大约有950g。编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少个水分子。
#include <stdio.h>
#define water 950
int main(void)
{
float s,sum,m = 3.0e-23;
printf("请输入水的夸脱数:");
scanf("%f",&s);
sum = s * water / m;
printf("%.2f夸脱水中包含%e个水分子\n",s,sum);
return 0;
}
4.假设ch为char类型变量。使用转义序列、十进制值、八进制字符常量以及十六进制字符常量等方法将其赋值为回车符(使用ASCII码)。
#include <stdio.h>
int main(void)
{
char ch;
ch = '\n'; //转义序列
ch = '\10'; //十进制
ch = '\012';//八进制
ch = '\xa'; //十六进制
printf("%c",ch);
return 0;
}
5.编写一个程序,将用分钟表示的时间转换成以小时和分钟表示的时间。使用#define来创建一个代表60的符号常量。
#include <stdio.h>
#define i 60
int main(void)
{
int hour,min,min1;
printf("请输入多少分钟:");
scanf("%d",&min);
hour = min / i;
min1 = min % i;
if(min<i){
printf("输出为:%d分钟\n",min);
}else{
printf("输出为:%d小时%d分钟\n",hour,min1);
}
return 0;
}
6.编写一个程序,此程序要求输入一个整数,然后打印出从输入(含)的值到比输入的值大10(含)的所有整数值(比如输入5,则输出5到15)。要求在各个输出值之间用空格、制表符或者换行符分开。
#include <stdio.h>
#define k 10
int main(void)
{
int i,l;
printf("请输入一个整数:");
scanf("%d",&i);
l = k + i;
for(i;i<=l;i++)
{
printf("%d\t",i);
}
printf("\n");
return 0;
}
7.编写一个程序,读入一个浮点数,并分别以小数形式和指数形式打印。结果保留两位有效数字。输出应如同下面格式(实际显示的指数位数可能因系统而不同): The input is 21.29 or 2.13e+01
#include <stdio.h>
int main(void)
{
float i;
printf("请输入一个浮点数:");
scanf("%f",&i);
printf("The input is %.2f or %.2e\n",i,i);
return 0;
}
8.在程序中实现以下表达式,观察运算后a的值并解释原因。(设原来a=12)
(1) a += a a = 24 ---- a = a + a
(2) a -= 2 a = 10 ---- a = a - 2
(3) a *= 2+3 a = 60 ---- a = a * (2 + 3)
(4) a /= a+a a = 0 ---- a = a / (a+ a)
(5) a %= (n%2),n的值为5 ----a = a % (5%2) = 0
(6) a += a -= a *= a ----a+ = a- = a* = 12 >>> a+ = a- = 144 >>> a+ = 0 >>> a = 0
9.编写一个程序,该程序要求输入一个float型数并打印该数的立方值。使用你自己设计的函数来计算该值的立方并且将它的立方打印出来。main函数负责把输入的值传递给该函数。
#include <stdio.h>
float cube(float a)
{
a = a*a*a;
return a;
}
int main(void)
{
float i,j;
printf("请输入一个float型数:");
scanf("%f",&i);
j = cube(i);
printf("%.2f的立方数为:%f\n",i,j);
return 0;
}
10.编写一个程序,此程序要求输入天数,然后将该值转换为星期数和天数。例如输入18,则要求输出:18 days
#include <stdio.h>
int main(void)
{
int week,day,day1;
printf("请输入天数:");
scanf("%d",&day);
week = day/7;
day1 = day%7;
printf("%d days are %d weeks,%ddays\n",day,week,day1);
return 0;
}
11.编写一个程序,接受一个整数输入,然后显示所有小于或等于该数的素数。
#include <stdio.h>
int main(void)
{
int i,j,m;
printf("请输入一个整数:");
scanf("%d",&j);
for(i=2; i<=j; i++){
for(m=2; m<i; m++){
if(i%m == 0){
break;
}
}
if(i == m){
printf("%d ",i);
}
}
printf("\n");
return 0;
}
12.编写一个程序,用户输入某个大写字母,产生一个金字塔图案。例如用户输入字母D,则产生如下图案:
A
ABA
ABCBA
ABCDCBA
#include <stdio.h>
int main(void)
{
char ch;
int i,j,k;
printf("请输入一个大写字母:");
scanf("%c",&ch);
i = ch - 'A' + 1;
for(j=0; j<i; j++){
for(k=0; k<i-j; k++){
printf(" ");
}
for(k=0; k<j; k++){
printf("%c",65+k);
}
for(k=0; k<=j; k++){
printf("%c",65+j-k);
}
printf("\n");
}
return 0;
}
13.输入一个华氏温度,要求输出摄氏温度。要求结果保留2位小数。转换公式为:c = 5(F-32)/9
#include <stdio.h>
int main(void)
{
float F,c;
printf("请输入一个华摄氏度:");
scanf("%f",&F);
c = 5*(F-32)/9;
printf("%.2f华氏温度的摄氏温度为:%.2f度\n",F,c);
return 0;
}
14.编写一个函数,使其返回3个整型参数中的最大值。
#include <stdio.h>
int max(int a,int b,int c)
{
int d;
d = a>b?(a>c?a:c):(b>c?b:c);
return d;
}
int main(void)
{
int a,b,c,s;
printf("请输入三个数:");
scanf("%d%d%d",&a,&b,&c);
s = max(a,b,c);
printf("三个数中最大值是:%d\n",s);
return 0;
}
15.编写一个函数my_power,用循环的方法实现返回一个float类型数的某个整数次幂(保留6位小数)。如调用my_power(3.14,-2)返回0.101424
#include <stdio.h>
float my_power1(float i,int j)
{
float c;
c = i;
if(j>0){
for(j; j>1; j--){
i = i*c;
}
}else if(j == 0 && i != 0){
i = 1;
}else{
for(j; j<-1; j++){
i = i*c;
}
i = 1 / i;
}
return i;
}
int main(void)
{
float i,sum;
int j;
printf("请输入一个数和他的次幂:");
scanf("%f%d",&i,&j);
sum = my_power1(i,j);
printf("%f的%d次幂为%f\n",i,j,sum);
return 0;
}
----------------------------------------------------------------------------------
#include <stdio.h>
float my_power(float num, int pow)
{
int i;
float tmp = num;
if(pow > 0){
for(i=0; i<pow-1; i++){
num *= tmp;
}
return num;
}
else{
pow *= -1;
for(i=0; i<pow-1; i++){
num *= tmp;
}
return 1/num;
}
}
int main(void)
{
float num;
int pow;
printf("Pls input the base and"
"power number(e.g: 3.14^2):");
if(scanf("%f^%d", &num, &pow) != 2){
printf("we nedd a float digit"
"and an integer. Bye-bye!\n");
return -1;
}
/**************************************
0^0 is NOT allowed in mathematical
***************************************/
if((num==0) && (pow == 0))
printf("invalid operands.\n");
/*********************
0^x(x!=0) equals 0
**********************/
else if(num == 0)
printf("answer: 0\n");
/*********************
x^0(x!=0) equals 1
**********************/
else if(pow == 0)
printf("answer: 1\n");
else
printf("answer: %.6f\n",
my_power(num, pow));
return 0;
}
16.编写一个程序,将两个字符串连接起来,不要用strcat函数。
#include <stdio.h>
int main(void)
{
char str1[14],str2[14];
int i=0,j=0;
printf("请输入第一个字符串:");
scanf("%s",str1);
printf("请输入第二个字符串:");
scanf("%s",str2);
while(str1[i] != '\0'){
i++;
}
while(str2[j] != '\0'){
str1[i] = str2[j];
i++;
j++;
}
str1[i] = '\0';
printf("连接之后的字符串为:%s\n",str1);
return 0;
}
17.编写一个函数Fibonacci(),要求程序输出第n项斐波那契数,n由用户输入。n 斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, … …
#include <stdio.h>
int F(int n)
{
if(n == 1 || n == 2){
return 1;
}else{
return F(n-2) + F(n-1);
}
}
int main(void)
{
int i,j;
printf("请输入一个数:");
scanf("%d",&j);
for(i=1; i<=j; i++){
printf("%d ",F(i));
}
printf("\n");
return 0;
}
18qx.编写一个函数,输入一个十进制数,输出对应的十六进制数。(不能用printf的%x格式说明符)
#include <stdio.h>
void fun(int i)
{
int j=0,k,l;
char a[]="0123456789abcdef",b[16];
k=i;
do{
b[j++] = a[i%16];
i = i/16;
}while(i != 0);
printf("十进制%d转换为十六进制数为:",k);
for(l=j;l>=0;l--){
printf("%c",b[l]);
}
printf("\n");
}
int main(void)
{
int i;
printf("请输入一个十进制数:");
scanf("%d",&i);
fun(i);
return 0;
}
/*
* 15、编写一个函数,输入一个十进制数,输出对应的十六进制数。(不能用printf的%x格式说明符)
* */
#include <stdio.h>
void fun(int a)
{
char c[] = "0123456789ABCDEF";
char data[10];
int i;
for(i = 0; ;i++){
data[i] = c[a%16];
a /= 16;
if(a == 0)
break;
}
printf("十六进制为:0x");
while(i>=0){
printf("%c",data[i]);
i--;
}
printf("\n");
}
int main(void)
{
int a;
printf("请输入十进制数:");
scanf("%d",&a);
fun(a);
return 0;
}
19.编写一个函数,求两个整数的最大公约数,用主函数调用这个函数并输出结果,两个整数由键盘输入。(提示:用辗转相除法求最大公约数)
#include <stdio.h>
int fun(int i,int j){
int t;
if(j<=0){
printf("无意义!");
}else{
do{
t = i%j;
i = j;
j = t;
}while(j != 0);
return i;
}
}
int main(void)
{
int i,j,t;
printf("请输入两个数值:");
scanf("%d%d",&i,&j);
t = fun(i,j);
printf("最大公约数为:%d\n",t);
return 0;
}
20.编写一个函数,返回一个double型数组中最大和最小值的差值,并在一个简单的程序中测试这个函数。
#include <stdio.h>
float fun(float* a,int j)
{
int i;
float min=a[0],max=a[0];
for(i=0; i<j; i++)
{
if(min>a[i]){
min=a[i];
}
if(max<a[i]){
max=a[i];
}
}
return max-min;
}
int main(void)
{
int i,j;
float k,l;
float a[5];
printf("请输入数组总个数:");
scanf("%d",&i);
printf("请输入数组:");
for(j=0; j<i; j++){
scanf("%f",&a[j]);
}
l=fun(a,i);
printf("这个数组中最大值和最小值的差值为:%.2f\n",l);
return 0;
}
21.编写一个函数,把两个数组内的相应元素相加,结果存储到第3个数组内。也就是说,如果数组1具有值2, 4, 6, 8,数组2具有值1, 0, 3, 6,则函数对数组3赋值为3, 4, 9, 14。该函数的参数包括3个数组名和数组大小。并在一个简单的程序中测试这个函数。
#include <stdio.h>
void fun(int* str1,int* str2,int* str3,int n)
{
int i;
for(i=0; i<n; i++){
*(str3+i) = *(str1+i) + *(str2+i);
}
}
int main(void)
{
int i;
int str1[4]={2,4,6,8},str2[4]={1,0,3,6},str3[4];
fun(str1,str2,str3,4);
for(i=0; i<4; i++){
printf("%d ",*(str3+i));
}
printf("\n");
return 0;
}
22.在x86平台下,分析以下代码的输出结果:
#include <stdio.h>
int main(void)
{
int a[4] = {1, 2, 3, 4};
int *ptr1=(int *)(&a+1);
int *ptr2=(int *)((int)a+1);
printf("%x, %x\n", ptr1[-1], *ptr2);
return 0;
}
Ptr1为数组指针&a+1,其a内存为16字节,在此基础上加1,为32字节的内存赋给ptr。
Ptr2为a的地址强转为long型然后在加1,在强转为long型指针。
23qx.一个有N个元素的整型数组,求该数组的各个子数组中,子数组之和的最大值是多少?
例如数组a[6] = {-2, 5, 3, -6, 4, -8, 6}; 则子数组之和的最大值是8 (即a[1] + a[2])。
#include <stdio.h>
#include <limits.h>
#define SIZE 7
int max_sum(int a[], int size)
{
int maximum = INT_MIN;
int sum;
int i, j, k;
for(i=0; i<size; i++){
for(j=i; j<size; j++){
sum = 0;
for(k=i; k<j+1; k++){ // sub array, from a[i] to a[j]
sum += a[k];
}
if(sum > maximum)
maximum = sum;
}
}
return maximum;
}
int main(void)
{
int a[SIZE] = {-2, 5, 3, -6, 4, -8, 6};
printf("answer: %d\n", max_sum(a, SIZE));
return 0;
}
24qx.编写一个程序,初始化一个3x5的二维double型数组,并利用一个基于变长数组的函数把该函数赋值到另一个二维数组,另外再写一个基于变长数组的函数来显示两个数组的内容。这两个函数应该能够处理任意的NxM数组。
#include <stdio.h>
#include <stdlib.h> // enable the function rand()
void func1(int row, int col, double (*target)[col], double source[][col])
{
for(int i=row; i>0; i--){
for(int j=col; j>0; j--){
target[i-1][j-1] = source[i-1][j-1];
}
}
}
void func2(int row, int col, double target[][col], double (*source)[col])
{
printf("source:\n");
for(int i=row; i>0; i--){
for(int j=col; j>0; j--){
printf("%f\t", source[i-1][j-1]);
}
printf("\n");
}
printf("target:\n");
for(int i=row; i>0; i--){
for(int j=col; j>0; j--)
printf("%f\t", target[i-1][j-1]);
printf("\n");
}
}
int main(void)
{
int i, j;
int row, col;
printf("pls input the rows and cols of the source array:\n");
if(scanf("%d%d", &row, &col) != 2){
printf("rows and cols must be integers, Bye-bye!\n");
return -1;
}
double source[row][col];
//fill the source array with some random digits
for(i=0; i<row; i++){
for(j=0; j<col; j++){
//rand() respond for generating a random integer
source[i][j] = (double)rand() / (double)rand();
}
}
double target[row][col];
//assign the source array to the target
func1(row, col, target, source);
//display two arrays
func2(row, col, target, source);
return 0;
}
25.编写一个函数,它返回函数自身被调用的次数,并在一个循环中测试之。
#include <stdio.h>
int fun(void)
{
static int i;
return ++i;
}
int main(void)
{
int i,j=0;
for(i=0; i<5; i++)
{
j=fun();
}
printf("%d\n",j);
return 0;
}
26,用求多个整数的和及平均值----do_while语句实现
#include<stdio.h>
int main(void)
{
int sum = 0; //和
int cnt = 0; //整数个数
int retry; //判断是否继续
do{
int t;
printf("请输入一个整数:");
scanf("%d",&t);
sum = sum + t;
cnt = cnt + 1;
printf("是否继续?<Yes...0/No...9:");
scanf("%d",&retry);
} while(retry == 0);
printf("和为%d,平均值为%.2f。\n",sum,(double)sum / cnt);
return 0;
}
//while语句练习
27,递增显示从0到输入的正整数为止的各个整数
#include<stdio.h>
int main(void)
{
int i,n;
printf("请输入一个正整数:");
scanf("%d",&n);
i = 0;
while(i <= n)
printf("%d ",i++); //i的值在显示之后递增
printf("\n");
return 0;
}
28,编写一段程序,按照升序显示出小于输入值的所有正偶数
#include<stdio.h>
int main(void)
{
int i,n;
printf("请输入一个正整数:");
scanf("%d",&n);
i = 0;
while(i <= n){
i = i + 2;
if(i < n) //应先对递增后的值进行判断,看是否越界
printf("%d ",i);
}
printf("\n");
return 0;
}
29,编写一段程序,使之交替显示+和-,总个数等于所输入的整数值
#include<stdio.h>
int main(void)
{
int num;
int i=0;
printf("正整数:");
scanf("%d",&num);
while (i<num) {
if (++i%2)
putchar('+');
else
putchar('-');
}
return 0;
}
30,逆向显示正整数,如:输入123,打印321
#include<stdio.h>
int main(void)
{
int n;
do{
printf("请输入一个正整数:");
scanf("%d",&n);
if(n <= 0)
puts("请不要输入非正整数。");
}while(n <= 0);
printf("该整数逆向显示的结果是 ");
while(n > 0){
printf("%d", n % 10);
n /= 10;
}
puts("。 ");
return 0;
}
//for语句练习
31,编写一段程序,根据输入的整数,循环显示1234567890,显示的位数和输入的整数值相同
#include <stdio.h>
int main(void)
{
int i,j,n;
j=1;
printf("请输入一个整数:");
scanf("%d",&n);
for(i=0;i<n;i++) {
printf("%d",j);
j++;
if(j>9)
j-=10;
}
printf("\n");
return 0;
}
32,编写一段程序,显示出身高和标准体重的对照表。注:显示的身高范围和间隔由输入的整数值进行控制,标准体重精确到小数点后两位。
#include <stdio.h>
int main() {
int beginHigh = 0, endHigh = 0;
float weight = 0;
int margin = 0;
printf("开始数值(cm):");
scanf("%d", &beginHigh);
printf("结束数值(cm):");
scanf("%d", &endHigh);
printf("间隔值(cm):");
scanf("%d", &margin);
for (int i = beginHigh;i <= endHigh; i+=margin) {
weight = (i - 100)*0.9; //这是一个计算标准体重的公式
printf("%d cm\t\t%.2f\n", i, weight); // \t代表制表符,相当于按下一次Tab键
}
return 0;
}
33,显示输入的整数值的所有约数
#include<stdio.h>
int main(void)
{
int i,n;
printf("整数值:");
scanf("%d",&n);
for(i = 1;i <= n;i++)
if(n % i == 0)
printf("%d ",i);
putchar('\n');
return 0;
}
34,编写一段程序,输入一个整数值,显示该整数值个' * '。每显示5个就进行换行。
#include<stdio.h>
int main()
{
printf("请输入整数:");
int a;
scanf("%d",&a);
int b=0;
for(int i=0;i<a;i++)
{
if(b==5)
{
printf("\n");
b=0;
}
printf("*");
b=b+1;
}
}
//多重循环练习
35,显示九九乘法表
#include<stdio.h>
int main(void)
{
int i,j;
for(i = 1;i <= 9;i++){
for(j = 1;j <= 9;j++)
printf("%3d",i * j);
putchar('\n');
}
return 0;
}
36,编写一段程序,为九九乘法表增加横纵标题
#include <stdio.h>
int main()
{
int i, j ;
//打印第一行
printf(" |") ;
for(i = 1; i <= 9; i++)
{
printf(" %d", i) ;
}
printf("\n") ;
//打印第二行
for(i = 1; i <= 32; i++)
printf("-") ;
printf("\n") ;
//开始打印99乘法表,每行开头要有行号
for(i = 1; i <= 9; i++)//行
{
printf(" %d |", i) ;
for(j = 1; j <= 9; j++)//列
{
printf(" %2d", i*j) ;
}
printf("\n") ;
}
return 0 ;
}
37,画一个长方形
#include<stdio.h>
int main(void)
{
int i,j;
int height,width;
puts("让我们来画一个长方形。");
printf("高:"); scanf("%d",&height);
printf("宽:"); scanf("%d",&width);
for(i = 1;i <= height;i++) { //长方形有height行
for(j = 1;j <= width;j++) //每行显示width个
putchar('*');
putchar('\n'); //换行
}
return 0;
}
38,显示直角在左下方的等腰直角三角形
#include<stdio.h>
int main(void)
{
int i,j,len;
puts("直角在左下方的等腰直角三角形。");
printf("边长:");
scanf("%d",&len);
for(i = 1;i <= len;i++){
for(j = 1;j <= i;j++)
putchar('*');
putchar('\n');
}
return 0;
}
39,显示直角在右下方的等腰直角三角形
#include<stdio.h>
int main(void)
{
int i,j,len;
puts("直角在左下方的等腰直角三角形。");
printf("边长:");
scanf("%d",&len);
for(i = 1;i <= len;i++){
for(j = 1;j <= len-i;j++)
printf("%c",' ');
for(j = 1;j <= i;j++)
printf("%c",'*');
printf("\n");
}
return 0;
}
40,显示直角在左上方的等腰直角三角形
#include <stdio.h>
int main()
{
int i,j,len;
puts("直角在左下方的等腰直角三角形。");
printf("边长:");
scanf("%d",&len);
for (int i = 1; i<=len; i++) {
for (int j = 1; j <=len-i+1; j++) {
putchar('*');
}
putchar('\n');
}
return 0;
}
41,显示直角在右上方的等腰直角三角形
#include <stdio.h>
int main()
{
int i,j,len;
puts("直角在左下方的等腰直角三角形。");
printf("边长:");
scanf("%d",&len);
for (int i = 1; i<=len; i++) {
for (int j = 1; j <=i; j++) {
putchar(' ');
}
for (int j=1; j<=len-i+1; j++) {
putchar('*');
}
putchar('\n');
}
return 0;
}
42,编写一段程序,输入一个整数,显示出输入整数层的金字塔形状
*
***
*****
*******
*********
#include "stdio.h"
int main(int argc, char const *argv[])
{
int n;
puts("让我们来描绘一个金字塔。");
printf("金字塔有几层:"); scanf("%d",&n);
for (int i = 1;i<=n; i++) {
for (int j = 1; j<=n-i; j++) {
putchar(' ');
}
for (int j=1;j<=i ; j++) {
putchar('*');
}
for (int j=1; j<i; j++) {
putchar('*');
}
putchar('\n');
}
return 0;
}
43,金字塔变形(1)
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
#include<stdio.h>
int main()
{
int i,j,n;
puts("让我们来描绘一个金字塔。");
printf("金字塔有几层:"); scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=0;j<n-i;j++)
printf(" ");
for(j=1;j<2*i;j++)
printf("%d",i);
printf("\n");
}
return 0;
}
44,金字塔变形(2)
1
121
12321
1234321
123454321
#include<stdio.h>
int main()
{
int i,j,n;
puts("让我们来描绘一个金字塔。");
printf("金字塔有几层:"); scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=0;j<n-i;j++)
printf(" ");
for(j=1;j<=i;j++)
printf("%d",j);
for(j=i-1;j>0;j--)
printf("%d",j);
printf("\n");
}
}