题一:九九乘法表
在屏幕上输出9*9乘法口诀表
%-d(加负号),在后面补空格;
%2d,在前面补空格;
%02d,在前面补0.
#include <stdio.h> int main() { int i = 0; for (i = 1; i < 10; i++) { int j = 0; for (j = 1; j <= i; j++) { printf("%d*%d=%-2d ", j, i, j * i); } printf("\n"); } return 0; }
题二:最大值
求10 个整数中最大值
#include <stdio.h> int main() { int arr[10] = { 0 }; int i = 0; int tmp = 0; for (i = 0; i < 10; i++) { scanf("%d", &arr[i]); } int max = 0; max = arr[0]; for (i = 0; i < 10; i++) { if (max <= arr[i]) { max = arr[i]; } } printf("%d\n", max); return 0; }
题三:求和
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
#include <stdio.h> int main() { int i = 0; float sum = 0.00f; for (i = 1; i <= 100; i++) { if (i % 2 == 0) { sum = (-1)*(1.0 / i) + sum; } else { sum = (1.0 / i) + sum; } } printf("%f\n", sum); return 0; }
题四:出现多少次
编写程序数一下 1到 100 的所有整数中出现多少个数字9
#include <stdio.h> int main() { int i = 0; int count = 0; for (i = 1;i <= 100;i++ ) { if (i % 10 == 9 || i / 10 == 9) { count++; } } printf("%d\n", count ); return 0; }
题五:查找某个数
编写代码在一个整形有序数组中查找具体的某个数
要求:找到了就打印数字所在的下标,找不到则输出:找不到。
#include <stdio.h> int main() { int arr[10] = { 1,2,3,4,5,6,7,8,9,10 }; int left = 0; int right = sizeof(arr)/sizeof(arr[0]) - 1; int min = (left + right) / 2; int k = 0; scanf("%d", &k); while (right >= left) { if (arr[min] > k) { right = min - 1; min = (left + right)/ 2; } else if (arr[min] < k) { left = min + 1; min = (left + right) / 2; } else { printf("找到了!\n%d\n", min); break; } } if (left > right) { printf("没有找到!"); } return 0; }
题六:猜数字
猜数字
#include<stdlib.h> #include <stdio.h> #include <time.h> void menu1() { printf("***********************\n"); printf("***1.猜数字 0.退出***\n"); printf("***********************\n"); } void game() { int str = 0; int num = 0; srand((unsigned int)time(NULL)); str = rand()%100+1; //判断 while (1) { printf("输入猜测的数字(0--100)\n"); scanf("%d", &num); if (str > num) { printf("猜小了,接着猜!\n"); } else if (str < num) { printf("猜大了,接着猜!\n"); } else { printf("恭喜你猜对啦!\n"); break; } } } int main() { int input = 0; do { menu1(); printf("请输入:"); scanf("%d", &input); switch (input) { case 1: game(); break; case 0: printf("退出\n"); break; default: printf("输入格式错误,请重新输入\n"); break; } } while (input); return 0; }
题七:求和
输入一个正整数n(1 ≤ n ≤ 109)
输出一个值,为求和结果。
#include <stdio.h> int main() { long long sum = 0; int n = 0; scanf("%d", &n); int i = 0; for (i = 1; i <= n; i++) { sum = i + sum; } printf("%ld\n", sum); return 0; }
等差数列求解
long用%ld;long long用%lld。
int main() { //等差数列求和公式 long long n = 0; scanf("%lld", &n); long long sum = 0; sum = (1 + n) * n / 2; printf("%lld\n", sum); return 0; }
题八:最大数
小乐乐获得4个最大数,请帮他编程找到最大的数。
一行,4个整数,用空格分开。
一行,一个整数,为输入的4个整数中最大的整数。
#include <stdio.h> int main() { int arr[4] = {0}; int i = 0; for (i = 0; i < 4; i++) { scanf("%d", &arr[i]); } int max = arr[0]; for (i = 1; i < 4; i++) { if (max <= arr[i]) { max = arr[i]; } } printf("%d\n", max); return 0; }
题九:判断字母
KiKi想判断输入的字符是不是字母,请帮他编程实现。
多组输入,每一行输入一个字符。
针对每组输入,输出单独占一行,判断输入字符是否为字母,
#include <stdio.h> int main() { char letter = 0; while (scanf(" %c", &letter) == 1)//记得清理缓冲区里的\n { if (letter >= 'A' && letter <= 'Z' || letter >= 'a' && letter <= 'z') { printf("%c is an alphabet.\n", letter); } else { printf("%c is not an alphabet.\n", letter); } //也可以在这加个getchar()来清理缓冲区 return 0; }
题十:网购
KiKi非常喜欢网购,在一家店铺他看中了一件衣服,他了解到,
如果今天是“双11”(11月11日)则这件衣服打7折,“双12” (12月12日)则这件衣服打8折,
如果有优惠券可以额外减50元(优惠券只能在双11或双12使用),求KiKi最终所花的钱数。
一行,四个数字,第一个数表示小明看中的衣服价格,
第二和第三个整数分别表示当天的月份、当天的日期、第四个整数表示是否有优惠券(有优惠券用1表示,无优惠券用0表示)。
注:输入日期保证只有“双11”和“双12”。
一行,小明实际花的钱数(保留两位小数)。(提示:不要指望商家倒找你钱)
#include <stdio.h> int main() { int flag = 0; double price = 0; int month = 0; int day = 0; double sum = 0; scanf("%lf %d %d %d", &price, &month, &day, &flag); if (month == 11 && day == 11) { sum = price * 0.7; if (flag == 1) { sum -= 50; } if (sum <= 0) { sum = 0; } } else if (month == 12 && day == 12) { sum = price * 0.8; if (flag == 1) { sum -= 50; } if (sum <= 0) { sum = 0; } } printf("%.2lf\n", sum); return 0; }
题十一:交换
交换两个整数,实现一个函数来交换两个整数的内容。
#include <stdio.h> void Way(int* a, int* b) { int c = 0; c = *a; *a = *b; *b = c; } int main() { int a = 0; int b = 0; scanf("%d %d", &a, &b); Way(&a,&b); printf("%d %d\n", a, b); return 0; }
题十二:判断闰年
函数判断闰年
实现函数判断year是不是润年。
#include <stdio.h> int Sense(int n) { if (n % 4 == 0 && n % 100 != 0 || n % 400 == 0) { return 1; } else return 0; } int main() { int i = 0; int n = 0; scanf("%d", &n); i = Sense(n); if (i == 1) { printf("是闰年!"); } else printf("不是闰年!"); return 0; }
题十三:判断素数
函数判断素数
实现一个函数is_prime,判断一个数是不是素数。
利用上面实现的is_prime函数,打印100到200之间的素数。
#include <stdio.h> #include <math.h> int is_prime(int n) { int flag = 0; int j = 0; for (j = 2; j <= sqrt(n); j++) { if (n % j == 0) { flag = 1; break; } } return flag; } int main() { int n = 0; int i = 0; int a = 0; int b = 0; scanf("%d", &n); a = is_prime(n); if (a == 1) { printf("不是素数!\n"); } else { printf("是素数!\n"); } for (i = 100; i <= 200; i++) { b = is_prime(i); if (b == 0) { printf("%d\n", i); } } return 0; }
题十四:斐波那契数列
计算斐波那契数
递归和非递归分别实现求第n个斐波那契数
输入:5 输出:5
输入:10, 输出:55
输入:2, 输出:1
非递归实现
#include <stdio.h> int main() { int num = 0; int arr[100] = {1,1}; int n = 0; scanf("%d", &n); if (n <= 2) { num = 1; } else { int j = 0; for (j=2 ;j <= n-1 ;j++) { arr[j] = arr[j - 1] + arr[j - 2]; num = arr[j]; } } printf("%d\n", num); return 0; }
递归实现
#include <stdio.h> int is_sum(int n) { int num = 0; if (n <= 2) { num = 1; } if(n > 2) num = is_sum(n-2) +is_sum(n-1); return num; } int main() { int n = 0; int a = 0; scanf("%d", &n); a = is_sum(n); printf("%d\n",a); return 0; }
题十五:实现次方
递归实现n的k次方
编写一个函数实现n的k次方,使用递归实现。
#include <stdio.h> int Power(int n, int k) { int num = 0; if (k != 0) { num = n * Power(n ,k-1); } if (k == 0) num = 1; return num; } int main() { int n = 0; int a = 0; int k = 0; scanf("%d %d", &n, &k); a = Power(n,k); printf("%d\n", a); return 0; }
题十六:递归求和
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和
例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19
输入:1729,输出:19
#include <stdio.h> int DigitSum(int n) { int sum = 0; if (n > 9) { sum = n % 10; n = n / 10; } else { return n; } sum =sum + DigitSum(n); return sum; } int main() { int n = 0; int a = 0; scanf("%d", &n); a = DigitSum(n); printf("%d\n", a); return 0; }
题十七:递归逆序
字符串逆序(递归实现)
编写一个函数 reverse_string(char* string)(递归实现)
实现:将参数字符串中的字符反向排列,不是逆序打印。
要求:不能使用C函数库中的字符串操作函数。
比如 :char arr[] = "abcdef";
逆序之后数组的内容变成:fedcba
非递归实现
#include <stdio.h> #include <string.h> void reverse_string(char* string) { int len = strlen(string); int tmp = 0; int left = 0; int right = len - 1; while (left < right) { tmp = string[left]; string[left] = string[right]; string[right] = tmp; left++; right--; } } int main() { char arr[] = "abcdef"; reverse_string(arr); printf("%s\n", arr); return 0; }
递归实现
#include <stdio.h> #include <string.h> void reverse_string(char* string) { int len = strlen(string); char tmp = *string; *string = *(string + len - 1); *(string + len - 1) = '\0'; if (strlen(string + 1) >= 2)//每次从下一个地址开始计算除去第一个还剩多少个 reverse_string(string + 1); *(string + len - 1) = tmp; } int main() { char arr[] = "abcdef"; reverse_string(arr); printf("%s\n", arr); return 0; }
写错的选择题
在函数调用时,以下说法正确的是:( )
A.函数调用后必须带回返回值
B.实际参数和形式参数可以同名
C.函数间的数据传递不可以使用全局变量
D.主调函数和被调函数总是在同一个文件里
A:错误,函数可以没有返回值,如果没有返回值也就不需要待会任何结果
B:正确,形参和实参在不同的函数中,即不同的作用域,因此形参和实参可以同名
C:错误,可以使用全局变量传参
D:错误,不一定,函数的定义可以放在任意的文件中,使用时只需要包含头文件即可